如何使用强化学习算法解决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次随机交换),那么最终的棋牌状态必然存在可行解,使用该种方法我们可以构建出一定数量的棋牌初始状态。
网上目前没有找到使用强化学习方法解决该问题的详实方法,这里只给出网上的关于启发式方法的解决资料:
如何使用强化学习算法解决15-puzzle问题,即所谓的“十五谜题”推盘游戏的更多相关文章
- 一文读懂 深度强化学习算法 A3C (Actor-Critic Algorithm)
一文读懂 深度强化学习算法 A3C (Actor-Critic Algorithm) 2017-12-25 16:29:19 对于 A3C 算法感觉自己总是一知半解,现将其梳理一下,记录在此,也 ...
- 强化学习算法DQN
1 DQN的引入 由于q_learning算法是一直更新一张q_table,在场景复杂的情况下,q_table就会大到内存处理的极限,而且在当时深度学习的火热,有人就会想到能不能将从深度学习中借鉴方法 ...
- A*算法解决15数码问题_Python实现
1问题描述 数码问题常被用来演示如何在状态空间中生成动作序列.一个典型的例子是15数码问题,它是由放在一个4×4的16宫格棋盘中的15个数码(1-15)构成,棋盘中的一个单元是空的,它的邻接单元中的数 ...
- 强化学习算法Policy Gradient
1 算法的优缺点 1.1 优点 在DQN算法中,神经网络输出的是动作的q值,这对于一个agent拥有少数的离散的动作还是可以的.但是如果某个agent的动作是连续的,这无疑对DQN算法是一个巨大的挑战 ...
- Linux学习之用户管理命令与用户组管理命令(十五)
Linux学习之用户管理命令与用户组管理命令 目录 用户管理命令 用户添加命令useradd 修改用户密码passwd 修改用户信息usermod 修改用户密码状态chage 删除用户userdel ...
- 算法:数字推盘游戏--重排九宫(8-puzzle)
一.数字推盘游戏 数字推盘游戏(n-puzzle)是一种最早的滑块类游戏,常见的类型有十五数字推盘游戏和八数字推盘游戏等.也有以图画代替数字的推盘游戏.可能Noyes Palmer Chapman在1 ...
- 强化学习(十七) 基于模型的强化学习与Dyna算法框架
在前面我们讨论了基于价值的强化学习(Value Based RL)和基于策略的强化学习模型(Policy Based RL),本篇我们讨论最后一种强化学习流派,基于模型的强化学习(Model Base ...
- 强化学习Q-Learning算法详解
python风控评分卡建模和风控常识(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005214003&am ...
- 【转载】 “强化学习之父”萨顿:预测学习马上要火,AI将帮我们理解人类意识
原文地址: https://yq.aliyun.com/articles/400366 本文来自AI新媒体量子位(QbitAI) ------------------------------- ...
- (转) 深度强化学习综述:从AlphaGo背后的力量到学习资源分享(附论文)
本文转自:http://mp.weixin.qq.com/s/aAHbybdbs_GtY8OyU6h5WA 专题 | 深度强化学习综述:从AlphaGo背后的力量到学习资源分享(附论文) 原创 201 ...
随机推荐
- Easysearch:语义搜索、知识图和向量数据库概述
什么是语义搜索? 语义搜索是一种使用自然语言处理算法来理解单词和短语的含义和上下文以提供更准确的搜索结果的搜索技术.旨在更好地理解用户的意图和查询内容,而不仅仅是根据关键词匹配,还通过分析查询的语义和 ...
- 腾讯云 BI 数据分析与可视化的快速入门指南
前言 腾讯云 BI 是一款商业智能解决方案,提供数据接入.分析.可视化.门户搭建和权限管理等全流程服务.它支持敏捷自助设计,简化报表制作,并通过企业微信等渠道实现协作.产品分为个人版.基础版.专业版和 ...
- 【现代 CSS】标准滚动条控制规范 scrollbar-color 和 scrollbar-width
Chrome 在 121 版本开始,原生支持了两个滚动条样式相关的样式 scrollbar-color 和 scrollbar-width. 要知道,在此前,虽然有 ::-webkit-scrollb ...
- spring mvc统一处理接口返回值,aop切面实现,将请求的入参和出参存储在数据库中,切面内重新抛出异常
spring mvc统一处理接口返回值,aop切面实现,将请求的入参和出参存储在数据库中 aop类实现Aspect的多个方法注解中,只有Around注解的方法是有返回值的,可以对方法的入参和返回值均进 ...
- 在Winform程序中动态绘制系统名称,代替图片硬编码名称
在以前我做程序的时候,一般在登录窗口里面显示程序名称,登录窗口一般设置一张背景图片,由于程序的名称一般都是确定的,所以也不存在太大的问题,不过如果客户定制不同的系统的时候,需要使用Photoshop修 ...
- 在AS中logcat的设置过滤信息图文教程
[当前使用版本 1.4] logcat是调试代码的很好工具,但是因为跳出的信息过多让人目不暇接,未必能让人找到想要的信息,所以我们必须从中过滤出想要的信息 [样例]这里我们要搜索 System.out ...
- Linux greybus
背景 在研究高通平台驱动震动马达时,我需要为内核驱动实现以下功能:/sys/class/timed_output/vibrator/enable":sysfs文件系统注册接口.提供show. ...
- WPF在.NET9中的重大更新:Windows 11 主题
在2023年的2月20日,在WPF的讨论区,WPF团队对路线的优先级发起了一次讨论. 对三个事项发起了投票. 第一个是Windows 11 主题 第二个是更新的控件 第三个是可空性注释 最终Windo ...
- Canvas绘制圆角图片
效果图: 思路: 先绘制一个圆角长方形 在画布中裁剪下来 在圆角长方形内绘制图片 图片四个角超出圆角长方形的区域被隐藏 具体代码: <!DOCTYPE html> <html lan ...
- Redis挂了,怎么补救?谈谈如何实现redis的高可用
Redis挂了,怎么补救?谈谈如何实现redis的高可用! Redis实现高可用主要有三种部署模式:主从模式.哨兵模式和集群模式. 分区 分区(Partitioning)是一种最为简单的拓展方式. 在 ...