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
其中
ALGOis in['ppo', 'ppo_lagrangian', 'trpo', 'trpo_lagrangian', 'cpo'].TASKis in['goal1', 'goal2', 'button1', 'button2', 'push1', 'push2'].ROBOTis in['point', 'car', 'doggo'].SEEDis an integer. In the paper experiments, we used seeds of 0, 10, and 20, but results may not reproduce perfectly deterministically across machines.CPUis 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、由于在前台实现中…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...
