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

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

        在前面的博客 ray.rllib 入门实践-2:配置算法-优快云博客 介绍了ray.rllib中的几种配置算法的方法,在示例代码中同步给出了构建(build)算法的方法,但是没有对构建算法的方式进行归纳介绍。

        本博客主要梳理ray.rllib中,从config生成可训练的algorithm的几种方式。

环境配置:

        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

方式1 : algo = AlgorithmConfig().build()

示例 1: 

import os 
from ray.rllib.algorithms.ppo import PPO,PPOConfig
from ray.tune.logger import pretty_print

## 配置算法
storage_path = "F:/codes/RLlib_study/ray_results/build_method_3"
config = PPOConfig()
config = config.rollouts(num_rollout_workers=2)
config = config.resources(num_gpus=0,num_cpus_per_worker=1,num_gpus_per_worker=0)
config = config.environment(env="CartPole-v1",env_config={})
config.output = storage_path  ## 设置过程文件的存储路径

## 构建算法
algo = config.build()

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

示例 2:

import os 
from ray.rllib.algorithms.ppo import PPO,PPOConfig
from ray.tune.logger import pretty_print

## 配置并构建算法
algo = (
    PPOConfig()
    .rollouts(num_rollout_workers=1)
    .resources(num_gpus=0)
    .environment(env="CartPole-v1")
    .build()  ## 在这里实现算法构建
)

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

方式2: algo = Algorithm(config=config)

示例1:

import os 
from ray.rllib.algorithms.ppo import PPO,PPOConfig
from ray.tune.logger import pretty_print

## 配置算法
config = PPOConfig()
config = config.rollouts(num_rollout_workers=2)
config = config.resources(num_gpus=0)
config = config.environment(env="CartPole-v1")

## 构建算法
algo = PPO(config=config)

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

示例2:

import os 
from ray.rllib.algorithms.ppo import PPO,PPOConfig
from ray.tune.logger import pretty_print

## 配置算法
storage_path = "F:/codes/RLlib_study/ray_results"
os.makedirs(storage_path, exist_ok=True)
config = {
    "env":"CartPole-v1",
    "env_config":{}, ## 用于传递给env的信息
    "frame_work":"torch",
    "num_gpus":0,
    "num_workers":2,
    "num_cpus_per_worker":1,
    "num_envs_per_worker":1,
    "num_gpus_per_worker":0,
    "lr":0.001,
    "model":{
        "fcnet_hiddens":[256,256,64],
        "fcnet_activation":"tanh",
        "custom_model_config":{},
        "custom_model":None},
    "output":storage_path
}

## 构建算法
algo = PPO(config=config)

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

在这两个示例中, 分别向PPO算法中传入一个 PPOConfig 类对象 和 一个 DIct, 在PPO算法内部,都会把config转变成dict格式使用。用 PPOConfig 进行配置更利于开发者使用python的语法提示。

可运行代码:

import os 
from ray.rllib.algorithms.ppo import PPO,PPOConfig
from ray.tune.logger import pretty_print

################### build-algo  ##########################################
## build-method-1
# config = PPOConfig()\
#         .rollouts(num_rollout_workers = 2)\
#         .resources(num_gpus=0)\
#         .environment(env="CartPole-v1")
# algo = config.build()

## build-method-2
# algo = (
#     PPOConfig()
#     .rollouts(num_rollout_workers=1)
#     .resources(num_gpus=0)
#     .environment(env="CartPole-v1")
#     .build()
# )

## build-method-3 : 推荐 ,推荐原因: 有代码提示。
# storage_path = "F:/codes/RLlib_study/ray_results/build_method_3"
# config = PPOConfig()
# config = config.rollouts(num_rollout_workers=2)
# config = config.resources(num_gpus=0,num_cpus_per_worker=1,num_gpus_per_worker=0)
# config = config.environment(env="CartPole-v1",env_config={})
# config.output = storage_path  ## 设置过程文件的存储路径
# algo = config.build()

## build-method-4 : 推荐
config = PPOConfig()
config = config.rollouts(num_rollout_workers=2)
config = config.resources(num_gpus=0)
config = config.environment(env="CartPole-v1")
algo = PPO(config=config)

## build-method-5 : 不推荐
# config = PPOConfig()
# config = config.rollouts(num_rollout_workers=2)
# config = config.resources(num_gpus=0)
# algo = PPO(config=config,env="CartPole-v1") ## 这种配置env的方式即将被抛弃

## build-method-6 : error
## 此种方式会报错: Cannot set attribute (num_rollout_workers) of an already frozen AlgorithmConfig!
## 一经执行build之后,就不能再修改配置了。
# algo = PPO(env="CartPole-v1")
# algo.config.rollouts(num_rollout_workers=2)
# algo.config.resources(num_gpus=0)

## build-method-7 :error
# config = PPOConfig()
# config["rollouts"] = {"num_rollout_workers":2}
# config["resources"] = {"num_gpus":0}
# config["environment"] = {"env":"CartPole-v1"}
# algo = config.build()

## build-method-8 : 次推荐。 优点:简洁直观。 缺点: 配置时没有代码提示。
##    method-1,2,3,4,5 在从config生成algo时, build函数内在的把 PPOConfig类对象转变成以下格式。
##    rllib中直接使用以下格式创建算法。 缺点是,在配置算法时, 没有代码提示。 
##    PPOConfig 类可以认为是对以下字典的一种升级封装,更便于使用。 
# storage_path = "F:/codes/RLlib_study/ray_results/build_method_8"
# os.makedirs(storage_path, exist_ok=True)
# config = {
#     "env":"CartPole-v1",
#     "env_config":{}, ## 用于传递给env的信息
#     "frame_work":"torch",
#     "num_gpus":0,
#     "num_workers":2,
#     "num_cpus_per_worker":1,
#     "num_envs_per_worker":1,
#     "num_gpus_per_worker":0,
#     "lr":0.001,
#     "model":{
#         "fcnet_hiddens":[256,256,64],
#         "fcnet_activation":"tanh",
#         "custom_model_config":{},
#         "custom_model":None},
#     "output":storage_path
# }
# algo = PPO(config=config)

#################  print config  #######################################
## 打印配置信息: method-1, 推荐
config_dict = config.to_dict() # algo_config是一个类对象,需要转变成dict才能打印和显示
# print(config_dict)
print(pretty_print(config_dict)) ## 以更优雅的方式打印,便于阅读。

## 打印配置信息: method-2
# algo_config = algo.get_config()
# config_dict = algo_config.to_dict() # algo_config是一个类对象,需要转变成dict才能打印和显示
# print(config_dict)



###################  训练  #############################################
for i in range(3):
    result = algo.train() ## algo_train是执行一个episode的训练,返回一个result_dict, 包含了许多信息,可以去解析使用
    # print(pretty_print(result))
    print(f"episode_{i}")

    ## 保存模型
    if i % 2 == 0:
        checkpoint_dir = algo.save().checkpoint.path
        print(f"Checkpoint saved in directory {checkpoint_dir}")

Ray强化学习分布式框架及RLlib 最近阅读了 Ray: A Distributed Framework for Emerging AI Applications RLlib: Abstractions for Distributed Reinforcement Learning 两篇文章,然而发现对应的博客解读还是比较少,所以简单总结下这两篇文章。 首先这是一个开源项目,相关的文档已经可以轻松在网上获得。分布式框架 ... 阅读详情

相关推荐

【ray】【Rllib】关键概念

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

wq6qeg88的博客 1499

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

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

wzg2016的博客 2250

【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|RLLib|Tune学习笔记

文章目录0 Ray深度强化学习框架概述1 Ray使用场景—多进程2 Ray使用场景—进程间通信3 Tune使用场景—调参4 RLLib使用场景—RL算法5 Ray、Tune和RLLib关系6 Ray系统架构(实现多进程和跨节点通信)6.1 Ray系统架构—概述6.2 Ray系统架构—内存管理7 Tune系统架构(实验资源分配+调参)8 RLLib系统架构(Trainer、Policy和Agent)8.1 Policy实现功能8.2 Trainer实现功能参考文献 0 Ray深度强化学习框架概述 Ray—

SL_World的博客 9323

射频工程师笔记---射频通信基础

回顾一下移动通信技术的发展,其实是互联网和通信技术的融合过程。在这个过程中,很多应用都在不断加入其中。比如计算机跟通信的融合产生了互联网、互联网跟手机的融合带来了移动互联网。手机可以看杂志、看视频、听音乐,于是又出现了内容服务产业;再后来,电视音箱等设备也能联网,于是网络跟家电又产生了融合。所以应用的出现总是在融合其他产业。在1995年,比尔·盖茨在《未来之路》一书中首次提出:在未来...

多年硬件从业经历,热爱学习,记录生活! 2万+

LVGL的基础知识总结

另外,还有自定义字库的使用,具体可参考开发手册。

qq_28576837的博客 7386

【强化学习】Ray RLlib框架

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

大雨淅淅的博客 1889

C++cgal库配置+VS2017

Cgal几何图形库在VS2017上的下载、安装与配置。想要一口气下载完所有安装配件的,可以去文章末尾的链接。httpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttps。

dsn3S的博客 1488

强化学习rllib简明教程 ray

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

Lejeune的博客 1万+

win11 使用 QEMU 配置龙芯 3A5000 虚拟环境

win11 使用 QEMU 配置龙芯 3A5000 虚拟环境

一朵花开的时间 6150

从零开始:手把手教你规划与部署华为FusionCompute虚拟化平台(含网络规划避坑指南)

本文详细介绍了华为FusionCompute虚拟化平台的规划与部署流程,特别针对网络规划中的常见问题提供了避坑指南。从硬件软件清单检查、网络平面配置到VRM部署方案选择,帮助用户高效完成部署并优化性能,适用于云计算环境中的虚拟化平台搭建。

weixin_28693447的博客 243

ray.rllib 入门实践-5: 训练算法

前面的博客介绍了ray.rllib中算法的配置和构建,也包含了算法训练的代码。但是rllib中实现算法训练的方式不止一种,本博客对此进行介绍。

wzg2016的博客 1004

STM32F103C8T6+A4988驱动42步进电机全流程(附接线图+代码解析)

本文详细介绍了使用STM32F103C8T6单片机与A4988驱动模块控制42步进电机的完整流程。内容涵盖硬件接线图解析、电流设置、GPIO驱动代码编写以及细分控制等核心实践,旨在帮助嵌入式开发者和DIY爱好者快速实现精准运动控制,适用于3D打印机、CNC等需要精密定位的项目。

Python的专栏 792

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

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

wzg2016的博客 1083

基于Simulink的电机驱动逆变器仿真

本文完成了电机驱动逆变器的Simulink多层级仿真平台搭建,实现了:✅ 构建了从理想到器件级的逆变器模型体系✅ 实现了Si/SiC损耗精确计算与结温预测✅ 建模了母线寄生参数、死区效应、栅极驱动等关键非理想特性✅ 支持故障注入与保护策略验证✅ 集成了热管理、EMI、寿命预测与碳足迹评估。

amy_mhd的博客 86

QT如何使用CTK插件搭建应用程序框架?

CTK框架,QT框架,插件系统

cs821984831的博客 735

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

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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

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

m0_60610428的博客 1300

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Ray RLlib 架构入门指导

本文介绍了RLlib的核心架构和基本使用方法。主要内容包括: RLlib是构建在Ray上的可扩展强化学习库,通过分离采样和学习过程实现分布式训练。 核心架构包含Algorithm运行时、EnvRunner负责采样、Learner负责学习,通过RLModule和Episode实现解耦。 关键组件:AlgorithmConfig/Algorithm负责配置和运行,EnvRunner与环境交互收集数据,Learner更新模型,RLModule封装神经网络。 训练流程:EnvRunner采样生成Episode →

Keep Learning 243

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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

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

gitblog_00202的博客 591

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

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

wenquantongxin的博客 3873

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

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

wzg2016的博客 731

【强化学习】RLLib框架

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

大雨淅淅的博客 8187

【亲测免费】 Ray RLlib 教程使用指南

Ray RLlib 教程使用指南 1. 项目介绍 Ray RLlib 是一个用于强化学习(RL)的高扩展性库,属于 Ray 项目的一部分。它提供了多种算法(包括离线、基于模型、无模型等),支持 TensorFlow 和 PyTorch,并提供统一的 API,适用于各种应用场景。本教程旨在帮助初学者通过 Ray RLlib 库理解和使用强化学习环境、模型和算法。 2. 项目快速启动 2.1 安装依赖...

gitblog_00877的博客 1860

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

探索强化学习的无限可能:Ray’s RLlib实战教程

探索强化学习的无限可能:Ray’s RLlib实战教程 项目介绍 “Hands-on RL with Ray’s RLlib” 是一个面向初学者的强化学习(Reinforcement Learning, RL)教程,专注于使用Ray的RLlib库进行环境、模型和算法的实践。无论你是Python编程新手,还是希望深入了解强化学习的开发者,这个教程都能为你提供一个高可扩展性、算法选择丰富、支持Tens...

gitblog_00008的博客 983
上一篇: ray.rllib 入门实践-3: 配置参数列表
下一篇: ray.rllib 入门实践-5: 训练算法
wzg2016
博客等级 码龄10年 539粉丝 493原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值