NEWS
multiscape 1.1.0
Solution architecture
- Simplified the public result architecture so that
solve() consistently returns a SolutionSet, including for single-objective problems.
- Removed the internal
Solution class from the public API and documentation. Individual run-level solutions remain available only as internal components of a SolutionSet.
- Added stable
solution_id identifiers to distinguish stored solutions from attempted runs identified by run_id.
- Updated run, solution, and summary tables to preserve
run_id and solution_id consistently across extraction and analysis functions.
- Improved internal finalization of solution metadata and identifiers after solving.
- Updated
SolutionSet printing and documentation to reflect the distinction between run attempts and stored solutions.
Base conservation-planning workflow
- Added automatic support for base conservation-planning problems when no explicit actions or effects are supplied.
- Problems without explicit actions are now interpreted as binary conservation decisions, where each planning unit can be conserved or not conserved.
- Added an implicit conservation action and internally generated feature contributions based on the feature amounts stored in
dist_features.
- The implicit conservation model uses
amount_after to represent the feature amount obtained when a planning unit is conserved.
Multi-objective run design and controls
- Revised the multi-objective run-design resolver used by weighted-sum, epsilon-constraint, and AUGMECON methods.
- Improved support for automatic and manually specified run designs through
run_grid() and run_manual().
- Added and documented common multi-objective execution controls through
mo_control().
- Improved handling of infeasible runs, missing solutions, solver errors, and slack upper bounds.
- Standardized the storage of run-design parameters and objective values in the
SolutionSet run table.
- Preserved infeasible runs in the run history while assigning
solution_id only to runs that produced a stored solution.
- Improved objective evaluation and model preparation across multi-objective methods.
- Fixed weighted-sum objective preparation for implicit conservation benefit objectives.
- Improved validation of objective coefficient vectors and objective-specific error messages.
Result extraction
- Added
get_runs() to extract run-level status, runtime, gap, design parameters, solution identifiers, and objective values.
- Added
get_objectives() to extract objective values in long or wide format.
- Added
get_objective_specs() to extract registered objective aliases, objective types, model types, optimization senses, and creation metadata.
- Updated objective extraction to include both
run_id and solution_id.
- Updated existing extraction functions to work consistently with the unified
SolutionSet architecture.
- Improved handling of infeasible runs and missing objective values during extraction.
Solution-set management
- Added
solution_filter() to return a coherently filtered SolutionSet.
solution_filter() can filter by run_id, solution_id, solver status, or feasibility.
- Added optional filtering of non-dominated solutions using
moocore.
- Added support for selecting the objectives used to evaluate dominance.
- Ensured that filtering updates run tables, design tables, stored solutions, and summary tables consistently.
- Added cloning of
SolutionSet objects before modification to prevent reference-based mutation of the original object.
- Added
solution_append() to combine compatible SolutionSet objects generated from the same planning problem.
solution_append() verifies compatibility of planning units, features, actions, effects, targets, constraints, locks, spatial relations, and objective definitions.
- Appended runs and solutions are automatically assigned unique
run_id and solution_id values.
- Added support for combining solution sets obtained from different multi-objective methods or run designs applied to the same planning problem.
- Added
solution_unique() to retain one representative from groups of equivalent solutions.
solution_unique() can identify repeated solutions using either complete decision vectors or objective values.
- Added numerical tolerance controls for identifying equivalent points in objective space.
- Preserved runs without stored solutions when removing duplicated solutions.
Frontier analysis
- Added
frontier_extremes() to identify the observed minimum and maximum values of each objective.
- Added classification of observed bounds as
best or worst according to each objective's optimization sense.
- Added support for returning all tied extreme solutions or only the first representative.
- Added
frontier_distances() to calculate normalized distances to observed ideal and nadir points.
- Added automatic transformation of maximization objectives into a common minimization space for frontier calculations.
- Added range normalization so that objectives measured in different units contribute comparably to distance calculations.
- Added Euclidean, Manhattan, and Chebyshev distance metrics.
- Added rankings based on proximity to the observed ideal point and distance from the observed nadir point.
- Added original-scale ideal, nadir, and objective-range metadata to the returned distance tables.
- Clarified that frontier reference points are calculated from the solutions contained in the supplied
SolutionSet.
Selection analysis
- Added
selection_frequency() to calculate how frequently each planning-unit/action assignment is selected across stored solutions.
- Standardized selection analysis around a canonical planning-unit/action representation.
- Simple conservation-planning problems are represented using the implicit
conservation action.
- Added
selection_similarity() to quantify structural similarity among solutions.
- Added Jaccard similarity for comparing selected planning-unit/action assignments.
- Added Hamming similarity for comparing complete binary assignment vectors, including shared non-selections.
- Added long-format and matrix-format similarity outputs.
- Added internal helpers to construct consistent long-format and matrix-format selection representations.
Documentation and website
- Reorganized the pkgdown reference index into dedicated sections for:
- result extraction;
- solution-set management;
- frontier analysis;
- selection analysis;
- multi-objective workflow configuration.
- Removed public documentation references to the internal
Solution class.
- Updated function documentation to use the unified
SolutionSet terminology.
- Updated examples and cross-references for
run_id, solution_id, objective extraction, filtering, frontier analysis, and selection analysis.
- Added
moocore as an optional dependency for non-dominance filtering.
- Updated GitHub Actions configurations for current Codecov and Node.js runner requirements.
- Updated Codecov uploads to use the PyPI CLI and avoid binary signature-verification failures.
- Updated GitHub Actions versions for Node.js 24 compatibility.
multiscape 1.0.7 (2026-04-30)
- Updated native routine registration to resolve additional CRAN LTO/gcc-ASAN checks.
- Revised examples and package metadata for CRAN compliance.
multiscape 1.0.6 (2026-04-28)
- Fix CRAN submission issues
- Revise examples and DESCRIPTION for CRAN resubmission
multiscape 1.0.5
- Release candidate for CRAN.
multiscape 1.0.4
- First CRAN release of
multiscape.
- Provides a modular workflow for exact multi-objective spatial planning based on mixed-integer programming (MIP).
- Introduces the core
Problem, Solution, and SolutionSet classes. The public result architecture was later unified around SolutionSet in
version 1.1.0.
- Adds support for modular problem construction through
create_problem(), add_*(), set_*(), and solve().
- Supports atomic objective registration and multi-objective solution methods, including weighted-sum, epsilon-constraint, and AUGMECON.
- Includes support for spatial relations such as boundary, rook, queen, k-nearest neighbours, and distance-based relations.
- Supports commercial and open-source solvers, including Gurobi, CPLEX, CBC, and SYMPHONY.
- Adds user-facing extraction and visualization tools for planning units, actions, features, targets, spatial outputs, and trade-offs.
- Includes substantial updates to documentation, package structure, and contribution guidelines.