FA-65761 / Ecological population dynamics / Open access
MacArthur-Wilson island equilibrium: equilibrium richness · case 01
Predicted richness can exceed the mainland pool.
ROOT CAUSE
The equilibrium omits I0 from the denominator.
VERIFIED REPAIR
Restore the equilibrium richness rule: `s_eq = i0 * pool / (i0 + e0)`.
Unsuccessful approach: Using E0 in the numerator predicts richness falling with immigration.
Case contract
I0 = imax*exp(-distance/d0); E0 = emax*a0/area; S* = I0*P/(I0+E0); turnover = I0*E0/(I0+E0); return [S*, turnover, I0, E0] rounded 4; None for non-positive parameters or negative distance.
Why this case matters
Population projections set harvest quotas, conservation status and pest-control timing; a wrong update order, boundary or rate conversion silently changes management advice.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(pool, imax, emax, distance, d0, area, a0):
if min(pool, imax, emax, d0, a0, area) <= 0 or distance < 0:
return None
i0 = imax * math.exp(-distance / d0)
e0 = emax * a0 / area
s_eq = i0 * pool / e0
turnover = i0 * e0 / (i0 + e0)
return [round(s_eq, 4), round(turnover, 4), round(i0, 4), round(e0, 4)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: near large island', (200, 5.0, 2.0, 10, 50, 100, 10), [190.6839, 0.1907, 4.0937, 0.2]),
('regression: remote small island', (200, 5.0, 2.0, 300, 50, 2, 10), [0.2476, 0.0124, 0.0124, 10.0]),
('regression: mainland adjacent', (120, 3.0, 1.0, 0, 40, 10, 10), [90.0, 0.75, 3.0, 1.0]),
('regression: reference area', (80, 2.0, 2.0, 40, 40, 10, 10), [21.5153, 0.5379, 0.7358, 2.0]),
('control: invalid area', (80, 2.0, 2.0, 40, 40, 0, 10), None),
('control: negative distance', (80, 2.0, 2.0, -5, 40, 10, 10), None),
('regression: archipelago mid', (150, 4.0, 3.0, 60, 30, 25, 5), [71.1454, 0.2846, 0.5413, 0.6])],
[('regression: near large island', (200, 5.0, 2.0, 10, 50, 100, 10), [190.6839, 0.1907, 4.0937, 0.2]),
('regression: remote small island', (200, 5.0, 2.0, 300, 50, 2, 10), [0.2476, 0.0124, 0.0124, 10.0]),
('regression: mainland adjacent', (120, 3.0, 1.0, 0, 40, 10, 10), [90.0, 0.75, 3.0, 1.0]),
('regression: reference area', (80, 2.0, 2.0, 40, 40, 10, 10), [21.5153, 0.5379, 0.7358, 2.0]),
('control: invalid area', (80, 2.0, 2.0, 40, 40, 0, 10), None),
('control: negative distance', (80, 2.0, 2.0, -5, 40, 10, 10), None),
('regression: archipelago mid', (150, 4.0, 3.0, 60, 30, 25, 5), [71.1454, 0.2846, 0.5413, 0.6])],
[('regression: near large island', (200, 5.0, 2.0, 10, 50, 100, 10), [190.6839, 0.1907, 4.0937, 0.2]),
('regression: remote small island', (200, 5.0, 2.0, 300, 50, 2, 10), [0.2476, 0.0124, 0.0124, 10.0]),
('regression: mainland adjacent', (120, 3.0, 1.0, 0, 40, 10, 10), [90.0, 0.75, 3.0, 1.0]),
('regression: reference area', (80, 2.0, 2.0, 40, 40, 10, 10), [21.5153, 0.5379, 0.7358, 2.0]),
('control: invalid area', (80, 2.0, 2.0, 40, 40, 0, 10), None),
('control: negative distance', (80, 2.0, 2.0, -5, 40, 10, 10), None),
('regression: archipelago mid', (150, 4.0, 3.0, 60, 30, 25, 5), [71.1454, 0.2846, 0.5413, 0.6])],
[('regression: near large island', (200, 5.0, 2.0, 10, 50, 100, 10), [190.6839, 0.1907, 4.0937, 0.2]),
('regression: remote small island', (200, 5.0, 2.0, 300, 50, 2, 10), [0.2476, 0.0124, 0.0124, 10.0]),
('regression: mainland adjacent', (120, 3.0, 1.0, 0, 40, 10, 10), [90.0, 0.75, 3.0, 1.0]),
('regression: reference area', (80, 2.0, 2.0, 40, 40, 10, 10), [21.5153, 0.5379, 0.7358, 2.0]),
('control: invalid area', (80, 2.0, 2.0, 40, 40, 0, 10), None),
('control: negative distance', (80, 2.0, 2.0, -5, 40, 10, 10), None),
('regression: archipelago mid', (150, 4.0, 3.0, 60, 30, 25, 5), [71.1454, 0.2846, 0.5413, 0.6])],
[('regression: near large island', (200, 5.0, 2.0, 10, 50, 100, 10), [190.6839, 0.1907, 4.0937, 0.2]),
('regression: remote small island', (200, 5.0, 2.0, 300, 50, 2, 10), [0.2476, 0.0124, 0.0124, 10.0]),
('regression: mainland adjacent', (120, 3.0, 1.0, 0, 40, 10, 10), [90.0, 0.75, 3.0, 1.0]),
('regression: reference area', (80, 2.0, 2.0, 40, 40, 10, 10), [21.5153, 0.5379, 0.7358, 2.0]),
('control: invalid area', (80, 2.0, 2.0, 40, 40, 0, 10), None),
('control: negative distance', (80, 2.0, 2.0, -5, 40, 10, 10), None),
('regression: archipelago mid', (150, 4.0, 3.0, 60, 30, 25, 5), [71.1454, 0.2846, 0.5413, 0.6])]]
for label, args, expected in fixtures[N - 1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: near large island | [4093.6538, 0.1907, 4.0937, 0.2] | [190.6839, 0.1907, 4.0937, 0.2] | Failed |
| regression: remote small island | [0.2479, 0.0124, 0.0124, 10.0] | [0.2476, 0.0124, 0.0124, 10.0] | Failed |
| regression: mainland adjacent | [360.0, 0.75, 3.0, 1.0] | [90.0, 0.75, 3.0, 1.0] | Failed |
| regression: reference area | [29.4304, 0.5379, 0.7358, 2.0] | [21.5153, 0.5379, 0.7358, 2.0] | Failed |
| control: invalid area | None | None | Passed |
| control: negative distance | None | None | Passed |
| regression: archipelago mid | [135.3353, 0.2846, 0.5413, 0.6] | [71.1454, 0.2846, 0.5413, 0.6] | Failed |
SHA-256 / defda69167dcc6e358bf589eb244620fcd4caf09a5ce8c316df1cfbc52e5c4f5
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(pool, imax, emax, distance, d0, area, a0):
if min(pool, imax, emax, d0, a0, area) <= 0 or distance < 0:
return None
i0 = imax * math.exp(-distance / d0)
e0 = emax * a0 / area
s_eq = pool * e0 / (i0 + e0)
turnover = i0 * e0 / (i0 + e0)
return [round(s_eq, 4), round(turnover, 4), round(i0, 4), round(e0, 4)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: near large island', (200, 5.0, 2.0, 10, 50, 100, 10), [190.6839, 0.1907, 4.0937, 0.2]),
('regression: remote small island', (200, 5.0, 2.0, 300, 50, 2, 10), [0.2476, 0.0124, 0.0124, 10.0]),
('regression: mainland adjacent', (120, 3.0, 1.0, 0, 40, 10, 10), [90.0, 0.75, 3.0, 1.0]),
('regression: reference area', (80, 2.0, 2.0, 40, 40, 10, 10), [21.5153, 0.5379, 0.7358, 2.0]),
('control: invalid area', (80, 2.0, 2.0, 40, 40, 0, 10), None),
('control: negative distance', (80, 2.0, 2.0, -5, 40, 10, 10), None),
('regression: archipelago mid', (150, 4.0, 3.0, 60, 30, 25, 5), [71.1454, 0.2846, 0.5413, 0.6])],
[('regression: near large island', (200, 5.0, 2.0, 10, 50, 100, 10), [190.6839, 0.1907, 4.0937, 0.2]),
('regression: remote small island', (200, 5.0, 2.0, 300, 50, 2, 10), [0.2476, 0.0124, 0.0124, 10.0]),
('regression: mainland adjacent', (120, 3.0, 1.0, 0, 40, 10, 10), [90.0, 0.75, 3.0, 1.0]),
('regression: reference area', (80, 2.0, 2.0, 40, 40, 10, 10), [21.5153, 0.5379, 0.7358, 2.0]),
('control: invalid area', (80, 2.0, 2.0, 40, 40, 0, 10), None),
('control: negative distance', (80, 2.0, 2.0, -5, 40, 10, 10), None),
('regression: archipelago mid', (150, 4.0, 3.0, 60, 30, 25, 5), [71.1454, 0.2846, 0.5413, 0.6])],
[('regression: near large island', (200, 5.0, 2.0, 10, 50, 100, 10), [190.6839, 0.1907, 4.0937, 0.2]),
('regression: remote small island', (200, 5.0, 2.0, 300, 50, 2, 10), [0.2476, 0.0124, 0.0124, 10.0]),
('regression: mainland adjacent', (120, 3.0, 1.0, 0, 40, 10, 10), [90.0, 0.75, 3.0, 1.0]),
('regression: reference area', (80, 2.0, 2.0, 40, 40, 10, 10), [21.5153, 0.5379, 0.7358, 2.0]),
('control: invalid area', (80, 2.0, 2.0, 40, 40, 0, 10), None),
('control: negative distance', (80, 2.0, 2.0, -5, 40, 10, 10), None),
('regression: archipelago mid', (150, 4.0, 3.0, 60, 30, 25, 5), [71.1454, 0.2846, 0.5413, 0.6])],
[('regression: near large island', (200, 5.0, 2.0, 10, 50, 100, 10), [190.6839, 0.1907, 4.0937, 0.2]),
('regression: remote small island', (200, 5.0, 2.0, 300, 50, 2, 10), [0.2476, 0.0124, 0.0124, 10.0]),
('regression: mainland adjacent', (120, 3.0, 1.0, 0, 40, 10, 10), [90.0, 0.75, 3.0, 1.0]),
('regression: reference area', (80, 2.0, 2.0, 40, 40, 10, 10), [21.5153, 0.5379, 0.7358, 2.0]),
('control: invalid area', (80, 2.0, 2.0, 40, 40, 0, 10), None),
('control: negative distance', (80, 2.0, 2.0, -5, 40, 10, 10), None),
('regression: archipelago mid', (150, 4.0, 3.0, 60, 30, 25, 5), [71.1454, 0.2846, 0.5413, 0.6])],
[('regression: near large island', (200, 5.0, 2.0, 10, 50, 100, 10), [190.6839, 0.1907, 4.0937, 0.2]),
('regression: remote small island', (200, 5.0, 2.0, 300, 50, 2, 10), [0.2476, 0.0124, 0.0124, 10.0]),
('regression: mainland adjacent', (120, 3.0, 1.0, 0, 40, 10, 10), [90.0, 0.75, 3.0, 1.0]),
('regression: reference area', (80, 2.0, 2.0, 40, 40, 10, 10), [21.5153, 0.5379, 0.7358, 2.0]),
('control: invalid area', (80, 2.0, 2.0, 40, 40, 0, 10), None),
('control: negative distance', (80, 2.0, 2.0, -5, 40, 10, 10), None),
('regression: archipelago mid', (150, 4.0, 3.0, 60, 30, 25, 5), [71.1454, 0.2846, 0.5413, 0.6])]]
for label, args, expected in fixtures[N - 1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: near large island | [9.3161, 0.1907, 4.0937, 0.2] | [190.6839, 0.1907, 4.0937, 0.2] | Failed |
| regression: remote small island | [199.7524, 0.0124, 0.0124, 10.0] | [0.2476, 0.0124, 0.0124, 10.0] | Failed |
| regression: mainland adjacent | [30.0, 0.75, 3.0, 1.0] | [90.0, 0.75, 3.0, 1.0] | Failed |
| regression: reference area | [58.4847, 0.5379, 0.7358, 2.0] | [21.5153, 0.5379, 0.7358, 2.0] | Failed |
| control: invalid area | None | None | Passed |
| control: negative distance | None | None | Passed |
| regression: archipelago mid | [78.8546, 0.2846, 0.5413, 0.6] | [71.1454, 0.2846, 0.5413, 0.6] | Failed |
SHA-256 / 5ff33e8e2017ce51f439eb70d634b09cad20bc3e67c0554e409ef83d87bfe4c2
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(pool, imax, emax, distance, d0, area, a0):
if min(pool, imax, emax, d0, a0, area) <= 0 or distance < 0:
return None
i0 = imax * math.exp(-distance / d0)
e0 = emax * a0 / area
s_eq = i0 * pool / (i0 + e0)
turnover = i0 * e0 / (i0 + e0)
return [round(s_eq, 4), round(turnover, 4), round(i0, 4), round(e0, 4)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: near large island', (200, 5.0, 2.0, 10, 50, 100, 10), [190.6839, 0.1907, 4.0937, 0.2]),
('regression: remote small island', (200, 5.0, 2.0, 300, 50, 2, 10), [0.2476, 0.0124, 0.0124, 10.0]),
('regression: mainland adjacent', (120, 3.0, 1.0, 0, 40, 10, 10), [90.0, 0.75, 3.0, 1.0]),
('regression: reference area', (80, 2.0, 2.0, 40, 40, 10, 10), [21.5153, 0.5379, 0.7358, 2.0]),
('control: invalid area', (80, 2.0, 2.0, 40, 40, 0, 10), None),
('control: negative distance', (80, 2.0, 2.0, -5, 40, 10, 10), None),
('regression: archipelago mid', (150, 4.0, 3.0, 60, 30, 25, 5), [71.1454, 0.2846, 0.5413, 0.6])],
[('regression: near large island', (200, 5.0, 2.0, 10, 50, 100, 10), [190.6839, 0.1907, 4.0937, 0.2]),
('regression: remote small island', (200, 5.0, 2.0, 300, 50, 2, 10), [0.2476, 0.0124, 0.0124, 10.0]),
('regression: mainland adjacent', (120, 3.0, 1.0, 0, 40, 10, 10), [90.0, 0.75, 3.0, 1.0]),
('regression: reference area', (80, 2.0, 2.0, 40, 40, 10, 10), [21.5153, 0.5379, 0.7358, 2.0]),
('control: invalid area', (80, 2.0, 2.0, 40, 40, 0, 10), None),
('control: negative distance', (80, 2.0, 2.0, -5, 40, 10, 10), None),
('regression: archipelago mid', (150, 4.0, 3.0, 60, 30, 25, 5), [71.1454, 0.2846, 0.5413, 0.6])],
[('regression: near large island', (200, 5.0, 2.0, 10, 50, 100, 10), [190.6839, 0.1907, 4.0937, 0.2]),
('regression: remote small island', (200, 5.0, 2.0, 300, 50, 2, 10), [0.2476, 0.0124, 0.0124, 10.0]),
('regression: mainland adjacent', (120, 3.0, 1.0, 0, 40, 10, 10), [90.0, 0.75, 3.0, 1.0]),
('regression: reference area', (80, 2.0, 2.0, 40, 40, 10, 10), [21.5153, 0.5379, 0.7358, 2.0]),
('control: invalid area', (80, 2.0, 2.0, 40, 40, 0, 10), None),
('control: negative distance', (80, 2.0, 2.0, -5, 40, 10, 10), None),
('regression: archipelago mid', (150, 4.0, 3.0, 60, 30, 25, 5), [71.1454, 0.2846, 0.5413, 0.6])],
[('regression: near large island', (200, 5.0, 2.0, 10, 50, 100, 10), [190.6839, 0.1907, 4.0937, 0.2]),
('regression: remote small island', (200, 5.0, 2.0, 300, 50, 2, 10), [0.2476, 0.0124, 0.0124, 10.0]),
('regression: mainland adjacent', (120, 3.0, 1.0, 0, 40, 10, 10), [90.0, 0.75, 3.0, 1.0]),
('regression: reference area', (80, 2.0, 2.0, 40, 40, 10, 10), [21.5153, 0.5379, 0.7358, 2.0]),
('control: invalid area', (80, 2.0, 2.0, 40, 40, 0, 10), None),
('control: negative distance', (80, 2.0, 2.0, -5, 40, 10, 10), None),
('regression: archipelago mid', (150, 4.0, 3.0, 60, 30, 25, 5), [71.1454, 0.2846, 0.5413, 0.6])],
[('regression: near large island', (200, 5.0, 2.0, 10, 50, 100, 10), [190.6839, 0.1907, 4.0937, 0.2]),
('regression: remote small island', (200, 5.0, 2.0, 300, 50, 2, 10), [0.2476, 0.0124, 0.0124, 10.0]),
('regression: mainland adjacent', (120, 3.0, 1.0, 0, 40, 10, 10), [90.0, 0.75, 3.0, 1.0]),
('regression: reference area', (80, 2.0, 2.0, 40, 40, 10, 10), [21.5153, 0.5379, 0.7358, 2.0]),
('control: invalid area', (80, 2.0, 2.0, 40, 40, 0, 10), None),
('control: negative distance', (80, 2.0, 2.0, -5, 40, 10, 10), None),
('regression: archipelago mid', (150, 4.0, 3.0, 60, 30, 25, 5), [71.1454, 0.2846, 0.5413, 0.6])]]
for label, args, expected in fixtures[N - 1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: near large island | [190.6839, 0.1907, 4.0937, 0.2] | [190.6839, 0.1907, 4.0937, 0.2] | Passed |
| regression: remote small island | [0.2476, 0.0124, 0.0124, 10.0] | [0.2476, 0.0124, 0.0124, 10.0] | Passed |
| regression: mainland adjacent | [90.0, 0.75, 3.0, 1.0] | [90.0, 0.75, 3.0, 1.0] | Passed |
| regression: reference area | [21.5153, 0.5379, 0.7358, 2.0] | [21.5153, 0.5379, 0.7358, 2.0] | Passed |
| control: invalid area | None | None | Passed |
| control: negative distance | None | None | Passed |
| regression: archipelago mid | [71.1454, 0.2846, 0.5413, 0.6] | [71.1454, 0.2846, 0.5413, 0.6] | Passed |
SHA-256 / 498500df6e0257cc451bc30a20ef0979f0b44463a7ebc02d35779f550cdec33c
Verification & scope
Deterministic bounded teaching model with a stipulated contract; not a validated scientific or public-health modelling library. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.
Observations recorded using Python 3.12.14 at 2026-09-29T14:47:37.102668+00:00.
Case digest / b5f685ebfe137621d513b1daaa4d5a9ad28a888264f036ca6905f44627738916