add_max_richness_objective {oppr}R Documentation

Add maximum richness objective

Description

Set the objective of a project prioritization problem() to maximize the total number of features that are expected to persist, whilst ensuring that the cost of the solution is within a pre-specified budget (Joseph, Maloney & Possingham 2009). This objective is conceptually similar to maximizing species richness in a study area. Furthermore, weights can also be used to specify the relative importance of conserving specific features (see add_feature_weights()).

Usage

add_max_richness_objective(x, budget)

Arguments

x

ProjectProblem object.

budget

numeric budget for funding actions.

Details

A problem objective is used to specify the overall goal of the project prioritization problem. Here, the maximum richness objective seeks to find the set of actions that maximizes the total number of features (e.g. populations, species, ecosystems) that is expected to persist within a pre-specified budget. Let II represent the set of conservation actions (indexed by ii). Let CiC_i denote the cost for funding action ii, and let mm denote the maximum expenditure (i.e. the budget). Also, let FF represent each feature (indexed by ff), WfW_f represent the weight for each feature ff (defaults to one for each feature unless specified otherwise), and EfE_f denote the probability that each feature will go extinct given the funded conservation projects.

To guide the prioritization, the conservation actions are organized into conservation projects. Let JJ denote the set of conservation projects (indexed by jj), and let AijA_{ij} denote which actions iIi \in I comprise each conservation project jJj \in J using zeros and ones. Next, let PjP_j represent the probability of project jj being successful if it is funded. Also, let BfjB_{fj} denote the probability that each feature fFf \in F associated with the project jJj \in J will persist if all of the actions that comprise project jj are funded and that project is allocated to feature ff. For convenience, let QfjQ_{fj} denote the actual probability that each fFf \in F associated with the project jJj \in J is expected to persist if the project is funded. If the argument to adjust_for_baseline in the problem function was set to TRUE, and this is the default behavior, then Qfj=(Pj×Bfj)+((1(PjBfj))×(Pn×Bfn))Q_{fj} = (P_{j} \times B_{fj}) + \bigg(\big(1 - (P_{j} B_{fj})\big) \times (P_{n} \times B_{fn})\bigg), where n corresponds to the baseline "do nothing" project. This means that the probability of a feature persisting if a project is allocated to a feature depends on (i) the probability of the project succeeding, (ii) the probability of the feature persisting if the project does not fail, and (iii) the probability of the feature persisting even if the project fails. Otherwise, if the argument is set to FALSE, then Qfj=Pj×BfjQ_{fj} = P_{j} \times B_{fj}.

The binary control variables XiX_i in this problem indicate whether each project iIi \in I is funded or not. The decision variables in this problem are the YjY_{j}, ZfjZ_{fj}, and EfE_f variables. Specifically, the binary YjY_{j} variables indicate if project jj is funded or not based on which actions are funded; the binary ZfjZ_{fj} variables indicate if project jj is used to manage feature ff or not; and the semi-continuous EfE_f variables denote the probability that feature ff will go extinct.

Now that we have defined all the data and variables, we can formulate the problem. For convenience, let the symbol used to denote each set also represent its cardinality (e.g. if there are ten features, let FF represent the set of ten features and also the number ten).

Maximize f=0F(1Ef)Wf (eqn 1a)Subject toi=0ICim (eqn 1b)Ef=1j=0JZfjQfj  fF (eqn 1c)ZfjYj  jJ (eqn 1d)j=0JZfj×ceil(Qfj)=1  fF (eqn 1e)AijYjXi  iI,jJ (eqn 1f)Ef0,Ef1  bB (eqn 1g)Xi,Yj,Zfj[0,1]  iI,jJ,fF (eqn 1h) \mathrm{Maximize} \space \sum_{f = 0}^{F} (1 - E_f) W_f \space \mathrm{(eqn \space 1a)} \\ \mathrm{Subject \space to} \sum_{i = 0}^{I} C_i \leq m \space \mathrm{(eqn \space 1b)} \\ E_f = 1 - \sum_{j = 0}^{J} Z_{fj} Q_{fj} \space \forall \space f \in F \space \mathrm{(eqn \space 1c)} \\ Z_{fj} \leq Y_{j} \space \forall \space j \in J \space \mathrm{(eqn \space 1d)} \\ \sum_{j = 0}^{J} Z_{fj} \times \mathrm{ceil}(Q_{fj}) = 1 \space \forall \space f \in F \space \mathrm{(eqn \space 1e)} \\ A_{ij} Y_{j} \leq X_{i} \space \forall \space i \in I, j \in J \space \mathrm{(eqn \space 1f)} \\ E_{f} \geq 0, E_{f} \leq 1 \space \forall \space b \in B \space \mathrm{(eqn \space 1g)} \\ X_{i}, Y_{j}, Z_{fj} \in [0, 1] \space \forall \space i \in I, j \in J, f \in F \space \mathrm{(eqn \space 1h)}

The objective (eqn 1a) is to maximize the weighted persistence of all the species. Constraint (eqn 1b) limits the maximum expenditure (i.e. ensures that the cost of the funded actions do not exceed the budget). Constraints (eqn 1c) calculate the probability that each feature will go extinct according to their allocated project. Constraints (eqn 1d) ensure that feature can only be allocated to projects that have all of their actions funded. Constraints (eqn 1e) state that each feature can only be allocated to a single project. Constraints (eqn 1f) ensure that a project cannot be funded unless all of its actions are funded. Constraints (eqns 1g) ensure that the probability variables (EfE_f) are bounded between zero and one. Constraints (eqns 1h) ensure that the action funding (XiX_i), project funding (YjY_j), and project allocation (ZfjZ_{fj}) variables are binary.

Value

ProjectProblem object with the objective added to it.

References

Joseph LN, Maloney RF & Possingham HP (2009) Optimal allocation of resources among threatened species: A project prioritization protocol. Conservation Biology, 23, 328–338.

See Also

objectives.

Examples

# load data
data(sim_projects, sim_features, sim_actions)

# build problem with maximum richness objective and $300 budget
p1 <- problem(sim_projects, sim_actions, sim_features,
             "name", "success", "name", "cost", "name") %>%
     add_max_richness_objective(budget = 200) %>%
     add_binary_decisions()

## Not run: 
# solve problem
s1 <- solve(p1)

# print solution
print(s1)

# plot solution
plot(p1, s1)

## End(Not run)

# build another problem that includes feature weights
p2 <- p1 %>%
     add_feature_weights("weight")

## Not run: 
# solve problem with feature weights
s2 <- solve(p2)

# print solution based on feature weights
print(s2)

# plot solution based on feature weights
plot(p2, s2)

## End(Not run)

[Package oppr version 1.0.4 Index]