Model Semantics

The FUCHS model is a nested decision problem on the tsa29mini instance. This page records exactly what the model computes, the formulation choices, and the known limitations. The authoritative source is planning/v0.1.0a1-plan.md.

The nested formulation

Inner problem (enterprise / implementation) — a Model I linear program. Per scenario, maximize discounted net revenue (NPV) over harvest and replanting decisions subject to:

  • an even-flow band on harvest volume (the AAC proxy): per-period harvest volume within 5% of period 1 on the managed land base;

  • the outer policy constraints (species-composition area-share targets with tolerance; an optional harvest policy — AAC volume band or rotation-age floor/ceiling — folded in as rows);

  • salvage feasibility (salvage <= burned stock);

  • replanting transitions (regeneration after harvest or salvage).

The LP is a continuous Model I formulation (no binaries, no thresholding), solved with the ws3 LP machinery + HiGHS. The objective coefficient is the discounted net cash flow along each prescription path (fresh_fuchs.economy.npv); the even-flow band stays on harvest volume. With a zero discount rate and no cross-species price differential, the NPV-max LP reproduces the volume-max baseline exactly (verified in tests/test_npv.py).

Outer problem (policy / administration) — a grid search over the NPV distribution. Landscape policy is a PolicyRecord: species-composition area-share targets (with tolerance) plus an optional harvest policy (AAC proxy, or rotation-age floor/ceiling per species). A PolicyGrid expands to its Cartesian product (plus an optional unconstrained baseline); each grid point is evaluated on a full-Monte-Carlo distribution of NPV and summarized with downside-risk measures — expected NPV, volatility, VaR, CVaR (default 95%), and shortfall probability — with a Gaussian comparison. Policies are ranked by a reproducible rule (lexicographic on (E[NPV], CVaR), or a weighted mean-CVaR score), and a recommended policy plus a coarse-vs-fine grid-resolution sensitivity are reported.

The scenario engine

Fire occurrence, extent, and severity are sampled per scenario from MFRI-by-zone annual burn rates (burn probability 1/MFRI) with a severity ladder (Unburned 0 / Low 0.30 / Moderate 0.60 / High 0.85; default Moderate). Fire is encoded in the inner LP as path-dependent coefficients — survival Pi(1-p) since regeneration, green volume Y(age) x survival, burn influx p x exposed, salvageable severity x influx — and salvage is a real Model I action with age-0 regeneration. Burned volume decays at 0.85/yr; the within-timestep ordering is harvest -> fire -> salvage -> decay. One inner LP is solved per scenario with full foresight (the fire events are fixed within a scenario); recourse / rolling-horizon is post-v0.1.0a1. The uncertainty vector pairs a Gaussian burn-rate multiplier with a price factor (fixed at 1.0 in v0.1.0a1; the dimension exists for the later stochastic-price work).

Orchestration

The whole pipeline is wrapped as freshforge workflows/matrices with evidence manifests (fresh_fuchs.orchestration), reproducible on the public-safe synthetic instance (fresh_fuchs.instance.synthetic) in CI.

Known limitations (v0.1.0a1)

  • Dynamic inconsistency (open-loop inner LP): the inner LP — maximize discounted NPV subject to an even-flow harvest-volume constraint — is an open-loop formulation and is dynamically inconsistent (it fails Bellman’s principle of optimality): a future planner re-solving from the realized state under the same goals would not follow the plan’s tail. On the public-safe synthetic instance the period-1 -> 2 transition is followed but the periods-3+ tail diverges by ~9.5% of volume on replan; notably the divergence is identical at 0% and 3% discount, so the driver on this instance is the even-flow band’s replanning asymmetry, not the discount rate. The real tsa29mini bundle has more disequilibrium and negatively-valued strata, so the synthetic figure is a lower bound. Consequence: the open-loop NPV trajectories — and the outer-layer NPV distributions and policy rankings built on them — are not credible as intertemporal plans, and shadow-price / constraint-cost analysis from them is biased. Recorded in planning/dynamic-inconsistency-note.md (Daugherty 1991 reference) and gated by tests/test_dynamic_inconsistency.py. Remedies (consistent / subgame-perfect formulations, credible precommitment via a regeneration requirement, receding-horizon replanning) are follow-on research, not a v0.1.0a1 patch.

  • Full-foresight optimism: the inner LP sees the whole scenario’s fire schedule in advance, so NPV is an upper bound on the recourse value.

  • Interior price-surface provenance: flat Q4-2023 interior sawlog-basis prices; grade/peeler premia reserved for the log-grade follow-on.

  • Harvest-area discrepancy vs Patchworks: ws3 mean annual harvest is ~3.8% above Patchworks (modelling-convention difference, understood and bounded; recorded in the validation report).

  • Unsubsidized salvage: the default prompt-salvage regime has a negative margin, so salvage is suppressed (matching the fresh-salvage reference agent); subsidy/salvage-uptake scenarios are post-v0.1.0a1.

  • Replant costs: flat per-ha assumptions, not charged by default (the $45/m3 harvest cost carries the silviculture allocation); transition- dependent replanting cost is post-v0.1.0a1.