第5节 编写一个Q学习的小例子
本节使用python编写一个简单的Q学习例子,来体会Q学习中各种参数及更新过程。
最后的效果是什么样的呢?
这次要编写的是机器人寻宝,是一个线性的环境,o代表机器人,T代表终点,也就是宝藏所在处,当然也可以使用自己的符号表示。环境(只是外表,奖励值也是环境的一部分,但是是不可见的)长下面这样:
-o---T
这只是一个示例,空间长度是6,也可以自定义环境,更好的也可以是手动输入环境。
最终会以命令行的形式不断更新显示环境,到达终点算作一次过程(episode),每挪动一个位置算一步,结果应该是随着过程数目增加,机器人找到宝藏的速度越来越快。
每次episode结束显示所走步数。
哪些准备?
首先需要明确什么是状态s和动作a,状态即机器人所处的位置,动作即向左或向右。(当然撞墙了就不能走了,即两端的状态是不同的)
接下来是Q表了,一个二维数组,大小为 s i z e ( s ) ∗ s i z e ( a ) size(s)*size(a) size(s)∗size(a)。每一个状态 s i s_i si对应所有的动作 a 0 , a 1 … a_0,a_1… a0,a1…,每一个格子对应着一个Q值,如下表所示:
a 1 a_1 a1 | … | |
---|---|---|
s 1 s_1 s1 | Q ( s 1 , a 1 ) Q(s_1,a_1) Q(s1,a1) | … |
s 2 s_2 s2 |