openai健身房的mdp框架

blackhc.mdp的Python项目详细描述


#openai健身房的mdp环境

这个python框架使得指定简单的mdp变得非常容易。

[![构建状态](https://travis-ci.org/blackhc/mdp.svg?(https://travis ci.org/blackhcc/mdp)




>安装


>要使用pip安装,请使用:


``````
>pip install blackhcc.mdp
`````


>要运行测试,请使用:


```````>python setup.py test.pytest test
````





白皮书可在[文档/白皮书.pdf](docs/whitepaper.pdf)。这里有一个bibtex条目,您可以在出版物中使用(或者下载[cite_me.bib](cite_me.bib)):
````
@techreport{blackhc.mdp,
author={andreas kirsch},
title={mdp environments for the openai gym},
year={2017},
url={http://github.com/blackhc/mdp/raw/master/docs/whitepaper.pdf}
}
````



通常,这些环境满足马尔可夫性质,并被视为"马尔可夫决策过程"。

openai-gym是一个标准化的开放式框架,它通过一个简单的api为训练代理提供了许多不同的环境。

Ironments已经有了一个复杂的层次,这对于研究来说很有趣,但却很难找到bug。然而,健身房提供了四个非常简单的环境,对测试非常有用。"gym.envs.debugging"包包含一个具有确定性奖励和一个具有非确定性奖励的一轮环境,以及一个具有确定性奖励和另一个具有非确定性奖励的两轮环境。
作者发现这些环境对SMO非常有用。ke测试代码更改。

这个python框架使得以可扩展的方式指定简单的mdp变得非常容易。有了它,人们可以验证代理是否正确收敛,也可以检查其他属性。


mdp可以由元组完全指定:

*有限状态集,
*有限操作集,
*指定给定状态和操作转换到新状态的概率的矩阵,
*指定在ce中执行的给定操作的奖励的奖励函数。确定状态,
*折扣率。

奖励函数可以是确定性的,也可以是概率分布。

在此框架中,可以使用简单的*领域特定语言*(*dsl*)在python中指定mdp。
例如,一轮确定性的"gym.envs.debugging.one_round_deterministic_reward"中定义的环境可以指定如下:

``python
from blackhc.mdp import dsl

end=dsl.terminal_state()

action_0=dsl.action()
action_1=dsl.action()

start&;(action_0 action_1)>;end
start&action_1>;dsl.reward(1.)
````


dsl基于以下语法(使用ebnf[@ebnf]):

转换::=state'&;'action'>;'结果
结果::=(reward状态)['*'权重]
备选方案::=alt对于给定的状态和操作,可以指定结果。结果是状态转换或奖励。
如果为同一状态和操作指定了多个状态转换或奖励,则MDP是不确定的,状态转换(或奖励)是使用类别分布确定的。默认情况下,每个结果都是统一加权的,除非通过具有重复转换或使用显式权重因子另有指定。

例如,指定一个州获得奖励等概率的+1或-1,不以概率3/4改变状态,只以概率1/4转换到下一个状态,我们可以写:

``python
state&action>;dsl.reward(-1.)dsl.reward(1.)
state&action>;state*3 next_state
```

t到连接词(`&;`)和结果映射(`>;`),所以:

(a b)&;(c d)>;(e f)==
(a&c>;e)(a&c>;f)(a&d>;e)
(a&d>;f)(b&c>;e)…

备选方案可以由状态、操作、结果、连接或部分转换组成。例如,以下是有效的替代方案:

statea&actiona stateb&actionb
(actiona>;statec)(actionb>;stated)

运算符优先级是有利的,因为`*`的优先级高于`>;`,后者的优先级高于``,后者的优先级高于`>;`。这允许转换的自然形式。

=真的)
action_0=spec.action()
action_1=spec.action()


spec.transition(start,action_0,mdp.nextstate(end),mdp.nextstate(end))
spec.transition(start,action_1,action_1,mdp.reward(1))
```
```
`>action_0=spec.action()


action_0=spec action_.action()


action_0=spec action_0=spec action X`Graphs和使用"pydotplus"和"graphviz"渲染的d。从blackhcc导入mdp
froblackhcc.mdp导入示例


lt;div>;
<;img src="文档/one_round_d mdp.png"a lt="one round deterministic mdp"width="96"/>;
<;/div>;
<;b>;图1:one round deterministic mdp<;/b>;


\optimum values

框架还包含一个小模块,可以使用线性规划计算最优值函数。

``python
from blackhc.mdp import lp
from blackhc.mdp import example

solver=lp.linearprogramming(example.one_round_dmdp)
print(solver.compute_q_table())
print(solver.compute_v_vector())
`````

它支持渲染到jupyter笔记本中,作为存储视频的rgb数组,以及作为png字节数据。

``python
from blackhc import mdp
from blackhc.mdp import example


env.reset()
env.render()

is_done=false
环境步进(env.action-space.sample())
env.render()
````

<;div>;
<;lt;br/><;img src="docs/multi-roundu-roundu-nmdp-render.png"alt="env.render()"img src="docs/multi-roundu-roundu-mu-roundp-render.png"alt="env.render()"example.multi-roundu-nmdp`"width="192//>;
<;lt;br/><;div>;
>;
<;lt;lt;dp`<;/b>;

示例"package提供5个mdp。其中四个与"gym.envs.debugging"中的匹配,第五个如图2所示。



欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何在Java中深度复制双链表   为什么Eclipse会生成。类文件,如果我的Java源文件中存在语法错误?   java递归计算嵌套向量中的唯一对象   java使用CriteriaQuery选择通用主键   java如何使JComboBox中的某些项不可选择?   使用自定义背景色时,swing组件的java错误重绘()   java JSONDoc未显示有关服务的详细信息   java对象或基本类型   jaxb的javaxml解析问题   java如何创建自定义按钮形状类   java我的合并排序对于数组长度10不起作用,有什么原因吗   java jTextField从数据库自动完成   java如何创建tar。从文件列表中选择gz文件?   eclipse如何纠正java项目中的所有有效LIB?