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)
#> Rcplex: num variables=10296 num constraints=29984

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