许久没有更新重新拾起,献于小白

这次介绍的是强化学习  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的简单介绍

下面是全部的代码

 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) def action_choise(obervation):
if np.random.uniform()<EPSILON:
action=np.argmax(q_table[obervation])
else:
action=env.action_space.sample()
return action def learn(state,action,reward,obervation):
q_table[state][action]+=ALPHA*(reward+GAMMA*max(q_table[obervation])-q_table[state,action]) SCORE=0
for exp in xrange(10000):
obervation=env.reset()
EPSILON+=0.001
for i in xrange(MAX_STEPS):
# env.render()
action=action_choise(obervation)          #动作选择
obervation_,reward,done,info=env.step(action) #学习
SCORE+=reward
if reward==0:
if done:
reward=-1
else:
reward=-0.001
learn(obervation,action,reward,obervation_)
obervation=obervation_
if done:
break
print 'esp,score (%d,%d)'%(exp,SCORE)
print 'score is %d'%SCORE

大家把Q表的信息打印出来,断点执行一下,相信会对Q-learning有更深入的了解

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

独乐乐不如众乐乐 ^_^

随机推荐

  1. python用户管理系统

    学Python这么久了,第一次写一个这么多的代码(我承认只有300多行,重复的代码挺多的,我承认我确实垃圾),但是也挺不容易的 自定义函数+装饰器,每一个模块写的一个函数 很多地方能用装饰器(逻辑跟不 ...

  2. Bootstrap的js插件之按钮(button)

    1)属性: data-loading-text="载入中..."--使button呈现载入状态: data-toggle="button"--使按钮可以切换状态 ...

  3. 项目实战12.2—企业级监控工具应用实战-zabbix操作进阶

    无监控,不运维.好了,废话不多说,下面都是干货. 流量党勿入,图片太多!!! 项目实战系列,总架构图 http://www.cnblogs.com/along21/p/8000812.html 一.U ...

  4. 什么是 stack?- 每天5分钟玩转 Docker 容器技术(111)

    什么是 stack ?在回答这个问题之前我们先回忆一下前面部署 WordPress 应用的过程: 首先创建 secret. 然后创建 MySQL service,这是 WordPress 依赖的服务. ...

  5. selenium.common.exceptions.WebDriverException: Message: 'phantomjs' executab

    该问题博主是在Mac环境遇到的,对应windows找对应解决方案解决即可. 问题原因: phantomjs环境配置有问题,要么是配置错误,要么是没有配置. 解决方案: 1.将下载解压好的phantom ...

  6. Bootstrap学习笔记(一)

    用Laravel编写了一段时间程序,选择了bootstrap作为前段框架,现在已经有一段时间了,抽空总结一下:     bootstrap是一个前端框架,所谓框架就是为满足特定需要在特定环境下提供的一 ...

  7. 解决win7中防火墙的0x6D9问题的方法

    问题: 打开windows防火墙管理单元时出错:代码0x6d9" 解决方法: 下一步-->下一步-->完成.

  8. 如何用VSCode愉快的写Python

    在学习Python的过程中,一直没有找到比较趁手的第三方编辑器,用的最多的还是Python自带的编辑器.由于本人用惯了宇宙第一IDE(Visual Studio),所以当Visual Studio C ...

  9. Ionic2 cordova angular2 打包到Android apk环境搭建

    一.前言 前段时间,公司有个APP项目需要支持不同平台,于是采用了Ionic2 + cordova + angular2,在搭建环境过程中遇到了不少问题,刚好最近有时间整理出来. 二.开发环境搭建 参 ...

  10. 最全linux命令

    arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI ...