Returns the spatial deployment of the actions for each planning unit of the corresponding solution.

getActions(x, format = "wide")

Arguments

x

solution or portfolio object.

format

character. Output format of the action matrix; wide format shows one column per action, while large format shows four columns: solution_name, pu, action and solution.

Value

data.frame.

Details

getActions() function assumes that actions can be of three types:

  1. to abate specific threats: these actions have the id corresponding to the threat to be abate.

  2. to conservation: that indicates if the planning unit is selected to conservative any feature that is not threatened.

  3. to connectivity: that indicates if the planning unit is selected only by connectivity (i.e. without performing conservation actions or actions against a threat in said unit).

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 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.00 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 actions information in large format
actions <- getActions(s, format = "large")
head(actions)
#>     solution_name pu action solution
#> 108           sol  8      2        1
#> 109           sol  9      2        1
#> 110           sol 10      2        1
#> 11            sol 11      1        1
#> 111           sol 11      2        1
#> 12            sol 12      1        1

# get actions information in wide format
actions <- getActions(s, format = "wide")
head(actions)
#>   solution_name pu 1 2 conservation connectivity
#> 1           sol  1 0 0            0            0
#> 2           sol  2 0 0            0            0
#> 3           sol  3 0 0            0            0
#> 4           sol  4 0 0            0            0
#> 5           sol  5 0 0            0            0
#> 6           sol  6 0 0            0            0
# }