Add a proportion decision to a conservation planning problem()
.
This is a relaxed decision where a part of a planning unit can be
prioritized as opposed to the entire planning unit. Typically, this decision
has the assumed action of buying a fraction of a planning unit to include in
decisions will solve much faster than problems that use binarytype
decisions
add_proportion_decisions(x)
x 


Object (i.e. ConservationProblem
) with the decisions added
to it.
Conservation planning problems involve making decisions on planning
units. These decisions are then associated with actions (e.g. turning a
planning unit into a protected area). If no decision is explicitly added to
a problem, then the binary decision class will be used by default. Only a
single decision should be added to a ConservationProblem
object.
Note that if multiple decisions are added to a problem object, then the
last one to be added will be used.
# set seed for reproducibility set.seed(500) # load data data(sim_pu_raster, sim_features, sim_pu_zones_stack, sim_features_zones) # create minimal problem with proportion decisions p1 < problem(sim_pu_raster, sim_features) %>% add_min_set_objective() %>% add_relative_targets(0.1) %>% add_proportion_decisions() # \dontrun{ # solve problem s1 < solve(p1)#> Gurobi Optimizer version 9.0.2 build v9.0.2rc0 (linux64) #> Optimize a model with 5 rows, 90 columns and 450 nonzeros #> Model fingerprint: 0xb1a01a19 #> Coefficient statistics: #> Matrix range [2e01, 9e01] #> Objective range [2e+02, 2e+02] #> Bounds range [1e+00, 1e+00] #> RHS range [3e+00, 8e+00] #> Presolve time: 0.00s #> Presolved: 5 rows, 90 columns, 450 nonzeros #> #> Iteration Objective Primal Inf. Dual Inf. Time #> 0 0.0000000e+00 3.170407e+01 0.000000e+00 0s #> 12 1.9315819e+03 0.000000e+00 0.000000e+00 0s #> #> Solved in 12 iterations and 0.00 seconds #> Optimal objective 1.931581909e+03# } # build multizone conservation problem with proportion decisions p2 < problem(sim_pu_zones_stack, sim_features_zones) %>% add_min_set_objective() %>% add_relative_targets(matrix(runif(15, 0.1, 0.2), nrow = 5, ncol = 3)) %>% add_proportion_decisions() # \dontrun{ # solve the problem s2 < solve(p2)#> Gurobi Optimizer version 9.0.2 build v9.0.2rc0 (linux64) #> Optimize a model with 105 rows, 270 columns and 1620 nonzeros #> Model fingerprint: 0xeb45c5ad #> Coefficient statistics: #> Matrix range [2e01, 1e+00] #> Objective range [2e+02, 2e+02] #> Bounds range [1e+00, 1e+00] #> RHS range [1e+00, 2e+01] #> Presolve removed 3 rows and 0 columns #> Presolve time: 0.00s #> Presolved: 102 rows, 270 columns, 1350 nonzeros #> #> Iteration Objective Primal Inf. Dual Inf. Time #> 0 0.0000000e+00 1.319305e+02 0.000000e+00 0s #> 94 1.0964841e+04 0.000000e+00 0.000000e+00 0s #> #> Solved in 94 iterations and 0.00 seconds #> Optimal objective 1.096484061e+04#> class : RasterStack #> dimensions : 10, 10, 100, 3 (nrow, ncol, ncell, nlayers) #> resolution : 0.1, 0.1 (x, y) #> extent : 0, 1, 0, 1 (xmin, xmax, ymin, ymax) #> crs : NA #> names : layer.1.1, layer.1.2, layer.1.3 #> min values : 0, 0, 0 #> max values : 1, 1, 1 #># plot solution # panels show the proportion of each planning unit allocated to each zone plot(s2, axes = FALSE, box = FALSE)# }