SMARTS(二).1 straight 环境 + agent (PPO)训练代码解读--环境配置

DAI2020 SMARTS自动驾驶挑战赛启动!道翰天琼认知智能机器人平台API接口大脑为您揭秘-1。 自动驾驶被业界视为人工智能发展的下一个风口。随着深度强化学习(DRL)的兴起,将相关技术应用于自动驾驶领域,以消除人为导致的交通事故、减少城市停车空间等,成为业界关注的焦点。然而,自动驾驶领域的研究更多的是侧重于感知和预测,与此相对应,在各大学术会议上举办的自动驾驶评测大赛(如CVPR WAD挑战赛、CARLA 自动驾驶挑战赛等)几乎都是以自动驾驶视觉为核心,而不是规划和决策。另一方面,自动驾驶以及云计算、大数据的发展也推动了智慧交通这一更大领域的发展。阿里巴巴、腾讯、京东、华为、滴滴等公司... 阅读详情

SMARTS启动straight 环境 + agent (PPO)训练

将smarts/scenarios/straight文件夹copy到smarts/benchmark/scenarios/下面,并将copy过后的smarts/benchmark/scenarios/straight/scenario.py替换为下面的内容:

from smarts.sstudio import types as t
from smarts.sstudio import gen_scenario

trajectory_boid_agent = t.BoidAgentActor(
    name="trajectory-boid",
    agent_locator="scenarios.straight.agent_prefabs:trajectory-boid-agent-v0",
)

pose_boid_agent = t.BoidAgentActor(
    name="pose-boid",
    agent_locator="scenarios.straight.agent_prefabs:pose-boid-agent-v0",
)

traffic = t.Traffic(
    flows=[
        t.Flow(
            route=t.Route(begin=("west", lane_idx, 30), end=("east", lane_idx, "max"),),
            rate=50,
            actors={
   
   t.TrafficActor("car"): 1},
        )
        for lane_idx in range(3)
    ]
)
missions = [
    t.Mission(t.Route(begin=("west", 1, 10), end=("east", 1, 90))),
]

scenario = t.Scenario(
    traffic={
   
   "all": traffic},
    ego_missions=missions,
    bubbles=[
        t.Bubble(
            zone=t.PositionalZone(pos=(50, 0), size=(40, 20)),
            margin=5,
            actor=trajectory_boid_agent,
        ),
        t.Bubble(
            zone=t.PositionalZone(pos=(150, 0), size=(50, 20)),
            margin=5,
            actor=pose_boid_agent,
            keep_alive=True,
        ),
    ],
)

gen_scenario(scenario, output_dir=str(Path(__file__).parent))

运行下列语句,启动训练过程&在浏览器中打开http://localhost:8081/#/便可以可视化查看训练过程。

# terminal 1 
scl envision start -s ./scenarios -p 8081
# terminal 2
python run.py benchmark/scenarios/intersections/straight -f agents/ppo/baseline-continuous-control.yaml

在这里实例中为例说明scenario文件的定义。
接口函数为run.py,在benchmark的目录下。

straight环境定义

该环境下具有3个社会车辆(traffic提供路上的基础交通流),一个待训练车辆(ego vehicle)。

各种环境的定义都在sstudio.py文件中,其中types.py文件即为各种类型的定义,包括Flow, bubble,traffic,Scenario,Route和TrafficActor等等,请注意:这个types文件夹中只是实现了类型。尽管各个类型均采用class方式实现,但是终究只是与int,char等是同样地位和功能的变量而已。 具体的解析和操作需要查看其他操作这个类型的脚本文件。

该文件应该从后往前阅读,gen_scenario用于设置好的环境scenario,并将对应的日志文件输出到指定的文件夹中。

环境定义

整个scenario.py就是定义了一个Scenario类并用gen_scenario()解析&运行这个Scenario类。Scenario的类定义如下:

@dataclass(frozen=True)
class Scenario:
    traffic: Optional[Dict[str, Traffic]] = None
    ego_missions: Optional[Sequence[Mission]] = None
    # e.g. { "turning_agents": ([actors], [missions]), ... }
    social_agent_missions: Optional[
        Dict[str, Tuple[Sequence[SocialAgentActor], Sequence[Mission]]]
    ] = None
    """Every dictionary item {group: (actors, missions)} gets run simultaneously. If
    actors > 1 and missions = 0 or actors = 1 and missions > 0 we cycle through them
    every episode. Otherwise actors must be the same length as missions.
    """
    bubbles: Optional[Sequence[Bubble]] = None
    friction_maps: Optional[Sequence[RoadSurfacePatch]] = None
    traffic_histories: Optional[Sequence[str]] = None

接下来具体分析Scenario的每一个成员。

Traffic


Scenario类型定义方式

@dataclass(frozen=True)
class Scenario:
    traffic: Optional[Dict[str, Traffic]] = None

其中dataclass代表定义的类为数据类,其中frozen代表初始化之后属性数值便不可再改;

traffic使用例子:

from smarts.sstudio import types as t
from smarts.sstudio import gen_scenario
traffic = t.Traffic(
    flows=[
        t.Flow(
            route=t.Route(begin=("west", lane_idx, 30), end=("east", lane_idx, "max"),),
            rate=50,
            actors={
   
   t.TrafficActor("car"): 1},
        )
        for lane_idx in range(3)
    ]
)
scenario = t.Scenario(
    traffic={
   
   "all": traffic},
)
gen_scenario(scenario, output_dir=str(Path(__file__).parent))

Traffic类本身定义如下,只有flows一个成员。

@dataclass(frozen=True)
class Traffic:
    """The descriptor for traffic."""

    flows: Sequence[Flow]
    """Flows are used to define a steady supply of vehicles."""

其中Sequence是list和tuple的泛化类型,即没有必要区分tuple和list所以就定义一个类型把他们都涵盖,这个涵盖list和tuple的类型即Sequence

Traffic类成员1:Flow定义内容为

@dataclass(frozen=True)
class Flow:
    """A route with an actor type emitted at a given rate."""

    route: Route
    """The route for the actor to attempt to follow."""
    rate: float
    """Vehicles per hour."""
    begin: float = 0
    """Start time in seconds."""
    # XXX: Defaults to 1 hour of traffic. We may want to change this to be "continual
    #      traffic", effectively an infinite end.
    end: float = 1 * 60 * 60
    """End time in seconds."""
    actors: Dict[TrafficActor, float] = field(default_factory=dict)
    """An actor to weight mapping associated as\\: { actor: weight }
    actor:
        The traffic actors that are provided.
    weight:
        The chance of this actor appearing as a ratio over total weight.
    """

Flow成员1: Route的数据结构定义如下

@dataclass(frozen=True)
class Route:
    """A route is represented by begin and end edge IDs, with an optional list of
    itermediary edge IDs. When an intermediary is not specified the router will
    decide what it should be.
    """

    ## edge, lane index, offset
    begin: Tuple[str, int, Any
SMARTS(二).2 straight 环境 + agent (PPO)训练代码解读--run.py 训练内容的解析 基于SMARTS(二).1 straight 环境 + agent (PPO)训练代码解读–环境配置训练启动后内部运行流程分析。 在smarts/benchmark路径下 python run.py scenarios/intersections/staright -f agents/ppo/baseline-continuous-control.yaml PPO+SMARTS内部究竟在做什么? 解析外部的yaml文件。 yaml被解读成为一个多层级结构(具体格式尚不清楚,但是访问方式简 阅读详情

相关推荐

SMRATS(一) SMARTS+PPO baseline运行教程

python类方法 class Agent: @classmethod def from_function() python typing 含义 为防止弱类型python出现忘记变量类型的问题,python3.5及之后版本增加了对应的类型提示。 输入和输出类型 函数接受并返回一个字符串,注释像下面这样: def greeting(name: str) -> str: return 'Hello ' + name 常用的typing类型 int,long,float: 整型,

Freshduke的博客 1407

基于PPO的自动驾驶小车绕圈任务

合理的,并且不会影响计算的准确性,原因如下:

weixin_44558122的博客 5713

强化学习在自动驾驶中的应用

强化学习在自动驾驶中的应用 1. 背景介绍 自动驾驶技术的发展一直是人工智能领域的热点话题之一。随着算法、传感器和计算能力的不断进步,自动驾驶技术正在逐步成熟并应用于实际场景中。其中,强化学习作为一种有效的机器学习算法,在自动驾驶领域发挥着重要作用。 强化学习是一种通过与环境的交互

AI天才研究院 1122

(11-4)PPO算法:PPO算法的变种与改进

总的来说,PPO2是一种强化学习算法,旨在解决深度强化学习中的稳定性和性能问题。PPO-Clip(Proximal Policy Optimization with Clipping)是一种改进的PPO算法,用于训练强化学习智能体,特别是在连续动作空间中的任务。在上述代码中,首先定义了一个简单的自定义环境CustomEnvironment,它有一个连续的动作空间和一个连续的状态空间。需要注意的是,PPO-Clip只是PPO算法的一种改进版本,实际应用时还需要根据具体任务的需求和性质来选择适当的算法。

码农三叔 5545

请你解释PPO在大语言模型和机器人学还有高频股票市场中的具体应用,比方说Agent、Environment、Reward、State分别代表什么?具体如何应用

PPO(Proximal Policy Optimization)是一种流行的强化学习算法,由OpenAI开发。这种算法特别适合于需要平衡探索(Exploration)和利用(Exploitation)的场景,其核心优势在于简单、高效、易于实现,并且在多种任务中都表现出良好的性能。PPO的应用跨越多个领域,其共同点在于通过与环境的交互来不断学习和优化策略,以达到特定的目标。不同领域对Agent、Environment、Reward、State的具体定义有所不同,但核心的强化学习框架保持一致。

具身机器人和通用AI 815

近端策略优化(PPO):深入剖析强化学习中的关键技术

1. 背景介绍 1.1 强化学习简介 强化学习(Reinforcement Learning,简称RL)是一种机器学习方法,它通过让智能体(Agent)在环境(Environment)中采取行动(Action)并观察结果(Reward)来学习如何做出最优决策。强化学习的目标是找到一个策略(Policy)

AI天才研究院 410

DAX Studio--导出PowerBi数据---(不使用复制表如何快速导出csv文件 / 如何导出百万级/千万级乃至亿级的数据量)多图预警!

多图预警! 1、打开Dax 点击Connect 2、在这里选择正在打开的PowerBi文件,点击Contect 3、选择导出方式--File F、输入指令(输入 EVALUATE ' )单引号可以进行快速提示 5、点击Run 6、选择文件路径,以及保存类型等(一般情况下,我们常用的类型是 txt 或者 第一种 UTF-8 的csv 文件),点击保存即可,稍等片刻,导出完成! 7、导出完成,我这里总计是39W 行的数据量,约20+ 秒完成 ...

STR_Liang的博客 8148

深入解析HAL_UART_Receive_IT:如何高效配置串口中断接收

本文深入解析了STM32 HAL库中`HAL_UART_Receive_IT`函数的工作原理与高效配置方法。该函数并非直接接收数据,而是作为中断接收的启动器和配置器,通过开启相关中断,由`UART_Receive_IT`在后台完成数据搬运。文章详细对比了中断与轮询模式的区别,并提供了不定长数据接收的完整实战流程、常见问题避坑指南及高级应用技巧,帮助开发者构建稳定高效的串口通信。

weixin_29162439的博客 616

华为2021年天线工程师笔试题目回忆总结(持续更新)

1. 判定长线和短线 所谓长线是指传输线的几何长度和线上传输电磁波的波长的比值(即电长度)大于或接近于1。反之称为短线。是相对于波长而言的。 1000m的传输线,对于频率为50hz(即波长为6000km)的交流电来说,仍远小于波长,应视为短线。长线和短线的区别还在于:长线为分布参数电路,而短线是集总参数电路。 2. 判定传输线的容性和感性 传输线上的输入阻抗具有以下特点: 1/4波长变换性:感性负载与容性负载变换,开路与短路变换; 1/2波长重复性:相距1/2波长的整数倍的两个点输入阻抗都相等。1/4开路传

ludashi3的博客 9521

Vue - 解决 Property or method “__v_isRef“ is not defined on the instance but referenced(浏览器控制台报错,代码没错)

vue,vue2控制台报错,vue报错Propertyormethod"__v_isRef"isnotdefinedontheinstancebutreferenced,vue代码没问题,但是报错Propertyormethod"__v_isRef"isnotdefinedontheinstancebutreferenced,vue2如何解决报错,vue怎么解决报错问题,vue2Propertyormethod"__v_isRef"isnotdefi

🏆 前端领域优质创作者 4495

lammps教程:聚合物压缩,避免“bond atoms missing”

如果使用ms建模,聚合物的链会伸出到盒子外面,在导出data文件后,盒子外面的原子被周期性算法折叠进盒子对面,这就造成了边界附近的bond原子可能被分布到了盒子的两侧。并且,这个data文件不能使用npt系综进行压缩,npt系综必须使用周期性边界,在压缩时,bond原子同样会移动到对面的边界。所以,最好的解决办法是使用一个反射墙墙进行压缩,设置一个反射墙墙既可以实现压缩效果,也可以组织原子跨越box边界移动到对面。解决这个问题的原则只有一个:导出data时确保所有的bond原子没有跨越边界。

lammps_jiayou的博客 3810

工业级C#+YOLOv8缺陷检测系统:准确率98.5%、延迟<50ms的完整实现

本文分享了基于C#和YOLOv8的工业级表面缺陷检测系统实现方案。针对汽车零部件冲压件检测需求(60件/分钟,准确率>98%,延迟<100ms),作者对比了多种技术方案后选择了C#+YOLOv8+ONNX Runtime的组合,最终实现98.5%准确率和42ms延迟。 系统采用分层模块化架构,包含硬件层、采集层、推理层、业务层和控制层。核心优势包括:1)C#在工业环境下的稳定性和集成便利性;2)YOLOv8对复杂缺陷的泛化能力;3)ONNX Runtime GPU加速提升性能。文章详细介绍了硬件

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1133

【Windows Server 2019】DNS服务器的配置与管理——DNS正向解析

博文介绍了如何使用正向解析区,包括创建和添加并验证,以及术语 主机记录,别名,邮件交换记录的解释。

VMware, Windows, Linux, Cisco, Container, Kubernetes, Kali 1万+

FPGA面试题目笔记(一)——FPGA开发流程、亚稳态和竞争冒险、建立保持时间、异步FIFO深度等

同步异步电路、同步异步复位、时钟偏移和抖动、最小工作周期计算、触发器锁存器

H19981118的博客 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: SMRATS(一) SMARTS+PPO baseline运行教程
下一篇: SMARTS(二).2 straight 环境 + agent (PPO)训练代码解读--run.py
Jimmy-TONG
博客等级 码龄9年 10粉丝 6原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值