我们有以下优化问题。
平面上有k个(通常为k = 3-10个)点,称为吸引子:A1,..,Ak。 并且在同一平面上有一组大小为N(N很大,通常为10K-100K +)的点。
我们需要将N1点与第一个吸引子,N2 - 到第二个,......,Nk到第k个。 所有点都应该绑定:N1 + ... + Nk = N。
目标函数就像"点与最近的吸引子相关联,吸引子将最近的点与自身联系起来":
让
Pij
为j
- 与i
- 吸引者(i=1..k; j=1..Nk)
相关联。让
Lk
为从k
- 吸引子到与之相关的点的距离之和:Lk = dist(Pk1, A1) + dist(Pk2, A2) + ... + dist(PkN1, A1).
让
f
为距离的总和:f = L1 + .. + Lk
。我们需要最小化
f
。
有人可以提供一些如何实施的建议吗? 或者也许存在一些已知的算法来做到这一点?
UPD:此问题可能会缩短为assignment problem并由hungarian algorithm解决。它是minimum cost flow问题的特例。
答案 0 :(得分:1)
这是一个线性程序,可以通过一般的LP求解器来解决。
它也可以更具体地建模为min-cost max-flow问题:将吸引子放在二分图的左侧,将点放在右侧。
此图表中的最低成本最大流量是您的问题的解决方案。您可以使用successive shortest paths与Dijkstra的方法来解决此问题。
不幸的是,我不知道这种方法的理论界限对于图的非常具体的属性(左边的二分和总容量n)。我认为连续最短路径的最坏情况是(polylog)二次方,但在实践中它应该快得多。也许对线性规划和网络优化有更多经验的人可以更多地说明解决出现成本流问题的最佳算法。