最小化顶点距离的算法 - 矮人要塞

jno*_*cho 12 algorithm optimization graph graph-layout

我玩Dwarf Fortress游戏.对我来说,主要的挑战是有效地设计堡垒的布局.意思是,每个行业流程应尽可能密集,以尽量减少行程距离.

一个例子可能是食品工业 食品工业.每个灰色椭圆代表一个建筑物.每个白色矩形代表建筑物的产品.

我的目标是找到将建筑物分布在2D网格上的算法,使得这些建筑物之间的距离在它们如何连接的意义上是最小的.这意味着fisheryloom可相距甚远,但loomfarmer's应尽可能接近.

目前我已经考虑过使用一些现成的软件来模拟布局,但算法的一些技巧会很好.

目前我正在考虑一些力导向算法,但我不确定离散网格要求.

问题的形式化:是否存在一种在离散坐标下工作的强制绘制图算法?

更新:我已经在AS3中找到了Force绘制算法的实现(web也包含JS版本).我会尝试将其转换为离散版本.但我怀疑它会起作用......

更新2:评论中要求进一步限制.它们是:每个建筑物占据虚拟网格上的单个单元格.建筑物可以在相邻的单元格上.建筑物不能堆叠/重叠.(PS:在游戏中,每个建筑都有规模,通常为3x3,但我想让问题更加通用,以便采用更多方法).

ldo*_*dog 9

您正在尝试解决楼层规划问题的实例,其中您尝试最小化总"连接"长度.这些问题中的大多数是NP难问题的实例,其中一些问题具有伪多项式运行时算法.

有一种特殊情况,您可能感兴趣的是在多项式时间内实际上是完全可解的:如果您想要放置的"盒子"或建筑物的相对位置是提前知道的.

有关如何解决此特定情况的完整详细信息,请参阅本教程中有关斯坦福几何编程的教程,第6章,第6.1节,第一个示例为"平面规划".另一个网站还包括实现和解决问题的matlab代码(根据第8章几何规划.)