我有一组节点。所有节点都通过无向加权边连接。所有节点边缘的总权重始终等于1。
现在我想以最佳方式在二维表面(直径为d
)上排列节点。
Node A
,则以Node B
的最佳方式排列
(1-weightOfEdge)*diameterOfSurface
。 (例如:如果边缘的权重为1,则它们之间的距离应为0.如果节点的权重为0,则它们之间的距离应为diameterOfSurface
。)
显然,我无法安排所有节点以便这种情况成立。所以我将定义一个成本函数。成本是A和B之间的实际距离与A和B之间的最佳距离之间的差异。(也可能有点复杂,就像差异平方使得总离群值更高)
所有节点排列的总成本是每个节点的成本之和。
我想找到最佳解决方案。 (可能有多个最优解决方案,最佳解决方案只是意味着没有其他解决方案成本更低)
我首先考虑使用迭代算法来获得最优解,但很快就意识到通过迭代移动点我不会得到最优解,因为我无法通过可能的山谷移动后来导致更好的解决方案。
然后我发现this post类似,并建议我生成随机排列,然后选择其中最好的。然后再从最佳解决方案中随机安排等等,直到我以低成本获得解决方案。然而,这不会产生或证明我有最佳解决方案。
有没有办法找到最佳解决方案?如果没办法,为什么? 假设人们可以只查看所有可能的组合并选择最佳组合(仅当我们使用有限精度的坐标时)。但这实际上是不可能的。如果我们实际上无法找到最佳解决方案,那么有没有办法找到一个非常接近最佳解决方案并且可以证明非常接近最佳解决方案? (因此,我们可以定义非常接近,低于10%的折扣或其他东西)如果没有,有没有办法找到一个解决方案,例如有90%的机会从最好的机会低于10%?
编辑:我正在寻找一种算法,可以在合理的时间内(在现代mac上不到几个小时)计算出大约几千个点的解决方案,可以找到最佳解决方案或者那个可以找到一种解决方案,例如可以证明其与最佳解决方案的关系低于10%,或者可以证明有90%的可能性从最佳解决方案中降低10%。