热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用于强化学习的自动驾驶仿真场景highwayenv(1)

在强化学习过程中,一个可交互,可定制,直观的交互场景必不可少。最近发现一个自动驾驶的虚拟环境,本文主要来说明下如何使用该e

在强化学习过程中,一个可交互,可定制,直观的交互场景必不可少。

最近发现一个自动驾驶的虚拟环境,本文主要来说明下如何使用该environment
在这里插入图片描述

具体项目的github地址

一、 定制环境

quickly experience

如下代码可以快速创建一个env

import gym
import highway_env
from matplotlib import pyplot as pltenv = gym.make('highway-v0')
env.reset()for _ in range(10):action = env.action_type.actions_indexes["IDLE"]obs, reward, down, info = env.step(action)env.render()
plt.imshow(env.render(mode="rgb_array"))
plt.show()

运行结果如下所示:
在这里插入图片描述
所有的场景包括五种,上文只是说明其中的highway高速路场景。
接下来,我们详细说明五种场景。

1. highway

特点

  • 速度越快,奖励越高
  • 靠右行驶,奖励高
  • 与其他car交互实现避障

使用

env = gym.make("highway-v0")

默认参数

{"observation": {"type": "Kinematics"},"action": {"type": "DiscreteMetaAction",},"lanes_count": 4,"vehicles_count": 50,"duration": 40, # [s]"initial_spacing": 2,"collision_reward": -1, # 与其他车发生碰撞的reword"reward_speed_range": [20, 30], # [m/s] -> [0, HighwayEnv.HIGH_SPEED_REWARD]线性映射."simulation_frequency": 15, # [Hz]"policy_frequency": 1, # [Hz]"other_vehicles_type": "highway_env.vehicle.behavior.IDMVehicle","screen_width": 600, # [px]"screen_height": 150, # [px]"centering_position": [0.3, 0.5],"scaling": 5.5,"show_trajectories": False,"render_agent": True,"offscreen_rendering": False
}

2. merge

特点

  • 首先在主路,然后前方遇到并道
  • 并道上有car
  • 要求实现安全并道

使用

env = gym.make("merge-v0")

默认参数

{"observation": {"type": "TimeToCollision"},"action": {"type": "DiscreteMetaAction"},"simulation_frequency": 15, # [Hz]"policy_frequency": 1, # [Hz]"other_vehicles_type": "highway_env.vehicle.behavior.IDMVehicle","screen_width": 600, # [px]"screen_height": 150, # [px]"centering_position": [0.3, 0.5],"scaling": 5.5,"show_trajectories": False,"render_agent": True,"offscreen_rendering": False
}

3. roundabout

特点

  • 环形公路
  • longitudinal control

使用

env = gym.make("roundabout-v0")

默认参数

{"observation": {"type": "TimeToCollision"},"action": {"type": "DiscreteMetaAction"},"incoming_vehicle_destination": None,"duration": 11,"simulation_frequency": 15, # [Hz]"policy_frequency": 1, # [Hz]"other_vehicles_type": "highway_env.vehicle.behavior.IDMVehicle","screen_width": 600, # [px]"screen_height": 600, # [px]"centering_position": [0.5, 0.6],"scaling": 5.5,"show_trajectories": False,"render_agent": True,"offscreen_rendering": False
}

4. parking

特点

  • 停车场
  • 合适的朝向停到合适的车位

使用

env = gym.make("parking-v0")

默认参数

{"observation": {"type": "KinematicsGoal","features": ['x', 'y', 'vx', 'vy', 'cos_h', 'sin_h'],"scales": [100, 100, 5, 5, 1, 1],"normalize": False},"action": {"type": "ContinuousAction"},"simulation_frequency": 15,"policy_frequency": 5,"screen_width": 600,"screen_height": 300,"centering_position": [0.5, 0.5],"scaling": 7"show_trajectories": False,"render_agent": True,"offscreen_rendering": False

5. intersection

特点

  • 十字路口
  • 左转

使用

env = gym.make("intersection-v0")

默认参数

{"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,"flatten": False,"observe_intentions": False},"action": {"type": "DiscreteMetaAction","longitudinal": False,"lateral": True},"duration": 13, # [s]"destination": "o1","initial_vehicle_count": 10,"spawn_probability": 0.6,"screen_width": 600,"screen_height": 600,"centering_position": [0.5, 0.6],"scaling": 5.5 * 1.3,"collision_reward": IntersectionEnv.COLLISION_REWARD,"normalize_reward": False
}

二、关于参数

打印当前参数

import gym
import highway_env
import pprintenv = gym.make('highway-v0')
env.reset()
pprint.pprint(env.config)

output:
在这里插入图片描述

配置参数

env.config["lanes_count"] = 2
env.reset()

output:
在这里插入图片描述

三、训练agent

场景与很多对应的算法平台可以直接对接。比如:

  • rl-agents
  • baselines
  • stable-baselines

example
使用stable-baselines的一个demo:

import gym
import highway_env
import numpy as npfrom stable_baselines import HER, SAC, DDPG, TD3
from stable_baselines.ddpg import NormalActionNoiseenv = gym.make("parking-v0")n_sampled_goal = 4model = HER('MlpPolicy', env, SAC, n_sampled_goal=n_sampled_goal,goal_selection_strategy='future', verbose=1,buffer_size=int(1e6),learning_rate=1e-3,gamma=0.95, batch_size=256,policy_kwargs=dict(layer=[256, 256, 256]))model.learn(int(2e5))
model.save('her_sac_highway')obs = env.reset()# 100次的reward作为评价指标
episode_reward = 0
for _ in range(100):action, _ = model.predict(obs)obs, reward, done, info = env.step(action)env.render()episode_reward += rewardif done or info.get('is_success', False):print("Reward:", episode_reward, "Success?", info.get('is_success', False))episode_reward = 0.0obs = env.reset()


推荐阅读
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • 本文介绍了如何使用MATLAB调用摄像头进行人脸检测和识别。首先需要安装扩展工具,并下载安装OS Generic Video Interface。然后使用MATLAB的机器视觉工具箱中的VJ算法进行人脸检测,可以直接调用CascadeObjectDetector函数进行检测。同时还介绍了如何调用摄像头进行人脸识别,并对每一帧图像进行识别。最后,给出了一些相关的参考资料和实例。 ... [详细]
  • 热点追踪深度探讨实地探访商务合作当一个哲学家遇到大数据分析会发生什么?如果告诉你,这个组合曾帮助美国“猎杀拉登”,你是否会惊讶到瞪眼睛。在 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • “你永远都不知道明天和‘公司的意外’哪个先来。”疫情期间,这是我们最战战兢兢的心情。但是显然,有些人体会不了。这份行业数据,让笔者“柠檬” ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 本文介绍了在Python张量流中使用make_merged_spec()方法合并设备规格对象的方法和语法,以及参数和返回值的说明,并提供了一个示例代码。 ... [详细]
  • AI行业的下一个风口是医疗?创业者们这样说
    ▼点击上方蓝字关注网易智能为你解读AI领域大公司大事件,新观点新应用编者按:4月10日,鲸准AI产业价值峰会在北京举行。本次大会除了邀请A ... [详细]
  • Problemexplanation: ... [详细]
author-avatar
手机用户2602899031
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有