problem()so that an error will be thrown if argument to
featurescontains only missing (
NA) values (e.g., an sf object is supplied that has
NAvalues in all rows for a feature's column).
sp::SpatialPolyonsDataFrame()) are still supported, the prioritizr package will now throw deprecation warnings. Since support for the sp and raster package classes will be fully deprecated and removed in a later version this year, we recommend updating code to use the sf and terra packages.
problem()objects can now contain many more constraints and penalties. Note that any
problem()objects that were produced using earlier versions of the package are no longer compatible.
get_sim_zones_features()). These functions now return
zones()objects. Note that these functions are provided because
data(...)cannot be used with
?datafor more information.
boundary_matrix()output format has been updated. This means that users will not be able to use boundary data generated using previous versions of the package.
add_lpsymphony_solver()now throws an error, instead of a warning, if an old version of the lpsymphony R package is installed that is known to produce incorrect results.
marxan_boundary_data_to_matrix()function is no longer compatible with boundary data for multiple zones.
distribute_load()function has been deprecated, because it is no longer used. For equivalent functionality, See
predefined_optimization_problem()functions have been superseded by the new
zones()objects has been updated to provide more information.
summary()function to provide extensive detail on
"bad error message"!
add_feature_weights()when applied to problems with an
add_max_phylo_end_objectve(). Specifically, the bug meant that weights weren't being applied to problems with these particular objectives.
add_gurobi_solver()documentation for opening vignette.
add_extra_portfolio()) default to generating 10 solutions.
solve()function will now output
tibble::tibble()objects (instead of
data.frame()objects), when the planning unit data are
boundary_matrix()function now uses
terra::sharedPaths()for calculations, providing greater performance (#257).
eval_ferrier_importance()function can now be used with any objective function that uses targets and a single zone.
add_highs_solver()function for the HiGHS optimization software (#250).
add_default_solver()to use the HiGHS solver if the Gurobi, IBM CPLEX, and CBC solvers aren't available.
add_default_solver()so that the
add_lpsymphony_solver()is used instead of
eval_feature_representation_summary()to avoid needlessly converting sparse matrices to regular matrices (#252).
add_cbc_solver()to throw a segfault when solving a problem wherein the
rij_matrix(x)has a zero amount for the last feature in the last planning unit (#247).
simulate_species()functions to improve performance using the fields package.
boundary_matrix()to use STR query trees by default.
boundary_matrix()to use the geos package (#218).
simulate_species()so that they no longer depend on the RandomFields package.
presolve_check()function to (i) reduce chances of it incorrectly throwing an error when the input data won't actually cause any issues, and (ii) provide recommendations for addressing issues.
add_min_largest_shortfall_objective()so that examples complete in a shorter period of time.
xthat contain missing (
NA) values, and (iii)
rij_matrixthat are in
dgCMatrixformat. This bug only occurred when all three of these specific conditions were met. When it occurred, the bug caused planning units with
NAcost values to receive very high cost values (e.g., 1e+300). This bug meant that when attempting to solve the problem, the presolve checks (per
presolve_check()) would throw an error complaining about very high cost values (#236).
add_locked_out_constraints()to ensure that a meaningful error message is provided when no planing units are locked (#234).
presolve_check()so that it does not throw a meaningless warning when the mathematical objective function only contains zeros.
presolve_check()to help reduce chances of mis-attributing high connectivity/boundary values due to planning unit costs.
add_connectivity_penalties()function and documentation so that it is designed specifically for symmetric connectivity data.
add_asym_connectivity_penalties()function that is designed specifically for asymmetric connectivity data. This function has been created to help ensure that asymmetric connectivity data are handled correctly. For instance, using asymmetric connectivity data with
add_connectivity_penalties()function in previous versions of the package sometimes resulted in the data being incorrectly treated as symmetric data. Additionally, this function uses an updated mathematical formulation for handling asymmetric connectivity so that it provides similar results to the Marxan software (#323).
marxan_problem()function so that it can be used with asymmetric connectivity data. This is now possible because there are dedicated functions for symmetric and asymmetric connectivity.
zonesparameter of the
eval_ferrier_importance()(#220). Although this function is now recommended for general use, the documentation contained an outdated warning and so the warning has now been removed.
eval_n_summary()function now returns a table with the column name
"cost") for the number of selected planning units (#219).
marxan_problem()for importing Marxan data files.
sim_pu_zones_sfdata given class updates to the sf package (compatible with version 1.0.3+).
eval_ferrier_importance()function with verified code.
presolve_check()function to throw warning when really high values specified in
add_cbc_solver() function so that it can use a starting solution to reduce run time (via the
add_linear_constraint()function to add arbitrary constraints.
add_min_largest_shortfall_objective()functions to handle targets with a target threshold value of zero.
eval_connectivity_summary()function, and tweaking the header in the README.
add_gurobi_solver()function so that it doesn't print excess debugging information (accidentally introduced in previous version 184.108.40.206).
add_gurobi_solver()function to support the
node_file_startparameter for the Gurobi software. This functionality is useful solving large problems on systems with limited memory (#139).
write_problem()function to save the mixed integer programming representation of a conservation planning problem to a file. This function is useful for manually executing optimization solvers.
rij_matrix()function documentation (#189).
add_gurobi_solver()function to allow specification of a starting solution (#187). This functionality is useful for conducting a boundary penalty parameter calibration exercise. Specifically, users can specify the starting solution for a given penalty value based on the solution obtained using a smaller penalty value.
solvenow assigns layer names based on zone names for solutions in format.
add_cbc_solver()now work as expected.
add_gurobi_solver()function to report timings following the same methods as the other solvers.
add_lpsymphony_solver()function to be more memory efficient (#183).
add_cbc_solver()is now preferred over all other open source solvers.
add_cbc_solver()would sometimes return incorrect solutions to problems with equality constraints.
add_cbc_solver()function to generate solutions using the open source CBC solver via the rcbc R package (https://github.com/dirkschumacher/rcbc).
add_lpsymphony_solver()functions to have a default
time_limitargument set as the maximum machine integer for consistency.
add_gurobi_solver()functions to require
FALSE) arguments for the
add_default_solver()function so that it prefers
add_cbc_solver()over all open source solvers.
gapparameter for the
add_lpsymphony_solver()corresponded to the maximum absolute difference from the optimal objective value. This was an error due to misunderstanding the SYMPHONY documentation. Under previous versions of the package, the
gapparameter actually corresponded to a relative optimality gap expressed as a percentage (such that
gap = 10indicates that solutions must be at least 10% from optimality). We have now fixed this error and the documentation described for the
gapparameter is correct. We apologize for any inconvenience this may have caused.
eval_) to mention that the argument to
solutionshould only contain columns that correspond to the solution (#176).
sfdata to documentation for importance evaluation functions (#176).
solutionarguments are supplied to the evaluation functions (#176).
sfplanning unit data.
eval_cost()function to calculate the cost of a solution.
eval_boundary()function to calculate the exposed boundary length associated with a solution.
eval_connectivity()function to calculate the connectivity associated with a solution.
feature_representation()function. It is now superseded by the
eval_feature_representation()function to assess how well each feature is represented by a solution. This function is similar to the deprecated
eval_feature_representation()function, except that it follows conventions for other evaluation functions (e.g.
eval_target_representation()function to assess how well each target is met by a solution. This function is similar to the
eval_feature_representation(), except that it corresponds to the targets in a conservation planning problem.
eval_ferrier_importance()function for consistency.
eval_replacement_importance()function for consistency.
eval_rare_richness_importance()function for consistency.
add_locked_out_constraints()function to enable a single planning unit from being locked out of multiple zones (when data are specified in raster format).
problem()function to reduce memory consumption for sparse matrix arguments (#164).
add_cplex_solver()function to generate solutions using IBM CPLEX (via the cplexAPI package).
add_gap_portfolio()documentation to note that it only works for problems with binary decisions (#159).
loglinear_interpolation()functions. Previously they used a natural logarithm for log-linear interpolation. To follow target setting approaches outlined by Rodrigues et al. (2004), they now use the decadic logarithm (i.e.
ferrier_score()function. It no longer incorrectly states that these scores can be calculated using CLUZ and now states that this functionality is experimental until the formulation can be double checked.
feature_representation()bug incorrectly throwing error with vector planning unit data (e.g. sf-class data).
rij_matrix()to throw an error for large raster data (#151).
add_linear_penalties()to add penalties that penalize planning units according to a linear metric.
connectivity_matrix()documentation to provide an example of how to generate connectivity matrices that account for functional connectivity.
solve()function to the Salt Spring Island and Tasmania vignettes.
compile()to throw warning when compiling problems that include feature weights and an objective function that does not use feature weights.
add_gurobi_solver()function to provide more options for controlling the pre-solve step when solving a problem.
ferrier_score()function to compute irreplaceability scores following Ferrier et al (2000).
proximity_matrix()function to generate matrices indicating which planning units are within a certain distance of each other (#6).
adjacency_matrix()function to follow the naming conventions of other spatial association functions (#6).
add_gap_portfolio()functions to provide specific options for generating portfolios (#134).
fast_extractfunctions to use the exactextractr and fasterize packages to speed up raster data extraction (#130).
boundary_matrix()function when handling
SpatialPolygonplanning unit data that contain multiple polygons (e.g. a single planning unit contains to two separate islands) (#132).
is.parallel()functions since they are no longer used with new data extraction methods.
add_pool_portfolio()function because the new
add_top_portfolio()functions provide this functionality (#134).
add_lpsymphony_solver()throwing an an infeasible error message for feasible problems containing continuous or semi-continuous variables.
presolve_check()function more informative (#124).
rij_matrix()so that amounts are calculated correctly for vector-based planning unit data.
add_locked_out_constraints()functions so that they no longer throw an unnecessary warning when when they are added to multi-zone problems using raster data with
add_locked_out_constraints()functions to provide recommended practices for raster data.
rarity_weighted_richness()returning incorrect scores when the feature data contains one feature that has zeros amounts in all planning units (e.g. the
tas_featuresobject in the prioritizrdata R package; #120).
add_gurobi_solver()returning solution statuses that are slightly larger than one (e.g. 1+1.0e-10) when solving problems with proportion-type decisions (#118).
replacement_cost()function to use parallel processing to speed up calculations (#119).
add_manual_bounded_constraints()function to apply lower and upper bounds on planning units statuses in a solution (#118).
add_rsymphony_solver()functions so that they will not return solutions with values less than zero or greater than one when solving problems with proportion-type decisions. This issue is the result of inconsistent precision when performing floating point arithmetic (#117).
add_locked_out_constraints()functions to provide a more helpful error message the
locked_outargument refers to a column with data that are not logical (i.e.
solve()function to throw a more accurate and helpful error message when no solutions are found (e.g. due to problem infeasibility or solver time limits).
add_max_phylo_end_objective()function to maximize the phylogenetic endemism of species adequately represented in a prioritization (#113).
rarity_weighted_richness()functions to the Prioritizr vignette.
irreplaceabilitymanual entry to document functions for calculating irreproducibility scores.
replacement_cost()function to calculate irreproducibility scores for each planning unit in a solution using the replacement cost method (#26).
rarity_weighted_richness()function to calculate irreproducibility scores for each planning unit in a solution using rarity weighted richness scores (#26).
add_min_shortfall_objective()function to find solutions that minimize target shortfalls.
add_min_shortfall_objective()function to main vignette.
problem()tests so that they work when no solvers are installed.
feature_representation()function now requires missing (
NA) values for planning unit statuses in a solution for planning units that have missing (
NA) cost data.
presolve_check()function to investigate potential sources of numerical instability before trying to solve a problem. The manual entry for this function discusses common sources of numerical instability and approaches for fixing them.
solve()function will now use the
presolve_check()function to verify that problems do not have obvious sources of numerical instability before trying to solve them. If a problem is likely to have numerical instability issues then this function will now throw an error (unless the
solve(x, force = TRUE)).
add_rsymphony_solver()function now uses sparse matrix formats so that attempts can be made to solve large problems with SYMPHONY---though it is unlikely that SYMPHONY will be able to solve such problems in a feasible period of time.
add_lpsymphony_solver()sometimes returned infeasible solutions when subjected to a time limit (#105).
ConservationProblem-classobjects. These methods were implemented to be used in future interactive applications and are not currently used in the package. As a consequence, these bugs do not affect the correctness of any results.
bad error messageerror being thrown when input rasters are not comparable (i.e. same coordinate reference system, extent, resolutions, and dimensionality) (#104).
solve()printing annoying text about
add_contiguity_constraints()functions used more memory than they actually needed (#102). This is because the argument validation code converted sparse matrix objects (i.e.
dgCMatrix) to base objects (i.e.
matrix) class temporarily. This bug only meant inefficient utilization of computer resources---it did not affect the correctness of any results.
add_mandatory_allocation_constraints()function. This function can be used to ensure that every planning unit is allocated to a management zone in the solution. It is useful when developing land-use plans where every single parcel of land must be assigned to a specific land-use zone.
add_mandatory_allocation_constraints()to the Management Zones and Prioritizr vignettes.
Collectionprototypes that caused it to throw an error incorrectly. This method was not used in earlier versions of this package.
feature_representation()function that caused the "amount_held" column to have NA values instead of the correct values. This bug only affected problems with multiple zones.
category_layer()function that it this function to incorrectly throw an error claiming that the input argument to
xwas invalid when it was in fact valid. This bug is encountered when different layers the argument to
xhave non-NA values in different cells.
add_contiguity_constraints()function now uses sparse matrix formats internally for single-zone problems. This means that the constraints can be applied to single-zoned problem with many more planning units.
add_connectivity_penalties()function now uses sparse matrix formats internally for single-zone problems. This means that connectivity penalties can be applied to single-zoned problem with many more planning units.
add_max_cover_objective()functions to make it clearer that they do not use targets (#94).
add_locked_out_constraints()that incorrectly threw an error when using
logicallocked data (i.e.
FALSE) because it incorrectly thought that valid inputs were invalid.
add_manual_locked_constraints()where solving the same problem object twice resulted in incorrect planning units being locked in or out of the solution (#92).
feature_abundances()that caused the solve function to throw an error when attempting to solve problems with a single feature.
add_cuts_portfolio()that caused the portfolio to return solutions that were not within the specified optimality gap when using the Gurobi solver.
feature_representation()function now allows
numericsolutions with attributes (e.g. when output by the
solve()function) when calculating representation statistics for problems with
numericplanning unit data (#91).
add_manual_targets()function threw a warning when some features had targets equal to zero. This resulted in an excessive amount of warnings. Now, warnings are thrown for targets that are less then zero.
problem()function sometimes incorrectly threw a warning that feature data had negative values when the data actually did not contain negative values. This has now been addressed.
problemfunction now allows negative values in the cost and feature data (and throws a warning if such data are detected).
add_manual_targets()functions now allow negative targets (but throw a warning if such targets are specified).
compilefunction throws an error if a problem is compiled using the expanded formulation with negative feature data.
add_absolute_targets()function now throws an warning---instead of an error---if the specified targets are greater than the feature abundances in planning units to accommodate negative values in feature data.
add_max_cover_objective()in prioritizr vignette (#90).
add_relative_targets()documentation now makes it clear that locked out planning units are included in the calculations for setting targets (#89).
add_loglinear_targets()function now includes a
feature_abundances()parameter for specifying the total amount of each feature to use when calculating the targets (#89).
feature_abundances()function to calculate the total amount of each feature in the planning units (#86).
add_cuts_portfolio()function uses the Gurobi solution pool to generate unique solutions within a specified gap of optimality when tasked with solving problems with Gurobi (version 8.0.0+; #80).
add_pool_portfolio()function to generate a portfolio of solutions using the Gurobi solution pool (#77).
boundary_matrix()function now has the experimental functionality to use GEOS STR trees to speed up processing (#74).
feature_representation()function to how well features are represented in solutions (#73).
solve()function printing superfluous text (#75).
sim_features_zonesfor exploring conservation problems with multiple management zones.
Zonesclass to organize data with multiple zones.
problem()function now accepts
Zoneobjects as arguments for
featureto create problems with multiple zones.
add_absolute_targets()functions for adding targets to problems can be used to specify targets for each feature in each zone.
add_manual_targets()function for creating targets that pertain to multiple management zones.
solve()function now returns a
listof solutions when generating a portfolio of solutions.
add_locked_out_constraints()functions for specifying which planning units are locked in or out now accept
matrixarguments for specifying which zones are locked in or out.
add_manual_locked_constraints()function to manually specify which planning units should or shouldn't be allocated to specific zones in solutions.
zonesparameter) and specify how they they should be applied (using the
dataparameter. All of these functions have default arguments that mean that problems with a single zone should have the same optimal solution as problems created in the earlier version of the package.
add_feature_weights()function can be used to weight different the representation of each feature in each zone.
category_vector()functions have been provided to help work with data for multiple management zones.
?prioritizr), and README.
marxan_problem()has been updated with more comprehensive documentation and to provide more helpful error messages. For clarity, it will now only work with tabular data in the standard Marxan format.
add_locked_out_constraints()throw an exception when used with semi-continuous-type decisions (#59).
compile()thrown when the same planning unit is locked in and locked out now prints the planning unit indices in a readable format.
add_locked_out_constraints()are ignored when using proportion-type decisions (#58).
predefined_optimization_problem()which incorrectly recognized some inputs as invalid when they were in fact valid.
R CMD checkrelated to proto in Depends.
add_lpsymphony_solver()now throws warnings to alert users to potentially incorrect solutions (partially addressing #40).
add_*_objectivesnow pass when executed with slow solvers (partially addressing #40).
compile()now works when no solvers are installed (#41).
add_*_solversare now unbounded and can accept values larger than 1 (#44).
add_max_cover_objective()function has been renamed to the
add_max_utility_objective(), because the formulation does not follow the historical formulation of the maximum coverage reserve selection problem (#38).
add_max_cover_objective()function now follows the historical maximum coverage objective. This fundamentally changes
add_max_cover_objective()function and breaks compatibility with previous versions (#38).
add_lpsymphony_solver()examples and tests to skip on Linux operating systems.
add_lpsymphony_solver()causing error when attempting to solve problems.
numericvector data that caused an error.
numericvector input with rij data containing NA values.
add_connectivity_penalties()causing the function to throw an error when the number of boundaries/edges is less than the number of planning units.
ArrayParameterprototypes to check t that functions for generating widgets have their dependencies installed.
numericplanning unit data and portfolios that caused the
solve()to throw an error.
marxan_problem()would always use the first column in the attribute table for the cost data. This bug is serious so analysis that used
marxan_problem()should be rerun.
add_shuffle_portfolio()tests on CRAN.
Spatial*DataFrameobjects are now stored in columns named "solution_*" (e.g. "solution_1") to store multiple solutions.
verboseargument to all solvers. This replaces the
ConservationProblem$print()now only prints the first three species names and a count of the total number of features. This update means that
ConservationProblemobjects with lots of features can now safely be printed without polluting the R console.
devtools::build_vignettes(). Earlier versions needed the vignettes to be compiled using the Makefile to copy files around to avoid tangled R code causing failures during R CMD CHECK. Although no longer needed, the vignettes can still be compiled using the shell command
make vignsif desired.
rmarkdown::render("README.Rmd")or using the shell command
make readme. Note that the figures for
README.mdcan be found in the directory
prshinywill now only be run if executed during an interactive R session. Prior to this R CMD CHECK would hang.
problem.data.framethat meant that it did not check for missing values in
add_absolute_targets()and add_relative_targets` related to their standardGeneric being incorrectly defined
list. The elements in the list are assumed to be
dsCMatrixobjects (aka symmetric sparse matrices in a compressed format) and are coerced to
dgCMatrixobjects to reduce computational burden. There was a typo, however, and so the objects were coerced to
dgCMatrix. This evidently was ok in earlier versions of the RcppArmadillo and/or Matrix packages but not in the most recent versions.
NAon some systems preventing users from using the Gurobi solver--even when one thread is specified.
add_default_solver()to own help file
add_corridor_constraints()that fails to actually add the constraints with argument to
connectivityis a list.
make installcommand so that it now actually installs the package.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.