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、由于在前台实现中…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...

苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...