All tools

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