Add targets to a conservation planning problem()
by loglinearly
interpolating the targets between thresholds based on the total amount of
each feature in the study area (Rodrigues et al. 2004). Additionally,
caps can be applied to targets to prevent features with massive
distributions from being overrepresented
in solutions (Butchart et al. 2015).
add_loglinear_targets( x, lower_bound_amount, lower_bound_target, upper_bound_amount, upper_bound_target, cap_amount = NULL, cap_target = NULL, abundances = feature_abundances(x, na.rm = FALSE)$absolute_abundance )
x 


lower_bound_amount 

lower_bound_target 

upper_bound_amount 

upper_bound_target 

cap_amount 

cap_target 

abundances 

Object (i.e. ConservationProblem
) with the targets added
to it.
Targets are used to specify the minimum amount or proportion of a
feature's distribution that needs to be protected. All conservation
planning problems require adding targets with the exception of the maximum
cover problem (see add_max_cover_objective()
), which maximizes
all features in the solution and therefore does not require targets.
Seven parameters are used to calculate the targets:
lower_bound_amount
specifies the first range size threshold,
lower_bound_target
specifies the relative target required for
species with a range size equal to or less than the first threshold,
upper_bound_amount
specifies the second range size threshold,
upper_bound_target
specifies the relative target required for
species with a range size equal to or greater than the second threshold,
cap_amount
specifies the third range size threshold,
cap_target
specifies the absolute target that is uniformly applied
to species with a range size larger than that third threshold, and finally
abundances
specifies the range size for each feature
that should be used when calculating the targets.
The target calculations do not account for the
size of each planning unit. Therefore, the feature data should account for
the size of each planning unit if this is important (e.g. pixel values in
the argument to features
in the function problem()
could
correspond to amount of land occupied by the feature in \(km^2\) units).
Additionally, the function can only be applied to
ConservationProblem
objects that are associated with a
single zone.
Early versions (< 5.0.0) used different equations for calculating targets.
Rodrigues ASL, Akcakaya HR, Andelman SJ, Bakarr MI, Boitani L, Brooks TM, Chanson JS, Fishpool LDC, da Fonseca GAB, Gaston KJ, and others (2004) Global gap analysis: priority regions for expanding the global protectedarea network. BioScience, 54: 10921100.
Butchart SHM, Clarke M, Smith RJ, Sykes RE, Scharlemann JPW, Harfoot M, Buchanan, GM, Angulo A, Balmford A, Bertzky B, and others (2015) Shortfalls and solutions for meeting national and global conservation area targets. Conservation Letters, 8: 329337.
# load data data(sim_pu_raster, sim_features) # create problem using loglinear targets p < problem(sim_pu_raster, sim_features) %>% add_min_set_objective() %>% add_loglinear_targets(10, 0.9, 100, 0.2) %>% add_binary_decisions() # \dontrun{ # solve problem s < solve(p)#> Gurobi Optimizer version 9.0.2 build v9.0.2rc0 (linux64) #> Optimize a model with 5 rows, 90 columns and 450 nonzeros #> Model fingerprint: 0x72c51dbb #> Variable types: 0 continuous, 90 integer (90 binary) #> Coefficient statistics: #> Matrix range [2e01, 9e01] #> Objective range [2e+02, 2e+02] #> Bounds range [1e+00, 1e+00] #> RHS range [2e+01, 2e+01] #> Found heuristic solution: objective 11939.016941 #> Presolve removed 4 rows and 0 columns #> Presolve time: 0.00s #> Presolved: 1 rows, 90 columns, 90 nonzeros #> Variable types: 0 continuous, 90 integer (90 binary) #> Presolved: 1 rows, 90 columns, 90 nonzeros #> #> #> Root relaxation: objective 1.047148e+04, 1 iterations, 0.00 seconds #> #> Nodes  Current Node  Objective Bounds  Work #> Expl Unexpl  Obj Depth IntInf  Incumbent BestBd Gap  It/Node Time #> #> 0 0 10471.4792 0 1 11939.0169 10471.4792 12.3%  0s #> H 0 0 10531.710068 10471.4792 0.57%  0s #> #> Explored 1 nodes (1 simplex iterations) in 0.00 seconds #> Thread count was 1 (of 4 available processors) #> #> Solution count 2: 10531.7 11939 #> #> Optimal solution found (tolerance 1.00e01) #> Best objective 1.053171006771e+04, best bound 1.047147921397e+04, gap 0.5719%# }