浅谈稳定完备婚姻的算法

  首先说明:本文不是讨论婚姻问题的,而是一篇以日常生活的婚姻问题为例子说明一个有趣的算法:Gale-Shapley算法(延迟认可算法),如果你为此感到失望的话,我将表示我的歉意,但是你如果有兴趣的话,还是建议你看一下,尤其是对于目前还没有个GF或BF的朋友以及就要结婚的朋友,在讲解算法的实现过程中,你会感到大有裨益。

  话说在1962年,两个数学家David Gale 和Lloyd Shapely提出了下面的问题:给定若干个男生和同样多的女生,他们每个人都对所有的异性有一个心理的偏好次序。是否存在一种男女配对组合构成一种稳定的组合关系?这里稳定组合的意思是说,不存在两个非伴侣的异性对彼此的评价比对各自伴侣的评价还要高。(可以理解,这样的异性太容易红杏出墙了,所以是某种不稳定因素。)进一步的问题是,在已知每个人对异性的偏好顺序的情况下,怎样求出这种稳定组合方式(如果它存在的话)?你可以理解为这是数学家们替月老问的问题:给定一群孤男寡女,寻找一种牵红线的方式,以确保把红杏扼杀在摇篮里。。。。

   1、稳定完备婚姻

  上面这一问题被称为稳定婚姻问题。它有很多种可能的解法。为了让大家相信数学家不是真得如此无聊,我要指出它确确实实是一个地道的组合数学问题,有其特定的数学价值。当然啦,它也有很多别的背景和应用,比如用来在若干个公司和应聘者之间进行招聘中介„„但是数学家们怎么会放过如此八卦的一个名字呢?我们看下面的例题:

  某社团中有n位女士和m位男士。假定每位女士按照其对每位男士作为配偶的偏爱程度排名次,无并列。也就是说,这种排列是纯顺序的,每位女士将这些男士的排列成顺序 1,2,3,„ ,n,类似的,每位男士也对这些女士排列成顺序1,2,3,„,n,我们知道,在这个社团里配对成完备婚姻的方式有n!种。假定某种婚姻匹配中存在女士A和 B 及两位男士a和b,使得

  i) A和a结婚;

  ii) B和b结婚;

  iii) A更偏爱b(名次更优先)而非a;

  iv) B更偏爱a而非b。

  那么,我们认为该完备婚姻是不稳定的。因为在这种假设下,A和b可能会背着别人相伴逃跑,他们都认为,与当前配偶相比每个都更偏爱自己的新伴侣。如果完备婚姻不是不稳定的,我们则称其为稳定的完备婚姻。

   2、稳定完备婚姻的算法

   2.1 建立模型

   用二分图来为这个问题建立数学模型。令G=(X,△,Y)是一个二分图,其中 X={w1,w2,w3...wn}为n位女士的集合,而Y = {m1,m2,m3....mn}为n位男士的集合。将每一个女-顶点(女士在左边)连接到每一个男-顶点(男士 在右边)。所得的二分图在包含双方顶点集之间的所有可能边的意义下是完备的。对应每条边(wi,mj)存在一个数对p,q,其中p表示在wi给男士排序中mj的位置,q表示在给女士排序中mj给女士排序中wi的位置。这些女士和男士的完备婚姻对应二分图G的(n条边的)完美匹配。  在记法上,使用优先秩评定矩阵所提供的模型会更方便。该矩阵为一n行n列的阵列,n行对应每一位女士w1,w2,w3....wn,n列对应每一位男士m1,m2,m3...mn。在第i行和第j列交叉位置处放上代表wi给mj排的名次和mj给wi排的名次的数对p,q。一个完备婚姻对应该矩阵上n个位置的集合,该集合恰好包含每一行的一个位置和每一列的一个位置。  例1 令n=3,并令优先秩评定矩阵为:

           m1  m2  m3

       w1  1,3   2,2   3,1

       w2    3,1   1,3   2,2

       w3    2,2   3,1   1,3

  存在3!=6种可能的完备婚姻。一种是

    w1<->m1,w2<->m2,w3<->m3

  由于每一位女士都得到她的第一选择,这个完备婚姻是稳定的,不过每位男士得到的却都是最末位的选择。另一中稳定的完备婚姻是通过是每位男士得到他的第一选择而得到的。

  2.2延迟认可算法的基本思想  

  问题:对于每一个优先秩评定矩阵,都存在稳定的完备婚姻策略。如何找到一个稳定的完备婚姻?  

  通过延迟认可算法(Gale-Shapely算法)

   先对所有女士进行落选标记开始。

   当存在落选女士时,进行以下操作

   1)每一位落选女士在所有尚未拒绝她的男士中选择一位被他排名最优先的男士

   2)每一位男士在所有已经选择他,并且他尚未拒绝的女士中挑选被他排名最优先的女士,对她推迟决定,并于此时拒绝其余女士。  

   于是,在算法执行期间,由女士向男士求婚,一些男女订婚,但是,如果收到更好的求婚,男士可以悔婚。

   即算法中,一旦男士订婚,他就一直处在订婚状态,但是她的未婚妻可以改变;而且,对他来说每次改变都是一种改进。然而,女士则在算法执行期间订婚若干次;每一次对她来说都讲导致更不理想的伴侣。  

  只要不存在被拒绝女士,那么每一位男士恰与一位女士订婚,由于人数相等,每一位女士也恰与男士订婚。  

  现在将每一位男士和他订婚的女士配对就可以得到一种完备婚姻,而且可以证明,这种完备婚姻是稳定的。  

  考虑女士A和B及男士a和b,是A与a配对,B与b配对,但是A更偏爱b而不是a。我们证明b不可能比起偏爱B来更偏爱A。由于在算法的某个阶段A在a,b间更偏爱b, A选择b,但 A因b将某位女士排得更优先而被b拒接过。但是,在算法过程中与男士b配对的女士实际上至少与他拒接过的任何女士有同等的优先级。既然A被b拒接过,b必然更偏爱B而不是A。因此,不存在不稳定的配对,该完备婚姻是稳定的。 

  2.3 延迟认可算法的举例  

  例2 将延迟认可算法用于优先秩评定矩阵

          a    b   c   d

      A   1,2    2,1    3,2    4,1

      B   2,4  1,2    3,1    4,2

      C   2,1    3,3    4,3    1,4

      D   1,3    4,4    3,4    2,3

  算法结果为:

   i) A选择a,B选择b,C选择d,D选择a;a拒绝D。

   ii) D选择d,d拒绝C。

   iii) C选择a;a拒绝A。

   iv) A选择b;b拒绝B。

   v) B选择a;拒绝B。

   vi) B选择 c。  

  在ⅵ)中,不存在拒绝,因而

       A<->b  B<->c C<->a  D<->d

  是稳定完备婚姻。

  在延迟认可算法中,如果我们交换男女的角色,让男士按照他们排列的优先级别选择女士,那么我们得到一个稳定的完备婚姻,婚姻可能但不是必须不同于让女士选择男士所得到的稳定完备婚姻。

  例3 将延迟认可算法用于上例中的优先秩评定矩阵,其中男士选择女士。结果为:

   i) a选择C,b选择A,c选择B,d选择A

  ii) A拒绝d,d选择B;B选择d。

  iii) D选择D。

  完备婚姻

      a<->C   b<->A  c<->B  d<->D

  是稳定的,这是以相反的方式利用该算法所得到的相同的完备婚姻。  

  在一个稳定完备婚姻中,如果以为女士得到作为配偶的男士比她在每一其他的稳定完备婚姻所得到的配偶在她的排序表中至少有同样高的优先级,那么,这个稳定的完备婚姻叫做是对该女士最优的。换句话说,不存在使得该女士得到在她的排序中具有更高级别排序的配偶的稳定完备婚姻。如果一稳定完备婚姻对每一位女士都是最优的,则称该完备婚姻是对女士最优的。我们用类似的方法定义对男士最优的稳定完备婚姻。然而,存在女士优先的和男士优先的稳定完备婚姻就不是明显的了。事实上,如果每一位女士独立地得到所有稳定完备婚姻中最好的伴侣,结果导致一次男女配对,这个结论是不明显的(可以想象用这种方法的结果有可能会导致两位女士得到相同的男士)。显然,可能只存在一种女士最优的完备婚姻和只存在一种男士最优的完备婚姻。

  2.4 延迟认可算法的性质

  按照 Gale-Shapely 算法,我们一定能得到一个稳定婚姻。也就是说,不管这N个男人和N个女人的优先表是如何分布的,至少存在一个稳定婚姻匹配。在“男优先”算法实现中,得到的一个稳定婚姻匹配具有如下三点性质:  

  (1) 男性能够获得尽可能好的伴侣,结果是:如果还存在其他的稳定匹配,那么里面任何一个男性的伴侣排名都不会比“男优先”得到的结果更好,我们说此种情况每个男性获得的是“最好”的伴侣。  

  (2) 女性却只能被动地一步步接近她最爱的目标, 但最后往往达不到,结果是:如果还存在其他的稳定匹配,那么里面任何一个女性的伴侣排名都不会比“男优先”得到的结果更差,我们说此种情况每个女性获得是“最差”的伴侣。

  (3) 无论男性们求婚的先后顺序如何,最终得到的是同一个稳定婚姻匹配。

  当然,这个算法的实现也可是:“女优先”,同样,得到的此稳定婚姻匹配具有对应的三点性质:

  (1) 在所有可能的稳定婚姻匹配中,“女优先”得到的结果中每个女性获得的是“最好”的伴侣。  

  (2) 在所有可能的稳定婚姻匹配中,“女优先”得到的结果中每个男性获得的是“最差”的伴侣。  

  (3) 无论女性们求婚的先后顺序如何,“女优先”最终得到的是同一个稳定婚姻匹配。

   4.结束语  

  历史上,这样的“配对游戏”还真有过实际应用,并且更有意思的是,这个算法的应用居然比算法本身的提出还早 10 年。早在 1952 年,美国就开始用这种办法给医学院的学生安排工作,这被称之为“全国住院医师配对项目”。配对的基本流程就是,各医院从尚未拒绝这一职位的医学院学生中选出最佳人选并发送聘用通知,当学生收到来自各医院的聘用通知后,系统会根据他所填写的意愿表自动将其分配到意愿最高的职位,并拒绝掉其它的职位。如此反复,直到每个学生都分配到了工作。当然,那时人们并不知道这样的流程可以保证工作分配的稳定性,只是凭直觉认为这是很合理的。直到 10 年之后, Gale 和 Shapely 才系统地研究了这个流程,提出了稳定婚姻问题,并证明了这个算法的正确性。  用稳定性来评价配对方案的好坏的确很站得住脚,但有时候我们也会遇到一些别的需求,它们又对应着算法世界中的诸多其它问题。比方说,如果我们已经知道每一对男女之间的“相配度”,如何寻找一种配对方案使得由此产生的总相配度最大?在算法领域中,这被称为二分图的最大权值匹配问题。再比如,如果不考虑性别的差异(比如同桌、搭档的匹配),问题就更加复杂了,这通常被归入一般图匹配的范畴。这些问题现在都已经找到了有效的算法,生活中的算法应用随处可见。我们要做的,就是带领大家从身边熟悉的事物出发,一睹算法的无尽魅力。

原文地址:https://www.cnblogs.com/Norlan/p/4744699.html