REGRET · 六卷 · 24 章 · 24 个真 demo
后悔
你解过很多题,那些题有一个共同点:答案只由你决定。
可是一旦桌上坐着第二个会算账的人,「最优解」这三个字就失去了意义——
剩下的只有最优应对。而所有人的最优应对撞在一起的那一格,
往往不是任何人想要的地方,只是没人能靠自己走开。
这本书只教一件手艺:划线。
每一列里,给我收益最大的那格画一道横杠;每一行里,给你收益最大的那格画一道竖杠。
两道杠落在同一格——那里就是事情会停下来的地方。
然后,用一半的篇幅去做另一件事:不去劝人,去挪那两道杠。
这本书里那些不像真的、但都是当场算出来的数
- 市政修了一条完全免费、一秒不耽误的新路,所有人的通勤从 65 分钟涨到 80 分钟;拆掉它,所有人立刻快 15 分钟。(第 4 章)
- 把违规罚款从 10 提到 30,违规率纹丝不动地停在 25%——掉下去的是查处率,从 33.33% 到 14.29%。(第 5 章)
- 十六个策略的循环赛,冠军单挑一场都没赢过,还输了 6 场;而单挑赢了 13 场、一场没输的那个,总分垫底。(第 10 章)
- 同一批买家、同一件东西,四种规则完全不同的拍卖,卖家收入撞在同一个数上:0.666667。(第 15 章)
- 同一批人、同一份偏好,只换「谁先开口」:主动方平均拿到第 1.40 志愿,另一方第 4.00;换过来变成 2.60 和 2.00。(第 17 章)
- 45 张选票一个字不改,七种真的有人在用的计票法,数出 5 个不同的赢家;其中一种选出的赢家,跟任何对手单挑都会输(0 胜 4 负)。(第 19 章)
- 一台不懂博弈论、只会问「刚才要是出别的会多拿多少」的机器,跑一千轮,算出 −0.05555722;库恩 1950 年手算的真值是 −1/18 = −0.05555556。(第 21 章)
卷 I
在场
IN PLAY只要桌上还有第二个人,「最优」这个词就失效了。剩下的只有「最优应对」。
卷 II
读心
READ全书最反直觉的一段:你的出手频率,是由对方的收益决定的。
卷 III
反复
AGAIN同一张表,玩一次和玩一百次是两个不同的博弈。时间是最便宜的机制。
卷 IV
定价
PRICE这本书的转折点:不再问「我该怎么出手」,改问「这张表该怎么写」。
卷 V
配对
MATCH没有价格的市场:谁上谁的学、谁进哪家医院、谁跟谁在一起。
卷 VI
算账
SETTLE机器是怎么学会博弈的,以及最后一件事:你手里那张表。
写给谁
- 写给会写代码、也关心「世界是怎么运转的」的人。不需要任何博弈论基础,每个术语第一次出现时都会当场解释。
- 写给那些反复遇到「大家都知道该怎么做,但没人这么做」的人。这本书的核心动作就是把这类场面拆成一张表,然后指出该动哪个数。
- 写给在设计规则的人:产品的激励、团队的考核、社区的守则、系统的调度策略。你写下的每一条规则,都在给别人的最优应对定价。
- 数学不多。全书只需要「比较两个数的大小」和「算一个加权平均」。所有公式都是「先说要满足哪几条,再推出唯一解」,不空降。
不打算做的事
- 不教你怎么赢过别人。这门学问最常见的结论是「所有人都很聪明,结果所有人都更惨」。它的力气花在解释困境怎么形成、以及怎么设计规则把大家一起捞出来。
- 不用暗色模式。全站亮色。
- 不写「大概是 0.667 左右」。凡是能用分数说清楚的,一律写成分数:均衡是 1/3 就写 1/3。引擎内部用 BigInt 有理数,全程零浮点误差。
- 不回避对自己不利的结论。逆向归纳在真人身上系统性失灵、理论上更优的机制在现实里没被采用、sympy 在几道退化的线性规划上给出了违反自身约束的解——这些都照写。
怎么读这本书
- 顺着读。前四章建立全部工具(一张表、两道杠、一个判据),后面每一章都在用它们。跳着读会缺零件。
- 每章开头那个「▷ 轮到你」,请真的先落一个答案。章末的「◇ 摊牌」会逐个解释每个错误选项的直觉是从哪来的——那部分往往比正确答案更有用。
- 每章末尾还有一个「◆ 换你定规则」。它是这本书的主线动作:不劝人,改表。二十四章下来,它会从一个概念变成一个习惯。
- 每一个 demo 都是真算的。页面上没有一个数字是写死的——拖动滑杆,引擎当场重解均衡、重跑拍卖、重开锦标赛。
- 第 5、10、15、17、19、21 章是招牌。时间有限的话,先看这六章。
这些数字凭什么可信
- 引擎先写,正文后写。正文里每一个数字都是从引擎的输出里抄下来的,不是反过来。
- 能用分数就不用小数。核心求解器(支撑枚举、两阶段单纯形、高斯消元)全部跑在 BigInt 精确有理数上。均衡是 21/4 就是 21/4,不是 5.25 的浮点近似。
- 与本机现成实现逐题核对。
scripts/probe-game/probe.py用本机的 sympy 和 numpy 独立生成并求解了一批题目:540 个双矩阵博弈的全部纳什均衡、260 个零和博弈的值(sympy 走支撑枚举,JS 走单纯形——两条完全不同的路)、198 个线性规划、147 个相关均衡、300 个线性方程组。验证器逐题比对分数字符串。 - 与公开的标准答案核对。库恩扑克的博弈值 −1/18 是 Kuhn 在 1950 年手算出来的,CFR 跑一千轮撞上它,误差 1.66 × 10⁻⁶。
- 验证器会告诉你它查了多少项,包括正文里的数字与引擎输出的逐条交叉核对。
npm run verify:regret。