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应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...
什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...
C++_哈希表
本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说,直接开始吧! 一、基础概念 1. 哈希核心思想: 哈希函数的作用:通过此函数建立一个Key与存储位置之间的映射关系。理想目标:实现…...
