稳定婚姻问题
Stable Marriage Problem定义
两个集合men、women数量相等,每个人持有对异性的好感度顺序表。现在假定要对这n对进行匹配,如果某种匹配存在同时满足以下三个条件的m-w对(blocking-pair),则认为此匹配是不稳定的:1)m和w目前没有订婚(意味着它们的订婚对象是别人) 2) 在m的优先级列表中,w的级别比当前订婚对象高 3) 在w的优先级列表中,m的优先级比当前订婚对象优先级高。 反之则称这个匹配是稳定的。在这样一个场景中求解稳定订婚关系的问题,称之为稳定婚姻问题
常见变种
-
SMI:(SM with Incomplete lists)
-
SMT:(SM with Ties)
按照稳定条件依次减弱
-
super-stability
-
strong stability
-
weak stability: 总是存在解,并能在多项式时间内解决
-
-
SMTI(SM with Ties and Incomplete lists)
-
三种稳定关系定义,同上
-
super/strong关系,存在算法可以确定一个问题是否有解,以及求出一个解,super stability时间复杂度O(a), strong stabilityO(na), a表示所有优先级列表的整体长度(2n^2如果所有优先级列表都是完整的),且所有的解都具有相同的大小
-
weak stablity,任何情况下都存在一个稳定匹配,并且可以在O(a)时间内找到,但是解的大小可以有多个,求解其中最大的那个是NP-Hard的
-
经典解法
Gale-Shapley Algorithm
algorithm stable_matching is
Initialize all m ∈ M and w ∈ W to free
while ∃ free man m who still has a woman w to propose to do
w := first woman on m's list to whom m has not yet proposed
if w is free then
(m, w) become engaged
else some pair (m', w) already exists
if w prefers m to m' then
m' becomes free
(m, w) become engaged
else
(m', w) remain engaged
end if
end if
repeat
-
按轮次进行
- 每一轮求婚过程都由尚未订婚的男方m发起,对自己尚未求过婚的女性中选择优先级最高的w,若该女性目前也是单身,则(m,w)订婚关系暂时成立;否则假设当时与w的订婚对象是m’:
- 若w更中意m,那么w与m’的关系取消,转而与m订婚,与此同时,m’成为单身(意味着他可以在下一轮进行选择)
-
否则(m’,w)关系保持,m之后需要尝试向次优选择求婚
- 直到所有的男性没有可求婚对象(即都有订婚关系以后)循环结束,问题得解
分步:
-
时间复杂度O(n^2)
-
保证算法最后所有人都有订婚对象
-
最后形成的关系是稳定的
-
man-optimal/woman-pessimal
在全局负载均衡网络中的应用
负载均衡就是要把对应客户端的请求打到最合适的CDN服务器节点/集群上(映射)
模型抽象
map unit
tuple: <IP address prefix, traffic class>
如<1.2.3.4/24, video> <1.2.3.4/24, web>
Mi, Cj, di cj
变种特性
-
map units和clusters的数量不同
-
优先级列表不完全
-
demands 和 capacities的资源化
Resource Trees
-
服务器并不单独服务于某种单一服务
-
不同类型的业务消耗的资源类型重点不一样
Bps: bytes per second
Fps: “flytes” per second
叶子节点标识每种traffic class可用的最大Fps资源,父亲节点B标识这个集群上所有traffic共用下Fps的最大可用资源,根节点A表示可从该集群发送的最大Bps资源
这棵树展现了一种评估服务资源约束的方法。一个map unit从叶子节点开始向上计算,直到根节点也满足资源约束时才是满足需求的。
举个例子:一个访问video的demand本身要f Fps和b Bps(f,b是每个demand的比例系数)。一个map unit发出20个单位的video demand,f=0.25, b=1,那么总共需要5个Fps和20个Bps
G-S算法有对应的适配[13]
f=1 b=0.25,demand=26 —> 26 Fps 和 6.5Bps,在节点B不满足约束,但是A和E满足。假设集群有个优先级列表,优先服务Apps,那么4个单位的video demand就会被逐出,从而在节点B创造出额外的1 Fps,使这26个app demand能被顺利处理
类似上述过程不断重分配,以收敛到稳定分配的状态
实际挑战
-
复杂度和问题规模
数量级极大的map units, clusters以及更复杂的resource trees
-
计算时间
对于map unit的分配10~30秒就要计算一次,G-S算法的时间复杂度足够优秀,并且可以改造成分布式的以进行并行计算
-
demand和capacity的估算
对于资源模型的抽象也是一个难点,一方面,它们是可以不断变化的,另一方面,之前所提的比例系数在实际应用当中也是相当难以估计,经常是需要当demand被实际分配给了一个cluster之后,才能确定。所以,可能需要一个完善的反馈/闭环,以便基于历史尽可能准确地估计demand和capacity
-
增量分配和持久性
之前所述的解决方法是基于完整的分配问题,也就是说每次从头开始计算,这在实际应用中其实是并不太理想的。[2]中阐述了两个原因:一是一般情况下只有一小部分的map unit需要重分配(就是那些优先度列表发生较大变化的);二是对整个分配的重计算可能导致分配关系的大幅变动,即便元数据变化不大, 这样会导致CDN的命中率下降. (needs a “sticky” solution),不然的话甚至可能引起震荡。
参考
[1] Kazuo Iwama and Shuichi Miyazaki. A survey of the stable marriage problem and its variants. In Informatics Education and Research for Knowledge-Circulating Society, 2008. ICKS 2008. https://repository.kulib.kyoto-u.ac.jp/dspace/bitstream/2433/226940/1/ICKS.2008.7.pdf
[2] Algorithmic Nuggets in Content Delivery
[3] https://en.wikipedia.org/wiki/Stable_marriage_problem
[4] https://en.wikipedia.org/wiki/Gale%E2%80%93Shapley_algorithm