腾讯互娱Turing Lab从创建开始,每周在内部进行分享读书会,对业界的技术研究和应用进行讨论。在此通过公众号形式把相关有趣内容也推送给对新技术和业界趋势感兴趣的朋友。

和大量的所谓技术公众号不同,尽管以AI为重心,但我们的分享不局限于AI论文,而是涉猎所有前沿技术领域,和自动化流程、数据处理、人工智能、架构设计相关的有趣内容均会分享,希望各位在周末闲暇时有空阅读了解。

分享人:许家誉 腾讯互娱 研究员

1. 概述

强化学习的主要作用是在复杂未知情况下,控制agent实现某个具体的目标。强化学习可以解决做出一系列决策的问题,例如训练算法完成某个游戏,如何控制机器人在复杂的环境中运动等。强化学习和标准的监督式学习之间的区别在于,它并不需要出现正确的输入/输出对,也不需要精确校正次优化的行为。强化学习更加专注于在线规划,需要在探索(在未知的领域)和遵从(现有知识)之间找到平衡。

OpenAI Gym是一个用于开发和比较强化学习算法的工具。它无需对agent的先验知识,并且采用python作为主要开发语言,因此可以简单的和TensorFlow等深度学习库进行开发集成,可以直观的将学习结果用画面直观的战术出来。例如Gy'm cartpole-v0游戏就是模拟倒立摆,通过左右调整使其不落下,传统我们是使用pid等算法进行控制实现。

2. Gym入门

安装gym

pip3 install gym

Gym安装完成后,可以通过以下例子使其运行起来。其中env.step根据action行为返回observation,reward,done, info四个值。Observation是一个四维的向量,表示小车的位置,小车的速度,木棒的角度,木棒的速度。每一个环境都有 action_space,observation_space,他们的类型都是Space。Discrete空间允许随机确定的非负数,在这个案例中就是0,1,如果我们随机进行控制,系统只能维持约10 time steps的平衡。

import gymenv = gym.make("CartPole-v0") #使用CarPole环境进行强化学习observation = env.reset() #初始化环境for _ in range(1000):    env.render() #环境渲染并显示出来 action = env.action_space.sample() # 随机化agent行动,在这个环境中只有0,1两个值,分别是向左1牛顿,向右1牛顿的力量 observation, reward, done, info = env.step(action)  if done:    observation = env.reset()env.close()

3.  利用Q Learning实现小杆的平衡控制

Q Learning是强化学习算法中value-based的算法,Q即为Q(s,a)就是在某一时刻的 s 状态下(s∈S),采取动作a (a∈A)动作能够获得收益的期望,环境会根据agent的动作反馈相应的回报reward r,所以算法的主要思想就是将State与Action构建成一张Q-table来存储Q值,然后根据Q值来选取能够获得最大的收益的动作。

倒立摆游戏比较复杂,原因在于倒立摆的连续状态是无穷多个,人工智能 Q-learning 方法需要有限个状态形成知识。因此我们只需要将连续状态打散为离散状态即可。整体策略分为观察期,贪心期及验证期三种。观察期系统采用随机运动,构建初始的Q Table,当获取到足够多的初始信息后,采用一定的贪心策略,逐步完善整个表。最后经过训练采用Q Learning可以将倒立摆维持超过200个time steps。代码如下:

importgym

importnumpy as np

env = gym.make('CartPole-v0')

eplision =0.01

q_table =np.zeros((256,2))

defbins(clip_min, clip_max, num):

return np.linspace(clip_min,clip_max, num + 1)[1:-1]

defdigitize_state(observation):

cart_pos, cart_v, pole_angle, pole_v =observation

digitized = [np.digitize(cart_pos,bins=bins(-2.4, 2.4, 4)),

np.digitize(cart_v,bins=bins(-3.0, 3.0, 4)),

np.digitize(pole_angle,bins=bins(-0.5, 0.5, 4)),

np.digitize(pole_v,bins=bins(-2.0, 2.0, 4))]

return sum([x * (4 ** i) for i, x in enumerate(digitized)])

#------------观察期--------------#

for _ in range(1000):

observation = env.reset()

s = digitize_state(observation)

while True:

action = env.action_space.sample()

observation_, reward, done, info =env.step(action)

if done:reward = -200

s_ =digitize_state(observation_)

action_ = env.action_space.sample()

q_table[s,action] = reward +0.85*q_table[s_,action_]

s,action = s_,action_

if done:break

print('观察期结束')

#------------贪心策略期--------------#

for epicode in range(1000):

observation = env.reset()

s = digitize_state(observation)

while True:

eplision = epicode / 1000

action = q_table[s].argmax()if np.random.random() < eplision else env.action_space.sample()

observation_, reward, done, info =env.step(action)

if done:reward = -200

s_ =digitize_state(observation_)

action_ = q_table[s_].argmax()if np.random.random() < eplision else env.action_space.sample()

q_table[s,action] = reward +0.85*q_table[s_,action_]

s,action = s_ ,action_

if done:break

print('贪心策略期结束')

#------------验证期--------------#

scores =[]

for _ in range(100):

score = 0

observation = env.reset()

s = digitize_state(observation)

while True:

action = q_table[s].argmax()

observation_, reward, done, info =env.step(action)

score += reward

s = digitize_state(observation_)

env.render()

if done:

scores.append(score)

break

print('验证期结束\n验证成绩:%s'%np.max(scores))

4. 总结

通过OpenAI Gym库可以快速验证强化学习的可用性,除了采用Q learning算法外,还可以通过神经网络DQN等算法进行强化学习。通过游戏的最终表现,可以直观看出强化算法的学习结果的好坏,从而为实际算法调整提供参考。Gym库中的游戏较为简单,经过验证后的强化学习算法还可以运用到普通游戏中,从而实现游戏的自动运行及测试。

参考文件:

https://gym.openai.com/

https://github.com/openai/gym

qlearning算法_通过OpenAI Gym编写第一个强化学习算法相关推荐

  1. 【强化学习实战】基于gym和tensorflow的强化学习算法实现

    [新智元导读]知乎专栏强化学习大讲堂作者郭宪博士开讲<强化学习从入门到进阶>,我们为您节选了其中的第二节<基于gym和tensorflow的强化学习算法实现>,希望对您有所帮助 ...

  2. 非确定性算法_带你从不同角度了解强化学习算法的分类

    本文将介绍强化学习算法的分类法,从多种不同角度学习几种分类法.话不多说,大家深呼吸,一起来学习RL算法的分类吧! 无模型(Model-Free)VS基于模型(Model-Based) 无模型VS模型分 ...

  3. 上交张伟楠副教授:基于模型的强化学习算法,基本原理以及前沿进展(附视频)

    2020 北京智源大会 本文属于2020北京智源大会嘉宾演讲的整理报道系列.北京智源大会是北京智源人工智能研究院主办的年度国际性人工智能高端学术交流活动,以国际性.权威性.专业性和前瞻性的" ...

  4. OpenAI Gym 是一个优秀开发和比较强化学习算法的工具

    OpenAI Gym 是一个优秀开发和比较强化学习算法的工具. gym的核心接口是Env方法: reset(self):重置环境的状态,返回观察.     step(self, action):推进一 ...

  5. 【Nature重磅】OpenAI科学家提出全新强化学习算法,推动AI向智能体进化

    深度强化学习实验室 官网:http://www.neurondance.com/ 论坛:http://deeprl.neurondance.com/ 编辑:DeepRL 近年来,人工智能(AI)在强化 ...

  6. 人工智能-强化学习-算法:Critic 【用于评价一个 Actor/Policy π】--> Q-Learning【用于训练出来一个最优 Actor/Policy π,擅长处理离散型 actions】

    一.Critic的作用 Critic就是一个神经网络,以状态 s s s 为输入,以期望的Reward为输出. Critic的作用就是衡量一个Actor在某State状态下的优劣.Given an a ...

  7. 入门 | 走近流行强化学习算法:最优Q-Learning

    选自Medium 作者:Yassine Yousfi 机器之心编译 参与:Nurhachu Null.李泽南 Q-Learning 是最著名的强化学习算法之一.我们将在本文中讨论该算法的一个重要部分: ...

  8. 强化学习算法Q-learning入门:教电脑玩“抓住芝士”小游戏

    本文来自AI新媒体量子位(QbitAI) 这篇文章打算教你使用强化学习中的Q-learning算法,让电脑精通一个简单的游戏.文中代码所用语言是Ruby. 为了展示算法内部的工作机制,我们将会教它去玩 ...

  9. 第一章 强化学习介绍

    Reinforement Learning Reinforcement Learning 强化学习讨论的问题是一个 智能体(agent) 怎么在一个复杂不确定的环境(environment)里面去极大 ...

最新文章

  1. 程序员的周末:纯野的一天
  2. Linux 网络编程详解四(流协议与粘包)
  3. The command could not be located because '/sbin' is not included in the PATH environment variable.
  4. c++中的explicit关键字及隐式类型转换
  5. 12.Memcached 与 Redis 区别
  6. java删除文件内容_java 删除文件中的数据
  7. 显卡dos测试软件,A+N卡测试说明_早期显卡DOS版本
  8. 计算机机房监理细则,弱电机房工程施工监理的四大重点
  9. 《工业设计史》第六章:工业、技术与设计
  10. 傅里叶分析公式推导(最简单的傅里叶级数和傅里叶变换)
  11. 计算机机房的消防验收,机房建设(消防)解决方案
  12. Kubeflow 部署采坑记录
  13. 读书笔记:《苏世民:我的经验与教训》
  14. 零基础自学新概念英语的方法
  15. 蓝牙搜索显示结果到ListView(十分精简)
  16. 【双卡尔曼滤波】基于simulink仿真的双卡尔曼滤波
  17. 选品指南:波兰市场什么最好卖?有哪些热门类目?
  18. Stream中map和flatmap的区别,一看就懂
  19. PAT1014 福尔摩斯的约会 分数 20
  20. 2.4G无线音频模块方案测评之RODE录音麦

热门文章

  1. 数据库路由中间件MyCat - 源代码篇(17)
  2. Berland and the Shortest Paths CodeForces - 1005F(最短路树)
  3. 【MyBatis源码解析】MyBatis一二级缓存
  4. Greenplum 集群部署
  5. Android 上千张图片的列表滑动加载
  6. quake3中求1/sqrt(x)的算法源代码
  7. [转载] html转word table样式_[Python02] Python-docx包的使用,快速处理 Word 文件!
  8. [转载] python3 格式化字符串 f-string 介绍
  9. 版本向量 使用css时正确区分IE版本[转]
  10. java基本语法(运算符)