【发布时间】:2016-04-29 14:49:20
【问题描述】:
我有两组,A 和 B,其中 N 和M 点分别在 R^n 中。我知道 N M 总是。
两点之间的距离,P和Q,用d( P,问 )。由于问题是通用的,这个距离可以是任何函数(例如欧几里得距离)。
我想找到最接近 A 的 B 子集。从数学上讲,我想找到 B 的子集 C,大小为 N em> 具有到 A 的最小全局距离。 A 和 C 之间的全局距离为
D(A,C) = min([sum(d(P_i,Q_i),i=1,N) with P_i in A and Q_i in C* for C* in Permutations of C])
我一直在考虑这个问题,我做了一个算法,可以得到局部最优,但不一定是最优的:
Step 1) 在B中找到A的每个点的最近点。如果没有重复的点,我找到了最优子集并完成了算法。但是,如果有重复的点,请转到第 2 步。
第2步)比较它们的距离(当然我比较的是点之间的距离和同一个最近点)。距离最小的点保留先前找到的点,而其他点将其 期望 点更改为尚未为另一个点选择的“下一个”最近点。
步骤 3) 检查所有点是否不同。如果是,请完成。如果没有,请返回第 2 步。
有什么想法吗?尝试所有组合不是一个好组合(我应该计算 M!/(M-N)! 全局距离)
【问题讨论】:
-
你试过Hungarian algorithm吗?
-
您能更准确地定义全局距离吗?现在看起来它是具有相同索引的“匹配”对,但它们来自集合,所以这是未定义的
-
@EvgenyKluev 我不知道。但是我应该将此方法应用于 B 的 M!/((M-N)! * N!) 子集,对吗?
-
@harold 我把定义改得更准确了
-
@sebacastroh:不,您可以使用 (M-N) 个“空”元素(与 B 中的所有元素的距离为零)扩展 A,然后应用匈牙利算法。
标签: algorithm mathematical-optimization