如何使用强化学习算法解决15-puzzle问题,即所谓的“十五谜题”推盘游戏
相关:
数字华容道15-Puzzle问题可以使用人工智能算法中的强化学习算法来进行求解,也可以使用人工智能算法中的启发式算法来进行求解。15-Puzzle问题存在不可解的情况,因此在对该问题进行求解时需要先确定给出的问题是否存在可行解。15-Puzzle 的最优解至多有 80 步;而 8-Puzzle 的最优解至多有 31 步。
启发式算法:
启发式函数考虑的因素可以有:
- 放错的方块的数量。
- 所有放错的方块到各自目标位置的欧几里得距离之和。
- 所有放错的方块到各自目标位置的曼哈顿距离之和。
强化学习算法:
使用强化学习可以用表格法,值迭代和策略迭代算法都是可以的;使用强化学习算法的关键点在于如何定义state状态,在https://medium.com/@amshali/15-puzzle-with-reinforcement-learning-8bcfc1aa54e7中给出了state状态的定义方法:
因为游戏的棋牌状态可以表示为:
我们可以把问题分解为三步,第一步就是解决第一行,第二步就是解决第二行,第三步就是解决第三行和第四行。在不同步骤的时候除了要考虑的行上正确时的数字和空格以外可以把其他的数字位置当做相同的数字0来进行处理,于是就有了第一步骤时的棋牌状态的表示:
采用该种表示方法后可以知道16-5=11,5为1,2,3,4以及空格这5个表示的可能,于是可以得到此时的棋牌状态的可以表示数量为:
当第一行正确排列完成后我们假设不再对第一行的数字进行改动,因此此时的棋牌状态表示为:
同理,我们可以得到此时的棋牌的表示数量为(16-4=12,11-4=7):
而到了解决最后两行时我们不再对前两行正确排列的位置进行变动,因此此时的最后两行的状态数量为:
降阶法:
不论是启发式算法还是强化学习算法来解决15-puzzle问题,我们都可以通过降阶的方法,也就是先解决最外圈的数字的正确位置,把44问题转为33问题,然后再依次解决最外圈的数字位置问题,把33的puzzle转为22的问题。
关于棋牌的初始状态是否存在可行解的判断
目前没有找到相关的权威答案,也就是说从网上的资料来看还没有什么确切的方法来判断可行解的存在。对此,一个想法思路是从最终棋牌状态开始,进行一定次数的随机交换(比如1000次随机交换或10000次随机交换),那么最终的棋牌状态必然存在可行解,使用该种方法我们可以构建出一定数量的棋牌初始状态。
网上目前没有找到使用强化学习方法解决该问题的详实方法,这里只给出网上的关于启发式方法的解决资料:
posted on 2023-12-21 13:13 Angry_Panda 阅读(208) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
2021-12-21 再探 游戏 《 2048 》 —— AI方法—— 缘起、缘灭(2) —— 游戏环境设计篇
2018-12-21 David Silver 强化学习原理 (中文版 链接)
2017-12-21 Python itertools.combinations 和 itertools.permutations 等价代码实现