強化學習之Q-learning ^_^

許久沒有更新從新拾起,獻於小白算法

 

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

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

下文中咱們會用openai gym來作演示spa

 簡要

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

 

簡單的算法語言描述就是orm

開始執行任務:blog

  隨機選擇一個初始動做遊戲

  執行這些動做ip

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

    在當前狀態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有更深刻的瞭解

歡迎你們一塊兒學習共同提升,

獨樂樂不如衆樂樂 ^_^

相關文章
相關標籤/搜索