单位圆内10个点 - 用D3力布局找到最佳分布?

时间:2014-05-11 09:34:32

标签: javascript optimization d3.js simulation force-layout

与某些包装问题相关,出现以下问题:

在边1的正方形内分布10个点,以使它们之间的最小距离最大化。

借助D3力布局模拟或任何其他方法,请提供此类分布的示例,包括方形和点的图形表示,以及此类分布的点之间的最小距离值。

具有最大最小距离的分布的答案赢得了#34;答案徽章"! :)

(据我所知,到目前为止这个问题无法通过纯数学来解决,所以我来这里寻求有关模拟等方面的宝贵和迫切需要的帮助。)

1 个答案:

答案 0 :(得分:1)

TL; DR 一个最佳解决方案如下:

[{x: 0,       y: 0},
 {x: 0,       y: 0.22222},
 {x: 0,       y: 0.44444},
 {x: 0,       y: 0.66667},
 {x: 0,       y: 0.88889},
 {x: 0.11111, y: 1},
 {x: 0.33333, y: 1},
 {x: 0.55556, y: 1},
 {x: 0.77778, y: 1},
 {x: 1,       y: 1}]

长解释:您可以将此问题解决为mixed integer program(尽管在这种情况下该名称有点误导,因为没有整数)。基本模型非常简单:

dists

其中 P 是一组点。需要将各个点约束在单位平方内:

sq

目标是:

obj

对于这个问题有许多等效的解决方案,例如,您可以通过旋转方块从一个解决方案中获得另一个解决方案。为了使解决更容易,我们可以通过在点上强加一个顺序来打破一些对称性:每个点的坐标必须至少与其前一个点的坐标一样高。

symm

这意味着我们现在可以使用曼哈顿距离而不是欧几里德,并且在计算坐标之间的差异时不必担心负数,这会消除令人讨厌的正方形:

dists

将模型输入到您最喜爱的MIP系统中,然后出现如上所述的解决方案,点之间的曼哈顿距离最小为0.22222。请注意,正如我所提到的,您可以旋转方块以获得不同但等效的解决方案。