嗨,这实际上是一个特殊的分配问题(如果感兴趣,请查看wiki)。假设我有10个代理,表示为 A1,A2,... A10 ,我需要它们成对工作。虽然根据以前的经验,我知道每个双代理对的工作效率,所以我有一个如下所示的效率矩阵,(i,j)元素代表代理对的工作效率< em>(Ai,Aj)。因此,我们知道它应该是一个对称矩阵,这意味着 E(i,j)= E(j,i)和 E(i,i)应该是0现在,我需要将这10个代理分成5组,这样整体(总和)效率最大。
E =
0 25 28 23 39 77 56 58 85 41
25 0 18 77 32 52 69 59 47 18
28 18 0 20 55 75 63 38 5 56
23 77 20 0 59 76 24 82 68 64
39 32 55 59 0 49 70 28 42 31
77 52 75 76 49 0 33 84 50 29
56 69 63 24 70 33 0 15 49 83
58 59 38 82 28 84 15 0 68 40
85 47 5 68 42 50 49 68 0 56
41 18 56 64 31 29 83 40 56 0
E =
0 30 63 32 20 40
30 0 67 84 75 63
63 67 0 37 79 88
32 84 37 0 43 59
20 75 79 43 0 56
40 63 88 59 56 0
最佳解决方案是:
assignment =
0 0 0 0 0 1
0 0 0 1 0 0
1 0 0 0 0 0
0 1 0 0 0 0
0 0 1 0 0 0
0 0 0 0 1 0
答案 0 :(得分:0)
这可以解决为weighted maximum matching problem,其中:
G = (V,E,w)
V = { all numbers }
E = { (v,u) | v,u in V, v!=u }
w(u,v) = -|u-v|
最大匹配的解决方案将配对所有顶点(数字),使得sum { -|u-v| : u,v paired }
的总和最大,这意味着sum { |u-v| : u,v paired
最小。