前面我們介紹了Q-learning算法的原理,現在我們就一步一步地用實際數值演示一下,給大家一個更直觀的認識。
首先我們選擇Gamma值的初值為0.8,agent的初始位置是房間1,前面顯示的R矩陣不變,Q矩陣所有值都被初始化為0。
由於起始位置是房間1,所以我們先看R矩陣的第二行,其中有2個可能,從房間1到房間3;從房間1到房間5。算法是隨機選擇其中之一。假設我們隨機選到后者,看看算法如何更新Q-table:
根據前面介紹的公式Q(state, action) = R(state, action) + Gamma * Max[Q(next possible state1, action1), Q(next possible state2, action2), Q(next possible state3, action3), ... ],如果agent從房間1進入房間5,那么Q(1, 5)= R(1, 5) + 0.8 * Max[ Q(5, 1), Q(5, 4), Q(5, 5)],因為從房間5進入下一個可能房間的路徑有3條(1,4,5)。帶入數值,我們得到Q(1, 5) = 100 + 0.8 * 0 = 100,因此更新后的Q-table如下:
因為5是目標狀態,所以我們的第一個episode就完成了,此時的智能體“大腦”中就有了如上所示的知識。
接着算法要開始另外一個episode。上次我們隨機選取了1作為初始狀態,這次我們隨機選取了3作為初始狀態。
我們從R矩陣的對應的行中看到3個可能的動作,分別讓智能體從3進入1、2或者4,假設我們隨機選取,得到了1。同上,我們要計算Q(3, 1) = R(3, 1) + 0.8 * Max[ Q(1, 3), Q(1, 5)] = 0 + 0.8 * Max[0, 100] = 80,現在我們的Q-table就變成下面的樣子:
現在的狀態就是1了,但是因為1不是目標狀態,所以還要繼續算法中的循環。根據下圖,我們容易看出從狀態1,agent可以進入狀態3或5,假設隨機選擇,我們選擇了5。
上面我們計算過Q(1, 5)的值,在這里沒有變化,仍然得到100,因此這一個episode沒有改變Q-table的值。
我們的agent不斷重復Q-learning算法,最后會得到下面的Q-table:
然后我們把矩陣中的每個值除以5,得到
然后把矩陣轉換成下圖:
有了這個圖,agent就可以很簡單的找到從2到5的最佳路徑:2 - 3 - 1 - 5 或者2 - 3 - 4 - 5. (就是選擇獎勵值最大的路徑)。