基于web-mvc的最干净深度强化学习实现

mvc的Python项目详细描述


CircleCIMaintainabilityTest CoverageJob StatusReport

MVC日间行车灯

基于带有完整单元测试的web mvc架构的清晰深层强化学习代码

动机

实现深度强化学习算法很容易编造混乱的代码,因为环境和代理之间的交互循环需要类之间的大量依赖关系。 即使是深度学习也需要特殊技能来构建干净的代码。

为了跳出框框,web工程师花了数年时间研究mvc(model-view-controller)体系结构,用整洁的代码构建系统,以处理web和用户之间的交互。 在这里,我发现这种mvc体系结构对于深入的强化学习实现是非常有用的。 mvc为依赖性较小的体系结构提供了方向,这对于单元测试来说会更好。

安装

英伟达Docker

你可以使用Docker来设置和运行实验。

$ ./scripts/build.sh

一旦构建了容器,就可以通过./scripts/up.sh使用nvidia运行时启动容器。

$ ./scripts/up.sh
root@a84ab59aa668:/home/app#  ls
Dockerfile  README.md    example.confing.json  graphs            mvc      scripts  tests
LICENSE     examples     logs                  requirements.txt  test.sh  tools
root@a84ab59aa668:/home/app#

手动

您需要安装用requirements.txt和tensorflow编写的包。

$ pip install -r requirements.txt
$ pip install tensorflow-gpu tensorflow-probability-gpu
# if you run example scripts
$ pip install pybullet roboschool

如果您在安装tensorflow probability时遇到问题,请检查tensorflow版本。

作为库安装

pypi上也提供了这个存储库。 您可以在mvc drl的基础上实现额外的算法。

$ pip install mvc

:警告:此报告正在开发中,因此接口可能经常更改。

算法

对于学术用途,我们提供您可能需要比较的基线实现。

  • [X]最近的策略优化
  • [X]深度确定性政策梯度
  • [X]软演员评论家

蚂蚁性能

每一分代表10集的平均评价奖励。 与一篇Soft Actor-Critic的论文取得了几乎相同的性能。

ppo

$ python -m examples.ppo --env Ant-v2

ppo

ddpg

$ python -m examples.ddpg --env Ant-v2

ddpg

sac

$ python -m examples.sac --env Ant-v2 --reward-scale 5

sac

比较

comparison

日志可视化

所有日志记录数据都作为csv文件和可视化工具数据保存在logs目录下。 在示例代码中使用--log-adapter选项将tensorboard和visdom切换为可视化(默认值:tensorboard)。

张力板

$ tensorboard --logdir logs

面容

要使用visdom,需要填写visdom服务器的主机信息。

$ mv example.config.json config.json
$ vim config.json # fill visdom section

在运行实验之前,启动visdom服务器。

$ visdom

matplotlib

通过直接指向csv文件,可以使用tools/plot_csv.py可视化。

$ python tools/plot_csv.py <path to csv> <path to csv> ...

默认情况下,图例是用文件路径设置的。 如果要手动设置,请使用label选项。

$ python tools/plot_csv.py --label=experiment1 --label=experiment2 <path to csv> <path to csv>

单元测试

为了保证代码质量,包括神经网络在内的所有函数和类都必须进行单元测试。

下面的命令运行tests目录下的所有单元测试。

$ ./test.sh

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

推荐PyPI第三方库


热门话题
Java岩石、布、剪刀程序,带文件输入   java迭代Hashmap中的值列表   数组不能正确循环   JavaHibernate:对于一个遥远的惰性依赖,有一个渴望的获取者吗?   交通阻塞下的java车辆路径选择   如何在java中创建布尔方法来检查添加到具有特定索引的arraylist的对象   java Tomcat配置文件/上下文xml似乎已经崩溃了。请确保它是可分析和有效的。有关详细信息,请参阅服务器日志   为什么坐标有时相等,有时不相等?   java libgdx CameraInputController过于敏感,平移开始得太早   将C++排序函数移植到java   java应该是十进制的   swing Java JFrame中的所有内容都不可见   java使用数组中除一个元素以外的所有元素   从子类运行构造函数的Java