生成匹配对以进行统计分析

Generating Matched Pairs for Statistical Analysis

在我的研究中,一个人被表示为一对实数 (x, y)。 x 在 [30, 80] 上,y 在 [60, 120] 上。有两种类型的人,A 和 B。每种类型我有大约 300 人。我怎样才能生成最大的(甚至是一大组)一对来自 A 的人和来自 B 的人:((xA, yA), (xB, yB)) 这样每对点都很接近?如果 abs(x1-x2) < dX 且 abs(y1 - y2) < dY,则两点接近。类似的限制是可以接受的。 (也就是说,这个约束大致是一个曼哈顿度量,但是 euclidean/etc 也是可以的。)不是所有的点都需要使用,但没有一个点可以被重用。

您正在寻找 Hungarian Algorithm

建议公式:A 是行,B 是列,每个单元格包含 Ai 和 Bi 之间的距离度量,例如abs(X(Ai)-X(Bi)) + abs(Y(Ai)-Y(Bi))。 (如果希望距离与每个变量的范围成比例,可以将 X 和 Y 值归一化为 [0,1])

然后使用匈牙利算法最小化匹配权重。

您可以过滤掉距离超过阈值的匹配项。如果您担心这种过滤可能会导致方法不是最优的,您可以将超过阈值的距离设置为非常高的数字。

这个算法有很多实现。一个简短的搜索找到了任何可以想到的语言,包括 VBA for Excel and some online solvers(但不确定是否将 300x300 矩阵与它们匹配)

匈牙利算法做到了,谢谢 Etov。

此处提供源代码:http://www.filedropper.com/Whosebug1