在异构集合之间找到最佳的2x2匹配

时间:2009-03-04 04:14:47

标签: graph-theory matching mathematical-optimization

我遇到了问题:

我有一个A类和一个B类,其实例对象可以以编程方式检查,以不同的数量彼此相似或不同。例如,它们可能完全匹配,或者完全不同(即使类别不同,它们仍然可以表示相同的信息并且得分相同。)

现在,给定两个集合,A中的一个集合和B中的一个集合,最好的方式是将As和B配对,使它们最佳匹配,留下一些孤儿,如果任一集合大于另一个或者如果一些As或Bs太不同而无法匹配?

我的第一次尝试是创建一个二维数组,其中每个单元格是匹配的“得分”(0 =完美,数字越大越好),并通过寻找最低累积分数的每条路径递归。这很有效,结果很完美,但速度非常慢。

关于更高效算法的任何想法?

如果您想知道,我的A类代表音频混音器输入通道,而我的B代表相同的持久状态(称为场景)。我试图解决的问题是如何将场景导入现有的混音器,其中场景(B)可能与任何现有的通道(A)略有差异或甚至高度不同。我不想只是添加频道(A),如果我可以稍微修改要匹配。例如,我可以在A中添加一个效果插入,以便与B完美匹配,避免添加另一个A.

麦克

3 个答案:

答案 0 :(得分:2)

这听起来像是一个二分匹配问题,并且可以通过使用相似度量来加权边缘,使用标准的最大流量/最小值解决方案来解决。

This maybe helpful

答案 1 :(得分:0)

我没有算法,只有一般建议。你可以尝试随机抽样的可能性,直到你花了你愿意花费的时间,并采取你在路上找到的最佳选择。这种方法通常不会找到最佳解决方案,但通常很容易编程。并且根据问题,它可能足够接近最佳状态。您可以尝试并观察随着随机样本数量的增加质量如何提高。如果幸运的话,少量样本可能就足够了。

答案 2 :(得分:0)

我会尝试启发。

首先收集一组完全匹配。

然后有一个阈值,并收集比该阈值更好的匹配。

展开阈值并重复,直到其中一个或两个集合耗尽。

现在你有一场试用赛,这可能不是最好的。

运行大量模拟退火循环,其中您随机置换匹配链接,并根据取决于各自成本的概率保留或不保留。

这允许您探索匹配空间,如果附近有更好的匹配,它应该找到它们。