【rl-agents代码学习】01——总体框架

文章目录

  • rl-agent Get start
    • Installation
    • Usage
    • Monitoring
  • 具体代码

学习一下rl-agents的项目结构以及代码实现思路。

source: https://github.com/eleurent/rl-agents

rl-agent Get start

Installation

pip install --user git+https://github.com/eleurent/rl-agents

Usage

rl-agents中的大部分例子可以通过cd到scripts文件夹 cd scripts,执行 python experiments.py命令实现。

Usage:experiments evaluate <environment> <agent> (--train|--test)[--episodes <count>][--seed <str>][--analyze]experiments benchmark <benchmark> (--train|--test)[--processes <count>][--episodes <count>][--seed <str>]experiments -h | --helpOptions:-h --help            Show this screen.--analyze            Automatically analyze the experiment results.--episodes <count>   Number of episodes [default: 5].--processes <count>  Number of running processes [default: 4].--seed <str>         Seed the environments and agents.--train              Train the agent.--test               Test the agent.

evaluate命令允许在给定的环境中评估给定的agent。例如,

# Train a DQN agent on the CartPole-v0 environment
$ python3 experiments.py evaluate configs/CartPoleEnv/env.json configs/CartPoleEnv/DQNAgent.json --train --episodes=200

每个agent都按照标准接口与环境交互:

action = agent.act(state)
next_state, reward, done, info = env.step(action)
agent.record(state, action, reward, next_state, done, info)

环境的配置文件

{"id": "intersection-v0","import_module": "highway_env","observation": {"type": "Kinematics","vehicles_count": 15,"features": ["presence", "x", "y", "vx", "vy", "cos_h", "sin_h"],"features_range": {"x": [-100, 100],"y": [-100, 100],"vx": [-20, 20],"vy": [-20, 20]},"absolute": true,"order": "shuffled"},"destination": "o1"
}

agent的配置文件,核心就是"__class__": "<class 'rl_agents.agents.deep_q_network.pytorch.DQNAgent'>",利用agent_factory进行agent的创建。

{"__class__": "<class 'rl_agents.agents.deep_q_network.pytorch.DQNAgent'>","model": {"type": "MultiLayerPerceptron","layers": [128, 128]},"gamma": 0.95,"n_steps": 1,"batch_size": 64,"memory_capacity": 15000,"target_update": 512,"exploration": {"method": "EpsilonGreedy","tau": 15000,"temperature": 1.0,"final_temperature": 0.05}
}

如果部分key缺失的话,会使用默认的值agent.default_config()

最后,可以在基准(baseline)测试中安排一批实验。然后在几个进程上并行执行所有实验。

# Run a benchmark of several agents interacting with environments
$ python3 experiments.py benchmark cartpole_benchmark.json --test --processes=4

基准配置文件包含环境配置列表和agent配置列表。

{"environments": ["configs/CartPoleEnv/env.json"],"agents": ["configs/CartPoleEnv/DQNAgent.json","configs/CartPoleEnv/LinearAgent.json","configs/CartPoleEnv/MCTSAgent.json"]
}

Monitoring

有几种工具可用于监控agent性能:

  • Run metadata:为了可重复性,将运行所用的环境和agent配置合并,并保存到metadata.*.json文件中。
  • Gym Monitor:每次运行的主要统计数据(episode rewards, lengths, seeds)都会记录到episode_batch.*.stats.json文件中。可以通过运行scripts/analyze.py来自动可视化这些数据。
  • Logging:agent可以通过标准的Python日志记录库发送消息。默认情况下,所有日志级别为INFO的消息都会保存到logging.*.lo文件中。要保存日志级别为DEBUG的消息,请添加选项scripts/experiments.py --verbose
  • Tensorboard:默认情况下,一个tensoboard writer会记录有关有用标量、图像和模型图的信息到运行目录。可以通过运行以下命令来进行可视化:tensorboard --logdir <path-to-runs-dir>

具体代码

rl-agents核心代码集中在rl-agents文件夹和scripts文件夹中,其中,rl-agents主要实现相关的算法,scripts为相应的配置文件。
在这里插入图片描述

experiments.py为入口程序,先从它看起,其相应的用法如下:
在这里插入图片描述

Usage:experiments evaluate <environment> <agent> (--train|--test) [options]experiments benchmark <benchmark> (--train|--test) [options]experiments -h | --helpOptions:-h --help              Show this screen.--episodes <count>     Number of episodes [default: 5].--no-display           Disable environment, agent, and rewards rendering.--name-from-config     Name the output folder from the corresponding config files--processes <count>    Number of running processes [default: 4].--recover              Load model from the latest checkpoint.--recover-from <file>  Load model from a given checkpoint.--seed <str>           Seed the environments and agents.--train                Train the agent.--test                 Test the agent.--verbose              Set log level to debug instead of info.--repeat <times>       Repeat several times [default: 1].

首先从main函数开始,根据evaluate或者benchmark执行相应的任务。暂且先从evaluate入手。

def main():opts = docopt(__doc__)if opts['evaluate']:for _ in range(int(opts['--repeat'])):evaluate(opts['<environment>'], opts['<agent>'], opts)elif opts['benchmark']:benchmark(opts)

evaluate主要完成envagent的创建以及evaluation 对象的创建,再根据选择train或test执行不同的程序。

def evaluate(environment_config, agent_config, options):"""Evaluate an agent interacting with an environment.:param environment_config: the path of the environment configuration file:param agent_config: the path of the agent configuration file:param options: the evaluation options"""logger.configure(LOGGING_CONFIG)if options['--verbose']:logger.configure(VERBOSE_CONFIG)env = load_environment(environment_config)agent = load_agent(agent_config, env)run_directory = Noneif options['--name-from-config']:run_directory = "{}_{}_{}".format(Path(agent_config).with_suffix('').name,datetime.datetime.now().strftime('%Y%m%d-%H%M%S'),os.getpid())options['--seed'] = int(options['--seed']) if options['--seed'] is not None else Noneevaluation = Evaluation(env,agent,run_directory=run_directory,num_episodes=int(options['--episodes']),sim_seed=options['--seed'],recover=options['--recover'] or options['--recover-from'],display_env=not options['--no-display'],display_agent=not options['--no-display'],display_rewards=not options['--no-display'])if options['--train']:evaluation.train()elif options['--test']:evaluation.test()else:evaluation.close()return os.path.relpath(evaluation.run_directory)

Evaluation类中主要包含以下函数:
在这里插入图片描述

__init__的一些参数说明

参数描述
env要解决的环境,可能是包装了AbstractEnv的环境
agent解决环境的AbstractAgent agent
directory工作空间目录路径
run_directory运行目录路径
num_episodes运行的episode数
trainingagent是处于训练模式还是测试模式
sim_seed环境/agent随机性源的种子
recover从文件中恢复agent参数。如果为True,则使用默认的最新保存。如果为字符串,则将其用作路径。
display_env渲染环境,并有一个监视器录制其视频
display_agent如果支持,将agent图形添加到环境查看器中
display_rewards通过episodes显示agent的性能
close_env当评估结束时,是否应该关闭环境
step_callback_fn在每个环境步骤之后调用的回调函数。它接受以下参数:(episode, env, agent, transition, writer)。

首先看一下train,根据agent是否有batched属性,分为run_batched_episodesrun_episodes

    def train(self):self.training = Trueif getattr(self.agent, "batched", False):self.run_batched_episodes()else:self.run_episodes()self.close()

run_episodes就是一般强化学习的基本过程,注意其中的reset step 等函数都是经过封装的。实现自己的算法时需要注意。run_batched_episodes则主要实现一些并行计算的任务,这一部分等之后再详细介绍。

在这里插入图片描述

    def run_episodes(self):for self.episode in range(self.num_episodes):# Run episodeterminal = Falseself.reset(seed=self.episode)rewards = []start_time = time.time()while not terminal:# Step until a terminal step is reachedreward, terminal = self.step()rewards.append(reward)# Catch interruptionstry:if self.env.unwrapped.done:breakexcept AttributeError:pass# End of episodeduration = time.time() - start_timeself.after_all_episodes(self.episode, rewards, duration)self.after_some_episodes(self.episode, rewards)

test为模型测试部分

    def test(self):"""Test the agent.If applicable, the agent model should be loaded before using the recover option."""self.training = Falseif self.display_env:self.wrapped_env.episode_trigger = lambda e: Truetry:self.agent.eval()except AttributeError:passself.run_episodes()self.close()

其中eval也需要进行重写。

    def eval(self):"""Set to testing mode. Disable any unnecessary exploration."""pass

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/140485.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

性能压测工具:Locust详解

一、Locust介绍 开源性能测试工具https://www.locust.io/&#xff0c;基于Python的性能压测工具&#xff0c;使用Python代码来定义用户行为&#xff0c;模拟百万计的并发用户访问。每个测试用户的行为由您定义&#xff0c;并且通过Web UI实时监控聚集过程。 压力发生器作为性…

【面试经典150 | 】颠倒二进制位

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;逐位颠倒方法二&#xff1a;分治 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于…

javaSE的发展历史以及openjdk和oracleJdk

1 JavaSE 的发展历史 1.1 Java 语言的介绍 SUN 公司在 1991 年成立了一个称为绿色计划&#xff08;Green Project&#xff09;的项目&#xff0c;由 James Gosling&#xff08;高斯林&#xff09;博士领导&#xff0c;绿色计划的目的是开发一种能够在各种消费性电子产品&…

【可解释AI】Alibi explain: 解释机器学习模型的算法

Alibi explain: 解释机器学习模型的算法 可解释人工智能简介Alibi特点算法Library设计展望参考资料 今天介绍Alibi Explain&#xff0c;一个开源Python库&#xff0c;用于解释机器学习模型的预测(https://github.com/SeldonIO/alibi)。该库具有最先进的分类和回归模型可解释性算…

Java --- JVM的执行引擎

目录 一、执行引擎概述 1.1、执行引擎的工作过程 二、Java代码编译和执行的过程 三、解释器 3.1、解释器工作机制 3.2、解释器分类 3.3、解释器现状 四、JIT编译器 五、热点代码及探测方式 六、方法调用计数器 6.1、热点衰减 七、回边计数器 八、HotSpot VM设置程序…

axios1.5取消请求,中断请求的方法

给input的onchange绑定事件 引入axios,使用axios.CancelToken.source()创建标记 实例中,把cancelToken的值填上

CSS常用示例100+ 【目录】

目前已有文章 11 篇 本专栏记录的是经常使用的CSS示例与技巧&#xff0c;主要包含CSS布局&#xff0c;CSS特效&#xff0c;CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点&#xff0c;CSS特效主要是一些动画示例&#xff0c;CSS花边是描述了一些CSS相关…

Python参数传递,从入门到精通

Python是一种非常灵活的编程语言&#xff0c;以多种方式定义和调用函数。其中一个关键方面是参数传递的灵活性。在Python中&#xff0c;可以通过位置、关键字、默认值和可变长度参数等多种方式来传递参数。 1. 位置参数 位置参数是最常见的参数传递方式。当调用一个函数时&am…

node插件express(路由)的插件使用(二)——cookie 和 session的基本使用区别

文章目录 前言一、express 框架中的 cookie0、cookie的介绍和作用1. 设置cookie2.删除cookie3.获取cookie&#xff08;1&#xff09;安装cookie-parser&#xff08;2&#xff09;导入cookie-parser&#xff08;3&#xff09;注册中间件&#xff08;4&#xff09;获取cookie&…

使用Python分析时序数据集中的缺失数据

大家好&#xff0c;时间序列数据几乎每秒都会从多种来源收集&#xff0c;因此经常会出现一些数据质量问题&#xff0c;其中之一是缺失数据。 在序列数据的背景下&#xff0c;缺失信息可能由多种原因引起&#xff0c;包括采集系统的错误&#xff08;例如传感器故障&#xff09;…

Intel® DevCloud for oneAPI SYCL编程项目实践

问题陈述 实验所用的硬件环境和软件环境 本次实验使用oneAPI中支持SYCL编程模型的C编译器&#xff0c;使用英特尔oneAPI Developer Cloud服务&#xff0c;可以免安装额外环境&#xff0c;利用CPU作为主机&#xff08;Host&#xff09;&#xff0c;同时利用GPU作为设备&#xf…

LCA

定义 最近公共祖先简称 LCA&#xff08;Lowest Common Ancestor&#xff09;。两个节点的最近公共祖先&#xff0c;就是这两个点的公共祖先里面&#xff0c;离根最远的那个。 性质 如果 不为 的祖先并且 不为 的祖先&#xff0c;那么 分别处于 的两棵不同子树中&#…

【机试题】LazyIterator迭代器懒加载问题

将下面这个未完成的Java工具类补充完成&#xff0c;实现懒加载的功能&#xff0c;该类需要实现Iterable接口&#xff0c;能够遍历所有数据。具体要求如下&#xff1a; 工具类提供了一个ValueLoader接口&#xff0c;用于获取数据&#xff0c;其中ValueLoader的接口定义为&#x…

修改django开发环境runserver命令默认的端口

runserver默认8000端口 虽然python manage.py runserver 8080 可以指定端口&#xff0c;但不想每次runserver都添加8080这个参数 可以通过修改manage.py进行修改&#xff0c;只需要加三行&#xff1a; from django.core.management.commands.runserver import Command as Ru…

二十四、W5100S/W5500+RP2040树莓派Pico<PHY的状态模式控制>

文章目录 1. 前言2. 相关简介2.1 简述2.2 原理2.3 优点&应用 3. WIZnet以太网芯片4. PHY模式配置测试4.1 程序流程图4.2 测试准备4.3 连接方式4.4 相关代码4.5 测试现象 5. 注意事项6. 相关链接 1. 前言 W5100S/W5500不仅支持自动PHY自动协商&#xff0c;而且支持用户自定义…

自动生成Form表单提交在苹果浏览器中的注意事项

以下是本人在公司旧系统中看到的该段代码 function Post(URL, PARAMTERS) {//创建form表单var temp_form document.createElement("form");temp_form.action URL;//如需打开新窗口&#xff0c;form的target属性要设置为_blanktemp_form.target "_blank"…

[EFI]技嘉 Z490 VISION G i5-10500 电脑 Hackintosh 黑苹果引导文件

硬件配置 硬件型号驱动情况主板技嘉 Z490 VISION G CLPC controller Z490芯片组&#xff09;处理器英特尔 Core i5-10500 3.10GHz 六核已驱动内存16GB&#xff08; 威到DDR42655MHz8GBx 2〕已驱动硬盘SSDSC2BB150G7R (150 GB/ 国态硬盘&#xff09;已驱动显卡AMD Radeon RX 58…

[论文阅读] CLRerNet: Improving Confidence of Lane Detection with LaneIoU

Abstract 车道标记检测是自动驾驶和驾驶辅助系统的重要组成部分。采用基于行的车道表示的现代深度车道检测方法在车道检测基准测试中表现出色。通过初步的Oracle实验&#xff0c;我们首先拆分了车道表示组件&#xff0c;以确定我们方法的方向。我们的研究表明&#xff0c;现有…

Python之字符串、正则表达式练习

目录 1、输出随机字符串2、货币的转换&#xff08;字符串 crr107&#xff09;3、凯撒加密&#xff08;book 实验 19&#xff09;4、字符替换5、检测字母或数字6、纠正字母7、输出英文中所有长度为3个字母的单词 1、输出随机字符串 编写程序&#xff0c;输出由英文字母大小写或…

ESP32 BLE特征值示例

键盘特征值初始化示例 void BleKeyboard::begin(void) {BLEDevice::init(deviceName);BLEServer* pServer BLEDevice::createServer();pServer->setCallbacks(this);hid new BLEHIDDevice(pServer);inputKeyboard hid->inputReport(KEYBOARD_ID); // <-- input R…