這是從穩定的婚姻問題的擴展不同,因爲我瞭解了OP的問題,各組中的人物沒有的,他們希望從多到少的工作誰的有序列表;這是一種二元關係(願意/不願意)。
這可以被配製成可以很快解決的整數規劃問題。我給出了下面的問題的數學表述;您可以使用glpk或AMPL/CPLEX等包來處理數據。
定義以下矩陣:
M1 = |A| x |B|
矩陣,其中
M1(a,b) = 1
如果(A的給定構件)願意用b工作(給定B的成員),否則爲0
M2 = |A| x |C|
矩陣,其中M2(a,c) = 1
如果(A的給定構件)願意採用c工作(給定的C的部件),否則爲0
M2 = |B| x |C|
矩陣,WH ERE
M3(b,c) = 1
如果B(給B的成員)願意用C(C中給出的成員)的工作,否則爲0
現在定義,我們將使用我們的最大化一個新的矩陣:
X = |A| x |B| x |C|
矩陣,其中
X(a,b,c) = 1
如果我們使a,b和c一起工作。
現在,定義我們的目標函數:
//最大化組
數量最大化Sum[(all a, all b, all c) X(a,b,c)]
受到以下限制:
//爲了確保沒有人被安置分兩組
對於a的所有值:Sum[(all j, k) X(a, j, k)] <= 1
對於b的所有值:Sum[(all i, k) X(i, b, k)] <= 1
對c的所有值:Sum[(all i, j) X(i, j, c)] <= 1
//爲了確保所有組由兼容個人
對於所有A,B,C的: X(a,b,c) <= M1(a,b)/3 + M2(a,c)/3 + M3(b,c)/3
我認爲你應該重新命名你的標題來實際描述你的問題,所以在相關的搜索中會出現一些東西。 – mmcdole 2008-11-17 07:51:46