我是AI /算法领域的新手,目前正在尝试解决问题,到目前为止我还没有在2d网格阵列上实现A *路径查找。
问题是这样的:
考虑一个40名学生(20f,20m),不同身高,有自己的座位偏好(行,列或两者),教室有50个座位,每个学生必须占用座位,座位正在铺设如下:
[ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
[ WHITE BOARD ]
为理想地安排他们,选出了一个评分图表:
目标是获得可能的最高分数。
我的想法是使用A *修改以适应当前的问题:
开始:所有学生离开
路径成本:转换后的点数增量
目标:所有学生都坐着
这里的问题是,可能的最大点是未知的,并且我可以预见可能存在程序未能提前计划的情况(程序可能选择+8然后接着+4,其中作为更好的方法是选择+2然后选择+20),我知道我可以寻找一定深度,比如深度为5.这引发了另一个问题:我应该使用的深度是什么?我真的不想访问所有可能的州。
1.这种问题有多难? (从解决迷宫到解决国际象棋/去的规模)
2.我正在解决这个问题的正确道路吗?
答案 0 :(得分:2)
约束6看起来暗示这个问题可能是NP完全的或NP难的。这意味着:A *算法不会对此有效(因为),因为不可能(除非P = NP)创建一个良好的可接受的启发式函数。 可接受意味着启发式函数应始终低估或等于最优解的得分,它永远不会高估。 如果您需要包含约束6,我建议使用Tabu搜索,模拟退火或延迟接受等算法,这些算法适用于类似的用例,例如Dinner party seating和Course scheduling。
没有约束6,我认为像First Fit Decreasing算法那样简单的事情可以设计得最优:
约束2可能仍然不是这样的最佳方式......你可能仍然需要对它应用一些禁忌搜索或延迟接受。