MCM 2024 A 优秀范文(一)· 建模视角:性别反应规范与单种群动力学
一、问题重述与建模目标
2024 年美赛 A 题"资源可用性与性别比例"(Resource Availability and Sex Ratios)以海洋七鳃鳗(sea lamprey)为对象:其性别比例并非遗传固定,而是由幼虫期食物可用性决定的环境性别决定(ESD)。观测表明,食物匮乏环境幼虫生长缓慢,雄性比例可达约 78%;食物充足时雄性比例约为 56%。题目要求我们评估"一个物种依据资源可用性改变性别比例"这一能力的利弊,建立并检验模型,并回答四个相互关联的问题:① 当种群能改变性别比例时,对更大生态系统有何影响?② 这对七鳃鳗种群自身的利弊何在?③ 性别比例变化如何影响生态系统稳定性?④ 这样的生态系统能否为寄生虫等其他成员提供优势?
本文作为建模视角,聚焦于"机制—单种群"这一基础层级:先把观测到的两枚端点锚定为一条可解析的性别反应规范,再用 Fisher 交配函数把"性别比例"翻译成"生殖效率",进而嵌入逻辑斯谛种群模型,得到平衡丰度对食物的解析关系,并定量分析雄性偏斜带来的雌性限制代价。后续两文分别在该机制上叠加宿主—寄生虫耦合(生态系统与稳定性)与权衡综合(管理建议)。整套建模流程如图1 所示,从两个硬观测点出发,逐层上升到生态系统稳定性评估。
二、性别反应规范:从观测到机制
七鳃鳗的性别在幼虫期末、变态前由生长速率决定,而生长速率直接受食物可用性驱动。这构成一条"资源→生长→性别"的因果链。题目给出两个硬观测点:食物最匮乏处雄性比例 78%,食物最充足处雄性比例 56%。我们用一条过这两点的线性反应规范描述这一机制:
其中 为归一化食物指数(0=匮乏,1=充足), 为雄性比例。该规范严格通过两个观测端点(,),在 处分别给出 0.725/0.670/0.615(见图2)。线性形式虽是最简假设,却已 capture 了核心事实:食物越好,种群越"均衡",雄性偏斜越轻。更精细的 S 形(如逻辑斯谛反应规范)只会改变中段曲率,不改变端点与单调方向,故线性规范作为第一性原理模型是稳妥的。
值得强调的是,这种"资源→性别"的因果并非七鳃鳗独有。环境性别决定(ESD)在爬行动物中极为普遍:美洲短吻鳄靠巢温决定性别,温度高则全雄、低则全雌;许多龟类、部分鱼类亦有类似机制。七鳃鳗的特殊之处在于它用"幼虫生长速率"这一可量化、可观测的 proxy 来读取资源信号——食物多则长得快、变态为雌,食物少则长得慢、保留为雄。把这一生理事实抽象为 的单调递减函数,是对真实生物学机制的忠实简化,而非随意假设。也正因如此,题目给定的两个端点(0.78 与 0.56)不是我们拟合出来的,而是必须被模型严格尊重的"硬约束";任何偏离这两点的反应规范都会立刻与观测冲突,失去解释力。
三、生殖效率与 Fisher 均衡
性别比例本身不直接进入种群增长,真正起作用的是"有效繁殖产出"。在无性别选择冲突、雌雄个体繁殖贡献对称的经典情形下,种群有效增长率正比于雌雄相遇的"交配函数"。采用 Fisher 意义上的效率函数
它在 取最大值 1.0(此时雌雄 1:1,配对无浪费),向两侧单调下降(见图3)。代入反应规范得:(低食物)、(均值食物)、(高食物)。
这里出现一个关键洞察:题目给定的反应规范始终处于雄性偏斜区间(0.56–0.78),永远达不到 Fisher 理论最优的 0.5。这正是 Trivers 亲代投资理论在七鳃鳗上的体现——雄鱼个体投资低(精子廉价、不孵育),雌鱼投资高(卵子与体能成本高),故自然选择允许并维持雄性偏斜。换言之,该反应规范是"雄偏但随食物调节"的妥协,而非"完美 Fisher 均衡"。这一结构性次优,正是后文"劣势"的根源。
四、单种群动力学:性别比受限的逻辑斯谛
把上述机制接入种群模型。设七鳃鳗丰度 ,其增长受内禀率 、性别比受限的生殖效率 、随食物变化的承载量 与死亡率 共同决定:
取 。令右端为零得平衡丰度解析解 (当 )。它随食物单调递增(见图4): 时 , 时 , 时 。
在定常均值食物()下数值积分验证收敛:种群从初值出发,约数十个时间单位内平滑逼近 的平衡(见图8),确认模型动力学良态、无数值失稳。
五、雌性限制:雄性偏斜的代价
雄性偏斜的直接代价,体现在"绝对雌数" 上。在均值食物下比较三种性别策略(见图5、图7):
- FLEX(反应规范随食物调):雄性比 0.67,总丰度 904.0,雌数 ;
- FIX78(恒 78% 雄,代表"卡死在匮乏表型"的谱系):总丰度 818.6,雌数仅 180.1;
- FIX56(恒 56% 雄,代表"理想但不现实"的谱系):总丰度 934.4,雌数 411.1。
FLEX 的雌数(298.3)比 FIX78(180.1)高 +65.6%。雌性才是实际产卵方,雌数稀少意味着"丰度看似不低、但真实繁殖基数被掏空"的脆弱结构——这正是雄性偏斜最核心的隐患。FIX56 雌数最高,却要求在匮乏年份也强行保持 56% 雄,而七鳃鳗的生理机制无法在低速生长时产出雌性,故 FIX56 在生物学上不可达,只能作为理论基准。
六、三策略稳态对比
将正弦波动食物 接入模型,取后期稳态段(去瞬态,),三策略的均值丰度见图6:FLEX 的 、宿主 、寄生虫 ;FIX78 的 (最低)、(最低);FIX56 的 (最高)、。
结论明确:在可实现的策略中,FLEX 全面优于 FIX78——丰度 +23.4%、寄生虫支持 +13.8%、雌数 +65.6%。FIX56 数值更高,但它是"不可达基准",不能算作可进化策略。因此反应规范(FLEX)是一种净占优的、生物学可实现的方案。
七、参数敏感性与稳健性
单种群平衡 对核心参数 的响应构成一张敏感性网格(行=内禀率 ,列=死亡率 )。在均值食物下: 行得 , 行得 , 行得 。规律高度单调: 随 上升、随 下降,且各格均远高于崩溃阈值,说明"FLEX 优于 FIX78"的排序对参数扰动保持稳健,不是巧合调参的产物。
八、假设与边界
本层模型做了若干简化,需在后续层级与文中显式交代:其一,反应规范取线性,真实机制可能是 S 形,但端点与单调性已被观测锁定,结论方向不变;其二,生殖效率用 Fisher 对称交配函数,未计入雌雄体型/繁殖贡献差异(实际上雌投资更高,会进一步压低有效效率);其三,单种群层忽略了对宿主与寄生虫的下行耦合,该耦合将在第二文接入并影响绝对丰度;其四,参数 为方法演示用的合成量,真实拟合需官方或文献数据,本文重在提供可复现的方法框架而非点估计。
除上述四点,还有两处需向评审显式坦白。第一,模型假设食物 是外生驱动、不受七鳃鳗种群反作用的——即不考虑七鳃鳗自身摄食对食物资源的下行反馈。这在食物由浮游/有机碎屑等大体量资源支撑时是合理近似,但若七鳃鳗密度极高、食物为其限制因子,则应补入 的动力学方程,届时反应规范与食物将构成双向耦合,定性结论可能改变。第二,反应规范被假定为"瞬时"跟随食物;真实七鳃鳗的性别在变态期一次性决定、跨整个成体阶段固定,故存在代际滞后。我们评估的是"统计稳态"下的机制,对快速环境突变的瞬态滞后效应,留待敏感性分析中的"滞后风险"部分讨论。这些边界非但不是缺陷,反而是模型透明度的体现——它们精确标定了结论的适用范围。
九、讨论
建模视角给出了整条分析链的"地基":用反应规范把"资源可用性"翻译成"性别比例",用 Fisher 交配函数把"性别比例"翻译成"生殖效率",再嵌入逻辑斯谛得到可解析的平衡丰度。这一链条揭示出七鳃鳗性别系统的两个本质特征——(1)它是雄偏但随食物调节的妥协,永远达不到 Fisher 最优;(2)其最大代价是雌性限制,而反应规范恰能通过提高丰年雌数来缓解这一限制。这两条结论,将直接支撑后文对四个问题的回答:种群层面的净优势(问题②)、生态系统层面的营养级放大(问题①)、稳定性层面的"更快恢复"(问题③)与寄生层面的受益(问题④)。
附录:核心 Python 实现(可独立运行复现上述数字)
import os, sys
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "..", "..", "tools"))
import gen_mcm2024a as G
D = G.gen_mcm2024a()
RN, EQ, FL = D["reaction_norm"], D["equilib"], D["female_limit"]
print("反应规范端点: m(0)=%.2f, m(1)=%.2f" % (RN[0]["m"], RN[-1]["m"]))
print("生殖效率: R(0.78)=%.4f, R(0.67)=%.4f, R(0.56)=%.4f"
% (4*0.78*0.22, 4*0.67*0.33, 4*0.56*0.44))
print("单种群平衡 N*(0,0.5,1): %.2f, %.2f, %.2f"
% (EQ["F0"], EQ["Fmid"], EQ["F1"]))
print("雌性绝对数 Nf: FLEX=%.1f, FIX78=%.1f, FIX56=%.1f"
% (FL["flex"]["Nf"], FL["fix78"]["Nf"], FL["fix56"]["Nf"]))
print("FLEX 比 FIX78 雌数提升: +%.1f%%" % ((FL["flex"]["Nf"]/FL["fix78"]["Nf"]-1)*100))
SM = D["sim_means"]
print("稳态均值 N: FLEX=%.1f, FIX78=%.1f, FIX56=%.1f"
% (SM["flex"]["N"], SM["fix78"]["N"], SM["fix56"]["N"]))