FA-65751 / Ecological population dynamics / Open access
MacArthur-Wilson island equilibrium: distance decay · case 01
Remote islands receive more immigrants than near ones.
ROOT CAUSE
The distance decay uses d0/distance, which increases with distance.
VERIFIED REPAIR
Restore the distance decay rule: `math.exp(-distance / d0)`.
Unsuccessful approach: The hyperbolic decay is a different contract from the exponential one.
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(-d0 / (distance + 1))
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 | [41.9452, 0.0419, 0.0531, 0.2] | [190.6839, 0.1907, 4.0937, 0.2] | Failed |
| regression: remote small island | [59.4988, 2.9749, 4.2348, 10.0] | [0.2476, 0.0124, 0.0124, 10.0] | Failed |
| regression: mainland adjacent | [0.0, 0.0, 0.0, 1.0] | [90.0, 0.75, 3.0, 1.0] | Failed |
| regression: reference area | [21.9011, 0.5475, 0.7539, 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 | [120.4539, 0.4818, 2.4461, 0.6] | [71.1454, 0.2846, 0.5413, 0.6] | Failed |
SHA-256 / 08f7212a7dfacea3f6174982bb45fbb04aa107d6119fea3d46fef31446f67517
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 * (1 - distance / (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.8397, 0.1908, 4.1667, 0.2] | [190.6839, 0.1907, 4.0937, 0.2] | Failed |
| regression: remote small island | [13.3333, 0.6667, 0.7143, 10.0] | [0.2476, 0.0124, 0.0124, 10.0] | Failed |
| regression: mainland adjacent | [90.0, 0.75, 3.0, 1.0] | [90.0, 0.75, 3.0, 1.0] | Passed |
| regression: reference area | [26.6667, 0.6667, 1.0, 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 | [103.4483, 0.4138, 1.3333, 0.6] | [71.1454, 0.2846, 0.5413, 0.6] | Failed |
SHA-256 / f8988f2462ceea00085310fe0c74a2cb93b48a1607903b169a529727b6422f2f
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:36.745998+00:00.
Case digest / dccfa654f0e1a0b875742b5c01d951c6812b51ffb0ed3fad6e7789b5210355ca