After generating a solution to a conservation planning problem, it can be useful to evaluate how well it performs. These functions can be used to evaluate a solution according to various different summary statistics.

## Details

The following functions can be used to summarize the performance
of a solution to a conservation planning `problem()`

:

`eval_n_summary()`

Calculate the number of planning units selected within a solution.

`eval_cost_summary()`

Calculate the total cost of a solution.

`eval_feature_representation_summary()`

Calculate how well features are represented by a solution. This function can be used for all problems.

`eval_target_coverage_summary()`

Calculate how well feature representation targets are met by a solution. This function can only be used with problems that contain targets.

`eval_boundary_summary()`

Calculate the exposed boundary length (perimeter) associated with a solution.

`eval_connectivity_summary()`

Calculate the connectivity held within a solution using symmetric data.

`eval_asym_connectivity_summary()`

Calculate the connectivity held within a solution using asymmetric data.

## See also

Other overviews:
`constraints`

,
`decisions`

,
`importance`

,
`objectives`

,
`penalties`

,
`portfolios`

,
`solvers`

,
`targets`

## Examples

```
# \dontrun{
# load data
sim_pu_raster <- get_sim_pu_raster()
sim_features <- get_sim_features()
# create a minimal problem
p <-
problem(sim_pu_raster, sim_features) %>%
add_min_set_objective() %>%
add_relative_targets(0.1) %>%
add_binary_decisions() %>%
add_default_solver(verbose = FALSE)
# solve problem
s <- solve(p)
# evaluate number of selected planning units in solution
eval_n_summary(p, s)
#> # A tibble: 1 × 2
#> summary n
#> <chr> <dbl>
#> 1 overall 10
# evaluate solution cost
eval_cost_summary(p, s)
#> # A tibble: 1 × 2
#> summary cost
#> <chr> <dbl>
#> 1 overall 1987.
# evaluate feature representation by solution
eval_feature_representation_summary(p, s)
#> # A tibble: 5 × 5
#> summary feature total_amount absolute_held relative_held
#> <chr> <chr> <dbl> <dbl> <dbl>
#> 1 overall feature_1 83.3 8.98 0.108
#> 2 overall feature_2 31.2 3.14 0.100
#> 3 overall feature_3 72.0 7.43 0.103
#> 4 overall feature_4 42.7 4.28 0.100
#> 5 overall feature_5 56.7 6.01 0.106
# evaluate target coverage by solution
eval_target_coverage_summary(p, s)
#> # A tibble: 5 × 9
#> feature met total_amount absolute_target absolute_held absolute_shortfall
#> <chr> <lgl> <dbl> <dbl> <dbl> <dbl>
#> 1 feature_1 TRUE 83.3 8.33 8.98 0
#> 2 feature_2 TRUE 31.2 3.12 3.14 0
#> 3 feature_3 TRUE 72.0 7.20 7.43 0
#> 4 feature_4 TRUE 42.7 4.27 4.28 0
#> 5 feature_5 TRUE 56.7 5.67 6.01 0
#> # ℹ 3 more variables: relative_target <dbl>, relative_held <dbl>,
#> # relative_shortfall <dbl>
# evaluate exposed boundary (perimeter) length by solution
eval_boundary_summary(p, s)
#> # A tibble: 1 × 2
#> summary boundary
#> <chr> <dbl>
#> 1 overall 2.15
# create a symmetric connectivity matrix to describe pair-wise connectivity
# values between combinations of planning units,
# see ?connectivity_matrix for more information
# for brevity, we will do this using the cost data
# cost valuers have high connectivity between them
cm <- connectivity_matrix(sim_pu_raster, sim_pu_raster)
# evaluate connectivity of solution using symmetric data
eval_connectivity_summary(p, s, data = cm)
#> # A tibble: 1 × 2
#> summary connectivity
#> <chr> <dbl>
#> 1 overall 239.
# create an asymmetric connectivity matrix to describe pair-wise
# connectivity values between combinations of planning units
# for brevity, we will just generate a matrix with random values
acm <- matrix(
runif(ncell(sim_pu_raster) ^ 2),
ncol = terra::ncell(sim_pu_raster)
)
# evaluate connectivity of solution using asymmetric data
eval_asym_connectivity_summary(p, s, data = acm)
#> # A tibble: 1 × 2
#> summary asym_connectivity
#> <chr> <dbl>
#> 1 overall 46.1
# }
```