強化學習之Q-learning ^_^


許久沒有更新重新拾起,獻於小白

 

這次介紹的是強化學習  Q-learning,Q-learning也是離線學習的一種

關於Q-learning的算法詳情看 傳送門

下文中我們會用openai gym來做演示

 簡要

q-learning的偽代碼先看這部分,很重要

 

簡單的算法語言描述就是

開始執行任務:

  隨機選擇一個初始動作

  執行這些動作

  若未達到目標狀態,則執行一下幾步

    在當前狀態s所有可能的行為中選擇一個a

    利用a得到下一個狀態s_

    計算Q(s,a) (對當前的行為進行學習)

    下一個狀態等於當前狀態

    開始下一個循環

 

 

有重要的幾個參數,GAMMA(gamma 是對未來 reward(分數) 的衰減值),ALPHA(學習率),EPSILON(策略)

GAMMA是什么意思呢,就是對獲取過的獎勵為了防止再次獲取后得到的分數一樣,於是對reward進行一個衰減,這樣就會有長遠的眼光,機器人就不只專注於眼前的獎勵了

EPSILON 是一種策略,0.8代表的意思就是我們有80%的概率來選擇之前的經驗剩下的20%的概率來進行新的探索

 

游戲開始

首先我們初始化環境

import numpy as np
import gym

GAME = 'FrozenLake-v0'
env = gym.make(GAME)

MAX_STEPS=env.spec.timestep_limit
EPSILON=0.8
GAMMA=0.8
ALPHA=0.01
q_table=np.zeros([16,4],dtype=np.float32)

q_table就是Q-Learning的Q表了,里面有所有我們進行學習的經驗,程序的動作選擇都是從Q表中選擇

 

def action_choise(obervation):
    if np.random.uniform()<EPSILON:
        action=np.argmax(q_table[obervation])
    else:
        action=env.action_space.sample()
    return action

上面代碼為策略選擇,80%的概率總Q表中選擇最優策略,20%的概率進行隨機操作

 

 

 

def learn(state,action,reward,obervation):
    q_table[state][action]+=ALPHA*(reward+GAMMA*max(q_table[obervation])-q_table[state,action])

此部分為學習部分,重要部分用紅線標示出來了

Q表的更新方式為   學習率 * (真實值 - 預測值)  將判斷誤差傳遞回去 以此來進行學習

 對應算法部位為

 

GAME OVER

以上就是Q-learning的簡單介紹

下面是全部的代碼

 1 import numpy as np
 2 import gym
 3 
 4 GAME = 'FrozenLake-v0'
 5 env = gym.make(GAME)
 6 
 7 MAX_STEPS=env.spec.timestep_limit
 8 EPSILON=0.8
 9 GAMMA=0.8
10 ALPHA=0.01
11 q_table=np.zeros([16,4],dtype=np.float32)
12 
13 def action_choise(obervation):
14     if np.random.uniform()<EPSILON:
15         action=np.argmax(q_table[obervation])
16     else:
17         action=env.action_space.sample()
18     return action
19 
20 def learn(state,action,reward,obervation):
21     q_table[state][action]+=ALPHA*(reward+GAMMA*max(q_table[obervation])-q_table[state,action])
22 
23 
24 SCORE=0
25 for exp in xrange(10000):
26     obervation=env.reset()
27     EPSILON+=0.001
28     for i in xrange(MAX_STEPS):
29         # env.render()
30         action=action_choise(obervation)          #動作選擇
31         obervation_,reward,done,info=env.step(action)    #學習
32         SCORE+=reward
33         if reward==0:
34             if done:
35                 reward=-1
36             else:
37                 reward=-0.001
38         learn(obervation,action,reward,obervation_)
39         obervation=obervation_
40         if done:
41             break
42     print 'esp,score (%d,%d)'%(exp,SCORE)
43 print 'score is %d'%SCORE

 

 

大家把Q表的信息打印出來,斷點執行一下,相信會對Q-learning有更深入的了解

歡迎大家一起學習共同提高,

獨樂樂不如眾樂樂 ^_^


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM