Nothing
#' @include internal.R
NULL
#' Conservation problem constraints
#'
#' A constraint can be added to a conservation planning problem
#' to ensure that solutions exhibit a specific characteristic.
#'
#' @details Constraints can be used to ensure that solutions exhibit
#' a range of different characteristics. For instance, they can be
#' used to lock in or lock out certain planning units from the solution, such
#' as protected areas or degraded land (respectively).
#' Additionally, similar to the [penalties] functions,
#' some of the constraint functions can be used to increase connectivity in a
#' solution. The key difference between a penalty and a constraint, however,
#' is that constraints work by invalidating solutions that do not exhibit
#' a specific characteristic, whereas penalty functions work by than
#' penalizing solutions which do not meet a specific characteristic. Thus
#' constraints do not affect the objective function. The following constraints
#' are available.
#'
#' The following constraints can be added to a conservation planning
#' [problem()]:
#'
#' \describe{
#'
#' \item{[add_locked_in_constraints()]}{
#' Add constraints to ensure
#' that certain planning units are selected in the solution.}
#'
#' \item{[add_locked_out_constraints()]}{
#' Add constraints to ensure
#' that certain planning units are not selected in the solution.}
#'
#' \item{[add_neighbor_constraints()]}{
#' Add constraints to
#' ensure that all selected planning units have at least a certain number
#' of neighbors.}
#'
#' \item{[add_contiguity_constraints()]}{
#' Add constraints to a
#' ensure that all selected planning units are spatially connected to each
#' other and form a single contiguous unit.}
#'
#' \item{[add_feature_contiguity_constraints()]}{
#' Add constraints to
#' ensure that each feature is represented in a contiguous unit of
#' dispersible habitat. These constraints are a more advanced version of
#' those implemented in the [add_contiguity_constraints()]
#' function, because they ensure that each feature is represented in a
#' contiguous unit and not that the entire solution should form a
#' contiguous unit.}
#'
#' \item{[add_linear_constraints()]}{
#' Add constraints to ensure that all selected planning units meet certain
#' criteria. For example, they can be used to add
#' multiple budgets, or limit the number of
#' planning units selected in different administrative areas within a study
#' region (e.g., different countries).}
#'
#' \item{[add_mandatory_allocation_constraints()]}{
#' Add constraints to ensure that every planning unit is allocated to a
#' management zone in the solution. **This function can only be used
#' with problems that contain multiple zones.**}
#'
#' }
#'
#' @family overviews
#'
#' @examples
#' \dontrun{
#' # load data
#' sim_pu_raster <- get_sim_pu_raster()
#' sim_features <- get_sim_features()
#' sim_locked_in_raster <- get_sim_locked_in_raster()
#' sim_locked_out_raster <- get_sim_locked_in_raster()
#'
#' # create minimal problem with only targets and no additional constraints
#' p1 <-
#' problem(sim_pu_raster, sim_features) %>%
#' add_min_set_objective() %>%
#' add_relative_targets(0.2) %>%
#' add_binary_decisions() %>%
#' add_default_solver(verbose = FALSE)
#'
#' # create problem with locked in constraints
#' p2 <- p1 %>% add_locked_in_constraints(sim_locked_in_raster)
#'
#' # create problem with locked in constraints
#' p3 <- p1 %>% add_locked_out_constraints(sim_locked_out_raster)
#'
#' # create problem with neighbor constraints
#' p4 <- p1 %>% add_neighbor_constraints(2)
#'
#' # create problem with contiguity constraints
#' p5 <- p1 %>% add_contiguity_constraints()
#'
#' # create problem with feature contiguity constraints
#' p6 <- p1 %>% add_feature_contiguity_constraints()
#'
#' # solve problems
#' s <- terra::rast(lapply(list(p1, p2, p3, p4, p5, p6), solve))
#' names(s) <- c(
#' "minimal problem", "locked in", "locked out",
#' "neighbor", "contiguity", "feature contiguity"
#' )
#'
#' # plot solutions
#' plot(s, axes = FALSE, nr = 2)
#' }
#' @name constraints
NULL
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.