在我的研究中,一个人被表示为一对实数(x,y)。 x在[30,80]上,y是[60,120]。有两种类型的人,A和B.我有每种类型约300。如何从A生成一个人的最大(甚至是大)一对,其中一个来自B:((xA,yA),(xB,yB)),使得每对点都接近?如果abs(x1-x2)
答案 0 :(得分:2)
您正在寻找Hungarian Algorithm。
建议的配方:A是行,B是列,每个单元包含Ai和Bi之间的距离度量,例如, abs(X(Ai)-X(Bi))+ abs(Y(Ai)-Y(Bi))。 (如果希望距离与每个变量的范围成比例,可以将X和Y值标准化为[0,1])
然后使用匈牙利算法最小化匹配权重。
您可以过滤距离超过阈值的匹配项。如果您担心此过滤可能会导致方法不理想,您可以将阈值上的距离设置为非常高的数字。
此算法有很多实现。短搜索以任何可想到的语言找到一个,包括VBA for Excel和一些online solvers(不确定是否与他们匹配300x300矩阵)
答案 1 :(得分:1)
匈牙利算法做到了,谢谢Etov。