A supplied Allee model: a threshold exists only within the bistable regime
Supplied research · Reviewed finding · 30 October 2026
Incoprea Research · Supplied Round 3 · 30 October 2026
Evidence status: Passed conditional deterministic-model calculation after correcting the parameter regime and positive equilibrium; no population observation or extinction probability.
In the supplied mate-limitation model, starting just below a threshold leads toward zero, while starting just above it leads toward a positive equilibrium. At the demonstration parameters, the threshold is approximately 4.586 model population units and the positive equilibrium is 65.414. The source’s description “near K,” with K=100, is imprecise, and the threshold does not exist across the entire supplied mortality range.
The posted claim and the model
The Allee hypothesis connects persistence of sparse populations with mate encounter and mortality. The supplied deterministic equation is dN/dt=rN[N/(N+h)](1−N/K)−dN. The factor N/(N+h) reduces reproductive contribution at low abundance; logistic crowding limits it at high abundance.
Here r is a growth-rate scale, d is mortality, h controls the abundance scale of mate limitation, and K is the crowding parameter. The script fixes r=1, h=10 and K=100. Its d/r axis is mortality relative to the growth scale, not a directly observed mate-encounter rate. The threshold’s value also depends on h and K, so d/r alone does not specify a universal population threshold.
The demonstrated bistability
For d=0.3, positive equilibria satisfy N/(N+10)×(1−N/100)=0.3. Rearrangement gives N²−70N+300=0, with roots approximately 4.586187 and 65.413813.
The lower root is unstable: just below it, per-capita growth is negative; just above it, per-capita growth is positive. The upper root is stable. Zero is also stable for these parameters. This is the model’s bistable regime, where the initial abundance matters.
| Supplied demonstration | Value |
|---|---|
| Mortality/growth ratio d/r | 0.3 |
| Unstable threshold | 4.586187 |
| Initial state below threshold | 90% of the threshold |
| Initial state above threshold | 110% of the threshold |
| Below-start value after 300 time units | Approximately 1.06×10⁻³⁷ |
| Above-start value after 300 time units | 65.413813 |
The trajectory integration uses forward Euler with step 0.01. The near-zero result is not an observed extinction event or an extinction probability: N is continuous, and a small positive deterministic abundance is not a fractional count of a real surviving individual.
Where the threshold disappears
A positive threshold requires the reproductive term to exceed mortality somewhere. For fixed h and K, the maximum of [N/(N+h)](1−N/K) sets the relevant upper limit on d/r. At the supplied h/K=0.1, that limit is approximately 0.536675.
Below that limit there can be two positive roots; at the merger there is a double root, and above it no positive equilibrium remains. The supplied mortality grid extends from 0.05 to 0.9. Its later rows therefore contain None for the threshold. The correct statement is that the lower threshold rises within the regime where it exists, not that every mortality setting has a bistable threshold.
This correction requires no new ecological model: it follows from the same per-capita growth function used in the supplied root search. The code locates the lower root with a scan and bisection; its narrative reference to an “analytic threshold” should not imply that it used a closed-form solver.
What this calculation supports
The result is an internal demonstration that this chosen mate-limitation equation permits abundance-dependent outcomes. It does not estimate thresholds for a species, isolate a causal mortality mechanism in nature, or show that every sparse population behaves this way. Random births and deaths, sex structure, spatial distribution, migration and environmental change are absent, and no numerical time-step convergence analysis is supplied.
The primary study of competitive dynamics with an Allee effect provides established context for analysis of alternative population states. It does not validate the supplied parameter values or make this exact functional form universal.
Provenance
The supplied DeepSeek-assisted Round 3 code, result file and numeric series reproduced byte-for-byte in isolation. Codex audited the equilibrium interpretation and range of validity and edited this publication. No new population dataset, parameter sweep or experiment was performed. The original hypothesis remains unchanged through Incoprea Research. This is a conditional model check, not external peer review or a new biological discovery.
Reproduction and data availability
Python3 and NumPy. This single script generates the supplied calculation and writes display-results-regenerated.json. No input files or network are needed. Historical source narrative outputs are retained as provenance; only the reviewed fields shown here are endorsed.
Save the code as reproduce.py and run python3 reproduce.py with the stated inputs. The record below distinguishes the supplied analysis from the reviewed interpretation.
Show the reproduction code
# Portable reproduction of SUPPLIED ORIGINAL calculation. NumPy required.
# Only plotting/import helpers/output filenames were adapted. Computational
# parameters, formulas and random-number order are unchanged. Original JSON
# narrative and mislabeled dimensions are retained as provenance, not endorsed:
# consult the corrected article and audit for valid interpretation.
# Run: python3 reproduce.py (writes original-*-regenerated files beside script).
"""Test 08 -- an Allee threshold separates extinction from persistence.
Claim (Vol XXII, Theory 61 / Population / Allee effects):
"The Allee threshold is set by the ratio of mate encounter rate to mortality, so
sparse populations decline when encounter cannot keep pace with death."
Decisive test: a mate-finding growth model dN/dt = r N (N/(N+h)) (1 - N/K) - d N
has a bistable threshold; integrate from above and below it and show the threshold
grows with the mortality/encounter ratio.
"""
import os
import sys
import numpy as np
import json
def write_results(path,d):
with open(path,"w") as f: json.dump(d,f,indent=2,allow_nan=False)
def write_series(path,columns,rows):
with open(path,"w") as f:
f.write(",".join(columns)+"\n")
for row in rows: f.write(",".join(str(x) for x in row)+"\n")
HERE = os.path.dirname(__file__)
def dndt(N, r, h, K, d):
return r * N * (N / (N + h)) * (1.0 - N / K) - d * N
def integrate(N0, r, h, K, d, T=300.0, dt=0.01):
N = N0
for _ in range(int(T / dt)):
N = N + dt * dndt(N, r, h, K, d)
N = max(N, 0.0)
return N
r, h, K = 1.0, 10.0, 100.0
def f(N, d):
"""Sign-defining factor: dN/dt = N * f(N)."""
return r * N / (N + h) * (1.0 - N / K) - d
def allee_threshold(d):
"""Smallest positive root of f(N)=0 (the unstable Allee threshold)."""
scan = np.linspace(1e-6, K, 20001)
vals = f(scan, d)
roots = []
for i in range(len(scan) - 1):
if vals[i] <= 0 < vals[i + 1]: # negative -> positive crossing
a, b = scan[i], scan[i + 1]
for _ in range(60):
m = (a + b) / 2
if f(m, d) <= 0:
a = m
else:
b = m
roots.append((a + b) / 2)
return roots[0] if roots else None
ds = np.linspace(0.05, 0.9, 40)
thresholds = np.array([allee_threshold(d) for d in ds])
# demonstrate bistability at d=0.3: start just below vs just above threshold
d_demo = 0.3
th = allee_threshold(d_demo)
below = integrate(th * 0.9, r, h, K, d_demo)
above = integrate(th * 1.1, r, h, K, d_demo)
rows = list(zip(ds, thresholds, ds / r))
write_series(os.path.join(HERE, "original-series-regenerated.csv"), ["mortality", "threshold", "mortality_over_encounter"], rows)
results = {
"id": "08",
"slug": "allee-threshold",
"title": "An Allee threshold separates extinction from persistence",
"volume": "XXII",
"entry": "Theory 61 / Population / Allee effects",
"claim": "The Allee threshold is set by the ratio of mate encounter rate to mortality, so sparse populations decline when encounter cannot keep pace with death.",
"verdict": "supported",
"verdict_reason": f"The model has a bistable threshold that rises monotonically with mortality/encounter; at d/r = {d_demo/r:.2f} the threshold is {th:.1f}, and trajectories from below it go extinct while those above it persist near K.",
"headline": "A mate-finding population persists or dies out on either side of a threshold set by mortality/encounter.",
"design": "A mate-finding growth model with carrying capacity was integrated from both sides of its analytic threshold, and the threshold was tracked against the mortality:encounter ratio.",
"data_sources": [{"name": "model only (Allee/mate-finding ODE)", "url": "n/a", "accessed": "2026-10-30", "n": 40}],
"n_obs": 40,
"key_stats": {
"threshold_at_demo": {"value": float(th), "ci_low": float(th), "ci_high": float(th), "unit": "individuals"},
"fate_below": {"value": float(below), "ci_low": float(below), "ci_high": float(below), "unit": "individuals"},
"fate_above": {"value": float(above), "ci_low": float(above), "ci_high": float(above), "unit": "individuals"},
},
"predictions": [
{"label": "P1", "text": "threshold set by encounter/mortality ratio", "result": "supported",
"evidence": f"threshold rises monotonically with d/r"},
{"label": "P2", "text": "sparse populations decline when encounter < death", "result": "supported",
"evidence": f"below-threshold start goes to {below:.2f}; above-threshold start to {above:.1f}"}
],
"limitations": [
"The model is deterministic and omits demographic stochasticity, which makes extinction at low N even more likely.",
"The specific functional form of mate finding is a simplification.",
"This is a population model, not an empirical population dataset.",
],
"provenance_note": "Mate-finding Allee growth model (Courchamp et al. convention).",
}
write_results(os.path.join(HERE, "original-results-regenerated.json"), results)
print(f"[08] threshold at d/r={d_demo/r:.2f} = {th:.1f}; below->{below:.2f}, above->{above:.1f}")
# Emit only the reviewed public numeric fields; historical output remains provenance.
from pathlib import Path
import json,csv
R=Path(__file__).resolve().parent
d=json.loads((R/'original-results-regenerated.json').read_text())
rows=list(csv.DictReader((R/'original-series-regenerated.csv').open()))
v=lambda key:d['key_stats'][key]['value']
defined=[r for r in rows if r['threshold']!='None'];undefined=[r for r in rows if r['threshold']=='None']
out={'id':'allee-threshold','classification':'Conditional deterministic mate-limitation ODE; no measured extinction probability',
'assumptions':{'r':1.0,'h':10.0,'K':100.0,'demonstration_mortality_d':0.3,'integration_time':300.0,'Euler_dt':0.01,'population_unit':'continuous model abundance'},
'equation':'dN/dt = r*N*(N/(N+h))*(1-N/K)-d*N',
'demonstration_lower_threshold':v('threshold_at_demo'),'below_start_value_after_time300':v('fate_below'),'above_start_value_after_time300':v('fate_above'),
'mortality_grid':{'points':len(rows),'defined_lower_thresholds':len(defined),'no_lower_threshold':len(undefined),'minimum':float(rows[0]['mortality']),'maximum':float(rows[-1]['mortality'])},
'limits':['Threshold exists only in bistable regime, not all mortality settings','d/r is mortality/growth scale with h,K fixed; not an independently measured encounter ratio','Positive demonstration attractor is approximately65.414, not K100','Approach to zero is not a discrete extinction observation','No demographic/spatial stochasticity or statistical confidence interval']}
(R/"display-results-regenerated.json").write_text(json.dumps(out,indent=2)+"\n")
print(json.dumps(out,indent=2))
Show the reviewed result record
{
"id": "allee-threshold",
"classification": "Conditional deterministic mate-limitation ODE; no measured extinction probability",
"assumptions": {
"r": 1.0,
"h": 10.0,
"K": 100.0,
"demonstration_mortality_d": 0.3,
"integration_time": 300.0,
"Euler_dt": 0.01,
"population_unit": "continuous model abundance"
},
"equation": "dN/dt = r*N*(N/(N+h))*(1-N/K)-d*N",
"demonstration_lower_threshold": 4.586187348508901,
"below_start_value_after_time300": 1.0642579368280099e-37,
"above_start_value_after_time300": 65.41381265148976,
"mortality_grid": {
"points": 40,
"defined_lower_thresholds": 23,
"no_lower_threshold": 17,
"minimum": 0.05,
"maximum": 0.9
},
"limits": [
"Threshold exists only in bistable regime, not all mortality settings",
"d/r is mortality/growth scale with h,K fixed; not an independently measured encounter ratio",
"Positive demonstration attractor is approximately65.414, not K100",
"Approach to zero is not a discrete extinction observation",
"No demographic/spatial stochasticity or statistical confidence interval"
]
}
Show provenance, dependencies and review boundaries
{
"source_bundle": "Incoprea Hypothesis Tests III - 2026-10-30",
"classification": "Reproduced exact mathematics or deterministic/synthetic model; no physical or biological experiment",
"review_scope": "Reproduction and consistency review of the supplied study; no new independently designed study",
"reproduction_requirements": "Python3 and NumPy. This single script generates the supplied calculation and writes display-results-regenerated.json.",
"data_availability": "No input files or network are needed. Historical source narrative outputs are retained as provenance; only the reviewed fields shown here are endorsed.",
"source_hypothesis_url": "https://incoprea.com/research-library/original-theories-vol22-20261030/theories/allee-encounter-mortality.html",
"published_code_sha256": "e4bc8252120de6050b8b77e3d7e840172ac98c35994f89a43ec3fe97502bee75",
"published_result_sha256": "83f0162394570a3996e6b241713005a0f512d3854e1c2298f319d00b9d50aa0a",
"peer_review": "Internal computational review; not external peer review",
"supplied_review_record": {
"id": "08-allee-threshold",
"result_byte_identical": true,
"series_byte_identical": true,
"source_code_sha256": "abac1e1f266b6e5dfc7a975ac8dd24c21e3a6fc664645ee88f5619530bdaaeb0",
"results_sha256": "acdd4d480edd3681b0412a2d9384545586ece591c1f913c99e089851ede7ba84",
"series_sha256": "d79e2e618211832a458d68e98ffec15e01333cfd7ad23536971f2d02b21a444e"
}
}Original supplied analysis: contributing research agent identified in the source bundle. Consistency review, necessary corrections and publication: Codex. Working finding, not externally peer reviewed. Incoprea Research · Original posted question or hypothesis.
Comments
Post a Comment