我们从2000年前古巴比伦犹太法典《塔木德》(Talmud) 中描述的一个案例为出发点, 介绍一种资源分配的策略. 从合作博弈论的角度来理解, 这种分配策略是Nucleolus分配. 值得一提的是, 我们已经在供应链相关的多个业务场景中使用该资源分配方案.
注意: 本文绝大部分内容参考了Robert J. Aumann和Michael Maschler 1.
1. 争大衣问题
《塔木德》2源于公元前2世纪至公元5世纪间,记录了犹太教的律法, 条例和传统. 其内容分三部分, 分别是密西拿(Mishnah) – 口传律法, 革马拉(Gemara) – 口传律法注释, 米德拉什(Midrash) – 圣经注释.
密西拿中描述了如下的案例:
争大衣(The Contested Garment)
两个人共同拥有一件大衣. 第一个人说大衣完全属于他; 第二个人说大衣的一半属于自己.
那么应该给第一个人3/4, 另一个人1/4.
如果按比例分配, 应该给第一个人2/3, 另一个人1/3. 那么争大衣问题背后的分配逻辑是什么? 为方面描述, 我们引入如下的记号:
- E E E – 总资产
- d i d_i di – 第 i i i个人声明的资产, i = 1 , 2 i=1, 2 i=1,2
- x i x_i xi – 给第 i i i个人实际分配的资产, i = 1 , 2 i=1, 2 i=1,2
它的分配思想是: 没有争议的给对方, 有争议的部分平均分.
记
θ
+
=
max
(
θ
,
0
)
\theta_+ = \max(\theta, 0)
θ+=max(θ,0). 注意到
(
E
−
d
1
)
+
(E-d_1)_+
(E−d1)+是第一个人对第二个人无争议的部分;
(
E
−
d
2
)
+
(E-d_2)_+
(E−d2)+是第二个人对第一个人无争议的部分. 因此, 双方有争议的部分为
E
−
(
E
−
d
1
)
+
−
(
E
−
d
2
)
+
.
E - (E-d_1)_+ - (E-d_2)_+.
E−(E−d1)+−(E−d2)+.
我们有
CG原则(Contested Garment Principle)
x 1 = E − ( E − d 1 ) + − ( E − d 2 ) + 2 + ( E − d 2 ) + x 2 = E − ( E − d 1 ) + − ( E − d 2 ) + 2 + ( E − d 1 ) + \begin{aligned} & x_1 = \frac{E-(E-d_1)_+ - (E-d_2)_+}{2} + (E-d_2)_+\\ & x_2 = \frac{E-(E-d_1)_+ - (E-d_2)_+}{2} + (E-d_1)_+\\ \end{aligned} x1=2E−(E−d1)+−(E−d2)++(E−d2)+x2=2E−(E−d1)+−(E−d2)++(E−d1)+
2. 破产问题
如何把争大衣的分配策略扩展到任意多个人的情形?
破产问题(The Bankruptcy Problem)
我们用二元组 ⟨ E , d ⟩ \langle E, d\rangle ⟨E,d⟩来描述一个破产问题的实例. E E E代表某个破产银行的总资产, d = ( d 1 , d 2 , … , d n ) d=(d_1, d_2,\ldots, d_n) d=(d1,d2,…,dn)代表银行对 n n n个机构(或个人)的欠款. 设 d 1 ≤ d 2 ≤ … ≤ d n d_1\leq d_2\leq \ldots \leq d_n d1≤d2≤…≤dn且 0 ≤ E ≤ ∑ i = 1 n d i 0\leq E\leq \sum_{i=1}^n d_i 0≤E≤∑i=1ndi. 应该如何把资产 E E E"公平地"分配给 n n n个机构?
我们注意到, 在该问题中:
- 总资产一定不能满足所有人的需求. 换句话说, 总资产可能不够分.
- 分配时应该尽量保证"公平性", 不同应用场景下公平性的定义应该是不同的.
- 按比例分配背后的逻辑是权重越大的人分到的资产越多, 反之则越少. 在某些应用场景下, 按比例分配也许是公平的, 但它绝对不是唯一的分配方式.
- CG原则从另外的角度给出了一种公平性分配, 它的公平性在损失和收益两个方面同时得到了体现(参考下文).
例 考虑3个人 d 1 = 100 d_1=100 d1=100, d 2 = 200 d_2=200 d2=200, d 3 = 300 d_3=300 d3=300. E E E分别为100, 200, 300时, "密西拿“”规定的分配如下表所示:
E | x 1 x_1 x1 ( d 1 = 100 d_1=100 d1=100) | x 2 x_2 x2 ( d 2 = 200 d_2=200 d2=200) | x 3 x_3 x3 ( d 3 = 300 d_3=300 d3=300) |
---|---|---|---|
100 | 33 + 1/3 | 33 + 1/3 | 33 + 1/3 |
200 | 50 | 75 | 75 |
300 | 50 | 100 | 150 |
通过观察, 我们发现:
- E = 100 E=100 E=100时是平均分配.
- E = 200 E=200 E=200时看起来挺神秘的 …
- E = 300 E=300 E=300时是按比例分配.
问题 如何把CG原则扩展到 n n n人情形(如何解释上面的分配策略)?
3. 一致性分配(Consistency Allocation)
给定分配 x = ( x 1 , x 2 , … , x n ) x=(x_1, x_2, \ldots, x_n) x=(x1,x2,…,xn). 对任意两个机构 i i i, j j j ( i ≠ j i\neq j i=j), 如果按照CG原则对 i i i和 j j j分配总资产 ( x i + x j ) (x_i+x_j) (xi+xj), 它们得到的资产仍然为 x i x_i xi和 x j x_j xj, 那么我们称 x x x是一致的(Consistent).
容易验证上面例子的分配符合一致性.
下面我们介绍一致性分配的性质(证明忽略).
- 破产问题的一致性分配是唯一的.
- 破产问题的一致性分配是自洽的(self-consistent). 即, 考虑破产问题的任意子问题, 它的机构集合为 S ⊆ { 1 , 2 , … , n } S\subseteq \{1,2,\ldots,n\} S⊆{1,2,…,n}, 总资产为 ∑ i ∈ S x i \sum_{i\in S}x_i ∑i∈Sxi. 那么重新按照一致性分配, S S S中的机构分配到的资产仍然为 x i x_i xi, 其中 i ∈ S i\in S i∈S.
- 破产问题存在唯一的**自对偶的(self-dual)**一致性分配. 为描述简单起见, 我们忽略自对偶的定义(详细定义请参考1), 仅解释其意义. 令
D
=
∑
i
=
1
n
d
i
D=\sum_{i=1}^n d_i
D=∑i=1ndi为破产银行对所有机构的总欠款. 所以我们可以把这个问题从两个方面理解:
i. 如何把总资产 E E E公平地分配给 n n n个机构?
ii. 如何把总损失 D − E D-E D−E公平地分配给 n n n个机构?
如果分配策略是自对偶, 那么按照上述两种情况分配最终得到的资产是相同的. - 对任意的集合
S
⊆
N
=
{
1
,
2
,
…
,
n
}
S\subseteq N = \{1, 2, \ldots, n\}
S⊆N={1,2,…,n}, 定义效用函数
v ( S ) = ( E − ∑ i ∈ N \ S d i ) + . v(S) = \left(E-\sum_{i\in N\backslash S}d_i\right)_+. v(S)=⎝⎛E−i∈N\S∑di⎠⎞+.
该问题可以被描述成合作博弈(Cooperative Game). 那么自对偶的一致性分配是Nucleolus3 (或参考《博弈论在零售业务中的应用》).
如何计算自对偶的一致性分配?
4. 计算
我们先介绍一个简单的分配策略.
CEA(Constraint Equal Award): 考虑破产问题 ⟨ E , d ⟩ \langle E, d\rangle ⟨E,d⟩. 设 d 1 ≤ d 2 ≤ … ≤ d n d_1\leq d_2\leq \ldots\leq d_n d1≤d2≤…≤dn. 首先给第一个机构分配, 原则是在不超过 d 1 d_1 d1的前提下对当前的总资产平均分, 即 x 1 = min ( E / n , d 1 ) x_1= \min(E/n, d_1) x1=min(E/n,d1). 之后机构1离开, 剩下总资产 E − x 1 E-x_1 E−x1, 总机构数为 n − 1 n-1 n−1. 依此类推, 我们可以完成对所有机构的分配, 最终得到 x 1 , x 2 , … , x n x_1,x_2,\ldots, x_n x1,x2,…,xn作为 n n n个机构分配到的资产. 为方便描述, 我们用 CEA ( E , d ) = ( x 1 , x 2 , … , x n ) \text{CEA}(E,d) = (x_1, x_2, \ldots, x_n) CEA(E,d)=(x1,x2,…,xn)表示分配结果.
令 D = ∑ i = 1 n d i D=\sum_{i=1}^n d_i D=∑i=1ndi. 用 x x x表示计算结果.下面我们描述其计算方式:
- 如果 E ≤ D / 2 E\leq D/2 E≤D/2, 那么 x = CEA ( E , d / 2 ) x=\text{CEA}(E, d/2) x=CEA(E,d/2).
- 如果 E > D / 2 E>D/2 E>D/2, 先计算 y = CEA ( D − E , d / 2 ) y=\text{CEA}(D-E, d/2) y=CEA(D−E,d/2)(先分配损失), 然后令 x = d − y x=d-y x=d−y.
容易验证上一节例子中的分配结果就是按照本节中的计算方式得到的. 算法实现可以参考 Bankrupt on Github.
5. 总结
破产问题本质上是一个资源分配问题, 而CG分配原则考虑了某种意义上的公平性. 可以证明, 按照上一节描述的方式计算的结果不仅是唯一的一致性分配, 而且是自对偶的. 即, 它分配资产和分配损失的策略是相同的. 此外, 与按比例分配相比, CG分配更多地照顾到了低权重的个体. 在实际中, 我们应该根据具体的业务场景选择合适的分配策略.
写在最后: 古人的智慧不可小觑~