Q-learning解决悬崖寻路问题
悬崖寻路问题
悬崖寻路问题(CliffWalking)是指在一个4 x 12的网格中,智能体以网格的左下角位置为起点,以网格的下角位置为终点,目标是移动智能体到达终点位置,智能体每次可以在上、下、左、右这4个方向中移动一步,每移动一步会得到-1单位的奖励。
如图,红色部分表示悬崖,数字代表智能体能够观测到的位置信息,即observation,总共会有0-47等48个不同的值,智能体再移动中会有以下限制:
- 智能体不能移出网格,如果智能体想执行某个动作移出网格,那么这一步智能体不会移动,但是这个操作依然会得到-1单位的奖励
- 如果智能体“掉入悬崖” ,会立即回到起点位置,并得到-100单位的奖励
- 当智能体移动到终点时,该回合结束,该回合总奖励为各步奖励之和
实际的仿真界面如下:
由于从起点到终点最少需要13步,每步得到-1的reward,因此最佳训练算法下,每个episode下reward总和应该为-13。
Q-learning原理简介
具体理论可以参见我的另一篇博文
深度强化学习-马尔科夫决策过程和表格型方法-笔记(二)
Q-learning代码
class QLearning(object):
def __init__(self,
obs_dim,
action_dim,
learning_rate=0.01,
gamma=0.9,
epsilon_start=0.9,
epsilon_end=0.1,
epsilon_decay=200):
self.action_dim = action_dim # 动作维度,有几个动作可选
self.lr = learn