算法的故事 / 第一季第二季目录0 / 30 章已读

第二季 · 第 39 章

为什么最满意的分配反而不稳定?

《算法的故事》第二季 · 第二篇:寻找世界的最优解——盖尔、沙普利与延迟接受算法的诞生1962年1月,一篇只有七页的数学论文发表了。论文的标题有些特别:College Admissions and the Stability of Marriage《大学录取与婚姻的稳定性》。大学录取与婚姻,究竟有什么共同之处?大学需要选择学生。学生也需要选择大学。一所学校可能非常欣赏某名学生,但这名学生最想去的却是另一所学校。一个学生可能同时获得两所学校的录取,必须决定接受哪一份邀请。某所大学提前发出了全部录取通知,却发现很多学生最终选择了其他学校。为了补足名额,它只好继续邀请候补名单上的学生。新录取又可能改变其他学校的情况。看起来,每个人都在争取最好的结果。可如果所有人都按照自己的愿望行动,整个录取过程却可能陷入混乱。其中最奇怪的是:即使我们已经使用一套精确的优化算法,找到了总成本最低的分配,也不能保证这份分配能够稳定地维持下去。因为数学上的最小成本,不一定能够消除参与者改变配对的动机。一个学生可能宁愿放弃被安排的学校,转去另一所学校。而那所学校,也可能更愿意接收他,而不是现在录取的某个人。只要双方都有改变配对的意愿,原本看似最优的分配就可能被打破。两位数学家决定研究这个问题。他们是 戴维·盖尔(David Gale)和 劳埃德·沙普利(Lloyd Shapley)。他们提出的算法没有要求所有人在第一次选择时就作出最终承诺。相反,它允许一方暂时保留最好的邀请,允许另一方继续尝试,也允许在更好的邀请到来时,撤销之前的暂定安排。这项算法后来被称为:延迟接受算法(Deferred Acceptance Algorithm)。它帮助数学家证明,在一类基本的双边匹配问题中,稳定的分配一定存在。更重要的是,几十年之后,这项原本抽象的数学研究,真的进入了医院、学校和现实社会。

第一幕:一场没有赢家的录取竞赛

约翰斯·霍普金斯大学威尔默眼科研究所1951—1952年度住院医师合影,反映美国医学教育当时的实际环境。照片来自约翰斯·霍普金斯医学史资料,并非稳定匹配研究者的工作现场。让我们首先回到二十世纪上半叶的美国。那时,医学毕业生需要寻找实习和住院医师培训岗位。医院需要年轻医生。年轻医生也需要医院提供临床训练的机会。看起来,这应当是一件非常普通的招聘工作。但招聘制度逐渐产生了一个令人头疼的问题。

医院开始越来越早地争夺学生

想象有三家医院。一家位于纽约。一家位于波士顿。另一家位于芝加哥。每家医院都希望招募最优秀的医学毕业生。但每家医院也知道:自己看中的学生,很可能同时收到其他医院的邀请。因此,如果等到学生毕业之后才开始招聘,可能已经来不及了。于是,有的医院决定提前几个月发出邀请。另一家医院看到这种情况,就决定再提前几个月。第三家医院不愿落后,索性更早开始招聘。很快,整个招聘市场形成了一场令人疲惫的竞赛。谁发出邀请更早,谁似乎就更有机会抢到优秀学生。但代价也越来越高。医院在学生尚未完成学业时,就必须作出决定。学生也可能尚未确定自己真正希望从事的医学专业。到了1930年代,美国部分医院的实习岗位已在学生毕业前很久就被安排出去。1940年代,这种过早招聘的问题进一步加剧。[Federal Reserve Bank of Minneapolis][诺贝尔奖官网]

十分钟内必须回答的邀请

在这样的环境里,还会出现另一种困境。假设某家医院给一名学生发来邀请。它希望学生尽快接受。为什么?因为如果这名学生拒绝,它还需要赶紧把岗位提供给下一位候选人。若等待太久,其他候选人也可能已经接受了别家的邀请。于是,医院可能要求学生在很短的时间内决定。但学生同样陷入两难。他也许最想进入另一家医院。可那家医院还没有给出答复。如果拒绝眼前的邀请,最后又没有等到更好的机会,就可能失去培训岗位。如果接受眼前的邀请,又担心更好的机会稍后到来。一个人越想为自己作出最好的选择,就越可能被迫在信息不完整时提前决定。这种现象在市场设计中被称为 unraveling,即交易或招聘时间不断提前的现象。美国医师培训岗位市场的这一历史过程,后来被经济学家 阿尔文·罗斯(Alvin E. Roth)进行了系统研究。1984年,他在《政治经济学杂志》发表《医学实习生与住院医师劳动力市场的演变》,从博弈论角度解释早期制度为何容易失序,以及集中匹配机制为什么能够持续发挥作用。[RCNi Company Limited][Stanford University]

1952年:比盖尔与沙普利更早的实际匹配制度

为了应对这种混乱,美国医学界逐渐建立了集中匹配机制。学生和医院提交各自的偏好顺序。然后,由统一的匹配机构安排岗位。1952年,一个与后来的稳定匹配理论密切相关的中央匹配算法开始实际使用。后来,这一制度以美国全国住院医师匹配计划(NRMP)而闻名。这里有一个重要的历史细节。1952年的医学匹配制度,比盖尔与沙普利1962年的论文还早十年。不能说美国医生直到1962年之后,才第一次使用稳定匹配思想。事实上,早期医疗匹配机制是在实践需求中独立演化出来的。而直到多年以后,罗斯才从理论上揭示它与 Gale–Shapley 稳定匹配机制的深刻关系。[哈佛大学电子工程与计算机科学系][JAMA Network]科学史有时就是这样。实践中的组织者为了处理真实困难,先找到了一种能够运作的制度。数学家则从更加抽象的角度,研究这种制度究竟为什么有效。两条研究道路,后来才真正相遇。

医院需要的究竟是什么?

回到最初的招聘问题。一家医院当然希望得到排名最高的学生。学生同样希望进入自己最喜欢的医院。可是,如果让医院先挑选,可能使学生失望。如果让学生优先挑选,医院又可能不满意。我们是否能够找到一种分配,使任何学生和医院都没有理由绕过整个制度,私下重新配对?这个问题已经与上一章的匈牙利算法不同。匈牙利算法解决的是:怎样让总成本最小?\text{怎样让总成本最小?}而现在的问题是:怎样让匹配关系稳定?\text{怎样让匹配关系稳定?}要回答它,我们需要先精确定义什么叫作稳定。而在1962年的论文里,盖尔与沙普利给出了一个极其清晰的数学定义。

第二幕:1962年,一篇数学论文把“反悔”变成了严肃问题

1962年1月,Gale 与 Shapley 在《The American Mathematical Monthly》第69卷第1期发表《College Admissions and the Stability of Marriage》,第9—15页。[数字对象标识符][多伦多大学数学系]1962年,盖尔和沙普利分别在布朗大学及兰德公司相关的数学研究环境中工作。两个人拥有相似的学术背景。盖尔1921年出生于纽约,1949年在普林斯顿大学获得数学博士学位,研究过博弈论、线性规划和数学经济学。他在1950年进入布朗大学任教。沙普利1923年出生于马萨诸塞州剑桥市。他的父亲哈洛·沙普利是一位天文学家。第二次世界大战期间,沙普利曾经从军,战后进入普林斯顿大学,1953年获得数学博士学位。他在合作博弈论领域取得许多重要成果,包括后来以他名字命名的沙普利值(Shapley Value)。[加州大学参议院][INFORMS]两人都对一个问题感兴趣:当不同的人拥有不同偏好时,什么样的合作关系能够稳定存在?

一封信,和一个尚未证明的猜想

这段合作有一项特别有趣的历史记录。2007年7月12日,盖尔在美国石溪的一场庆祝其八十五岁生日的学术活动上,回忆了当年的研究经过。根据罗斯在2008年发表的文章,盖尔说,最初是自己提出了双边匹配模型以及稳定性的定义。他向几位同行写信,提出一个猜想:对于这种匹配问题,稳定的配对是否总能存在?沙普利收到问题之后,通过回信提出了延迟接受算法以及相应证明。[Gale and Shapley.revised.IJGT.doc][Gale and Shapley.revised.IJGT.doc]我们不知道这两封信中的每一句具体文字。但当事人的回忆清楚说明了研究思路的分工:盖尔提出了值得研究的数学问题。沙普利找到了一个构造性解决办法。随后,两人共同发表了结果。这个故事没有惊天动地的实验装置。也不需要一间摆满电子计算机的实验室。数学突破有时只需要一个精确定义的问题,和一项能够被证明有效的程序。

原论文从大学录取开始

与许多人印象不同,1962年论文的第一句话,并没有开始讲婚姻。它先讲大学。一所大学能够录取的名额有限。如果只向最喜欢的几名申请人发出录取通知,可能有人不接受。于是,学校不得不考虑额外发放邀请。但多发多少才合适?如果有些学生暂时接受了一所大学,后来又收到了更喜欢的大学的录取,会怎样?原论文开篇甚至直接提出了一个具有伦理意味的问题:学生是否可以先接受某所学校的邀请,等另一所更喜欢的学校录取时,再撤销先前的接受?盖尔与沙普利认为,这种制度性的困难可以通过更加合理的匹配程序加以处理。[多伦多大学数学系][JOVANA Education]这个问题非常现实。因为大学录取不是普通的商品买卖。在普通市场中,价格可能帮助协调供给与需求。但录取岗位往往受到名额、学业要求和政策约束。学生不能简单地通过出更高价格,就得到某个特定录取席位。而学校也不能保证自己最欣赏的学生一定愿意入学。双方都具有选择权。

为什么论文后来讲起了婚姻?

为了提取问题最基本的数学结构,盖尔与沙普利使用了一个简化模型。假设有数量相同的两组参与者。每个人都希望与另一组中的一人配对。每个人都对另一组成员拥有完整且严格的偏好排序。论文使用了当时常见的“男性与女性婚姻配对”形式来解释。这也是“稳定婚姻问题”(Stable Marriage Problem)这个名称的来源。但这一模型本质上研究的是抽象的双边匹配。它不依赖任何现实中的性别角色。在现代算法里,两组人完全可以是学生与学校、员工与岗位、实习医生与医院,或者其他拥有双边偏好的参与者。“谁先提出申请”也可以作为一个独立的制度选择。
图39-1:双边匹配的基本结构
甲A乙B丙C学生学校每一方都拥有对另一方的偏好顺序
查看 SVG 配图原件
示意图原件 39-006-d237d3b09966.svg
39-006-d237d3b09966.svg · 点击查看大图
每名学生希望进入一所学校,每所学校在这个简化模型中只拥有一个名额。实际大学录取可以扩展为多名额匹配。

稳定,到底是什么意思?

假设我们已经完成全部分配。学生甲去了A学校。学生乙去了B学校。这时候,乙突然发现:自己其实更喜欢A学校。而A学校又发现:相比现在录取的甲,自己更愿意录取乙。那么乙与A就形成了一组特殊关系。他们虽然没有被配在一起,却都更喜欢彼此,而不是自己的当前配对。这种关系叫作阻挡对(Blocking Pair)。如果存在阻挡对,原来的匹配便是不稳定的。因为这一对参与者拥有共同改变安排的动机。反过来:如果不存在任何阻挡对,那么这个匹配就是稳定的。注意,这里并没有要求所有人都得到第一志愿。也没有要求所有人的满意度之和最大。稳定只要求:不存在一对没有匹配到一起、却都严格希望改成彼此配对的参与者。这一项定义,改变了整个问题。上一章的匈牙利算法关注一个可以相加的总成本。而这里,我们关注的是参与者之间是否存在相互愿意背离当前安排的关系。这就是优化目标的根本变化。

第三幕:一份成本最小的分配,为什么仍然会被推翻?

20世纪中期大学录取办公室的时代参考。接下来的两校两生案例为教学构造,用于区分“总成本最小”与“匹配稳定”两个不同目标。现在,我们设计一个只有两名学生和两所学校的世界。学生:甲、乙。学校:A、B。每所学校只有一个名额。

第一张表:交通和住宿成本

假设甲住在A学校附近,而乙住在B学校附近。他们入学后的综合交通与住宿成本如下:
学生A学校B学校
甲18
乙41
如果目标是让两名学生的总生活成本最低,答案很容易。甲去A。乙去B。总成本:1+1=21+1=2另一种分配是:甲去B。乙去A。总成本:8+4=128+4=12显然,第一种分配更节省费用。如果使用匈牙利算法,并把这张表作为唯一优化指标,就会选择总成本为2的方案。

第二张表:双方真正的偏好

但是,假设学生选择学校并不只考虑生活费用。甲喜欢A学校的专业。乙也更喜欢A学校的研究方向。因此:
参与者第一偏好第二偏好
学生甲A学校B学校
学生乙A学校B学校
A学校学生乙学生甲
B学校学生甲学生乙
现在重新观察总成本最低的方案:甲去A。乙去B。问题出现了。学生乙更喜欢A。而A学校也更喜欢乙。因此:(乙,A)\boxed{(\text{乙},A)}形成阻挡对。
图39-2:低成本方案中的阻挡对
甲乙AB原分配:甲—A原分配:乙—B乙与A更希望彼此配对
查看 SVG 配图原件
示意图原件 39-008-b106e6b3b282.svg
39-008-b106e6b3b282.svg · 点击查看大图
蓝色实线代表既定分配;虚线表示一对彼此更喜欢对方的未匹配对象。虚线就是阻挡关系。
如果乙能够转去A学校,而A也能够录取乙、替换甲,他们双方都会认为这是一次改善。所以,成本最低的分配在匹配理论意义下并不稳定。

那么稳定方案是什么?

交换两名学生的学校。甲去B。乙去A。乙得到了自己最喜欢的A学校。A也得到了最喜欢的乙。甲虽然更喜欢A,但A并不希望放弃乙、改为录取甲。所以甲与A无法构成阻挡对。B虽然更喜欢甲,但甲已经在B,不存在其他双方互相希望改变的配对。因此,第二种安排是稳定的。即使它的生活成本高达12。
分配方案生活成本是否稳定
甲—A;乙—B2不稳定
甲—B;乙—A12稳定
这并不意味着稳定方案在所有意义上都更好。也不意味着我们应该无条件牺牲生活成本。它揭示的是两个不同的目标:最小成本要求某个数值尽可能小。稳定匹配要求不存在能够互相改善配对的阻挡对。如果现实制度还需要同时考虑费用、公平、稳定性和其他政策目标,那么就可能需要更复杂的模型,不能简单地将这些目标混为一谈。

这就是本章的真正矛盾

在工厂分配问题中,机器不会因为不满意而私下换工作。但学生、学校、医生和医院都具有自己的选择权。当分配对象拥有独立意愿时,数学上最经济的安排,不一定是一份能够被参与者维持下去的安排。如果想建立稳定的制度,我们就需要研究参与者的偏好关系。1962年的盖尔与沙普利,正是在这个问题上取得了突破。他们没有试图寻找一个新的总成本公式。而是提出了一套看起来非常人性化的程序。先表达偏好。暂时保留。允许拒绝。允许重新选择。直到整个系统不再需要改变。

第四幕:延迟接受——先不要把答案写死

录取通知、候补名单与多所学校之间的选择,是1962年原始论文讨论的重要现实背景。图为时代场景参考,并非论文作者的办公室。现在我们来到整个故事的中心。如果各方都希望得到更好的匹配,又不允许随意抢占别人的位置,那么有没有办法建立一套统一的选择程序?盖尔和沙普利的答案十分简单。不要一开始就作出最终录取。学校收到申请时,可以暂时保留目前最满意的人选。如果后来出现更合适的申请人,可以重新比较。之前暂时保留的人,可能被拒绝。被拒绝的申请人,则继续向下一所更喜欢的学校提出申请。这个过程会一直重复。直到所有还希望申请的人,都不再需要提出新的申请。最后,才将暂时保留变成正式录取。这就是“延迟接受”的含义。它延迟的不是所有人的行动。而是最终、不可更改的承诺。

三名学生,三所学校

我们用一个具体的例子来运行算法。三名学生:甲、乙、丙。三所学校:A、B、C。每所学校只有一个名额。学生的志愿顺序如下:
学生第一志愿第二志愿第三志愿
甲ABC
乙ACB
丙BCA
学校也拥有自己的候选人排序。
学校第一偏好第二偏好第三偏好
A乙丙甲
B甲丙乙
C乙甲丙
以下学生、学校和偏好顺序均为教学设计,便于观察暂留、拒绝及重新申请的过程,不对应某次真实大学录取。现在,让学生作为提出申请的一方。

第一轮:两个人同时申请A

甲的第一志愿是A。乙的第一志愿也是A。丙的第一志愿是B。于是第一轮申请是:甲→A\text{甲}\rightarrow A乙→A\text{乙}\rightarrow A丙→B\text{丙}\rightarrow BA学校收到两份申请。但只有一个名额。在A的偏好里:乙≻丙≻甲\text{乙}\succ\text{丙}\succ\text{甲}因此,A暂时保留乙,拒绝甲。B学校只收到了丙的申请,于是暂时保留丙。此时:
学校暂时保留被拒绝
A乙甲
B丙—
C——
甲没有得到学校。但他没有被整个系统淘汰。他还有第二志愿。

第二轮:一个新申请,改变了原来的安排

甲被A拒绝。于是,他向自己的第二志愿B提出申请。现在,B已经暂时保留了丙。B该怎么办?如果第一次保留就等于最终录取,那么B只能拒绝甲。但延迟接受算法不这样做。B重新比较:当前保留的丙。刚刚申请的甲。根据B的排序:甲≻丙≻乙\text{甲}\succ\text{丙}\succ\text{乙}甲比丙更符合B的偏好。于是:B暂时保留甲。B拒绝之前保留的丙。
图39-3:暂时保留,不等于永久承诺
甲丙B新的申请:甲旧的暂留:丙被释放
查看 SVG 配图原件
示意图原件 39-010-023545f8f44c.svg
39-010-023545f8f44c.svg · 点击查看大图
B并没有扩大招生名额,而是重新评估暂留申请,决定将名额留给更符合其排序的甲。
这便是整个算法最重要的动作。允许一项暂时安排被更好的新申请替代。如果你还记得第37章的最大流算法,应该会产生一种熟悉感。在那里,算法能够通过反向残量边,撤销之前的部分流量分配。在这里,学校可以撤销之前的暂留决定,让被拒绝的学生继续寻找其他机会。两种算法解决的问题不同。但它们都没有把早期的局部选择当作无法修改的承诺。

第三轮:最后一名学生继续申请

丙被B拒绝了。他查看自己的志愿表。第一志愿B已经拒绝了他。所以,他向第二志愿C提出申请。C目前没有暂留学生。于是,C暂时保留丙。现在结果变成:甲→B\text{甲}\rightarrow B乙→A\text{乙}\rightarrow A丙→C\text{丙}\rightarrow C没有任何学生还需要提出新申请。算法停止。所有暂留安排正式成为匹配结果。
图39-4:三轮之后形成的稳定匹配
甲B乙A丙C最终:甲—B,乙—A,丙—C
查看 SVG 配图原件
示意图原件 39-011-1c74b60cece7.svg
39-011-1c74b60cece7.svg · 点击查看大图
现在,或许有人会问:甲没有进入自己的第一志愿A。丙也没有进入自己的第一志愿B。为什么还要称这是一份稳定匹配?因为稳定与否,不能只看有没有人失望。而要看是否存在双方都想重新配对的阻挡对。甲更喜欢A。但是A现在录取了乙。在A的排序里,乙比甲更受偏好。所以甲与A无法形成阻挡对。丙更喜欢B。但是B现在录取了甲。在B的排序里,甲比丙更受偏好。所以丙与B也不能形成阻挡对。乙已经进入自己的第一志愿A,没有理由与其他学校构成阻挡对。于是:不存在阻挡对\boxed{\text{不存在阻挡对}}这份匹配是稳定的。而更重要的是:盖尔与沙普利证明,这样的结果并非某个例子的幸运巧合。只要满足他们研究的基本条件,这套程序总能够找到稳定匹配。

第五幕:为什么它一定停下来,又为什么一定稳定?

算法证明的核心是两个不变量:申请方不会重复申请同一对象;接收方保留的候选人,在自身偏好顺序上只会越来越好。一项算法能够在几个例子里成功,并不意味着它永远正确。这一点,我们在第31章欧几里得算法里已经讨论过。一个真正可靠的算法,需要回答两个不同的问题。第一,它会不会永远运行下去?第二,它停止之后,得到的答案是不是正确?延迟接受算法的证明,既简洁又漂亮。

证明一:为什么不会无限运行?

假设有 nn 名学生,以及 nn 所学校。每名学生最多向每所学校申请一次。如果某所学校已经拒绝他,他便不会向同一所学校重新申请。因此,每名学生最多提出:nn次申请。全部学生最多提出:n×n=n2n\times n=n^2次申请。所以,算法不可能无限进行。一旦所有可能提出的申请都已经处理完毕,程序必然停止。申请次数最多为 n2\boxed{\text{申请次数最多为 }n^2}这是算法的终止性保证。需要补充的是,申请次数为 O(n2)O(n^2),并不自动等于任何程序实现的总时间复杂度都为 O(n2)O(n^2)。如果每次接收申请都重新遍历完整偏好表,程序还会产生额外开销。但如果预先为接收方建立排名表,使每次比较能够在常数时间内完成,那么经典一对一模型可以在 O(n2)O(n^2) 时间内实现。

证明二:学校只会保留更喜欢的申请人

观察任意一所学校。第一次申请到来时,它可能暂时保留一名学生。如果后来收到新的申请,它只会在更喜欢新申请人的情况下,替换此前暂留的人。因此,随着算法不断运行,每所学校所暂留申请人的排名,只会变得更好,不会变得更差。这叫作接收方的单调改善性质。它是证明稳定性的关键。

证明三:假设最后竟然出现一个阻挡对

我们采用反证法。假设算法已经停止。但存在学生甲与学校A,构成阻挡对。这意味着:甲更喜欢A,而不是自己最终分配到的学校。同时,A也更喜欢甲,而不是最终录取的学生。现在仔细考虑甲的申请顺序。由于甲按照偏好从高到低申请,而他最终没有进入A,所以只要A比他的最终学校更受偏好,他必定曾经向A提出申请。既然最终没有被A录取,那么A必定曾经拒绝过甲。但A只有在持有更喜欢的申请人时,才会拒绝甲。而一旦发生拒绝,A后来保留的申请人只会越来越符合A的偏好。所以,到算法结束时,A最终录取的学生一定仍然比甲更符合它的排序。这与我们刚才假设的:“A更喜欢甲,而不是最终录取的人”直接矛盾。因此,这种阻挡对不可能存在。延迟接受算法最终得到的匹配必然稳定\boxed{\text{延迟接受算法最终得到的匹配必然稳定}}这正是1962年论文中最重要的数学结论。[Gale and Shapley.revised.IJGT.doc][Gale and Shapley.revised.IJGT.doc]

一项构造性的存在证明

这里还有一个值得注意的数学思想。盖尔与沙普利并不只是证明“稳定匹配应该存在”。他们直接给出了一套能够构造稳定匹配的算法。只要运行这套程序,就能得到一个符合条件的匹配。因此,这同时是一项存在性证明和一种求解方法。这种思路在计算机科学里极为重要。我们不仅关心某种对象是否存在。还关心能否在有限的、可以分析的计算成本内把它找出来。从这一点看,延迟接受算法与前几章中的许多经典算法都有共同之处。它利用数学结构,而不是枚举所有可能的配对组合,获得了可证明的结果。

第六幕:同样稳定的匹配,为什么还能有三种不同答案?

盖尔与沙普利的稳定匹配研究还揭示了一个重要性质:稳定匹配不一定唯一,而由哪一方主动提出申请,会影响不同参与者最终获得的结果。到这里,我们已经知道延迟接受算法一定能够找到稳定匹配。但一个更加微妙的问题出现了。稳定匹配只有一种吗?如果存在多种稳定分配,那么应该选择哪一种?为了回答这个问题,我们不必自己虚构例子。1962年原始论文第三节中,就有一个特别漂亮的三对三案例。盖尔与沙普利在那里展示:同一组偏好,竟然可以拥有三种不同的稳定匹配。[多伦多大学数学系][多伦多大学数学系]

原论文中的三组偏好

为了便于阅读,我们将论文中的三名男性记为学生甲、乙、丙,将三名女性记为学校A、B、C。这是对原有双边模型的教学性重命名,并没有改变排序结构。学生的偏好:
学生第一志愿第二志愿第三志愿
甲ABC
乙BCA
丙CAB
学校的偏好:
学校第一偏好第二偏好第三偏好
A乙丙甲
B丙甲乙
C甲乙丙
现在,我们分别从学生和学校的角度运行算法。

情况一:让学生提出申请

第一轮:甲向A申请。乙向B申请。丙向C申请。恰好每所学校都只收到一份申请。因此:甲被A暂留。乙被B暂留。丙被C暂留。没有人被拒绝。算法立刻结束。最终结果:MS={(甲,A),(乙,B),(丙,C)}M_S=\{(\text{甲},A),(\text{乙},B),(\text{丙},C)\}这一方案非常特殊。每个学生都得到了自己的第一志愿。但观察学校的偏好。A最喜欢乙,却录取甲。B最喜欢丙,却录取乙。C最喜欢甲,却录取丙。每所学校都得到了自己偏好排序中的最后一名。这样的结果居然还是稳定的。为什么?因为学生已经全部进入第一志愿。没有任何学生还希望与另一所学校重新配对。即使学校不满意,也无法找到愿意一同改变匹配的学生。

情况二:让学校提出邀请

现在改变规则。不是学生申请学校。而是学校按照自己的偏好,逐一邀请学生。第一轮:A最喜欢乙,于是邀请乙。B最喜欢丙,于是邀请丙。C最喜欢甲,于是邀请甲。同样没有发生冲突。最终得到:MC={(甲,C),(乙,A),(丙,B)}M_C=\{(\text{甲},C),(\text{乙},A),(\text{丙},B)\}这一次,所有学校都得到了自己的第一偏好。而所有学生都得到了第三志愿。它也同样稳定。因为每所学校都已经获得自己最喜欢的学生。任何学生即使希望更换学校,也找不到愿意共同改变配对的学校。

情况三:还有一种居中的稳定匹配

原论文还给出了第三种方案:MM={(甲,B),(乙,C),(丙,A)}M_M=\{(\text{甲},B),(\text{乙},C),(\text{丙},A)\}在这个方案里:每名学生都得到第二志愿。每所学校也都得到第二偏好。而且,这种安排仍然没有阻挡对。
图39-5:同一问题中的三种稳定匹配
方案匹配学生得到的志愿学校得到的排序
学生提出甲—A,乙—B,丙—C全为第1全为第3
中间方案甲—B,乙—C,丙—A全为第2全为第2
学校提出甲—C,乙—A,丙—B全为第3全为第1
根据 Gale–Shapley 1962年论文第三节的原始例子整理。三种方案均稳定,但给两侧参与者带来的偏好结果明显不同。
这是整个匹配理论中最令人惊讶的发现之一。稳定并没有自动确定唯一的最好分配。不同的稳定匹配,可能让不同群体得到截然不同的结果。

谁提出申请,谁就拥有某种优势

在经典一对一、严格偏好模型里,如果由学生一侧提出申请,那么得到的结果叫作:学生最优稳定匹配(Student-Optimal Stable Matching)。它的意思是:在所有稳定匹配中,每名学生得到的学校,都至少和他在其他任何稳定匹配中得到的一样受偏好。注意,不是“所有学生的偏好排名之和最小”。而是一个更强的、逐个人成立的结论。同样,如果由学校提出邀请,就会得到学校最优稳定匹配。在完整且严格的经典模型里,这也是对学生一侧最不利的稳定匹配。因此:由哪一侧提出申请,会影响稳定匹配的分配结果\boxed{\text{由哪一侧提出申请,会影响稳定匹配的分配结果}}1962年,盖尔与沙普利就证明了这一重要性质。[Gale and Shapley.revised.IJGT.doc][Gale and Shapley.revised.IJGT.doc]

那么,学生为什么不谎报志愿?

假设学生甲真正的排序是:A≻B≻CA\succ B\succ C他担心A竞争太激烈。于是故意把B排在第一。这样是否可以提高最终匹配结果?在经典学生提出申请的延迟接受机制中,如果学校的偏好或优先级保持固定、学生的偏好严格,那么真实报告偏好,对每名学生而言是一项弱占优策略。换句话说:在其他参与者的报告固定时,学生不能通过谎报自己的偏好,让自己得到严格优于如实填报时的结果。这个结论通常称为策略无关性(Strategy-Proofness),也可以称为诚实填报激励相容性。但是,这个性质并不对双方同时成立。对于学校一侧,一般不能获得同样的完整保证。而当模型引入并列偏好、夫妻联合申请、地区约束或其他复杂条件时,还必须重新分析相应的激励性质。1962年的论文建立了稳定匹配的核心框架,关于机制策略性质的研究则在后来持续发展。[Gale and Shapley.revised.IJGT.doc][诺贝尔奖官网]这里有一项非常重要的现实启示。良好的录取制度,不应该鼓励学生去猜测“哪所学校更容易录取,所以我应该把它排在前面”。在适当设计的学生提出型延迟接受制度中,学生可以优先根据真实志愿排序,而不需要通过虚假降级志愿来讨好制度。当然,这不意味着所有现实招生制度都采用相同算法,也不意味着填写所有志愿的顺序在所有制度里都拥有同样效果。必须先了解具体制度的实际规则。

第七幕:1984年至1998年,一项抽象定理回到医院

阿尔文·罗斯(Alvin E. Roth),经济学家与市场设计研究者。他对美国住院医师匹配制度的研究,将抽象的稳定匹配理论与真实制度设计连接起来。1962年的论文发表之后,稳定匹配首先成为数学与博弈论中的研究对象。它拥有简洁的定义。漂亮的证明。明确的计算步骤。但在当时,并不是所有人都意识到,这项数学理论与早已存在的现实招聘制度之间,可能有如此深刻的联系。直到1980年代,阿尔文·罗斯开始研究美国的住院医师匹配市场。

罗斯发现了一个令人惊讶的历史事实

美国医师匹配制度已经运行数十年。罗斯对其发展过程进行了系统分析。他发现,1952年开始实际采用的集中匹配算法,虽然与盖尔和沙普利后来发表的算法在操作形式上并不完全相同,但在相关经典模型下,能够产生等价于医院提出型延迟接受机制的匹配结果。也就是说:现实制度实践,在理论发表之前,就已经独立找到了一种与稳定匹配有关的有效机制。这一结论是罗斯1984年研究的重要发现。[RCNi Company Limited][哈佛大学电子工程与计算机科学系]但现实制度并非永远没有问题。随着医学教育制度变化,越来越多的医学毕业生拥有伴侣或配偶,而且两人可能都申请住院医师岗位。如果一对夫妇希望在同一地区工作,就不能简单地将两个申请人完全独立地处理。此外,原有机制偏向医院提出的一侧,也引起了关于制度设计公平性的争论。这些问题推动了后来的改革。

1995年:重新研究全国匹配算法

1995年,NRMP 委托罗斯评估现有机制。他与计算专家 Elliott Peranson 合作,研究新的匹配算法。这一研究并不是简单把1962年的教材代码复制到医院系统。真实匹配需要处理很多复杂条件。医院拥有多个岗位。申请人可能填写不同长度的志愿表。部分人以夫妻组合共同申请。不同专业和项目之间还可能存在特定约束。这些问题使真实系统远比三对三的课堂案例复杂。研究团队进行了大量计算实验,比较不同算法对申请人、医院以及整体匹配稳定性的影响。1997年5月,NRMP 董事会决定采用新的申请人提出型算法。新算法从1998年的匹配开始使用。[Stanford University][Stanford University]
图39-6:美国住院医师匹配制度的关键节点
1930—1940年代
招聘不断提前医院竞争优秀医学毕业生,形成过早发出邀请的问题
1952年
集中匹配算法投入使用独立于1962年论文的现实制度探索
1962年
Gale–Shapley论文发表严格证明稳定匹配的存在与延迟接受机制
1984年
罗斯发表历史与博弈论分析揭示早期医学匹配算法与稳定匹配理论的联系
1998年
新的申请人提出型算法启用在真实制度中采用更有利于申请方的匹配规则
这里还有一个很值得注意的研究结果。罗斯与 Peranson 使用历史匹配数据进行比较时发现,改用申请人提出型算法,确实在制度结构上体现了对申请方的倾斜。但从当时真实数据的模拟来看,前后两种算法产生不同匹配结果的申请人比例并不高。1997年发表的研究报告指出,差异涉及的申请人比例低于千分之一。这并不意味着选择哪一方提出申请无关紧要。它说明:理论上可能产生显著分配差异的机制,在某些具体大型市场里,实际结果也可能十分接近。理论告诉我们不同机制拥有怎样的性质。真实数据则告诉我们,这些差异在具体市场中有多大。[Stanford University][NBER]

一项重要的历史回环

现在回顾这段发展。1952年,医学界的实际组织者,独立发展出能够稳定运行的集中匹配制度。1962年,盖尔与沙普利证明了一类抽象的双边匹配问题必有稳定解。1984年,罗斯通过历史和博弈论研究,发现现实制度与数学理论之间的联系。1998年,新的研究又重新进入现实制度,推动一项重要的匹配算法改革。这不是数学单方面指导社会的简单故事。也不是现实经验完全取代理论的故事。它更像一条往返的道路。实践提出问题。数学解释结构。理论识别优缺点。新的计算与制度设计,再回到实践中解决问题。

第八幕:纽约的九万名学生,与2012年的诺贝尔奖

纽约市公立高中入学涉及大量申请学生及招生项目。2000年代初,市场设计研究者参与了该市高中录取匹配机制的改革。到了2003年,稳定匹配理论又进入了一个新的现实领域。这一次,不是医院。而是纽约市的公立高中录取制度。纽约市拥有庞大的公共教育系统。每年都有大量学生需要申请高中。部分高中与课程项目具有不同的招生要求。学生希望进入自己更喜欢的学校。学校和招生项目则按照相应规则、优先级与容量接收学生。在改革之前的制度中,许多学生无法通过最初的集中流程得到自己希望的学校,后续还需要进行额外分配。与此同时,旧机制也可能鼓励学生考虑如何策略性填写志愿,而不只是按照真实偏好排序。

一场真正进入城市管理的算法改革

2003年5月,纽约市教育部门的战略规划负责人联系了罗斯。希望借助现代匹配理论,改进高中招生制度。罗斯与 Atila Abdulkadiroğlu、Parag Pathak 和 Tayfun Sönmez 等研究人员展开合作。新机制借鉴了学生提出型延迟接受思想,并根据纽约市的具体招生规则进行了调整。在2003—2004学年开展的首次匹配中,改革取得了显著效果。研究人员2005年发表的论文报告:新机制每年处理超过九万名申请高中入学的学生。首轮实施中,约有三千名学生最终被分配到未列入自己志愿名单的学校。这一人数仅约为此前制度下相应人数的十分之一。[Stanford University][American Economic Association]这个结果说明,合理的匹配机制可以改善制度中的协调问题。但它并不自动创造新的学校席位,也不能单独解决优质教育资源不足的问题。如果有两万名学生都将某所学校列为第一志愿,而这所学校只有五百个席位,再优秀的算法也无法让所有人进入这所学校。算法能够帮助更合理地分配已有资源。却不能凭空增加资源。这与我们在第36章学习线性规划时得到的结论是一致的。真正的资源限制,无法仅靠计算技巧消失。

2012年:理论与实践共同获得认可

2012年诺贝尔经济学奖授予 Lloyd Shapley 与 Alvin E. Roth,表彰他们关于稳定分配理论和市场设计实践的贡献。[诺贝尔奖官网][加州大学参议院]2012年10月15日,瑞典皇家科学院公布了当年的诺贝尔经济学奖获得者。他们是:劳埃德·沙普利。阿尔文·罗斯。授奖理由概括为稳定分配理论与市场设计实践。这项奖项承认了稳定匹配理论从抽象数学走向社会制度的巨大影响。[诺贝尔奖官网]但请注意:盖尔并未与他们共同获奖。他已于2008年3月7日去世。诺贝尔奖原则上不向已经去世的人追授,因此1962年论文的两位共同作者,最终只有沙普利获得了这项奖项。[Game Theory Society][加州大学参议院]这里还有一个值得尊重的历史事实。稳定匹配不是两位得奖者独自完成的一切。盖尔提出模型并参与共同证明。沙普利推动了理论建立。罗斯揭示了理论与现实制度的联系,并与大量合作者共同设计和改进实际机制。从医院到高中,再到其他匹配市场,许多制度设计都需要研究者、软件工程师、政府机构和参与者共同完成。数学定理可以证明某种机制具有什么性质。但要让它在现实中正常运行,还需要大量具体的制度设计与工程工作。这场跨越半个世纪的研究,最后让我们看到:一项看似只有几行规则的算法,可能需要整个社会通过长期实践,才能真正发挥它的价值。

第九幕:互动实验室——你来控制每一轮录取

在稳定匹配实验中,最值得观察的是暂留、拒绝、重新申请,以及申请方和接收方对调之后的结果差异。现在,我们亲手运行一次 Gale–Shapley 算法。为了帮助理解,这个实验保留两组数据。第一组是第四幕的教学案例。它会发生暂留、拒绝以及替换已有申请人的过程。第二组采用1962年原论文的三对三偏好结构。它可以让你亲自观察:当学生提出申请与学校提出邀请时,同一组偏好会不会产生不同的稳定结果。

实验一:逐步推进延迟接受算法

图39-7:可操作的稳定匹配模拟器两组案例均为严格排序、每所学校一个名额。每次推进一个申请事件。
双方的偏好顺序
学生学校排序学校学生排序
甲A › B › CA乙 › 丙 › 甲
乙A › C › BB甲 › 丙 › 乙
丙B › C › AC乙 › 甲 › 丙
从左到右依次表示第一偏好、第二偏好、第三偏好。

申请过程第 0 / 5 步
A
学校当前暂留的学生尚未暂留
B
学校当前暂留的学生尚未暂留
C
学校当前暂留的学生尚未暂留
当前事件:初始状态匹配尚未开始。每名提出方都准备向第一偏好申请。
请先使用“反复拒绝案例”,观察甲从A被拒绝以后转向B,导致丙又被释放的过程。然后切换到“1962年论文案例”,分别选择学生提出申请和学校提出邀请。你将亲眼看到,同样的偏好顺序,竟然可以产生两种不同的稳定匹配。这不是算法运行错误,而是稳定匹配本来就可能不唯一。

实验二:用 Python 写出完整的 Gale–Shapley 算法

下面实现一个一对一、严格偏好的延迟接受算法。我们使用队列保存还需要提出申请的学生。学校只保存一个暂时接受的人选。整个程序可以在没有专业优化库的情况下运行。
python

from collections import deque


def gale_shapley(student_prefs, school_prefs):
    """
    学生提出型延迟接受算法。

    约定:
    1. 学生与学校数量相同。
    2. 每个参与者对另一侧均有完整、严格的偏好排序。
    3. 每所学校只有一个名额。
    """

    students = list(student_prefs)
    schools = list(school_prefs)

    if len(students) != len(schools):
        raise ValueError("本例要求双方人数相同")

    n = len(students)

    if any(set(order) != set(schools) or len(order) != n
           for order in student_prefs.values()):
        raise ValueError("学生志愿必须是所有学校的完整排列")

    if any(set(order) != set(students) or len(order) != n
           for order in school_prefs.values()):
        raise ValueError("学校偏好必须是所有学生的完整排列")

    # 学校的排名,便于常数时间内比较候选人
    rank = {
        school: {
            student: i
            for i, student in enumerate(order)
        }
        for school, order in school_prefs.items()
    }

    next_choice = {
        student: 0
        for student in students
    }

    held = {
        school: None
        for school in schools
    }

    free = deque(students)

    while free:
        student = free.popleft()

        choices = student_prefs[student]
        index = next_choice[student]

        if index >= n:
            continue

        school = choices[index]
        next_choice[student] += 1

        current = held[school]

        if current is None:
            # 学校还没有暂留学生
            held[school] = student

        elif rank[school][student] < rank[school][current]:
            # 新申请人更符合学校的排序
            held[school] = student

            if next_choice[current] < n:
                free.append(current)

        else:
            # 新申请人被拒绝,继续尝试下一个志愿
            if next_choice[student] < n:
                free.append(student)

    return {
        student: school
        for school, student in held.items()
        if student is not None
    }


student_prefs = {
    "甲": ["A", "B", "C"],
    "乙": ["A", "C", "B"],
    "丙": ["B", "C", "A"]
}

school_prefs = {
    "A": ["乙", "丙", "甲"],
    "B": ["甲", "丙", "乙"],
    "C": ["乙", "甲", "丙"]
}

matching = gale_shapley(
    student_prefs,
    school_prefs
)

for student, school in matching.items():
    print(f"{student} → {school}")
得到的结果是:
text
甲 → B
乙 → A
丙 → C
程序可能以不同顺序打印三项结果,但匹配关系相同。这段实现使用的是学生提出型算法。如果交换两组参与者,并相应调整输入含义,就可以计算学校提出型结果。对于三人三校的案例,两种算法都很容易运行。但如果拥有三千名学生呢?一万名学生呢?我们刚才证明过,在最基本的、双方各有 nn 名参与者的完整偏好模型中,提出申请的次数最多是 n2n^2。通过合理的数据结构,可以避免枚举全部 n!n! 种配对。这正是延迟接受算法的计算优势。

实验三:让一所学校录取两名学生

真实大学不可能都只有一个名额。假设有三名学生:甲、乙、丙。但A学校拥有两个名额。B学校只有一个名额。这时,接收方不再只保留一名申请人。而是暂时保留排名最高、且不超过容量的若干名申请人。例如:A学校收到甲、乙、丙三人的申请。它的容量是2。它根据自己的录取排序,只暂留其中最靠前的两人。第三人被拒绝,继续向下一所学校申请。以后若有新的申请人到来,学校仍会在所有暂留者和新申请者中,保留排序最高的两人。这就是经典延迟接受思想向多对一匹配的扩展。对于学校具有固定优先级、每名学生最多占一个席位、学校选择规则符合相应条件的模型,仍可以证明稳定匹配的存在。但是,一旦出现跨专业共享名额、区域配额或复杂的捆绑选择条件,就必须重新检查是否满足这些性质。不能假设任意增加复杂约束后,原来的算法仍然拥有完全相同的保证。

第十幕:稳定不是公平的全部,更不是幸福的保证

现实中的学校录取不仅涉及稳定性,还涉及优先级、容量、机会公平和个人偏好。匹配算法只能优化和保障模型中明确定义的性质。到这里,延迟接受算法似乎已经解决了所有问题。它一定会停止。能够得到稳定匹配。不需要穷举所有分配。如果由学生提出申请,还能得到学生最优稳定结果。但我们还必须回答一个更加严肃的问题:稳定,就一定代表公平吗?答案是否定的。

第一种局限:稳定不意味着每个人都满意

回到1962年原论文中的三对三例子。当学校提出邀请时,每所学校都得到了第一偏好。但每名学生都得到了第三志愿。结果仍然稳定。所以,不能把“稳定”解释为“所有参与者都满意”。稳定所排除的是特定的阻挡对,而不是所有失望或所有不平等。它没有保证每个人都得到第一选择。也没有自动定义什么才是最公平的制度。

第二种局限:优先级本身可能存在问题

在公立学校录取制度里,学校一侧经常不是在表达个人意义上的“喜欢”。它可能是在执行一种制度规定的优先级。例如:是否属于特定学区。是否有其他合法规定的录取优先资格。是否满足专业或课程要求。在这种情况下,所谓稳定性也常常与**没有正当嫉妒(No Justified Envy)**联系起来。假设某名学生更喜欢某所学校,而那所学校录取了一名优先级低于他的学生。在满足适当条件时,这可能意味着存在一项制度意义上的不合理分配。但如果学校的优先级规则本身不公平,即使算法忠实执行了规则,也不能证明最终结果在社会意义上公平。算法无法自动修复输入制度中的偏差。

第三种局限:有些偏好无法用简单排序表达

在基本模型里,每名参与者独立选择对方。可是,真实世界中的偏好经常不是这样的。例如,两位医生是一对夫妻。他们希望进入同一个城市,或者至少进入距离较近的两个医院。这时,一个人的偏好就依赖另一个人的去向。甲可能并不在意自己进入哪家医院。但非常在意乙被分配到哪里。这样的联合偏好不能简单表示成两个互不相关的个人志愿表。在包含夫妻联合申请等复杂约束的匹配模型中,经典 Gale–Shapley 稳定性与策略性质不能不加修改地直接套用。某些扩展模型甚至不保证稳定匹配一定存在。[NBER][哈佛大学电子工程与计算机科学系]

第四种局限:如果不是双边匹配呢?

盖尔与沙普利的论文还讨论过一个看起来相似、实则不同的问题:稳定室友问题(Stable Roommates Problem)。假设一个宿舍里有偶数名学生。他们希望两两分配宿舍。所有人属于同一组。任何两人都可能成为室友。现在不存在“学生与学校”这种天然的两侧划分。在这种情况下,稳定匹配不一定存在。甚至可以构造只有四名参与者的偏好,使所有可能的配对方案都包含阻挡对。因此,不能简单宣称:只要是匹配问题,延迟接受算法总能够找到稳定解。双边结构是经典 Gale–Shapley 存在性证明的重要条件。 [多伦多大学数学系][Gale and Shapley.revised.IJGT.doc]

第五种局限:算法不能决定我们应该追求什么社会目标

最小成本。最大收益。无正当嫉妒。稳定性。机会均等。透明度。可解释性。这些目标可能相互冲突。数学算法能够准确处理被明确形式化的目标与约束。但选择目标本身,往往属于政策、伦理与制度设计问题。这也是为什么现代市场设计既需要数学家和计算机科学家,也需要经济学家、公共管理者以及实际参与者。在设计一项制度之前,必须先回答:谁有权提出申请?谁有权选择?什么样的优先级是合法的?谁有权拒绝?哪些承诺可以撤销?哪些条件必须得到保护?这些问题的答案,都会影响最终算法的设计。稳定匹配理论给予我们的,并不是一套可以取代所有价值判断的万能规则。而是一种十分有力的数学工具。它让我们能够明确讨论:在什么条件下,一份分配可以长期保持稳定?不同机制会让哪些参与者获益?什么时候,个人真实表达偏好不会成为一种劣势?以及,哪些看似微小的制度规则,可能改变整个市场的结果?

尾声:允许暂时反悔,反而让最终承诺更加可靠

让我们再次回到1962年。盖尔与沙普利正在思考一个很特别的问题。当两组人都拥有独立的偏好时,怎样为他们建立能够稳定存在的配对关系?这个问题并不要求每个人都得到第一志愿。也不要求所有选择都能被转换成单一成本。它真正关心的是:如果已经完成一次匹配,是否还存在一对参与者,都希望放弃当前安排,转而与彼此配对?如果存在,这个匹配就是不稳定的。如果不存在,它就是稳定的。这个定义看起来十分简单。但它改变了分配问题的数学结构。在上一章,库恩的匈牙利算法通过矩阵变换与对偶理论,找到总体成本最低的任务分配。到了这一章,盖尔与沙普利却发现:面对拥有自己意愿的参与者,总成本最低,未必代表一份安排能够被双方接受并维持。于是,他们设计了延迟接受算法。这套程序最特别的地方,是它不要求所有人在第一次选择时就作出永久承诺。一个学生可以先向最喜欢的学校申请。一所学校可以暂时保留目前最喜欢的申请者。如果更好的候选者到来,学校可以重新选择。被拒绝的学生也不必立即退出。他还可以按照真实志愿继续申请。算法允许早期决定不断修改。但这种修改并不是毫无规则的反复无常。每名学生都按照自己的偏好顺序逐步前进。每所学校暂留的候选人在自身排序中只会变得更好。每个申请最多发生一次。因此,整个程序必然结束。而当它结束时,不再存在能够共同改变配对的阻挡对。这是一个很美丽的数学结果。允许暂时拒绝,反而使最终接受更加稳定。几十年后,这种数学思想真正进入了现实社会。美国住院医师匹配制度的历史,展现了市场组织者如何在理论出现前就独立探索类似机制。罗斯的研究揭示了其中的数学联系。随后的算法改革,又将理论重新带回制度设计。纽约市的高中录取改革,则进一步展示了匹配算法能够如何帮助大规模公共系统减少协调困难。最终,2012年的诺贝尔经济学奖,让更广泛的世界认识到稳定匹配理论的价值。但也有一项事实不应被忘记。盖尔与沙普利所证明的稳定性,并不是所有人都获得幸福的承诺。它只是在一个明确定义的数学模型里,保证不存在特定形式的双边背离动机。现实中,偏好可能复杂。资源可能不足。制度规则可能存在争议。不同参与者也可能对公平拥有不同理解。所以,算法可以帮助制度变得更加合理,却不能代替社会回答所有问题。回顾第二篇目前的四章,我们已经看到数学优化思想的逐步演进。丹齐格让我们学会将复杂的资源配置写成线性规划,并在可行空间中寻找最优方案。福特与富尔克森利用网络结构,让我们理解怎样通过增广路径寻找最大流,再由最小割证明极限。库恩把人员与任务的分配变成带权匹配问题,通过匈牙利方法找到整体最小成本。盖尔与沙普利则将双方偏好引入匹配,使算法开始面对拥有独立选择权的参与者。这四项研究看起来解决不同问题。其实它们都在追问一个更深刻的问题:当许多选择彼此冲突时,怎样找到一份具有明确数学保证的安排?但它们所采用的“好”的定义并不相同。有时,好意味着成本最低。有时,好意味着输送量最大。有时,好意味着不存在可以单独改善的局部选择。有时,好则意味着不存在一对参与者能够通过彼此重新配对而共同获益。算法不仅告诉我们怎样计算。它还迫使我们认真思考,究竟什么才是我们希望得到的结果。这也许是稳定匹配理论最值得记住的启示。当机器分配任务时,我们可能首先关注效率。当人类参与分配时,我们还必须关注偏好、激励、制度和稳定性。一个真正可靠的社会系统,并不是要求所有参与者永远服从第一次安排。而是应该在适当的规则下,让他们能够表达真实选择,并逐渐形成没有明显双边背离动机的最终结果。好的算法不只负责作出选择,也应该帮助我们理解:为什么这份选择能够成立。

历史档案:本章史实与教学重构

本章的核心历史叙事有以下一手研究及权威资料支持。
1962年 · 原始论文David Gale & Lloyd Shapley — College Admissions and the Stability of Marriage《The American Mathematical Monthly》第69卷,第9—15页。包含大学录取问题、稳定匹配定义、延迟接受算法及不同稳定匹配的例子。

1984年 · 医学匹配制度的历史研究Alvin E. Roth — The Evolution of the Labor Market for Medical Interns and Residents从博弈论和制度史角度解释美国医生招聘的过早签约问题,以及1950年代匹配机制与稳定性之间的关系。

2008年 · 理论发展回顾Alvin E. Roth — Deferred Acceptance Algorithms: History, Theory, Practice, and Open Questions记录盖尔2007年关于与沙普利合作的回忆,并系统整理延迟接受算法的理论性质和现实应用。

1997—1998年 · 住院医师匹配改革NRMP 匹配算法改革的原始研究资料包括1995—1997年的算法研究、比较实验以及1998年启用申请人提出型机制的历史记录。

2005年 · 纽约市高中录取改革Abdulkadiroğlu、Pathak、Roth — The New York City High School Match记录2003年开始的制度设计、首次实施效果及在大规模学校录取系统中使用匹配机制的经验。

2012年 · 诺贝尔经济学奖官方解读Stable Matching: Theory, Evidence, and Practical Design瑞典皇家科学院对稳定匹配理论、住院医师市场、学校录取制度及市场设计实践的综合说明。
本章明确区分了三个层次的历史材料:1950年代医学匹配制度的真实形成过程;1962年 Gale–Shapley 论文中可以直接核查的定义、算法和数学证明;1980年代以后市场设计研究与现实制度改革的成果。两校两生的住宿成本案例、三轮申请实验及交互程序均为教学重构。第六幕的三组稳定匹配则根据1962年原论文中的实际数学例子改写,保留了原始偏好关系。
下一章预告 · 第40章

《不可能完成的旅行:一个允许不完美的算法》

1976年,一位年轻的数学研究者面对一个令人头疼的问题。如果有几十座城市,需要从其中一座出发,走遍全部城市,再返回起点,究竟怎样找到最短的路线?如果城市数量越来越多,可能的旅行路线也会以惊人的速度增长。有时候,找到绝对最优的路线需要付出难以接受的计算代价。于是,数学家开始改变目标。如果不能快速得到绝对最好的答案,我们能否快速得到一个能够证明“不会差得太远”的答案?下一章,我们将认识 Nicos Christofides,研究1976年的经典近似算法。从最小生成树,到最小权完美匹配,再到欧拉回路,探索一种令人惊讶的算法设计思想:不必保证每次都找到最优解,也可以严格保证答案的质量。
——《算法的故事》第二季 · 第39章 完

本章配图