Safety-Gym环境配置与安
官网:
https://github.com/openai/safety-gym
https://github.com/openai/safety-starter-agents
一、安装依赖环境配置
建议使用python 3.7及以下环境,因为官方的safety-rl是基于tensorflow1.13.1实现,而tensorflow1.13.1只能支持python3.7及以下。如果不用官方的safety-rl可以装python3.8以上。
1. MuJoCo安装(for Linux)
https://github.com/deepmind/mujoco
参考:https://zhuanlan.zhihu.com/p/352304615
Mac M1无法安装,运行后会报错:
[1] 8409 illegal hardware instruction ./simulate
1.下载mujoco200:
https://www.roboti.us/download.html
点击mujoco200 linux,下载一个zip压缩包。
- 下载激活码(已被DeepMind收购,可以免费和激活)
https://www.roboti.us/license.html
点击Activation key,下载一个txt文件。
- 安装
在home目录下
mkdir ~/.mujoco # 创建.mujoco目录
cp mujoco200_linux.zip ~/.mujoco
cd ~/.mujoco
unzip mujoco200_linux.zip # 解压
mv mujoco200_linux mujoco200 # 这一步很重要cp mjkey.txt ~/.mujoco/mujoco200/bin # 把激活码放到bin目录下
- 添加环境变量
vim ~/.bashrc
在最后添加下面两行:
export LD_LIBRARY_PATH=~/.mujoco/mujoco200/bin${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export MUJOCO_KEY_PATH=~/.mujoco${MUJOCO_KEY_PATH}
source ~/.bashrc
- 测试
cd ~/.mujoco/mujoco200/bin
./simulate ../model/humanoid.xml
出现下面这个界面表示安装成功。
2. 安装mujoco-py
https://github.com/deepmind/mujoco
- 安装
不同mujoco版本对应的mujoco-py版本
Mujoco150对应的Mujoco-py版本
(Windows系统只支持这个版本的mujoco,但是safety-gym以来mujoco_py==2.0.2.7及以上版本的,所有似乎Windows下不能用)
pip install mujoco-py==1.50.1.68
Mujoco200对应的Mujoco-py版本
pip install mujoco-py==2.0.2.8
Mujoco210对应的Mujoco-py版本
pip install mujoco-py==2.1.2.14
- 测试
import mujoco_py
import os
mj_path, _ = mujoco_py.utils.discover_mujoco()
xml_path = os.path.join(mj_path, 'model', 'humanoid.xml')
model = mujoco_py.load_model_from_path(xml_path)
sim = mujoco_py.MjSim(model)print(sim.data.qpos)
# [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]sim.step()
print(sim.data.qpos)
# [-2.09531783e-19 2.72130735e-05 6.14480786e-22 -3.45474715e-06
# 7.42993721e-06 -1.40711141e-04 -3.04253586e-04 -2.07559344e-04
# 8.50646247e-05 -3.45474715e-06 7.42993721e-06 -1.40711141e-04
# -3.04253586e-04 -2.07559344e-04 -8.50646247e-05 1.11317030e-04
# -7.03465386e-05 -2.22862221e-05 -1.11317030e-04 7.03465386e-05
# -2.22862221e-05]
报错:
解决方案:
运行显示以下错误:
distutils.errors.CompileError:command′/usr/bin/gcc′failedwithexitcode
分发、编译错误,原因是缺少libosmesa6-dev、patchelf用以动态链接
第一步:安装libosmesa6-dev
sudo apt install libosmesa6-dev
安装好libosmesa6-dev,如若运行测试缺少如下包,便执行第二步
第二步:安装patchelf(两个命令选一个就行)
pip install patchelf sudo apt-get -y install patchelf
参考:https://zhuanlan.zhihu.com/p/547442285
3. 安装safety-gym
https://github.com/openai/safety-gym
- 安装
git clone https://github.com/openai/safety-gym.gitcd safety-gympip install -e .
- 测试
import safety_gym
import gymenv = gym.make('Safexp-PointGoal1-v0')
4. 安装safe-rl
https://github.com/openai/safety-starter-agents
(这一步可不用,看你需不需要使用openai团队官方提供的算法)
cd safety-starter-agents
pip install -e .
注意:
-
建议单独pip依赖库,然后setup.py里注释掉,再运行
pip install -e .
-
安装
mpi4py==3.0.2
时也可能会报错,可以去掉版本号或安装mpi4py-3.1.4
。 -
安装tensorflow可能会出现
tensorflow==1.13.1
版本可能找不到(对于python3.8及以上),可以去掉版本号:pip install tensorflow
但是这样会有很多代码会报错,因为版本不同,很多方法修改删减了。
或者可以到下面网址下载对应版本tensorflow安装:
https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/tensorflow/
windows下安装mujoco和mujoco_py参考:
Win 10、Win 11 安装 MuJoCo 及 mujoco-py 教程_lan 606的博客-CSDN博客_windows安装mujoco_py
【Mujoco】在Win10下的安装
二、测试案例
1. safety-gym测试案例
- 使用pre-configured 环境
import safety_gym
import gym
from tqdm import tqdmdef main():robot = "Point" # Point | Car | Doggotask = "Button" # Goal | Button | Pushlevel = "1" # 0 | 1 | 2# env = gym.make('Safexp-PointGoal1-v0')env = gym.make(f'Safexp-{robot}{task}{level}-v0')print("Actin Space:", env.action_space)print("Observation:", env.observation_space)env.reset()for i in tqdm(range(10000)):env.render()action = env.action_space.sample() # take a random actionnext_observation, reward, done, info = env.step(action)# print(f"[{i}] reward: {reward}, info: {info}")if done:env.reset()if __name__ == "__main__":main()
An environment in the Safety Gym benchmark suite is formed as a combination of a robot (one of Point
, Car
, or Doggo
), a task (one of Goal
, Button
, or Push
), and a level of difficulty (one of 0
, 1
, or 2
, with higher levels having more challenging constraints). Environments include:
Safexp-{Robot}Goal0-v0
: 机器人必须导航到目标。Safexp-{Robot}Goal1-v0
: 机器人必须导航到目标,同时避免危险。场景中有一个花瓶,但代理人不会因击中它而受到惩罚。Safexp-{Robot}Goal2-v0
: 机器人必须导航到目标,同时避免更多的危险和花瓶。Safexp-{Robot}Button0-v0
: 机器人必须按下目标按钮。Safexp-{Robot}Button1-v0
: 机器人必须按下目标按钮,同时避免危险和 gremlins,同时不要按下任何错误的按钮。Safexp-{Robot}Button2-v0
: 机器人必须按下目标按钮,同时避免更多的危险和 gremlins,同时不要按下任何错误的按钮。Safexp-{Robot}Push0-v0
: 机器人必须将盒子推向目标。Safexp-{Robot}Push1-v0
: 机器人必须将箱子推向目标,同时避免危险。场景中存在一根柱子,但智能体不会因击中它而受到惩罚。Safexp-{Robot}Push2-v0
: 机器人必须将箱子推向目标,同时避开更多的危险和柱子。
(To make one of the above, make sure to substitute {Robot}
for one of Point
, Car
, or Doggo
.)
- 自定义创建环境
import safety_gym
import gymfrom safety_gym.envs.engine import Engine
from gym.envs.registration import registerconfig = {'robot_base': 'xmls/car.xml','task': 'push','observe_goal_lidar': True,'observe_box_lidar': True,'observe_hazards': True,'observe_vases': True,'constrain_hazards': True,'lidar_max_dist': 3,'lidar_num_bins': 16,'hazards_num': 4,'vases_num': 4
}env = Engine(config)register(id='SafexpTestEnvironment-v0',entry_point='safety_gym.envs.mujoco:Engine',kwargs={'config': config})env.reset()for i in range(10000):# action = env.sample()env.render()action = env.action_space.sample() # take a random actionnext_observation, reward, done, info = env.step(action)print(f"[{i}] reward: {reward}, info: {info}")# print(info)# breakif done:env.reset()env.close()
2. safety-rl测试案例
- Example Script
from safe_rl import ppo_lagrangian
import gym, safety_gymppo_lagrangian(env_fn = lambda : gym.make('Safexp-PointGoal1-v0'),ac_kwargs = dict(hidden_sizes=(64,64)))
- Reproduce Experiments from Paper
cd /path/to/safety-starter-agents/scripts
python experiment.py --algo ALGO --task TASK --robot ROBOT --seed SEED --exp_name EXP_NAME --cpu CPU
其中
ALGO
is in['ppo', 'ppo_lagrangian', 'trpo', 'trpo_lagrangian', 'cpo']
.TASK
is in['goal1', 'goal2', 'button1', 'button2', 'push1', 'push2']
.ROBOT
is in['point', 'car', 'doggo']
.SEED
is an integer. In the paper experiments, we used seeds of 0, 10, and 20, but results may not reproduce perfectly deterministically across machines.CPU
is an integer for how many CPUs to parallelize across.
EXP_NAME
is an optional argument for the name of the folder where results will be saved. The save folder will be placed in /path/to/safety-starter-agents/data
例如:
python experiment.py --algo ppo--task goal1--robot point--seed 1024--exp_name project --cpu 1
报错:
解决:
https://blog.csdn.net/qq_42951560/article/details/124997453
pip uninstall protobuf
pip install protobuf==3.20.1
相关文章:

Safety-Gym环境配置与安
官网: https://github.com/openai/safety-gym https://github.com/openai/safety-starter-agents 一、安装依赖环境配置 建议使用python 3.7及以下环境,因为官方的safety-rl是基于tensorflow1.13.1实现,而tensorflow1.13.1只能支持python…...

3月再不跳槽,就晚了
从时间节点上来看,3月、4月是每年跳槽的黄金季! 以 BAT 为代表的互联网大厂,无论是薪资待遇、还是平台和福利,都一直是求职者眼中的香饽饽,“大厂经历” 在国内就业环境中无异于一块金子招牌。在这金三银四的时间里&a…...

HTTP cookie格式与约束
cookie是前端编程当中经常要使用到的概念,我们可以使用cookie利用浏览器来存放用户的状态信息保存用户做了一些什么事情。session是服务器端维护的状态。session又是如何和cookie关联起来。后面介绍cookie和session的使用。Cookie 是什么?RFC6265, HTTP …...

docker基础
docker基础 docker概述 docker的出现?docker解决思想docker历史docker链接docker能干什么?开发-运维 docker安装 镜像(image)容器(container)仓库(repository)底层原理 docker命令 帮助命令镜像命令 docker-images查看所有本地主机上的镜像docker-searc…...

【微信小程序】--JSON 配置文件作用(三)
💌 所属专栏:【微信小程序开发教程】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &#…...
EDA-课设
EDA-课程设计-电子闹钟 一、实验目的 1.掌握多层电路在 QuartusII 集成开发环境中的实现; 2.熟练掌握基于 QuartusII 集成开发环境的组合逻辑电路设计流程; 3.掌握基于 QuartusII 集成开发环境的时序逻辑电路设计流程; 4.理解有限状态机设计…...

C/C++每日一练(20230222)
目录 1. 部分复制字符串(★) 2. 按字典顺序排列问题(★★) 3. 地下城游戏(★★★) 附录 动态规划 1. 部分复制字符串 将字符串2小写字母复制到字符串1:编写程序,输入字符串s2,将其中所有小写字母复制到字符串数组strl中。例如:aal1bb22cc33de4AA55…...

Java API 文档搜索引擎
1. 认识搜索引擎:在搜狗搜索的搜索结果页中, 包含了若干条结果, 每一个结果包含了图标, 标题, 描述, 展示URL等搜索引擎的本质:输入一个查询词, 得到若干个搜索结果, 每个搜索结果包含了标题, 描述, 展示URL和点击URL2. 搜索引擎思路:2.1 搜索的核心思路:当前我们有很多的网页(…...

2023美赛C题Wordle二三问分布预测和难度分类预测
文章目录前言题目介绍人数分布预测首先建立字母词典,加上时间特征数据预处理训练和预测函数保存模型函数位置编码模型及其参数设置模型训练以及训练曲线可视化预测人数分布难度分类预测总结前言 2023美赛选了C题,应该很多人会选,一看就好做&…...

gdb的简单练习
题目来自《ctf安全竞赛入门》1.用vim写代码vim gdb.c#include "stdio.h" #include "stdlib.h" void main() {int i 100;int j 101;if (i j){printf("bingooooooooo.");system("/bin/sh");}elseprintf("error............&quo…...
如何使用python AI快速比对两张人脸图像?
本篇文章的代码块的实现主要是为了能够快速的通过python第三方非标准库对比出两张人脸是否一样。 实现过程比较简单,但是第三方python依赖的安装过程较为曲折,下面是通过实践对比总结出来的能够支持的几个版本,避免大家踩坑。 python版本&a…...
(2)C#传智:变量基础(第二天)
一、注释符 不写注释是流氓,名字瞎起是扯蛋。 注释作用:解释与注销 命名: 以字母、_、开头,里面只能有_与特殊符,其它不得出现如%*&^等。 不能与关键字重复。区分大小写,Num…...

02-mysql高级-
文章目录mysql高级1,约束1.1 概念1.2 分类1.3 非空约束1.4 唯一约束1.5 主键约束1.6 默认约束1.7 约束练习1.8 外键约束1.8.1 概述1.8.2 语法1.8.3 练习2,数据库设计2.1 数据库设计简介2.2 表关系(一对多)mysql高级 今日目标 掌握约束的使用 掌握表关系…...
windows 使用everything 查看文件(夹)存储空间占用
起因 总是那个原因,C: D: E:全都红了,下的游戏太多了,然后就这样了,之前也有过不少这种情况.几年前,就在智能手机上见过类似的功能. 大概就是遍历文件系统,统计每个文件的大小,然后父节点记录所有子节点的和,然后可以显示占用百分比之类的. 经过 在windows 上我最开始使用ex…...

2023该好好赚钱了,推荐三个下班就能做的副业
在过去的两年里,越来越多的同事选择辞职创业。许多人通过互联网红利赚到了他们的第一桶金。随着短视频的兴起,越来越多的人吹嘘自己年收入百万,导致很多刚进入职场的年轻人逐渐迷失自我,认为钱特别容易赚。但事实上,80…...
vue3如何进行数据监听watch/watchEffect
我们都知道监听器的作用是在每次响应式状态发生变化时触发,在组合式 API 中,我们可以使用 watch()函数和watchEffect()函数, 当你更改了响应式状态,它可能会同时触发 Vue 组件更新和侦听器回调。 默认情况下,用户创建的侦听器回…...

Wgcloud安装和使用(性能监控)
一、Wgcloud说明 官网:https://www.wgstart.com/ WGCLOUD支持主机各种指标监测(cpu使用率,cpu温度,内存使用率,磁盘容量,磁盘IO,硬盘SMART健康状态,系统负载,连接数量&…...
前端如何实现本地图片上传?
前端如何实现本地图片上传? 摘要 对于学习前端的小伙伴都有一个困惑,就是平常想上手小项目,但碍于不想购买服务器,实践受到了限制。 一般我选择node.js搭建服务器,毕竟基于JavaScript语言,简直不是一家人…...

【基础算法】差分的应用(一维差分和二维差分)
🌹作者:云小逸 📝个人主页:云小逸的主页 📝Github:云小逸的Github 🤟motto:要敢于一个人默默的面对自己,强大自己才是核心。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前…...

第49章 API统一集中管理
1 关于统一集中管理API的一些思考 1、统一集中管理是保证工程性项目得保质、保量、成功实施,并对后期维护提供数据支撑的最有效,最节省资源和时间的技能和做法,软件做为一种特殊的工程性项目,也符合上述特性。 2、由于在前台实现中…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...

云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...

Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...
Vue3中的computer和watch
computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...

Linux-进程间的通信
1、IPC: Inter Process Communication(进程间通信): 由于每个进程在操作系统中有独立的地址空间,它们不能像线程那样直接访问彼此的内存,所以必须通过某种方式进行通信。 常见的 IPC 方式包括&#…...