Skip to contents

Add an objective function to a conservation planning problem that accounts for uncertainty.

Details

Robust objective functions are used to find solutions that are likely to meet conservation targets across a range of different scenarios or realizations of the input data. This is particularly useful when working with data that is uncertain, such as species distribution models under climate change scenarios. Note that robust constraints must also be used when using these objective functions (e.g., add_constant_robust_constraints(), add_variable_robust_constraints()).

The following robust objective functions can be added to a conservation planning problem:

add_robust_min_set_objective()

Add an objective to a conservation planning problem to minimize the cost of the solution while ensuring that the targets for each feature group are met in a manner that is robust to uncertainty. This function provides a robust alternative to prioritizr::add_min_set_objective().

add_robust_min_shortfall_objective()

Add an objective to a conservation planning problem that minimizes the target shortfalls for each feature group in a manner that is robust to uncertainty, whilst ensuring that the total cost of the solution does not exceed a budget. This function provides a robust alternative to prioritizr::add_min_shortfall_objective().

See also

Other overviews: robust_constraints

Examples

if (FALSE) { # \dontrun{
# Load packages
library(prioritizr)
library(terra)

# Get planning unit data
pu <- get_sim_pu_raster()
features <- get_sim_features()

# Define the feature groups,
# Here, we will assign the first 2 features to the group A, and
# the remaining features to the group B
groups <- c(rep("A", 2), rep("B", nlyr(features) - 2))

# Build problem with robust min set objective
p1 <-
  problem(pu, features) %>%
  add_robust_min_set_objective() %>%
  add_constant_robust_constraints(groups = groups, conf_level = 0.4) %>%
  add_binary_decisions() %>%
  add_relative_targets(0.3) %>%
  add_default_solver(verbose = FALSE)

# Build problem with robust min shortfall objective,
# and budget set to 30% of the total cost of all planning units
p2 <-
  problem(pu, features) %>%
  add_robust_min_shortfall_objective(
    budget = terra::global(pu, "sum", na.rm = TRUE)[[1]] * 0.3
  ) %>%
  add_constant_robust_constraints(groups = groups, conf_level = 0.4) %>%
  add_binary_decisions() %>%
  add_relative_targets(0.3) %>%
  add_default_solver(verbose = FALSE)

# Solve problems
soln <- c(solve(p1), solve(p2))
names(soln) <- c("robust min set", "robust min shortfall")
plot(soln, axes = FALSE)
} # }