《强化学习:原理与Python实现 》 —2.4 案例:悬崖寻路
2.4 案例:悬崖寻路
本节考虑Gym库中的悬崖寻路问题(CliffWalking-v0)。悬崖寻路问题是这样一种回合制问题:在一个的网格中,智能体最开始在左下角的网格,希望移动到右下角的网格,见图2-6。智能体每次可以在上、下、左、右这4个方向中移动一步,每移动一步会惩罚一个单位的奖励。但是,移动有以下限制。
智能体不能移出网格。如果智能体想执行某个动作移出网格,那么就让本步智能体不移动。但是这个操作依然会惩罚一个单位的奖励。
如果智能体将要到达最下一排网格(即开始网格和目标网格之间的10个网格),智能体会立即回到开始网格,并惩罚100个单位的奖励。这10个网格可被视为“悬崖”。
当智能体移动到终点时,回合结束,回合总奖励为各步奖励之。
图2-6 悬崖寻路问题示意图(其中36是起点,37~46是悬崖,47是终点)
2.4.1 实验环境使用
Gym库中的环境'CliffWalking-v0'实现了悬崖寻路的环境。代码清单2-3演示了如何导入这个环境并查看这个环境的基本信息。
代码清单2-3 导入'CliffWalking-v0'环境
这个环境是一个离散的Markov决策过程。在这个Markov决策过程中,每个状态是取自的int型数值(加上终止状态则为),表示当前智能体在图2-6中对应的位置上。动作是取自的int型数值:0表示向上,1表示向右,2表示向下,3表示向左。奖励取自,遇到悬崖为,否则为。
代码清单2-4给出了用给出的策略运行一个回合的代码。函数play_once() 有两个参数,一个是环境对象,另外一个是策略policy,它是np.array类型的实例。
代码清单2-4 运行一个回合
代码清单2-5给出了一个最优策略optimal_policy。最优策略是在开始处向上,接着一路向右,然后到最右边时向下。
代码清单2-5 最优策略
下面的代码用最优策略运行一个回合。采用最优策略,从开始网格到目标网格一共要移动13步,回合总奖励为。
total_reward = play_once(env, optimal_policy)
print('总奖励 = {}'.format(total_reward))
- 点赞
- 收藏
- 关注作者
评论(0)