我是AI /算法领域的新手,目前正试图解决一个问题,到目前为止我还没有在2d网格阵列上实现A *路径查找.
问题是这样的:
考虑一个40名学生(20f,20m),不同身高,有自己的座位偏好(行,列或两者),教室有50个座位,每个学生必须占用一个座位,座位布局如下:
[ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
[ WHITE BOARD ]
理想情况下,他们选择了一个得分图:
>没有学生直接坐在前面:4分
>直接在前面的学生座位至少缩短2厘米:4分
>在你旁边的学生座位是异性:8分
> 4名同性别学生占据一列:-10分
>从白板升高的列:20个点
>根据个人喜好座位:2分
目标是尽可能获得最高分.
我的想法是使用A *修改以适应当前的问题:
开始:所有学生都离开了
路径成本:转换后的点数增量
目标:所有学生都坐下来
这里的问题是,可能的最大点是未知的,我可以预见可能存在程序未能提前计划的情况(程序可能选择8然后接着4,其中更好的方法是选择2然后是20),我知道我可以寻找一定的深度,比如5的深度.这引出了另一个问题:我应该使用的深度是多少?我真的不想访问所有可能的州.
这种问题有多难? (从解决迷宫到解决国际象棋/去的规模)
我在正确的道路上解决这个问题吗?
最佳答案 约束6看起来像暗示这个问题可能是NP完全的或NP难的.这意味着:A *算法不会对此有效(因为),因为不可能(除非P = NP)创建一个良好的可接受的启发式函数.可接受意味着启发式函数应该总是低估或等于最优解的得分,它永远不会高估.
如果您需要包含约束6,我建议使用Tabu搜索,模拟退火或延迟验收等算法,这些算法适用于类似的用例,例如
Dinner party seating和
Course scheduling.
没有约束6,我认为像First Fit Decreasing算法这样简单的东西可以设计成最优的:
>所有偶数座位都是女性,所有奇数座位都是男性(如果没有足够的席位用于1个性别,则添加其他性别的溢出).独立安排.在安排1个性别时,忽略其他性别的席位.
>根据身高对1个性别组的所有学生进行排序.逐渐降低高度分配它们.
>对于每个步骤,将最大的未分配学生分配到最高行的未分配席位(其次是左侧最多)
尽管如此,约束2可能仍然不是最佳的……你可能仍然需要在它上面应用一些禁忌搜索或延迟接受.