[英]matching algorithm
我正在編寫一個應用程序,該應用程序將一組用戶分成幾對,以便一起執行任務。 每個用戶可以指定有關其伙伴的各種首選項,例如
理想情況下,我希望用戶能夠指定這些首選項中的每一個是“必備”還是“必須”,例如“我希望與說英語的人相匹配,但我不能與女性匹配”。
我的目標是最大限度地提高比賽的整體平均水平。 例如,假設系統中有4個用戶,A,B,C,D。可以通過3種方式匹配這些用戶:
Option 1 Match Score A-B 5 C-D 4 --- Average 4.5 Option 2 Match Score A-C 2 B-D 3 --- Average 2.5 Option 3 Match Score A-D 1 B-C 9 --- Average 5
因此,在這個人為的示例中,將選擇第三個選項,因為它具有最高的總體匹配質量,即使A和D根本沒有很好地匹配。
有沒有一種算法可以幫助我:
並非絕對需要每個用戶都匹配,因此可以選擇在顯着降低匹配總體質量和讓幾個用戶不匹配的情況之間進行選擇,我選擇了后者。
顯然,我希望計算匹配項的算法盡快完成,因為系統中的用戶數量可能很大。
最后,這種計算比賽得分並最大化整體平均分的系統只是我自己想出的一種試探法。 如果有更好的方法來計算配對,請告訴我。
我描述的問題似乎與穩定婚姻問題相似,有一個眾所周知的解決方案。 但是,在此問題中,我不要求所選對對穩定。 我的目標是選擇對,以使平均“比賽得分”最大化
您在看什么最大匹配算法 ? 首先,我太匆忙地閱讀了您的問題:似乎您並不一定要局限於二部圖。 這似乎比較棘手。
要在任意圖中找到最大匹配,可以使用Edmond匹配算法的加權變量:
http://en.wikipedia.org/wiki/Edmonds's_matching_algorithm#Weighted_matching
請參閱此處的腳注。
我相信這個問題可以表示為線性規划問題。 然后可以使用Simplex方法來解決它。
在這里,我為類似的問題提供了可能的解決方案。 這是一種用於測量差異性的算法-與預期數據相似的測量數據越多,得出的數字越小。
對於您的應用程序,您將一個人的偏好設置為期望數據,而您與之進行比較的每個其他人將作為測量數據。 在運行比較之前,您可能希望過濾“測量數據”以消除在原始問題中提到的諸如“不得與女性匹配”之類的情況。
另一種選擇是使用卡方算法。
從外觀上看,您的問題不是兩難的,因此在我看來,您正在尋找通用圖形中的最大權重匹配。 我並不羡慕編寫此代碼的任務,因為Edmond的blossum縮小算法不容易理解或有效實現。 那里有這種算法的實現,例如C ++庫LEMON( http://lemon.cs.elte.hu/trac/lemon )。 如果要最大基數最大權重匹配,則必須使用最大權重匹配算法,並將較大的權重(所有權重之和)添加到每個邊,以將最大基數強制為第一優先級。
另外,正如您在上面的評論之一中提到的那樣,您的匹配項不是線性的,因此無法進行線性編程,因此您始終可以采用約束編程方法,該方法不需要條件是線性的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.