Provides the connectivity penalty value for all actions and planning units in a solution.

getConnectivityPenalty(x)

Arguments

x

solution or portfolio object.

Details

The connectivity penalty among is calculated as the sum of all connectivity penalties by each action and planning unit in the solution. This can be expressed mathematically for a set of planning units $$I$$ indexed by $$i$$ and $$j$$, and a set of threats $$K$$ indexed by $$k$$ as:

$$\sum_{k \in K}\sum_{i \in I_k}\sum_{j \in I_k} x_{ik} (1 - x_{jk})cv_{ij}$$

Where, $$x_{ik}$$ is the decisions variable that specify whether an action has been selected to abate threat $$k$$ in planning unit $$i$$ (1) or not (0), $$cv_{ij}$$ is the connectivity penalty that applies when a solution contains planning unit $$i$$ but not $$j$$ o viceversa.

Note that there is an action per threat, so it is assumed that the index of the threat coincides with the index of the action used to abate it.

Examples

# \donttest{
# set seed for reproducibility
set.seed(14)

data(sim_pu_data, sim_features_data, sim_dist_features_data,
sim_threats_data, sim_dist_threats_data, sim_sensitivity_data,
sim_boundary_data)

## Create data instance
problem_data <- inputData(
pu = sim_pu_data, features = sim_features_data, dist_features = sim_dist_features_data,
threats = sim_threats_data, dist_threats = sim_dist_threats_data,
sensitivity = sim_sensitivity_data, boundary = sim_boundary_data
)

## Create optimization model
problem_model <- problem(x = problem_data, blm = 0.03)
#> Warning: Some blm_actions argument were set to 0, so the boundary data has no effect for these cases

## Solve the optimization model
s <- solve(a = problem_model, time_limit = 2, output_file = FALSE, cores = 2)

# get connectivity penalty values
getConnectivityPenalty(s)
#>   solution_name units threat_1 threat_2
#> 1           sol     0 2890.835 1518.804
# }