数学问题
假设有2n个人,C(i,j)
是让i和j一起工作的“成本”(函数C
很快就能计算出来,在我的情况下它是一个给定的矩阵,并且是对称的)。问题是找到2n对人的安排,使每对人的成本之和最小。
这应该在n的多项式复杂度内完成,并且可以相对容易地在Scilab语言中实现(输入:成本矩阵,输出:配对,例如一个n-by-2的索引矩阵)。我知道“相对容易”是可以解释的...
以前的研究
这个问题实际上是由Blossom算法解决的。例如,参见这篇论文。
然而,这种方法(及其变体)看起来非常难以实现。我的真正问题是n=20,所以虽然暴力搜索(=尝试所有可能的配对)不可行(在我的电脑上暴力搜索n=8花了一个小时),但几乎任何比暴力搜索更好的方法都可以解决问题;如果我能避免一周的编程,代价是一小时的计算,那就太好了。
我考虑使用匈牙利/蒙克雷斯算法在2n-by-2n数组上进行操作,将对角线填充为+%inf
,将其他元素填充为对称成本矩阵,然后从结果排列中选择相关的配对,但我无法找到可靠的方法来实现这一点。(注意,匈牙利算法已经编码为单独的部分,因此您可以在不影响“易于实现”要求的情况下使用它。)
我希望与开花算法问题相比,图的完整性允许一些捷径... (编辑:请参见DE的评论,由于某些半显然的原因,这是错误的)