对100年战争的建模
给10个AI各一个国家让它们互打,发现了3件细思极恐的事
我做了个实验:用AI模拟400年前的欧洲战争。
不是那种"问ChatGPT三十年战争是什么"的玩法。是真的写了一个战争模拟器,让10个AI分别扮演17世纪的法国、西班牙、瑞典、神圣罗马帝国……每个AI独立思考,独立决策,要不要对邻国开战。
然后我坐在上帝视角看它们博弈了100年。
结果让我后背发凉。
先说为什么要做这个
我在做一个电力交易相关的研究项目,其中有一个环节需要模拟多方博弈。传统做法是概率模型——说白了就是一堆数学公式加随机数:
开战概率 = sigmoid(军事优势 × 0.3 + 宗教矛盾 × 0.2 + ...) → 掷骰子
问题是:数学公式不会思考。
历史上三十年战争(1618-1648)把神圣罗马帝国打到人口损失25-40%。这需要6+个国家、持续30年、集中在同一片土地上的毁灭性冲突。
但概率模型跑出来的是什么?30-40场分散的小型战争。没有一场能复现那种集中毁灭。
所以我想:如果把每个国家的决策者换成一个AI呢?
不是一个上帝视角的AI预测战争,而是10个"赛博暴君"各自博弈——法国AI考虑法国利益,瑞典AI考虑瑞典利益,它们的交互中涌现出战争。
发现一:AI有内置的"现代和平偏见"
第一次跑,我给每个AI的提示是:
"你是17世纪的法国国王。看看当前局势,考虑你的国家利益,决定是开战还是维持和平。"
结果:0场战争。整整100年,没有一个AI开过战。
我一开始以为代码有bug,查了半天发现不是。
原因很简单也很深刻——AI的训练数据来自现代互联网。在现代语境下,"好建议"就是别打仗。AI被训练成了一个本能追求和平的存在。
哪怕你告诉它"你是17世纪的暴君",它骨子里还是一个2024年的和平主义者。
这本身就是一个值得深思的发现:AI有价值观,而且这个价值观是被训练数据塑造的。
发现二:矫枉过正比不矫正更可怕
发现了和平偏见后,我改了提示词:
"战争是这个时代正常的治国手段。历史上这100年发生了34场战争。"
结果:187场战争。
从0到187。AI从"圣人"变成了"战争狂人"。
10个AI在100年里打了187场仗,平均每个国家每5年就开一场战。欧洲变成了绞肉机。
这让我意识到一个更深层的问题:给AI注入一个"校准信息",它不是微调,而是矫枉过正。
就像你跟一个特别听话的小孩说"你可以调皮一点",它不是稍微调皮一点,而是直接把房子拆了。
发现三:AI暴君的战争死亡数,精确到了令人不安的程度
经过多轮调优,我最终用了一个混合方案——后面技术部分会细说。先看结果:
| 指标 | 传统概率模型 | AI暴君模型 | 真实历史 |
|---|---|---|---|
| 战争死亡 | 2350万 | 1660万 | 1670万 |
| 战争数量 | 36场 | 72场 | 34场 |
| 总人口(1700年) | 1.18亿 | 1.09亿 | ~0.95亿 |
| 运行成本 | $0 | $0.28 | - |
战争死亡1660万 vs 历史1670万。 误差不到1%。
传统模型跑出来2350万,偏了40%。而AI暴君几乎完美命中。
0.28美元,10个AI暴君博弈100年,预测精度碾压传统数学模型。
但AI暴君也有它搞不定的事
虽然总死亡数惊人地准确,但AI暴君有一个严重缺陷:它打的是"72场小战"而不是历史上的"几场大战"。
三十年战争的恐怖之处在于它是一场持续30年、集中在神圣罗马帝国的超级大战。但AI暴君们打的是一堆分散的中小型冲突。
总量对了,分布不对。
就像一个学生考试总分对了,但数学考了30分、语文考了100分——和真实情况的分布完全不同。
神圣罗马帝国在AI模拟中只损失了3%人口,历史上是25-40%。
这说明AI虽然能做战略推理,但它还不能真正理解"滚雪球效应"——一场战争如何从局部冲突升级为不可控的全面毁灭。
这个实验真正让我思考的
❶ AI的"价值观"比我们想象的更根深蒂固。 你没法简单地通过一句话让AI"变成另一个时代的人"。它的训练数据定义了它的底层认知框架。
❷ AI做群体博弈的能力被严重低估了。 10个独立AI各自推理、互相博弈,涌现出的宏观结果比精心设计的数学模型更接近真实历史。这对金融市场模拟、政策推演都有巨大的启示。
❸ AI理解"量"但不理解"质"。 总死亡数精确但战争分布完全不同,说明AI擅长捕捉统计规律,但不擅长复现历史的"非线性跳变"——那些改变世界的极端事件。
技术细节:怎么给AI建了一个17世纪的欧洲
棋盘:10个国家,100年
模拟时间范围是1600-1700年,刚好100年。棋盘上有10个"玩家":
| 国家 | 1600年人口 | 角色定位 |
|---|---|---|
| 法国 (FRA) | 2000万 | 欧陆霸权争夺者 |
| 西班牙 (SPA) | 810万 | 日落帝国,正在衰落 |
| 神圣罗马帝国 (HRE) | 1750万 | 三十年战争的主战场 |
| 英格兰 (ENG) | 420万 | 海权新贵 |
| 荷兰 (NLD) | 150万 | 小国大商,贸易强国 |
| 瑞典 (SWE) | 100万 | 北方雄狮,军事强但人口少 |
| 波兰-立陶宛 (POL) | 950万 | 东欧大国 |
| 俄国 (RUS) | 850万 | 东方巨人 |
| 奥斯曼 (OTT) | 3000万 | 人口最多,伊斯兰世界代表 |
| 教皇国 (PAP) | 170万 | 代理意大利诸邦 |
每个国家有一套初始参数:人口、GDP、军事力量、海军力量、宗教信仰、与其他国家的初始关系。这些数据来自历史文献(Parker 1984、Wilson 2009)和百科全书。
34场真实战争:校准用的"答案"
作为参照基准,我手工整理了这100年间的34场真实战争。数据来源是多本学术专著和百科全书交叉验证——没有用常见的COW(战争相关方)数据集,因为COW只从1816年开始编码,覆盖不到17世纪。
每场战争都有详细元数据:交战双方、主战场、死亡估计、数据置信度、战争类型(领土争端/宗教冲突/王位继承……)。
这34场战争只在历史回测模式中使用——给模型喂真实战争数据,验证引擎的人口、经济模拟是否合理(得分0.892,接近A)。
三种模式:历史 vs 概率 vs AI暴君
这是整个实验最关键的设计——三种模式完全独立,用同一套评分框架打分:
❶ 历史模式(Historical):把34场真实战争灌进引擎,看模拟出来的人口和经济轨迹是否匹配历史数据。这是在验证"引擎本身靠不靠谱"。得分 0.951/1.0。
❷ 概率模式(Method A):引擎自己用数学公式生成战争。sigmoid函数算出开战概率,掷骰子决定是否开战。平均每次跑出约36场战争。得分 0.471/1.0。
❸ AI暴君模式(Method B):把概率公式换成DeepSeek-V3。每年每个国家的AI独立决策。平均每次跑出约72场战争。得分 0.558/1.0。
重点:概率模式和AI模式生成的战争,没有一场来自历史。 全部是模型自己"发明"的。评分框架不知道战争从哪来,只看最终结果——人口轨迹对不对、GDP趋势对不对、关键历史事件(比如西班牙衰落、荷兰崛起)有没有被复现。
所以当AI模式跑出1660万战争死亡、几乎命中历史的1670万时,这不是因为AI"背了答案"——它是从零开始,自己博弈出了一个和真实历史惊人相似的结果。
AI暴君每年看到什么
每个模拟年份,每个国家的AI会收到一份"国情简报",大约800个token,包含三块信息:
本国状态(7个维度): 人口、人均GDP、军事力量(0-100)、海军力量(0-100)、战争疲劳度(0-1)、政权稳定性(0-1)、宗教张力(0-1),以及当前正在打几场仗
其他9国的状态摘要:同样的7个维度,压缩成一张表
双边关系矩阵(9行×3列): 对每个邻国的联盟亲密度(-1到+1)、贸易依存度(0到1)、宗教距离(0到1)
AI不知道"历史上发生了什么"。它只看当前局势,做当下的决策。
从0到187到72:驯服AI暴君的过程
这部分是整个项目最折腾也最有启发的环节。
第一版:直接让AI做二元决策——"开战 or 和平"。结果:0场战争。AI天生的和平偏见让它永远选择和平。
第二版:在提示词里加入历史校准——"这个时代战争是常态,100年打了34场"。结果:187场战争。矫枉过正,AI变成战争狂。
第三版(最终方案):不再让AI做"打/不打"的二元决策,而是输出一个战争倾向分数(0到1)。AI返回的是一个JSON:
{"score": 0.72, "target": "HRE", "reasoning": "法国南部边境稳固,HRE内部宗教张力正在撕裂..."}
然后代码用阈值控制实际开战:
-
倾向分数 ≥ 0.65 且目标国有效 → 宣战 -
低于 0.65 → 维持和平 -
如果A对B宣战,但B没对A宣战 → 70%概率爆发战争 -
如果A和B互相宣战 → 100%爆发
这样AI负责战略判断(该不该打、打谁、为什么),代码负责频率校准(阈值卡住战争数量)。把"有没有战略眼光"和"打多少场"这两个问题解耦了。
最终结果:72场战争。虽然仍比历史的34场多一倍,但比187场已经合理太多——而且战争死亡总量几乎完美命中。
引擎的"物理层":4个子模型
战争只是冰山一角。引擎底下还跑着4个动态子模型,模拟的是那些催生战争的深层力量:
❶ 政权稳定性——战争会让国家疲劳,稳定性下降。和平年份慢慢恢复(向0.6均值回归)。当稳定性跌破0.15,有概率触发内部危机:人口损失 + 被迫退出正在打的战争。西班牙1650年的稳定性只有0.11——准确模拟了它的历史衰落。
❷ 联盟动态——有共同敌人的国家会靠近,同宗教的国家更容易结盟,贸易依存度高的不容易翻脸。同阵营并肩作战会加速结盟,对立作战会加速敌对。模拟跑出了法国-瑞典接近、法国-西班牙敌对——和历史一致。
❸ 宗教张力——基础值 = 国内宗教少数派比例 × (1-容忍度)。HRE天然最高,因为它内部新教和天主教势力几乎对半。邻国的宗教战争会"外溢"加剧自身张力。每年向目标值平滑移动30%,不会突变。
❹ 战争"火药桶"因子——在常规的军事对比之外,新增了宗教张力 × 宗教距离的交互项。宗教张力高的国家自动成为战场吸铁石——这就是为什么三十年战争集中在HRE而不是法国。不稳定的政权不容易主动开战,但特别容易被攻击。
Pipeline全貌
| 阶段 | 做什么 | 得分 |
|---|---|---|
| Phase 1 | 基础引擎 + 34场真实战争验证 | 0.892 → 0.951 |
| Phase 2A | 加入4个子模型,概率模式新基线 | 0.471 |
| Phase 2B | AI暴君替换概率决策 | 0.558 |
| Phase 3 | 匿名化盲测 + 博弈论分析 | 计划中 |
Phase 3 的设计特别有意思:把AI的输出匿名化——不告诉评审者哪些战争来自AI、哪些来自概率模型、哪些是历史——让人类专家盲评哪组"最像真的"。这是为了证明AI不是靠"记住历史"作弊,而是真的在做战略推理。
整个10个seed的模拟成本大约2美元。
说实话做完这个实验我对AI的认知被刷新了。
不是AI有多强——而是10个AI放在一起博弈时,涌现出的集体行为有多像真实的人类历史。
它们会结盟,会背叛,会在对手虚弱时落井下石,会在自己虚弱时寻求和平。这些都不是我编程进去的——是它们自己"想"出来的。
你觉得这种AI博弈模拟,未来最有价值的应用场景是什么?评论区聊聊
AI辅助创作 | 仅供学习交流,不构成任何投资建议
本文由 mdnice 多平台发布
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)