# NOT RUN {
# set seed for reproducibility
set.seed(600)
# load data
data(sim_pu_polygons, sim_pu_zones_stack, sim_features, sim_features_zones)
# add a column to contain the penalty data for each planning unit
# e.g. these values could indicate the level of habitat
sim_pu_polygons$penalty_data <- runif(nrow(sim_pu_polygons))
# plot the penalty data to visualise its spatial distribution
spplot(sim_pu_polygons, zcol = "penalty_data", main = "penalty data",
axes = FALSE, box = FALSE)
# create minimal problem with minimum set objective,
# this does not use the penalty data
p1 <- problem(sim_pu_polygons, sim_features, cost_column = "cost") %>%
add_min_set_objective() %>%
add_relative_targets(0.1) %>%
add_binary_decisions()
# print problem
print(p1)
# create an updated version of the previous problem,
# with the penalties added to it
p2 <- p1 %>% add_linear_penalties(100, data = "penalty_data")
# print problem
print(p2)
# }
# NOT RUN {
# solve the two problems
s1 <- solve(p1)
s2 <- solve(p2)
# plot the solutions and compare them,
# since we supplied a very high penalty value (i.e. 100), relative
# to the range of values in the penalty data and the objective function,
# the solution in s2 is very sensitive to values in the penalty data
spplot(s1, zcol = "solution_1", main = "solution without penalties",
axes = FALSE, box = FALSE)
spplot(s2, zcol = "solution_1", main = "solution with penalties",
axes = FALSE, box = FALSE)
# for real conservation planning exercises,
# it would be worth exploring a range of penalty values (e.g. ranging
# from 1 to 100 increments of 5) to explore the trade-offs
# }
# NOT RUN {
# now, let's examine a conservation planning exercise involving multiple
# management zones
# create targets for each feature within each zone,
# these targets indicate that each zone needs to represent 10% of the
# spatial distribution of each feature
targ <- matrix(0.1, ncol = number_of_zones(sim_features_zones),
nrow = number_of_features(sim_features_zones))
# create penalty data for allocating each planning unit to each zone,
# these data will be generated by simulating values
penalty_stack <- simulate_cost(sim_pu_zones_stack[[1]],
n = number_of_zones(sim_features_zones))
# plot the penalty data, each layer corresponds to a different zone
plot(penalty_stack, main = "penalty data", axes = FALSE, box = FALSE)
# create a multi-zone problem with the minimum set objective
# and penalties for allocating planning units to each zone,
# with a penalty scaling factor of 1 for each zone
p3 <- problem(sim_pu_zones_stack, sim_features_zones) %>%
add_min_set_objective() %>%
add_relative_targets(targ) %>%
add_linear_penalties(c(1, 1, 1), penalty_stack) %>%
add_binary_decisions()
# print problem
print(p3)
# }
# NOT RUN {
# solve problem
s3 <- solve(p3)
# plot solution
plot(category_layer(s3), main = "multi-zone solution",
axes = FALSE, box = FALSE)
# }
Run the code above in your browser using DataLab