安卓的图形密码有多少种可能?

这计算难度忒大

这次介绍的是强化学习  Q-learning,Q-learning也是离线学习的一种

当前已经划过的点的状态总共2^9种乘以当前停留在哪个点上的9种可能,总状态数不超过9*2^9。从被划过的点个数从小到大推一遍就算出来了

游戏开始

首先我们初始化环境

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表的更新方式为   学习率 * (真实值 – 预测值)
 将判断误差传递回去 以此来进行学习

 对应算法部位为

图片 1

 

http://www.guokr.com/article/49408/

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有更深入的了解

欢迎大家一起学习共同提高,

独乐乐不如众乐乐 ^_^

El psy congroo…

下文中我们会用openai gym来做演示

图片 2

关于Q-learning的算法详情看 传送门

发表评论

电子邮件地址不会被公开。 必填项已用*标注