Rubik'的启发式函数;人工智能A*算法中的s立方体 所以我尝试用C++算法来求解魔方。我已经尝试了迭代深化搜索(IDS)并得到了正确的结果,但现在我被困在一个*算法上。 我做了一些研究,发现立方体的角和边的3D曼哈顿距离是开发a*启发式的方法之一,但我不知道它将如何编码。 你们能帮助或指导我如何开发定义上允许的函数吗
我正在寻找任何和所有的建议,可以帮助我走出这个洞。谢谢。IDA*是解决魔方问题的最佳算法之一,因为状态空间很大,如果进行适当的移动修剪,不会有太多重复。为了得到一个有效的解算器,你需要移动修剪和良好的启发式。通常每个面有三个移动-向前/向后90度和180度。有6个面,有18个动作Rubik'的启发式函数;人工智能A*算法中的s立方体 所以我尝试用C++算法来求解魔方。我已经尝试了迭代深化搜索(IDS)并得到了正确的结果,但现在我被困在一个*算法上。 我做了一些研究,发现立方体的角和边的3D曼哈顿距离是开发a*启发式的方法之一,但我不知道它将如何编码。 你们能帮助或指导我如何开发定义上允许的函数吗,c++,artificial-intelligence,a-star,heuristics,rubiks-cube,C++,Artificial Intelligence,A Star,Heuristics,Rubiks Cube,我正在寻找任何和所有的建议,可以帮助我走出这个洞。谢谢。IDA*是解决魔方问题的最佳算法之一,因为状态空间很大,如果进行适当的移动修剪,不会有太多重复。为了得到一个有效的解算器,你需要移动修剪和良好的启发式。通常每个面有三个移动-向前/向后90度和180度。有6个面,有18个动作 简单移动修剪:如果你通过保留一个历史移动来对你的移动进行一些简单的修剪,你可以将魔方的分支因子从18缩小到15左右。因为任何一次移动都可以将一个面移动到任何配置中,所以您不应该连续移动同一个面两次。第一次移动后,将有5
如果忽略方向,则每个立方体最多需要两次移动才能到达其目标位置,这意味着您的最终启发式将少于2次。考虑方向只会稍微提高这一点。因此,这种方法在实践中不会特别有效。谢谢您的回复。我很感激,但我是人工智能的初学者,所以我只是想在开发启发式函数时寻求初学者的帮助。@DanishAli减少分支因子比开发类似曼哈顿距离的弱启发式版本更有用。@DanishAli添加了一个关于类似曼哈顿启发式的完整性描述。