Provides the sum of costs to actions and monitoring applied in a solution.

getCost(x)

Arguments

x

solution or portfolio object.

Value

data.frame.

Details

The cost value is calculated as the sum of all the individual costs of actions and monitoring carried out in each of the planning units. This can be expressed mathematically for a set of planning units \(I\) indexed by \(i\), and a set of threats \(K\) indexed by \(k\) as:

$$ actions = \sum_{i \in I}\sum_{k \in K_i} x_{ik} c_{ik} $$

$$ monitoring = \sum_{i \in I} x_{i \cdot} c^{'}_{i} $$ 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), \(c_{ik}\) is the action cost to abate threat \(k\) in planning unit \(i\) and \(c^{'}_{i}\) is the monitoring cost of planning unit \(i\). The cost of monitoring is applied to all planning units where some type of action has been selected (conservation action, to abate threats or connectivity).

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)

## Load data
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)
#> Warning: The blm argument was set to 0, so the boundary data has no effect
#> 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)
#> Gurobi Optimizer version 10.0.0 build v10.0.0rc2 (linux64)
#> 
#> CPU model: 12th Gen Intel(R) Core(TM) i5-1240P, instruction set [SSE2|AVX|AVX2]
#> Thread count: 16 physical cores, 16 logical processors, using up to 2 threads
#> 
#> Optimize a model with 284 rows, 396 columns and 785 nonzeros
#> Model fingerprint: 0xff18a474
#> Variable types: 176 continuous, 220 integer (220 binary)
#> Coefficient statistics:
#>   Matrix range     [5e-01, 2e+00]
#>   Objective range  [1e+00, 1e+01]
#>   Bounds range     [1e+00, 1e+00]
#>   RHS range        [2e+01, 5e+01]
#> Found heuristic solution: objective 964.0000000
#> Found heuristic solution: objective 886.0000000
#> Presolve removed 251 rows and 294 columns
#> Presolve time: 0.00s
#> Presolved: 33 rows, 102 columns, 194 nonzeros
#> Variable types: 0 continuous, 102 integer (89 binary)
#> Found heuristic solution: objective 776.0000000
#> 
#> Root relaxation: objective 7.345000e+02, 39 iterations, 0.00 seconds (0.00 work units)
#> 
#>     Nodes    |    Current Node    |     Objective Bounds      |     Work
#>  Expl Unexpl |  Obj  Depth IntInf | Incumbent    BestBd   Gap | It/Node Time
#> 
#>      0     0  734.50000    0    4  776.00000  734.50000  5.35%     -    0s
#> H    0     0                     742.0000000  734.50000  1.01%     -    0s
#>      0     0  737.00000    0    2  742.00000  737.00000  0.67%     -    0s
#> *    0     0               0     738.0000000  738.00000  0.00%     -    0s
#> 
#> Explored 1 nodes (82 simplex iterations) in 0.01 seconds (0.00 work units)
#> Thread count was 2 (of 16 available processors)
#> 
#> Solution count 5: 738 742 776 ... 964
#> 
#> Optimal solution found (tolerance 0.00e+00)
#> Best objective 7.380000000000e+02, best bound 7.380000000000e+02, gap 0.0000%

## Get costs
getCost(s)
#>   solution_name monitoring threat_1 threat_2
#> 1           sol        353      191      194
# }