引言
在生活和工作中經常會遇到一些需要資源分配的時候,例如
- 公司發的禮物不喜歡,想跟其他人換
- 在線扭蛋機的交換系統實現
- 求職offer的選擇
- 高考投檔系統實現
其中1、2屬于單邊匹配,匹配由單邊期望決定,即“買方”決定;3、4屬于雙邊匹配問題,匹配過程需考慮“買賣雙方”的期望。
在通常情況下,我們期望獲得一個盡可能合理而穩定的分配結果,使得最終整體收益最大化。
羅伊德-沙普利(Lloyd S. Shapley)與他人提出了一系列市場的穩定配置機制,為博弈論和經濟學領域做出了巨大的貢獻,最終與艾爾文-羅斯(Alvin E. Roth)一同獲得2012年獲諾貝爾經濟學獎。
背景
之前寫過在業務中遇到了判定業務,而該判定業務實際上是一組給定對象與另一組給定對象的匹配問題:
- 集合
(a, b, c, d)
與集合(A, B, C, D, E)
的匹配問題,最終得到的結果是多組一對一關系 - 在匹配過程中,有可能出現匹配錯誤導致的多對一匹配結果
- 為解決匹配沖突,需要對匹配結果進行調整,做到“盡可能讓每個對象都滿意”,即達到局部最優,資源分配合理的狀態
在調整匹配的過程為達到資源分配的穩定性考慮了結果的優先級排序。當時并不清楚這樣做是否能達到最優效果,在無意間了解到資源分配的“強核配置”這一概念后,發現自行實現的分配算法邏輯與博弈中的GS算法相同。確認該方式可以做到資源分配穩定的同時,也了解到適用于其他分配場景的實用算法,在此希望能通俗易懂地介紹給大家。
強核配置
強核配置即滿足個體合理性的同時滿足帕累托最優狀態。
強核配置在匹配中不僅是存在的,而且是唯一的,具有抗策略性,即私下交易或說謊都不會使得結果變得比強核配置的結果更好。
帕累托最優
帕累托最優(Pareto Optimality),也稱為帕累托效率(Pareto Efficiency),是指資源分配的一種理想狀態,假定固有的一群人和可分配的資源,從一種分配狀態到另一種狀態的變化中,在沒有使任何人境況變壞的前提下,使得至少一個人變得更好,這就是帕累托改進或帕累托最優化。
帕累托最優狀態就是不可能再有更多的帕累托改進的余地;換句話說,帕累托改進是達到帕累托最優的路徑和方法。
——百度百科
算法介紹
Top Trading Cycle Algorithm
首位交易循環算法算法,在1974年提出,下稱TTC算法。
適用于“分配”或“交易”場景,即單邊匹配問題。
問題引入
一些公司在節日時給員工發不同顏色的禮品,員工在抽到獎品后對顏色不滿意,希望跟其他人交換更喜歡顏色的獎品。
對于員工而言,喜歡的顏色不盡相同,或許與其他人交換之后能獲得各方更滿意的結果。
問題定義
簡單起見,我們把問題簡化,定義一些限制條件:
- 給定員工集合E=e1, e2, e3, e4
- 給定員工對應的禮物G=<e1, g1>, <e2, g2>, <e3, g3>, <e4, g4>
- 參與的各方都滿意才能交換
- 可以不與他人交換
TTC算法步驟
- 每位員工對每個禮物的滿意程度排序
- 員工提出當前最滿意的禮物,將員工與期望禮物間建立一條邊,同時將禮物與其主人間建立一條邊
- 尋找建立的邊是否形成了循環,允許自循環,可能有多個循環
- 循環中的員工交換禮物,停止參與交換
- 剩余員工將循環中的名單從表中去除,繼續提出當前最滿意的禮物,迭代尋找循環
- 交換全部完成,結束
案例演示
算法的核心思想:根據當前優先級順序形成交換循環,意見達成一致的員工與禮物優先交換并離場,剩下的員工從滿意度表中去除已離場禮物后繼續嘗試形成交換循環。
問題解決
TTC有一些特點:
- 每次迭代一定存在循環,即使是自循環
- 多個循環之間一定不會出現相交,因為每個節點只有一條出邊
- 能換到的禮物一定不比已有的差,因為最差情況下會形成自循環而離場
盡管我們平常交換公司禮物的方式也是使用TTC算法,但通常來說卻少足夠的候選交易池和一定的規則,最終的結果不一定能達到最優。
補充
TTC算法可以獲得強核配置,強核配置具有抗策略性,說謊或私下交易都不會讓結果變得更好。
做個不嚴謹的簡單證明:
- 第一輪交易成功的員工們,說謊或私下交易只會讓結果更壞,畢竟已獲得最滿意結果了
- 第二輪交易成功的員工,無論自身的滿意度排序如何也無法改變一輪交易成功的循環,因此不可能變得更好;私下交易也會損害全局利益
- 類推第三輪等
Gale-Shaply Algorithm
蓋爾-沙普利算法,又稱Deffered Acceptance Algorithm,延遲接受算法,在1962年提出,下稱GS算法或延遲接受算法。
適用于“配對”場景(并非必須一對一),即雙邊匹配問題。
問題引入
求職是一個雙向選擇的過程,需要公司認可求職者并下發offer之后,求職者基于手中的offer對比,并做出接受或拒絕的判斷。
對于求職者而言,offer明顯需要基于多重考量后選取最優的結果;對于公司而言,職位是有限的,因此招到的員工在公司能力評估排序中越靠前越好。
雙方都希望從這個匹配中達到最大化收益,那么怎樣的發/接offer策略會達到整體收益最大化即帕累托最優呢?
問題定義
同樣簡單起見,定義一些限制條件:
- 給定公司集合C=c1, c2, c3, c4
- 給定求職者集合E=e1, e2, e3, e4,對C中每個公司都提出求職申請
- 每個公司只錄取一名求職者,每個求職者只接受一個offer
GS算法步驟
- 每個公司為每名求職者進行滿意度排序,求職者對每個公司的offer進行滿意度排序
- 每家公司優先給排序靠前的求職者發offer,如果被拒絕則繼續給下一位發offer
- 求職者在收到offer后并不馬上決定,而是等待收到其他offer后進行對比,僅保留最滿意的offer,回絕其他offer
- 計算過程為:C方發一輪offer->E方決策->C方發一輪offer->E方決策......
- 當所有決定不再變動時,分配結束,求職者接受手中offer
案例演示
達到穩定狀態后,資源得到最大化利用。
算法的核心思想:主動方(C方)按照優先級申請匹配,而被動方(E方)根據優先級進行比較,只保留最合適的匹配申請最后統一決定,最終達到穩定匹配,因此被稱為“延遲接受”。
問題解決
GS算法被證明不會無限循環執行,最終狀態會達到穩定的匹配狀態。這一點比較好理解,畢竟任何公司發offer的對象不會重復且在排序表上越來越靠后,最差情況下需執行n^2次,其他一些證明在參考文獻中有提到。
當然,實際情況下受到崗位數量、offer期限、發offer時間等的影響問題會變得復雜很多,但核心還是保持不變的。
仔細想想,我們在實際發/接offer時不也幾乎都是這樣決策的嗎?這說明在長期的勞資雙方博弈下延遲接受算法確實是一種實現各方利益最大化的良好選擇,也經受住了市場的考驗。
在最理想的狀態下,所有C方統一發offer,E方統一接受/拒絕,可以達到整體利益的最大化。但對于競爭力弱的主動方公司來說,自身需求可能得不到較好的滿足,因此出現offer決策時間短(不允許延遲決策的情況可以參考秘書問題)、提前發offer搶人等操作,導致整體資源分配不穩定不合理,甚至產生惡性競爭。
補充
有趣的是,對于上文給出的案例數據,會發現各位求職者拿到的都不是最滿意的那個offer,各公司招到的員工也不是最滿意的那個,比如最優秀的e1求職者和c4公司。這也沒辦法,誰讓你在最心儀的公司/員工面前表現那么差(末位)呢?這說明也許匹配的過程中雙方看對眼或許比自身條件還重要。(同樣適用于找對象場景)
在如下場景中,由C方主動發起匹配和由E方主動發起匹配最終GS算法的結果是不一樣的。由C發起的穩定匹配對于C而言結果更好;而由E發起的則完全相反。所以,盡量在這樣的匹配場景中掌握主動權,或許會給自己帶來更好的結果。(這條在找對象場景也適用,hhh)
GS算法對于主動方具有抗策略性。
總結
穩定匹配理論在不增減資源的前提下,僅僅對現有資源進行重新排列組合,就能使各方都達到相對滿意狀態,整體達到最優。在升學志愿、學校分配、捐獻器官交換、崗位分配等領域,這些理論思想都有得到廣泛應用,在匹配問題也比較常見的計算機領域應該也有不少應用場景。