ray.rllib-入门实践-10:自定义环境

RLlib一:RLlib入门 强化学习库,RLlib入门 阅读详情
AI摘要

博客介绍在ray.rllib中使用自定义环境的方法。应对具体任务时需自定义交互环境等,使用自定义环境分三步:创建自定义环境类,重构reset和step函数等;向ray注册自定义环境;在算法配置和训练中使用该环境,还给出了环境配置信息。

        前面介绍的入门实践都是基于 ray.rllib 内置的环境、模型和算法执行的,在应对具体任务时, 需要自定义交互环境、改进网络模型或者算法的损失函数。从本博客开始将逐个介绍。

        在ray.rllib中使用自定义的环境,主要分为三步:

        1) 创建自定义的环境类

        2) 向 ray 注册自定义的环境

        3) 在算法配置和训练中使用环境

环境配置:

        torch==2.5.1

        ray==2.10.0

        ray[rllib]==2.10.0

        ray[tune]==2.10.0

        ray[serve]==2.10.0

        numpy==1.23.0

        python==3.9.18

一、 创建自定义的环境类

import gymnasium as gym
from gymnasium import spaces
import ray
import numpy as np
from ray.rllib.algorithms.ppo import PPO, PPOConfig
from ray.tune.registry import register_env

## 1. 定义环境
class MyEnv(gym.Env):                               ## 注意1: 需要继承自gym.Env
    def __init__(self,env_config):
        self.worker_index = env_config.worker_index ## worker_index是
        self.vector_index = env_config.vector_index
        self.action_space = spaces.Box(low=-1,high=1,shape=(5,)) ## 一般需要定义动作空间作为成员变量
        self.observation_space = spaces.Box(low=-1,high=1,shape=(6,)) ## 一般需要定义观测空间作为成员变量。
        self.step_count = 0

    def reset(self, seed=None, options=None): ## 重构reset函数, 需要包含 seed=None, options=None 两个变量
                                              ## seed 和 options后面要附上默认值None,否则报错
        self.step_count = 0
        obs = self.observation_space.sample()
        info = {}
        print(f"========== reset called ========")
        print(f"========== worker_index = {self.worker_index} ========")
        return obs,info                     ## 返回的数据格式是指定的,需要严格一致,否则报错
    
    def step(self,action):   ## 重构step函数, 输入参数是指定的
        self.step_count += 1
        obs = self.observation_space.sample()
        reward = 0
        terminated = False
        truncated = False 
        info = {}
        if self.step_count > 10:
            terminated = True
        return obs,reward,terminated,truncated,info   ## 输出变量的数据格式必须是指定的

注意事项:

        1. 主要是重构 reset 和 step 函数,严格按照 gym.Env的相关接口规则。

        2. 在 __init__里面,最好定义self.action_space 和 self.observation_space两个成员变量

        3. env_config.worker_index 是AlgorithmConfig 在调用env_config时额外附带的参数, 不是DIY者手工定义的:无需自定义,直接使用即可。

二、 向 ray 注册自定义的环境

from ray.tune.registry import register_env

def env_creator(env_config):
    return MyEnv(env_config)
register_env("MyEnv",env_creator)

 注册完毕之后,就可以向使用rllib自带的环境(比如前面使用的Cartpole-v1环境)一样使用自己创建的环境了。

三、 使用自定义的环境进行算法配置和训练

## 3. 启动 ray, 创建算法,使用环境
ray.init()
## 配置算法
config = PPOConfig()
config = config.environment(env="MyEnv", env_config={})
algo = config.build()

## 训练
for i in range(3):
    iter_result = algo.train()
    print(f"episode_{i}")

代码汇总: 

import gymnasium as gym
from gymnasium import spaces
import ray
import numpy as np
from ray.rllib.algorithms.ppo import PPO, PPOConfig
from ray.tune.registry import register_env

## 1. 定义环境
class MyEnv(gym.Env):                               ## 注意1: 需要继承自gym.Env
    def __init__(self,env_config):
        self.worker_index = env_config.worker_index ## worker_index是
        self.vector_index = env_config.vector_index
        self.action_space = spaces.Box(low=-1,high=1,shape=(5,)) ## 一般需要定义动作空间作为成员变量
        self.observation_space = spaces.Box(low=-1,high=1,shape=(6,)) ## 一般需要定义观测空间作为成员变量。
        self.step_count = 0

    def reset(self, seed=None, options=None): ## 重构reset函数, 需要包含 seed=None, options=None 两个变量
                                              ## seed 和 options后面要附上默认值None,否则报错
        self.step_count = 0
        obs = self.observation_space.sample()
        info = {}
        print(f"========== reset called ========")
        print(f"========== worker_index = {self.worker_index} ========")
        return obs,info                     ## 返回的数据格式是指定的,需要严格一致,否则报错
    
    def step(self,action):   ## 重构step函数, 输入参数是指定的
        self.step_count += 1
        obs = self.observation_space.sample()
        reward = 0
        terminated = False
        truncated = False 
        info = {}
        if self.step_count > 10:
            terminated = True
        return obs,reward,terminated,truncated,info   ## 输出变量的数据格式必须是指定的
    
## 2. 向ray注册环境
def env_creator(env_config):
    return MyEnv(env_config)
register_env("MyEnv",env_creator)

## 3. 启动 ray, 创建算法,使用环境
ray.init()
## 配置算法
config = PPOConfig()
config = config.environment(env="MyEnv", env_config={})
algo = config.build()

## 训练
for i in range(3):
    iter_result = algo.train()
    print(f"episode_{i}")
    

【ray】【Rllib】关键概念 在特定的环境和政策条件下,政策评估会产生一批批的经验。动作->奖励->下一个状态->训练->重复的模拟迭代,直到结束状态,被称为一个插曲,或在RLlib中,一个展示。RL仿真反馈循环重复收集一个(单代理情况)或多个(多代理情况)策略的数据,在这些收集的数据上训练策略,并确保策略的权重保持同步。因此,收集的环境数据包含观察结果、采取的行动、收到的奖励和所谓的完成标志,指示代理在模拟中播放的不同情节的边界。策略是一个将环境的观察映射到要采取的动作的函数,通常写为π(s(t))-> a(t)。 阅读详情

相关推荐

ray.rllib 入门实践-2:配置算法

ray.rllib的算法配置方式有多种,网上的不同教程各不相同,有的互不兼容,本文汇总罗列了多种算法配置方式,给出推荐,并在最后给出可运行代码。

wzg2016的博客 1083

RL gym 环境(2)—— 自定义环境

通过构造经典的悬崖漫步(Cliff Walking)环境,来说明 gym 中环境的自定义和使用方法

佚失的诗篇 3595

【ray】【RLlib】【Algorithms 算法】

0.0对应于均匀概率。training(*,vtrace:bool| None =,use_critic:bool| None =,use_gae:bool| None =,lambda_:float| None =,clip_param:float| None =,use_kl_loss:bool|无=,kl_coeff:浮点|无=,kl_target:float|无=,τ:浮点|None =,target_update_frequency:int|无=,**kwargs)→ APPOConfig。

wq6qeg88的博客 1196

机器学习框架Ray -- 1.4 Ray RLlib的基本使用

RLlib是一种建立在Ray之上的行业级别的强化学习(RL)库。RLlib提供了高度可扩展性和统一的API,适用于各种行业和研究应用。定义了一个名为SimpleCorridor的gym环境,使用PPO算法进行并行强化学习。

wenquantongxin的博客 3873

游戏AI强化学习框架设计:PPO算法在PyTorch+Gym无人机路径规划中的实战解析.pdf

还在为深度学习开发框架选择而烦恼?试试PyTorch技术文档!它来自Facebook人工智能研究院(FAIR),专为深度学习打造。文档详细介绍了动态图机制,构建模型超灵活,实验迭代超快速。张量操作、神经网络层、优化器等模块讲解全面,GPU加速让计算效率飙升。还有丰富的生态系统,像计算机视觉的TorchVision、自然语言处理的TorchText 。无论你是新手入门,还是经验丰富的开发者,这份文档都能成为你的得力助手,赶紧来探索深度学习的无限可能!

Altium Designer铺铜陷阱:为什么你的死铜总是清除不干净?

本文深入探讨Altium Designer中铺铜操作导致死铜无法清除的常见问题,分析死铜形成的五大诱因,并提供高级参数优化和网络连接性验证技巧。通过调整边界计算精度和泪滴算法设置,有效解决死铜残留问题,提升PCB设计质量与制造良率。

weixin_29169505的博客 359

Rllib学习[2] --env定义 + env rollout

rllib中 构建环境env,以及产生samples

upr_rom的博客 2186

智能体评测技术与实践:从评估维度到DeepEval实战指南

智能体评测技术与实践:从评估维度到DeepEval实战指南 本文系统探讨了AI智能体的评测体系与实践方法。首先从四个关键维度构建评估框架:基础能力(意图理解、知识完整性)、复杂任务(多轮对话、动态工作流)、可靠性(幻觉抑制、安全合规)以及工具效率(参数填充、多工具协同)。其次分析了主流评测工具,包括xBench的动态双轨评估、DeepEval的全链路监控等解决方案。最后详细介绍了DeepEval的实战应用,涵盖环境配置、测试用例构建、指标配置及CI/CD集成,展示了如何通过代码化评估实现智能体质量的持续提升

Linda的自动化测试之旅 3414

Rllib学习[1] --rllib基本指令

讲述rllib中的基本操作

upr_rom的博客 4220

U盘 未知USB设备 设定地址失败 由于该设备有问题Windows 已将其停止(代码 43) 终极解决方案(做过系统装机盘而无法解决的必看)

U盘由于该设备有问题Windows 已将其停止(代码 43) 终极解决方案 我们在使用U盘的时候偶尔会碰到下列情况 一般是因为传输数据的过程中,死机或未响应直接断点或拔掉设备导致的,U盘再次插上之后出现设定地址失败。无法再次读取设备的数据。 解决方案: 首先请确认出现该情况不是因为你摔了U盘或接口处产生断裂这种物理损伤导致的!!! 首先请确认出现该情况不是因为你摔了U盘或接口处产生断裂这种物理损...

qq_39123987的博客 13万+

基-2 16点fft的verilog实现

本文是采用输入8位数据,输出8位数据的16点fft实现,旋转因子采用8位rom存储,分为cos和sin2个rom存储;输入数据以及每一级的输出数据采用8位的ram进行存储,分为实部和虚部进行存储。采用顺序输入,那么输出则为倒序。生成rom,可先在matlab中,计算出cos和sin的值,然后写入coe文件,再由ip核生成,具体过程自行百度,懒得百度的话,可以发我的邮箱来获得具体的程序。因为本文采用...

juniorofMFC的博客 9989

【STABLE BASELINE3】自定义环境代码,PPO,SAC,离散动作/连续状态

stable baseline3 PPO代码

Kiek17的博客 3667

探索数据库领域 SQL 的 JSON 数据处理技巧

在当今数字化时代,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,被广泛应用于各种领域,如 Web 应用、移动应用、大数据处理等。数据库作为数据存储和管理的核心,需要具备处理 JSON 数据的能力。本文章的目的在于深入探索 SQL 语言在数据库中处理 JSON 数据的技巧,涵盖从基础的 JSON 数据查询到复杂的 JSON 数据操作,帮助读者全面了解和掌握 SQL 处理 JSON 数据的方法。

2502_91592937的博客 924

强化学习rllib简明教程 ray

强化学习rllib简明教程 ray     之前说到强化 学习的库,推荐了tianshou,但是tianshou实现的功能还不够多,于是转向rllib,个人还是很期待tianshou的发展。     回到rllib,rllib是基于ray的一个工具(不知道这么说是不是合适),ray和rllib的关系就像,mllib之于spark,ray是个分布式的计算框架。     官网,文档。进入官网,

Lejeune的博客 1万+

验证方法、符合性方法与设计保证的关系

未来,随着适航标准和工程实践的不断演进,验证与符合性方法将持续优化,以应对日益复杂的系统设计需求。设计保证过程中的验证活动具有双重作用,既用于设计过程的质量控制和风险管理,又作为适航符合性方法的重要支持材料。在未来的航空电子系统开发中,进一步优化设计保证与验证活动的协同作用,将有助于应对日益复杂的工程挑战,推动航空安全技术的发展。为了全面理解这二者之间的关系,本章将系统说明设计保证过程中的验证活动如何既服务于设计保证,又作为符合性方法中的核心证明材料。最终,通过功能测试和环境测试验证硬件的实际性能。

qq_41854911的博客 554

红队内网攻防渗透:内网渗透之内网对抗:实战项目&VPC1打靶&PHP-RCE&三层代理路由&防火墙上线&密码喷射&域控提权

上面已经抓取到了密码,但是我们通过拓扑分析看,要想上线win10只能通过正向shell,因为win7的防火墙是开的,win10反向主动连接肯定入站规则拦截,而win10自己没有开防火墙,所以win7主动正向连接就可以上线。win7开启了防火墙,入站规则肯定是会拦截我们的请求的,所以我们需要反向上线,让win7主动来连接我们。这里扫描发现是存在ms17010漏洞的,但是想上线192.168.2.142的话,我们没有路由是上线不了的,这里有两种办法:一种msf直接生成后门,另一种cs移植后门到msf。

HACKONE的博客 909

使用Ray RLlib构建自定义强化学习环境

基于Ray RLlib 2.51.1版本,详细介绍了构建自定义强化学习环境与模型的方法。内容包括:1)继承Gymnasium的Env类实现自定义环境,定义观测/动作空间及核心接口;2)通过TorchModelV2实现自定义神经网络模型,包含策略网络和价值函数;3)使用PPOConfig链式配置训练参数,并处理新旧API兼容性问题;4)完整的训练流程及模型保存方法。文中所有代码均通过实际验证,解决了原参考文章因版本更新导致的API不兼容问题。

m0_60610428的博客 1300

ROS2 Nav2 - 模型预测路径积分控制器(MPPI)

这是一个预测控制器(局部轨迹规划器),用于实现模型预测路径积分(MPPI)算法,以跟踪具有自适应避障功能的路径。它包含基于插件的 critic 函数,可影响算法的行为。它由 Aleksei Budyakov 创建,由 Steve Macenski 为 Nav2 进行改编和开发。该插件实现了 nav2_core::Controller(控制器)接口,可在整个导航堆栈中作为控制器服务器的动作服务器(controller_server)中的局部轨迹规划器使用。据测定,该控制器可在中等英特尔处理器(第四代 i5)上

机器人控制与仿真应用 3908

【强化学习】Ray RLlib框架

Ray是一个开源的分布式计算框架,旨在解决大规模计算任务的高性能和分布式处理需求。它提供了任务调度、并行计算、分布式存储等丰富功能,允许终端用户并行化单个机器代码,几乎不需要更改代码。Ray为构建和运行分布式应用程序提供了简单的单元,并在其上构建了一个大型的应用程序、库和工具生态系统,以支持复杂的应用程序。

大雨淅淅的博客 1889

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

RLlib简介

参考: https://ray.readthedocs.io/en/latest/rllib.html https://zhuanlan.zhihu.com/p/79613212 文章目录1. RLlib: 可扩展强化学习1.1. custom env example1.2. API documentation1.3. concepts and custom algorithms2. 一分钟熟悉R...

方小汪的博客 8282

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ray.rllib-入门实践-11: 自定义模型/网络

class My_Model(TorchModelV2, nn.Module): ## 重构以下函数, 函数接口不能变。## 1. 定义自己的模型model_config:ModelConfigDict, ## PPOConfig.training(model = ModelConfigDict), 调用的是config.model中的参数name:str## 测试 custom_arg1 , custom_arg2 传递进来的是什么数值## 定义网络层。

wzg2016的博客 1299

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ray.rllib入门实践-1: 快速跑通

参考: 1. RLlib: Industry-Grade, Scalable Reinforcement Learning — Ray 2.41.02. RLlib一:RLlib入门-优快云博客

wzg2016的博客 731

ray.rllib-入门实践-13:自定义多智能体强化学习

需要继承自reset 函数和step函数接口需要与下面保持严格一致。每一个输出都变成了 key:value 字典。import ray## 1. 定义多智能体环境## 初始化智能体ID列表## 定义每个智能体的动作空间, 这里默认多个智能体的动作空间一样## 定义每个智能体的观测空间, 这里默认多个智能体的观测空间一样# 简单打印环境状态pass## 初始化智能体数量## 初始化智能体ID列表## 定义每个智能体的动作空间, 这里默认多个智能体的动作空间一样。

wzg2016的博客 2250

Ray项目RLlib核心概念解析:从算法到环境的完整指南

Ray项目RLlib核心概念解析:从算法到环境的完整指南 【免费下载链接】ray ray-project/ray: 是一个分布式计算框架,它没有使用数据库。适合用于大规模数据处理和机器学习任务的开发和实现,特别是对于需要使用分布式计算框架的场景。特点是分布式计算框架、无数据库。 ...

gitblog_00202的博客 591

ray.rllib 入门实践-4: 构建算法

在前面的博客介绍了ray.rllib中的几种配置算法的方法,在示例代码中同步给出了构建(build)算法的方法,但是没有对构建算法的方式进行归纳介绍。本博客主要梳理ray.rllib中,从config生成可训练的algorithm的几种方式。

wzg2016的博客 751

【强化学习】RLLib框架

        RLLib是构建在Ray分布式计算框架之上的强化学习库,它提供了高度集成和模块化的结构,方便用户进行强化学习算法的开发与实验。以下是一个RLLib框架的学习指南,帮助你快速上手并深入理解其工作原理。

大雨淅淅的博客 8185
上一篇: ray.rllib-入门实践-9: 查看模型的网络权重和状态
下一篇: ray.rllib-入门实践-11: 自定义模型/网络
wzg2016
博客等级 码龄10年 539粉丝 493原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值