🏠 总目录📚 本教程 19 · 怎么算公平
📑 本页目录(点开跳转)

19 · 怎么算公平

44 分钟 | ⭐⭐ EF 常常不存在,所以才有一整排「放松版」


🎯 一句话

一人分一堆东西时,「效率」不够用了 —— 本章给出一整条公平判据的阶梯:EF(谁都不眼红)→ EF1(去掉一件就不眼红)→ PROP(至少拿到 1/n)→ PROP1 → MMS(自己分堆最后挑),以及每一级为什么非放松不可。


🧩 一、换设定:这次是一人一堆

前两章都是「一人配一个」。这一章:$n$ 个人分 $m$ 件不可分割的物品,一个人可以拿好几件 —— 遗产分割、食物银行分捐赠、给快递员派件,都是这个形状。

分配实例 $\langle N, M, v\rangle$:分配 $A=(A_1,\dots,A_n)$ 是 $M$ 的一个 $n$-划分(每件物品恰好归一个人,全部分完)。

⚠️ 序数偏好在这里不够用了:要对所有子集排序,那是 $2^m$ 个集合 —— 表达不了也问不出来。所以改用基数估值

可加估值:每个人给每件物品一个数 $v_i(g)\ge 0$,一堆的价值就是加起来 $v_i(S)=\sum_{g\in S} v_i(g)$,且 $v_i(\varnothing)=0$。

本章通篇的例子表(后面反复用):

$g_1$ $g_2$ $g_3$ $g_4$ $g_5$ 合计
1 100 30 5 10 5 150
2 100 10 5 5 40 160
3 30 10 50 50 5 145

⚠️ 这些数字只在同一个人内部可比。「1 给 $g_1$ 打 100、3 打 30」不代表 1 比 3 更需要它 —— 每个人的标尺是自己的,这一点后面会咬人。


🧩 二、先用效率筛一遍:三种社会福利

帕累托最优(PO) 还是老定义:不存在另一个分配让所有人不变差、至少一人严格变好。PO 一定存在(分配数量有限),但PO 太弱了 —— 「把所有东西给 1」也是 PO。

① 功利福利(Utilitarian,USW)= 求和

$$\mathrm{USW}(A)=\sum_{i\in N} v_i(A_i)$$

⭐ 可加估值下最大化 USW 是一行代码的事:每件物品给对它出价最高的人。上表里 $g_1\to 1$、$g_2\to 1$、$g_3,g_4\to 3$、$g_5\to 2$,USW $=100+30+50+50+40=270$。

💀 但 USW 会算出灾难性的不公平 —— 只要一个人的估值整体偏高,最优解就把几乎所有东西塞给他。加总把「一个人损失 50」和「另一个人获得 50」当成一回事。

② 平等福利(Egalitarian,ESW)= 最小值:$\mathrm{ESW}(A)=\min_{i} v_i(A_i)$

$A=(\{g_1\},\{g_2,g_4,g_5\},\{g_3\})$ 三人的值是 $100,55,50$,ESW $=50$; $A'=(\{g_1\},\{g_2,g_5\},\{g_3,g_4\})$ 是 $100,50,100$,ESW 也是 $50$。 可 $A'$ 明显更好 —— 它把第二低的从 55 抬到 100。ESW 只盯最惨那个,看不见这个差别。

③ Leximin:把「只看最惨」推广成「逐层比」

leximin 元组 $L_A$:把 $n$ 个人的价值从小到大排成一列。$A$ leximin 支配 $A'$:存在位置 $t$ 使 $L_A[t] > L_{A'}[t]$,且前面所有位置都相等。

上例 $L_A=(50,55,100)$、$L_{A'}=(50,100,100)$ —— 第 1 位打平、第 2 位 $A'$ 更高,$A'$ leximin 支配 $A$

leximin 最优一定存在、一定 PO、一定最大化 ESW(又叫罗尔斯式公平),但 💀 强 NP 难,而且有标尺问题:某人所有估值都极小时,为了抬高最小值会把一大堆东西塞给他。

④ Nash 福利 = 乘积:$\mathrm{NW}(A)=\prod_{i} v_i(A_i)$

乘积自带边际递减 —— 给已经拿很多的人加一件,乘积涨得少;给几乎空手的人加一件,涨得多。而且任何人拿 0,整个乘积归零,天然抗拒「有人颗粒无收」。下一章会证明它是这四个里最强的。

福利 定义 存在性 好不好算 毛病
USW 求和 多项式(贪心) 极度不公平
ESW 最小值最大化 NP 难 看不见第二惨的人
Leximin 元组字典序 强 NP 难 受估值尺度影响、难验证
Nash 乘积 NP 难 计算贵,但性质最好 ⭐

🧩 三、无嫉妒(EF):最自然的那个定义

无嫉妒(envy-free, EF):对任意两人 $i,j$,都有 $v_i(A_i) \ge v_i(A_j)$。 —— 没有人想跟别人换手里的整堆东西。

EF 好在哪:只用自己的估值就能验证 —— 不用知道别人怎么想,把每一堆按自己的标尺算一遍,看自己那堆是不是最高。

手算:换一组估值

$g_1$ $g_2$ $g_3$ $g_4$ $g_5$
1 10 10 70 70 90
2 10 10 70 40 50
3 1 1 2 2 2

分配 $A=(\{g_1,g_5\},\{g_3\},\{g_2,g_4\})$: - 1 号看:自己 $100$,2 号那堆 $70$,3 号那堆 $80$ → 不嫉妒 - 2 号看:自己 $70$,1 号那堆 $60$,3 号那堆 $50$ → 不嫉妒 - 3 号看:自己 $3$,1 号 $3$,2 号 $2$ → 不嫉妒

$A$ 是 EF 的 ✓。

⚠️ 但 EF 经常根本不存在

两个人,一件物品。 谁拿到,另一个人就嫉妒。完。

这不是个刁钻反例,是不可分割物品的常态。(物品可分时 —— 蛋糕、土地、钱 —— EF 总是存在的,这也是切蛋糕理论比这一章轻松的原因。)

而且:判断一个实例有没有 EF 分配是强 NP 难的(同样从 3-划分归约)。

⚠️ 乘性放松救不了

自然的想法:不要求完全不嫉妒,要求「差不太多」—— $\alpha$-EF:$v_i(A_i) \ge \alpha\, v_i(A_j)$。

反例(任意固定 $\alpha \in (0,1]$,取 $0<\epsilon<\alpha$):

$g_1$ $g_2$
1 1 $\alpha-\epsilon$
2 1 $\alpha-\epsilon$

两件东西两个人,无论怎么分,拿到 $g_2$ 的那个人手里是 $\alpha-\epsilon$,对方手里是 $1$,而 $\alpha-\epsilon < \alpha \cdot 1$。对任何 $\alpha>0$ 都没有 $\alpha$-EF 分配。

⭐ 教训很具体:这里的障碍是「离散」不是「差距」。乘性放松处理的是「差距」,所以完全无效。必须改成组合式的放松 —— 允许「拿掉一件」。


🧩 四、EF1:去掉一件就不嫉妒

EF1(envy-free up to one item,Budish 2011):对任意 $i,j$,存在 $g\in A_j$ 使得 $$v_i(A_i)\ \ge\ v_i(A_j\setminus\{g\})$$ —— 我可能眼红你,但只要从你那堆里拿走某一件(挑对我最值钱的那件),我就不眼红了。

回到那个杀死 $\alpha$-EF 的两件物品实例:2 号拿 $g_2$(值 $\alpha-\epsilon$),嫉妒拿着 $g_1$ 的 1 号(值 1)。但去掉 $g_1$ 后 1 号那堆是 $0 < \alpha-\epsilon$ —— EF1 成立。原本无解的实例,现在有解了。

手算一个不是 EF1 的(用第三节那张表):$A=(\{g_1\},\{g_2\},\{g_3,g_4,g_5\})$ —— 1 号自己只有 $10$,3 号那堆值 $230$,就算去掉最贵的 $g_5$ 还剩 $140>10$,去掉哪一件都不够

改成 $A'=(\{g_1,g_5\},\{g_3,g_4\},\{g_2\})$:1 号自己 $100$、2 号那堆 $140$ → 嫉妒,但去掉 $g_3$ 后剩 $70\le100$ ✓;2 号自己 $110$,看别人是 $60$ 和 $10$ → 不嫉妒 ✓;3 号自己 $1$、1 号那堆 $3$ → 嫉妒,去掉 $g_5$ 后剩 $1\le1$ ✓。$A'$ 是 EF1。

关系很清楚:EF ⟹ EF1,反过来不成立。

⭐⭐ 而 EF1 分配永远存在,而且多项式时间就能算出来。 这是整块理论的支点 —— 下一章给两个算法(轮流拿 + 嫉妒图),还会给一个同时保证 PO 的。


🧩 五、比例性:换个角度定「够不够」

EF 是相对判据(跟别人比)。另一条路是绝对判据(跟阈值比):

比例性(PROP):$v_i(A_i)\ \ge\ \tfrac{1}{n}\,v_i(M)$ —— 每个人至少拿到他心目中总价值的 $1/n$。

定理:EF ⟹ PROP。 三行:EF 给出 $v_i(A_j)\le v_i(A_i)$ 对每个 $j$ 成立,求和得 $$v_i(M)=\sum_{j\in N} v_i(A_j) \le n\,v_i(A_i)$$ 除以 $n$ 即可。∎ 反过来不成立 —— PROP 只管「够 1/n」,不管别人拿了多少。

PROP 的现实分量比 EF 大:很多国家的遗产法、离婚财产分割法写的就是比例条款

⚠️ 但 PROP 同样经常不存在(两人一件物品,没拿到的那个是 0)。于是同样放松:

PROP1:存在某件 $g \in M$ 使 $v_i(A_i \cup \{g\}) \ge \frac{1}{n} v_i(M)$ —— 再一件我就达标。

定理:EF1 ⟹ PROP1,所以下一章的算法顺带把 PROP1 也解决了。

💀 但 PROP1 可以难看到离谱:第一节那张表两个人分,$A=(M,\varnothing)$ 让 2 号拿 0;可 $v_2(\{g_1\})=100 > \frac{160}{2}=80$ —— 「一件不给」也是 PROP1 的。⚠️ 放松版判据是下限,不是目标。($\alpha$-PROP 的反例和 $\alpha$-EF 一模一样,乘性放松同样无效。)


🧩 六、MMS:切蛋糕思想的推广

回到最古老的那个机制:一人切、另一人先挑。切的人会怎么切?他会切得两块在他眼里一样好 —— 因为他知道自己只能拿到剩下那块。

把它推广到 $n$ 个人:

最大最小份额(maximin share,MMS): $$\mathrm{MMS}_i \;=\; \max_{A}\ \min_{j\in N}\ v_i(A_j)$$ 「让 $i$ 自己把所有物品分成 $n$ 堆,然后别人先挑,他拿最后一堆」—— 他能保证到手的最高值。 分配 $A$ 是 MMS 公平的,如果每个 $i$ 都有 $v_i(A_i) \ge \mathrm{MMS}_i$。

手算(第一节的表,$n=3$):1 号要把 5 件分成 3 堆并最大化最差那堆 —— $\{g_1\}=100$、$\{g_2\}=30$、$\{g_3,g_4,g_5\}=20$,最差是 20;换成 $\{g_2,g_3\}=35$ 和 $\{g_4,g_5\}=15$ 反而更差,所以 $\mathrm{MMS}_1=20$。同理 $\mathrm{MMS}_2=20$($100/40/20$),$\mathrm{MMS}_3=45$($50/50/45$)。

总有 $\mathrm{MMS}_i \le \frac{1}{n} v_i(M)$($n$ 堆的最小值不可能超过平均值)—— MMS 是打了折的比例性,比 PROP 更弱。

存在性:$n=2$ 时一人切一人挑就够了 —— 1 号切出的两堆对他都 $\ge \mathrm{MMS}_1$;2 号挑走更大的那堆,值 $\ge \frac{1}{2}v_2(M) \ge \mathrm{MMS}_2$。∎ 💀 但 $n\ge 3$ 时 MMS 分配可能不存在,已知反例只要 3 人 9 件物品。

计算:算单个 $\mathrm{MMS}_i$ 本身就 NP 难($n=2$ 时从均衡划分归约)。所以只能近似:多项式时间目前能做到 $\frac{3}{4}+\frac{1}{12n}$-MMS(Garg & Taki 2020),而存在实例没有分配能好过 $\frac{39}{40}$-MMS(Feige 等 2021)。下一章会给一个非常好懂的 $\frac12$-MMS 贪心算法。


🧩 七、把阶梯摆在一起

判据 说的是什么 一定存在? 自己能验吗 算不算得动
EF 不想跟任何人换整堆 ❌ 两人一物就没了 ✓ 只需自己的估值 判存在性强 NP 难
EF1 去掉你那堆里的某一件后就不眼红 总是存在 多项式
PROP 至少拿到我心中总值的 $1/n$ ✓ 且不用看别人 NP 难
PROP1 一件就达标 ✅(EF1 ⟹ PROP1) 多项式
MMS 自己分成 $n$ 堆、最后挑,能保住的那个值 ❌ $n\ge3$ 可能没有 需要算 $\mathrm{MMS}_i$(NP 难) 只能近似

蕴含关系(都是单向):EF ⟹ EF1 ⟹ PROP1EF ⟹ PROP。⚠️ 但 EF1 和 MMS 互不蕴含 —— 一个是相对的(跟别人比),一个是绝对的(跟自己的切分比),会互相打架。

⚠️ 别和机器学习里的「算法公平性」搞混: 那边的「公平」是同一个模型对不同人群的错误率是否一致(群体公平、机会均等);这边的「公平」是每个人分到的那一份够不够。两个词同名,量的不是一件事。


🔗 这一章连到哪里

去哪 为什么
20-公平分配的算法.md 本章只给判据没给算法。下一章把「EF1 总是存在」变成三个能手算的算法,并给出 EF1 + PO 同时达成的结论
18-住房市场与TTC.md 看为什么非换设定不可:一人一件时 TTC 能把效率做满,一人一堆就没有对应机制了
21-有钱与随机分配.md 本章说 EF 常常不存在 —— 但允许转账之后它会以另一种形式回来
../模型上线之后/19-合规审计与模型卡.html 确认你说的「公平」是哪一种:那边是分类器对人群的错误率差异,这边是分配份额。写合规文档时混用会出事

✅ 检查点

  1. 为什么这一章要从序数偏好切换到基数估值?
  2. USW 最大化为什么在可加估值下是「一行代码」?它会犯什么错?
  3. $L_A=(50,55,100)$ 和 $L_{A'}=(50,100,100)$,谁 leximin 支配谁?ESW 能看出差别吗?
  4. 用第三节那张表,验证 $A=(\{g_1,g_5\},\{g_3\},\{g_2,g_4\})$ 对 2 号是不是 EF。
  5. 为什么 $\alpha$-EF 这种乘性放松救不了 EF?障碍到底是什么?
  6. EF ⟹ PROP 的证明用了哪一步不等式?
  7. 「一件不给」的分配为什么可能是 PROP1 的?这说明放松版判据该怎么用?
  8. $\mathrm{MMS}_i$ 和 $\frac{1}{n}v_i(M)$ 哪个大?为什么?
  9. $n=2$ 时 MMS 分配一定存在,靠的是什么机制?$n\ge3$ 呢?
👀 答案
  1. 序数偏好要对所有子集排序,共 $2^m$ 个 —— 写不出也问不出,而且只靠序数基本只能保证 PO。可加基数估值只要 $m$ 个数字。
  2. 每件物品独立地给对它出价最高的人即可(可加性下物品互不影响),例子表里最大 USW $=270$。错误在于加总把「一人损失 50」和「另一人获得 50」当成一回事
  3. $A'$ leximin 支配 $A$:第 1 位都是 50,第 2 位 $100>55$。ESW 看不出差别,两者都是 50。
  4. 2 号:自己 $\{g_3\}=70$;1 号那堆 $10+50=60$;3 号那堆 $10+40=50$。$70\ge60$ 且 $70\ge50$ → 不嫉妒,对 2 号是 EF。
  5. 反例:两件物品,两人估值都是 $(1,\alpha-\epsilon)$,$0<\epsilon<\alpha$。拿到第二件的人手里 $\alpha-\epsilon<\alpha\cdot 1$,对任何 $\alpha>0$ 都失败。障碍是离散(不能切)不是差距大小,所以只能换成「拿掉一件」这类组合式放松。
  6. 用 $v_i(A_j)\le v_i(A_i)$ 对所有 $j$ 求和:$v_i(M)=\sum_j v_i(A_j)\le n\,v_i(A_i)$。
  7. PROP1 只要求「再添一件就达标」:2 号拿 0,但 $v_2(\{g_1\})=100>160/2=80$。说明放松判据是下限不是目标,满足它完全可能糟糕透顶。
  8. $\mathrm{MMS}_i\le\frac{1}{n}v_i(M)$ —— 分成 $n$ 堆时最小那堆不可能超过平均值。所以 MMS 是「打了折的比例性」。
  9. $n=2$ 靠一人切、一人挑:切的人保证两堆都 $\ge\mathrm{MMS}_1$;挑的人拿走更大那堆,值 $\ge\frac12 v_2(M)\ge\mathrm{MMS}_2$。$n\ge3$ 时 MMS 分配可能根本不存在(3 人 9 件的反例),只能近似。

🛑 可以停在这里

走神救援

这一章从「一人一件」换到「一人一堆」:$n$ 个人分 $m$ 件不可分割物品。序数偏好在这里废了(要给 $2^m$ 个子集排序),改用可加基数估值 $v_i(S)=\sum_{g\in S}v_i(g)$。

效率不够用:PO 太弱,全给一个人也是 PO。四种社会福利中,USW(求和)多项式可算(每件给出价最高的人,例子表里 270)但极不公平;ESW(最小值)只看最惨的,分不出 $(50,55,100)$ 和 $(50,100,100)$;Leximin(价值从小到大排成元组比字典序)一定存在、一定 PO、一定最大化 ESW,但强 NP 难、受估值尺度影响;Nash 福利(乘积)有人拿 0 就整体归零,性质最好但算不动。

公平这边是一条放松的阶梯。⭐ EF:$v_i(A_i)\ge v_i(A_j)$,只用自己的估值就能验;但两人一件物品就不存在了,判存在性强 NP 难。乘性放松 $\alpha$-EF 完全无效 —— 两人估值都是 $(1,\alpha-\epsilon)$ 的反例对任何 $\alpha>0$ 都失败,因为障碍是离散不是差距。所以改成组合式放松:⭐ EF1:存在 $g\in A_j$ 使 $v_i(A_i)\ge v_i(A_j\setminus\{g\})$。EF1 总是存在、多项式可算,是整块理论的支点。

另一条路是绝对阈值:PROP 要求 $v_i(A_i)\ge \frac1n v_i(M)$,EF ⟹ PROP(三行求和证明),很多遗产法写的就是这条;同样常常不存在,放松成 PROP1(再添一件就达标),且 EF1 ⟹ PROP1。💀 但 PROP1 可以极难看:2 人例子里「一件都不给」也是 PROP1($v_2(\{g_1\})=100>80$)—— 放松判据是下限不是目标。最后是 MMS:$\mathrm{MMS}_i=\max_A\min_j v_i(A_j)$,即「自己分 $n$ 堆、最后挑」,例子表里三人是 20、20、45,且总有 $\mathrm{MMS}_i\le\frac1n v_i(M)$。$n=2$ 靠一人切一人挑必然满足;💀 $n\ge3$ 可能不存在(3 人 9 件的反例),算 $\mathrm{MMS}_i$ 本身也 NP 难,只能近似($\frac34+\frac1{12n}$ 可得,上界 $\frac{39}{40}$)。⚠️ 别把这里的「公平」和机器学习的「算法公平性(群体错误率一致)」混用。

下一节 👉 20-公平分配的算法.md

打卡记录保存在你的浏览器里,首页能看到总进度