6.5 演化博弈:种群动态与演化稳定策略


6.5 演化博弈:种群动态与演化稳定策略

摘要:演化博弈去掉理性假设——策略不是选择而是天赋,好策略靠更高的适应度繁殖胜出。本节讲复制者动态方程、演化稳定策略(ESS)的侵入测试、鹰鸽博弈的种群比例平衡,并用代码模拟策略频率的世代演化与突变入侵,最后把这条路线接回多智能体学习。

池塘里的甲虫不会计算纳什均衡,但它们争夺地盘的行为恰好落在均衡附近;会馆前几课的"理性镇民"假设在这里被整个扔掉。演化博弈论源自生物学的观察:把策略当作天生的表型、把收益当作适应度(繁殖成功率),种群比例的变化本身就构成一种"求解"——不需要任何个体会算计,差的策略繁殖得慢,就会被稀释出局。这一课是会馆的收官,也是第 7 章学堂的暗门:多智能体学习里的策略演化,数学骨架跟这里一模一样。

复制者动态:种群怎么"解"博弈

设种群里有两类策略,鹰派(死斗到底)与鸽派(虚张声势、遇硬就退)。争夺价值为二的资源,斗殴成本为四:鹰对鹰两败俱伤各得负一;鹰对鸽,鹰白得二、鸽空手;鸽对鸽,和平分食各得一。写成矩阵:

对手:鹰 对手:鸽
我方:鹰 -1 2
我方:鸽 0 1

关键的问题变了:不再是"哪个策略理性",而是"鹰的比例会怎么变"。复制者动态给出答案:某策略的占比变化率,正比于它的当前占比乘以(它的适应度减去种群平均适应度)。比平均分高的策略扩张,比平均分低的收缩——这几乎就是把"适者生存"写成微分方程。纯鹰种群会被偶尔混入的鸽沾光(鹰互斗亏血,鸽白蹭和平),纯鸽种群会被混入的鹰碾压(鸽遇鹰空手,鹰白吃)——两头都不稳定,种群被推向社会生物学经典的中间比例:鹰的比例停在资源价值除以斗争成本的位置(本例即二比四,一半对一半)。

图 6-5 鹰鸽博弈的复制动态:两个不稳定端点与一个稳定内点

图 6-5 鹰鸽博弈的复制动态:两个不稳定端点与一个稳定内点

ESS:抗入侵的策略

稳定内点说的是种群比例;换到"策略能不能守住阵地"的角度,演化稳定策略(ESS)的定义是侵入测试:原生策略面对小股突变策略入侵,若原生者的适应度严格高于突变者(或相等时原生者对阵原生者也占优),它就是 ESS。直观理解:ESS 是"已被大多数采用时无法被任何小团体颠覆"的策略。它与纳什均衡的关系是精炼而非并列:ESS 必是纳什均衡,纳什均衡未必是 ESS(均衡只要求单方面偏离无利,ESS 还要求顶得住任意小比例的集体突变——更严的稳定性)。鹰鸽博弈没有纯策略 ESS,稳定的是那个比例(对应混合策略均衡)——自然界里好斗个体的比例、性别比、领地策略的分布,大量落在这样的演化稳定点上。

代码实验一:复制者动态模拟

把微分方程离散成世代循环:每代随机配对打鹰鸽博弈,按适应度按比例繁殖下一代,打印鹰占比的世代轨迹。

import random V, C = 2.0, 4.0 # 资源价值 与 斗争成本 def payoff(s1, s2): if s1 == "hawk" and s2 == "hawk": return (V - C) / 2 if s1 == "hawk": return V if s2 == "hawk": return 0.0 return V / 2 def fitness(strategy, hawk_share): """随机对手下策略的期望适应度。""" return (hawk_share * payoff(strategy, "hawk") + (1 - hawk_share) * payoff(strategy, "dove")) def replicate(x0=0.9, gens=40, step=0.5): """x0=初始鹰占比;按复制动态逐代更新。""" x = x0 traj = [] for g in range(gens): f_h = fitness("hawk", x) f_d = fitness("dove", x) mean = x * f_h + (1 - x) * f_d x = x + step * x * (f_h - mean) / max(abs(mean), 1e-9) x = min(max(x, 0.0), 1.0) traj.append(round(x, 3)) return traj print("从 0.9 出发:", replicate(0.9)[::8]) print("从 0.1 出发:", replicate(0.1)[::8]) print("从 0.5 出发:", replicate(0.5)[::8])

三条轨迹殊途同归:无论开局鹰多鹰少,占比都滑向中间的稳定点(理论值恰为一半);从一半出发则纹丝不动。种群自己会"解"这道方程,不需要任何一只甲虫懂数学。把参数 V 改小(资源变贱)或 C 改大(打斗更伤),稳定点左移——资源越不值钱、冲突越昂贵,种群越温和,这就是演化版的社会学。

代码实验二:入侵测试

ESS 的定义是抗入侵。让鸽派种群、鹰派种群、混合种群各自面对小股鹰突变或鸽突变,看谁守得住。

def invasion_test(resident_share, mutant="hawk", fraction=0.05): """在鹰占比 resident_share 的种群中放入 fraction 的突变者, 比较双方适应度。返回 (居民适应度, 突变者适应度, 结论)。""" x = resident_share * (1 - fraction) # 居民中的鹰仍按原比例 if mutant == "hawk": f_res = (resident_share * fitness("hawk", x + fraction) + (1 - resident_share) * fitness("dove", x + fraction)) f_mut = fitness("hawk", x + fraction) else: f_res = (resident_share * fitness("hawk", x) + (1 - resident_share) * fitness("dove", x)) f_mut = fitness("dove", x) verdict = "居民守住" if f_res > f_mut + 1e-9 else \ ("突变者扩张" if f_mut > f_res + 1e-9 else "五五开") return round(f_res, 3), round(f_mut, 3), verdict print("全鸽居民 vs 鹰突变:", invasion_test(0.0, "hawk")) print("全鹰居民 vs 鸽突变:", invasion_test(1.0, "dove")) print("半鹰居民 vs 鹰突变:", invasion_test(0.5, "hawk")) print("半鹰居民 vs 鸽突变:", invasion_test(0.5, "dove"))

输出印证图上的标注:两个纯种群都守不住(任何突变都能沾光),只有中间比例的种群对两类突变都免疫——它就是这个博弈的演化稳定状态。值得一提的是有限种群的修正:真实种群不是无穷大,随机漂移会扰动频率,小种群里的稳定策略可能被运气掀翻——演化稳定的"稳定",是统计意义上的稳定。

⚠️ 常见坑:把 ESS 直接当成"演化终点"。环境一变(收益矩阵的参数变了),原来的 ESS 可能瞬间变成不稳定点,种群开始新一轮漂变;共演化场景下(对手也在变,比如寄生与宿主的军备竞赛),稳定点是移动靶。给 MAS 用演化视角时,先问收益矩阵由谁定、会不会动。

💡 关键直觉:演化博弈给了纳什均衡一个不需要理性的地基——均衡不一定是算出来的,可以是筛出来的。第 7 章的多智能体强化学习正是同一思想的算法版:把"繁殖"换成"策略概率的更新",复制者动态与某些学习算法在数学上被证明会收敛到同一类平衡点。会馆与学堂,在这里打通了地下室。

沙盘推演小结

会馆密室的沙盘上摆着一池甲虫:放进九成好斗的,几代后池塘回到一半对一半;放进九成温和的,同样回到一半对一半。镇长若有所思地在册子上添了最后一行:稳定是筛选的结果,不是选择的结果。至此会馆六课全部结业——博弈论的六把钥匙(语言、均衡、时间、设计、演化、加上前面的声誉)都已在手。下一章进学堂:让镇民不再靠天吃饭的突变,而是自己学着变强。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U