基于Python实现机器人自动走迷宫【100011016】( 二 )


在初步的学习中,Q 值是不准确的,如果在这个时候都按照 Q 值来选择,那么会造成错误 。学习一段时间后,机器人的路线会相对固定,则机器人无法对环境进行有效的探索 。
因此需要一种办法,来解决如上的问题,增加机器人的探索 。通常会使用 - 算法:
在机器人选择动作的时候,以一部分的概率随机选择动作,以一部分的概率按照最优的 Q 值选择动作 。同时,这个选择随机动作的概率应当随着训练的过程逐步减小 。
3.2.3 Q- 算法的学习过程
3.2.4 Robot 类
在本作业中提供了类,其中实现了 Q 表迭代和机器人动作的选择策略,可通过 from导入使用 。
类的核心成员方法
():获取当前机器人所处位置
:机器人所处的位置坐标,如: (0, 0)
():获取当前机器人可以合法移动的动作
:由当前合法动作组成的列表,如: [‘u’,‘r’]
():以训练状态,根据算法策略执行动作
:当前选择的动作,以及执行当前动作获得的回报, 如: ‘u’, -1
():以测试状态,根据算法策略执行动作
:当前选择的动作,以及执行当前动作获得的回报, 如:‘u’, -1
reset()
:重置机器人在迷宫中的位置
3.2.5类
类实现了算法的 Q 值迭代和动作选择策略 。在机器人自动走迷宫的训练过程中,需要不断的使用算法来迭代更新 Q 值表,以达到一个“最优”的状态,因此封装好了一个类用于机器人的训练和可视化 。可通过 from导入使用 。

基于Python实现机器人自动走迷宫【100011016】

文章插图
类的核心成员方法:
(, =150): 训练机器人,不断更新 Q 表,并讲训练结果保存在成员变量中
, : 总共的训练次数、每次训练机器人最多移动的步数
():测试机器人能否走出迷宫
():将训练结果输出到指定的 gif 图片中
:合法的文件路径,文件名需以 .gif 为后缀
():以图表展示训练过程中的指标: Times、 、 Times per Epoch 3.3 DQN
DQN 算法使用神经网络来近似值函数,算法框图如下 。
在本次实验中,使用提供的神经网络来预计四个动作的评估分数,同时输出评估分数 。
类的核心成员方法
state: 当前机器人位置
: 选择执行动作的索引
: 执行动作获得的回报
:执行动作后机器人的位置
:机器人是否到达了终止节点(到达终点或者撞墙)
: 整数,不允许超过数据集中数据的个数
maze: 以 Maze 类实例化的对象
四 求解结果 4.1 深度优先
编写深度优先搜索算法,并进行测试,通过使用堆栈的方式,来进行一层一层的迭代,最终搜索出路径 。主要过程为,入口节点作为根节点,之后查看此节点是否被探索过且是否存在子节点,若满足条件则拓展该节点,将该节点的子节点按照先后顺序入栈 。若探索到一个节点时,此节点不是终点且没有可以拓展的子节点,则将此点出栈操作,循环操作直到找到终点 。
测试结果如下:
搜索出的路径: ['r', 'd', 'r', 'd', 'd', 'r', 'r', 'd']恭喜你,到达了目标点Maze of size (5, 5)
图3 基础搜索地图(size5)
搜索出的路径: ['r', 'r', 'r', 'r', 'r', 'r', 'r', 'd', 'r', 'd', 'd', 'd', 'r', 'd', 'd', 'd', 'l', 'd', 'd', 'r']恭喜你,到达了目标点Maze of size (10, 10)