我们假设一个场景,一间房子,分为0,1,2,3,4五个屋子,5号所代表的是屋子以外。此时此刻,一个智能体从2号屋子开始走,目标是5号室外。我们根据左图的信息,抽象出右图的路线图。
我们为这个问题设计奖励函数的值,奖励函数值为0的时候表示两点之间可以到达。由于最终的目标是5号室外,所以我们将1——5,4——5,5——5这三段的奖励函数设置为100。
我们将这段抽象为一个矩阵,纵向表示为状态,横向表示为下一步的操作。可以达到的我们可以设置为0,不可以达到的我们设置为-1,而最终到达为5的三个我们设置为100。由此我们抽象出一个矩阵,以此表示奖励函数R。
Q-learning的精髓便是计算q表,出现q表之后,智能体根据q表来决策自身究竟是进行什么样的action。智能体到达什么状态s,之后查看q表,之后选择q表中这一行中最大的那个那个action来做。
下面我们来探索一下建立q表的过程:
step1:给定参数γ和reward矩阵R:其中参数γ是衰减系数,reward矩阵R是回报矩阵。这两部分需要在建立q表之前人为的设置好。
step2:初始化Q表,并令Q为0矩阵。:在此我们说明一下,reward矩阵R和Q表是两个矩阵,两者并不是同一个矩阵,两者的关联仅仅在于两者的行数和列数是一致的。
step3:for each episode:就是第三步必须要实现一个完整的过程,就是每一次迭代,必须从当前的点,必须要到达结尾的终点,方可停止,不可以没有到达终点,便停止这次的过程。
3.1:随机选择一个初始状态s:这一步是随机进行的
3.2:若未到达目标状态,请执行以下几步:
(1)在当前状态s的所有可能行为中选取一个行为a:这一步也是随机进行的
(2)利用选定的行为a得到下一个状态:这一步顺理成章,s确定,a确定,势必会得到下一个状态
(3)按照最上方公式计算Q(s,a):最上方公式表示,一个点的q值 = 当前点对应的R值+γ*下一个状态q值得最大值。这样我们便得到了这个点得q值
(4)令下一状态为当前状态
下面我们举一个例子来计算一点得q值:
首先我们先初始化γ,R矩阵便是最上方的R矩阵。之后我们初始化Q表(全部为0),并且和R表是相同形状的。
之后,我们随机的选择状态s1,可以看到s1中可以继续的有a3和a5,我们随机的选择,这次我们选择a5。
之后,我们到达状态5以后发生什么呢?状态5以后的下一步状态将是1,4,5。但是Q表中(5,1),(5,4),(5,5)都是0,所以在最后计算Q值的时候第二项是0,只有第一项的值
下面进行下一次迭代,依旧是随意得选择一个s,再从中随意得选取一个a,之后按照公式计算价值。
经过不断的迭代,最终得q表将会收敛到上图左侧得形式。我们可以看出最后得数字比较大,为了方便,我们可以对其进行归一化,找到左图中最大得数500,对所有得数字都处以500,再加上百分号,获得百分比,得到右侧得数组。根据右侧得数组可以转化为状态转化图,这样在进行决策得时候就可以按照q表中得进行决策了。
以上就是Q-learning得全部过程。