Planning
Working prototype
Reserve Planner — a Marxan in the browser
Watch a conservation / site-suitability plan solve itself with simulated annealing.
The problem
Spatial trade-off problems — where to protect, where to build, how to hit coverage targets at least cost — are central to landscape and ecological design, but the standard tool (Marxan) is a command-line binary with cryptic input files. Students rarely get to feel how the algorithm actually behaves.
What this does
A from-scratch, in-browser reimplementation of Marxan's core: a grid of planning units, each with a cost and a set of feature amounts; conservation targets to meet; and a boundary penalty (BLM) that rewards compact reserves. Simulated annealing searches for the cheapest selection that hits the targets — and you watch it evolve live while tuning the knobs.
Try it
Loading tool…
What it does
Marxan answers: which parcels should I select so that every conservation feature hits its target, for the least total cost, while keeping the reserve compact? This artifact implements that objective directly:
Score = Σ cost(selected) + BLM · (exposed boundary) + Σ SPF · (unmet target penalty)
It then runs simulated annealing — flipping planning units in and out, always accepting improvements and sometimes accepting worse moves (with probability exp(−Δ/T)) so it can escape local minima — and cools the temperature until the solution settles.
Why it's useful
- Feel the trade-offs: push the BLM up and watch the reserve clump together; raise a target and watch cost climb.
- A genuine, inspectable implementation of the algorithm behind real conservation planning.
- Maps directly to architectural site-suitability: cost = unsuitability, features = things you must cover.
What you can tune
- Conservation targets per feature
- BLM (boundary length modifier — compactness)
- SPF (species penalty factor — how hard to punish a miss)
- Annealing temperature & iteration count
Honest limits
- A simplified grid model (cells = planning units, adjacency = grid neighbours), not the full Marxan input-file ecosystem (pu.dat / spec.dat / puvspr.dat / bound.dat).
- Single-threaded; built to be legible, not to out-perform the C++ binary.
Built on
- Marxan (official)see repo
- prioritizr (R analog, for reference)GPL-3.0