如何使用强化学习算法解决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 ...
随机推荐
- P9174
problem & blog 子任务 \(1\) 和子任务 \(2\) 都比较好做.所以我们这里不讲. 状态将是数字 \(n\) (每个颜色的频率的排序数组)的所有分区,因为当我们旋转每种颜色 ...
- vitual box 安装centos7
vitual box下载地址: https://www.virtualbox.org/wiki/Downloads centos7下载地址: CentOS Linux 选择7-2009,x86-64 ...
- 使用 OpenTelemetry 构建可观测性 04 - 收集器
在之前的博文中,我们讨论了如何使用 SDK 和链路追踪生产者来导出进程中的遥测数据.尽管有多种类型的导出器可供选择,但其中一个常见的目标是将数据导出到 OpenTelemetry Collector. ...
- zk实践操作
1.入门基础 应用场景 ZooKeeper主要服务于分布式系统,可以用ZooKeeper来做:统一配置管理.统一命名服务.分布式锁.集群管理. 使用分布式系统就无法避免对节点管理的问题(需要实时感知节 ...
- Ansible-playbook剧本进阶
剧本高级特性篇 循环 在写 playbook 的时候发现了很多 task 都要重复引用某个相同的模块,比如一次启动10个服务,或者一次拷贝10个文件,如果按照传统的写法最少要写10次,这样会显得 pl ...
- vue双曲线
原型 1 <template> 2 <div :class="className" :style="{height:height,width:width ...
- JsonPath - 根据表达式路径解析Json
JsonPath 在xml的使用过程中,对于xml的解析我们知道可以使用xpath的方式,随意的获取到我们想要的属性值.那么在使用json时,我们能不能实现同样的操作呢? 答案就是 json-path ...
- 颠覆传统编程,用ChatGPT十倍提升生产力
我们即将见证一个新的时代!这是最好的时代,也是最坏的时代! 需求背景 背景: 平时会编写博客,并且会把这个博客上传到github上,然后自己买一个域名挂到github上. 我平时编写的博客会有一些图片 ...
- [好物推荐] Rime的86五笔输入法配置
一个比较好用的Rime五笔输入法配置文件, 个人已经使用很多年了. 官网: https://github.com/KyleBing/rime-wubi86-jidian 安装方式: /home/xxx ...
- Nuxt3 的生命周期和钩子函数(二)
title: Nuxt3 的生命周期和钩子函数(二) date: 2024/6/26 updated: 2024/6/26 author: cmdragon excerpt: 摘要:本文深入介绍了Nu ...