3

给定一个图,其中节点表示 3x3x1 房间,顶点表示需要接近。应该如何将它们放置在 3D 空间中以优化整体紧密度?

示例(随机)数据结构:

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

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

4

2 回答 2

2

闻起来像 3D装箱问题的远亲,这是 NP 完全问题。尝试构建启发式(第一次拟合,最佳拟合递减,...),然后是元启发式(禁忌搜索,模拟退火,遗传算法,...)。那里有开源软件,例如Drools Planner、openTS、jgap、...

于 2011-07-14T08:43:06.110 回答
2

我假设你想要邻接。

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

  • 确定它可以采取的可能的网格位置并选择其中一个;
  • 在一个循环中,确定是否存在其他现在只能在一个位置的房间,将它们放在那里并将它们从队列中删除(前向检查);
  • 如果前面的任何步骤失败,则回溯到最后一个选择点(撤消对网格的更改)。
于 2011-07-13T09:32:24.827 回答