给定N个矩形框和它们之间的M个连接,我想有效地将它们放在一个平面上,这样所有连接的总长度保持最小。
我唯一的经验是将平面分割成具有N个或更多空格的网格,并将这些具有最大连接数的框放置在网格中,从对角线对角空间开始。
如果有一个盒子连接到所有N-1盒子并且那些是唯一的连接,这可能效率不高。我们希望中心有一个方框,周围有所有其他方框。
是否有针对此类问题的标准解决方案?我可以获得一个关于如何解决这个问题的指针吗?
答案 0 :(得分:1)
这是一个非线性优化问题,可以通过模拟退火或一般目标函数最小化(如梯度下降法)来解决。
给定框的任何布局,让L表示给定布局的所有连接的长度之和。你想最小化L.一个简单的模拟退火方案是这样的:
layout = random_layout()
t = 1.0
While(true)
L = sum_of_lengths(layout)
layout' = move_one_box(layout)
L' = sum_of_lengths(layout)
if (L' < L or random(0..1) < t)
layout = layout'
t = t * 0.999
最初,算法只是随机移动框,但是当t减小时,算法逐渐变为贪婪的优化器。您可以运行多次算法运行并选择最佳结果。这是一种模拟退火方案。