gym模块如何安装,windows能安装gym吗

首页 > 实用技巧 > 作者:YD1662024-01-02 22:09:04

gym模块如何安装,windows能安装gym吗(1)

基于gym和tensorflow的强化学习算法实现

上一讲已经深入剖析了 gym 环境的构建强化学习实战《第一讲 gym学习及二次开发 - 知乎专栏》。这一讲,我们将利用gym和tensorflow来实现两个最经典的强化学习算法qleanring 和基于策略梯度的方法。本节课参考了莫烦的部分代码(见知乎问答《强化学习(reinforcement learning)有什么好的开源项目、网站、文章推荐一下?》),在此对其表示感谢。这一讲分为两个小节,2.1小节讲讲用qlearning的方法解决机器人找金币(该环境已经在上一节给出);2.2 小节以小车倒立摆为例子,详细讲解基于策略梯度的强化学习方法。之所以选择这两个方法,一是因为两者都是经典算法,还有是考虑到机器人找金币是典型的表格型强化学习问题,而小车倒立摆是典型的状态空间连续型强化学习问题。

第1小节 qlearning算法实现

1.1 qlearning伪代码

qlearning算法是off-policy的基于值函数的TD(0)强化学习算法。基于值函数的强化学习算法的本质是更新值函数。其理论和伪代码已经在第四讲给出。现在我们回顾一下:

gym模块如何安装,windows能安装gym吗(2)

图2.1 qlearning 算法伪代码

从图2.1中我们看到,qlearning算法的实现可以分为以下关键点:行为值函数的表示,探索环境的策略,epsilon贪婪策略,值函数更新时选择动作的贪婪策略,值函数更新。下面,我就逐个讲解一下。

1.2 qlearning的行为值函数表示

对于表格型强化学习算法,值函数是一张表格。对于行为值函数,这张表可以看成是两维表,其中一维为状态,另外一维为动作。对于机器人找金币的例子:

状态空间为:[1,2,3,4,5,6,7,8]

动作空间为:[‘n’, ‘e’, ’s’, ’w’]

行为值函数可以用字典数据类型来表示,其中字典的索引由状态-动作对来表示。因此行为值函数的初始化为:

qfunc = dict #行为值函数为qfun

for s in states:

for a in actions:

key = “d%_s%”%(s,a)

qfun[key] = 0.0

1.3 探索环境的策略:epsilon贪婪策略

智能体通过eplilon贪婪策略来探索环境,epsilon贪婪策略的数学表达式为:

gym模块如何安装,windows能安装gym吗(3)

该式子的python代码实现为:

def epsilon_greedy(qfunc, state, epsilon):

#先找到最大动作

amax = 0

key = "%d_%s"%(state, actions[0])

qmax = qfunc[key]

for i in range(len(actions)): #扫描动作空间得到最大动作值函数

key = "%d_%s"%(state, actions[i])

q = qfunc[key]

if qmax < q:

qmax = q

amax = i

#概率部分

pro = [0.0 for i in range(len(actions))]

pro[amax] = 1-epsilon

for i in range(len(actions)):

pro[i] = epsilon/len(actions)

##根据上面的概率分布选择动作

r = random.random

s = 0.0

for i in range(len(actions)):

s = pro[i]

if s>= r: return actions[i]

return actions[len(actions)-1]

从上面的代码注释可以看到,该代码可分成3小段:第1小段是先找到当前状态下最大的动作;第2小段给每个动作分配概率;第3小段是根据概率分布采样一个动作。

1.4 值函数更新时,选择动作的贪婪策略

选择动作的贪婪策略就是选择状态为s’时,值函数最大的动作。其python实现为:

def greedy(qfunc, state):

amax = 0

key = "%d_%s" % (state, actions[0])

qmax = qfunc[key]

for i in range(len(actions)): # 扫描动作空间得到最大动作值函数

key = "%d_%s" % (state, actions[i])

return actions[amax]

该段代码与上段代码几乎一样,不同的是所取的状态值不一样。该段代码的状态是当前状态s的下一个状态s’. 另外,DQN所做的改变是用来选择行为的值函数网络称为目标值函数网络,跟当前值函数网络不同。

1.5 值函数更新

值函数更新公式为:

gym模块如何安装,windows能安装gym吗(4)

首页 12345下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.