优化房间的3D布局?

时间:2011-07-13 09:15:12

标签: algorithm optimization language-agnostic genetic-algorithm heuristics

给出一个图表,其中节点代表3x3x1房间,顶点表示需要亲近。如何将它们放置在3D空间中以优化整体贴近度?

示例(随机)数据结构:

{
    room1: [room2, room3],
    room2: [room1, room4],
    room3: [room5],
    room4: [room2, room5, room1],
    room5: []
}

(我不确定我应该问这个问题,因为它与我在stackoverflow上看到的大多数不同。我对编程解决方案/启发式算法感兴趣。)

2 个答案:

答案 0 :(得分:2)

我认为你想要邻接。

backtracking search中,维护一个房间队列,按照图表中连接的其他房间数量排序(最受约束的变量启发式)。然后,对于队列中的每个房间:

  • 确定可以采取的网格位置并选择其中一个;
  • 在一个循环中,确定是否存在现在只能在一个地方的任何其他房间,将它们放在那里并将其从队列中移除(forward checking);
  • 如果上述任何步骤失败,请回溯到最后一个选择点(撤消对网格的更改)。

答案 1 :(得分:2)

闻起来像是3D bin packing problem的表兄弟,这是NP完全的。尝试构造启发式(第一次拟合,最佳拟合递减,......),然后是元启发式(禁忌搜索,模拟退火,遗传算法......)。 那里有开源软件,例如Drools Planner,openTS,jgap,......