强化学习之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有更深刻的了解

欢迎你们一块儿学习共同提升,

独乐乐不如众乐乐 ^_^

相关文章
相关标签/搜索