0 前言
如果说DQN从入门到放弃的前四篇是开胃菜的话,那么本篇文章就是主菜了。所以,等吃完主菜再放弃吧!
1 详解Q-Learning
在上一篇文章DQN从入门到放弃 第四篇中,我们分析了动态规划Dynamic Programming并且由此引出了Q-Learning算法。可能一些知友不是特别理解。那么这里我们再用简单的语言描述一下整个思路是什么。
为了得到最优策略Policy,我们考虑估算每一个状态下每一种选择的价值Value有多大。然后我们通过分析发现,每一个时间片的Q(s,a)和当前得到的Reward以及下一个时间片的Q(s,a)有关。有些知友想不通,在一个实验里,我们只可能知道当前的Q值,怎么知道下一个时刻的Q值呢?大家要记住这一点,Q-Learning建立在虚拟环境下无限次的实验。这意味着可以把上一次实验计算得到的Q值拿来使用呀。这样,不就可以根据当前的Reward及上一次实验中下一个时间片的Q值更新当前的Q值了吗?说起来真是很拗口。下面用比较形象的方法再具体分析一下Q-Learning。
Q-Learning的算法如下:
![](https://i-blog.csdnimg.cn/blog_migrate/aa59b85024944220a462b390656aa860.png)
对于Q-Learning,首先就是要确定如何存储Q值,最简单的想法就是用矩阵,一个s一个a对应一个Q值,所以可以把Q值想象为一个很大的表格,横列代表s,纵列代表a,里面的数字代表Q值,如下表示:
这样大家就很清楚Q值是怎样的 了。接下来就是看如何反复实验更新。
Step 1:初始化Q矩阵,比如都设置为0
Step 2:开始实验。根据当前Q矩阵及方法获取动作。比如当前处在状态s1,那么在s1一列每一个Q值都是0,那么这个时候随便选择都可以。
假设我们选择a2动作,然后得到的reward是1,并且进入到s3状态,接下来我们要根据