Project Icon

safety-gymnasium

安全强化学习的可扩展定制化环境库

Safety-Gymnasium为安全强化学习提供了可扩展的定制化环境。该库包含兼容约束信息的标准API和多种安全增强学习任务,如安全导航和速度控制。研究人员可通过其代码框架和环境设计探索新见解,促进SafeRL算法的基准测试和环境标准化。

安全体育馆

Python 3.8+ PyPI 文档状态 下载量 GitHub 仓库星标 许可证

为什么选择安全体育馆? | 文档 | 安装指南 | 自定义 | 视频

安全体育馆是一个高度可扩展和可定制的安全强化学习(SafeRL)库。它旨在提供一个良好的视角来对比SafeRL算法,并提供一套标准化的环境。我们提供了一组与约束信息兼容的标准API。用户可以通过优雅的代码框架和精心设计的环境探索新的见解。

引用安全体育馆

如果您发现安全体育馆对您有用,请在您的出版物中引用它。

@inproceedings{ji2023safety,
  title={Safety Gymnasium: 一个统一的安全强化学习基准},
  author={季家明 and 张博荣 and 周佳怡 and 潘雪海 and 黄伟东 and 孙瑞阳 and 耿一然 and 钟一帆 and 戴约瑟夫 and 杨耀东},
  booktitle={第三十七届神经信息处理系统会议数据集与基准跟踪},
  year={2023},
  url={https://openreview.net/forum?id=WZmlxIuIGR}
}

v1.1.0和v1.2.0版本注意事项❗️❗️❗️

我们已经更新了Safe Vision系列和Safe Isaac Gym系列的环境。但是,由于包大小限制,我们尚未将版本v1.1.0v1.2.0上传到PyPI。因此,用户需要手动下载和安装。我们目前建议使用GitHub的Download zip功能来获取我们的包并访问最新环境。未来,我们计划将资源分别部署到云服务,以适应PyPI。请继续关注后续更新。

目前不支持Python 3.11,因为与pygame不兼容。

conda create -n example python=3.8
conda activate example
wget https://github.com/PKU-Alignment/safety-gymnasium/archive/refs/heads/main.zip
unzip main.zip
cd safety-gymnasium-main
pip install -e .

为什么选择Safety-Gymnasium?

这里我们提供了Safety-Gymnasium与现有SafeRL环境库的比较表格。

SafeRL
环境
引擎向量化
环境
新版Gym API(3)视觉输入
Safety-Gym
GitHub最后提交
mujoco-py(1)最小程度支持
safe-control-gym
GitHub最后提交
PyBullet
速度约束(2)不适用
mujoco-circle
GitHub最后提交
PyTorch
Safety-Gymnasium
GitHub最后提交
MuJoCo 2.3.0+

(1): 维护(预期错误修复和小更新);最后一次提交是2021年11月19日。Safety-Gym依赖于mujoco-py 2.0.2.7,该版本于2019年10月12日更新。
(2): 没有速度相关环境的官方库,其相关的成本约束是从信息中构建的。但该任务在SafeRL研究中广泛使用,我们在Safety-Gymnasium中对其进行了封装。
(3): 在gym 0.26.0版本更新中,重新定义了新的交互API。


环境

我们设计了各种安全增强学习任务,并整合了RL社区的贡献:safety-velocitysafety-runsafety-circlesafety-goalsafety-button等。 我们引入了一个名为Safety-Gymnasium的统一安全增强学习基准环境库。

此外,为了促进社区研究的进展,我们重新设计了Safety-Gym并移除了对mujoco-py的依赖。 我们在MuJoCo的基础上构建了它,并修复了一些错误,更具体的错误报告可以参考Safety-Gym的错误报告

以下是我们目前支持的所有环境列表:

类别任务代理示例
安全导航按钮[012]点、汽车、四足机器人、赛车、蚂蚁SafetyPointGoal1-v0
目标[012]
推动[012]
圆圈[012]
安全速度速度半猎豹、跳跃者、游泳者、行走者2d、蚂蚁、人形机器人SafetyAntVelocity-v1
安全视觉建筑按钮[012]点、汽车、四足机器人、赛车、蚂蚁SafetyFormulaOne1-v0
建筑目标[012]
建筑推动[012]
简单淡出[012]
困难淡出[012]
赛车[012]
一级方程式[012]
安全多代理多目标[012]多点、多蚂蚁SafetyAntMultiGoal1-v0
多代理速度6x1半猎豹、2x3半猎豹、3x1跳跃者、2x1游泳者、2x3行走者2d、2x4蚂蚁、4x2蚂蚁、9|8人形机器人Safety2x4AntVelocity-v0
货运弗兰卡关闭抽屉(多代理)货运弗兰卡货运弗兰卡关闭抽屉(多代理)
货运弗兰卡拾取和放置(多代理)
影子手接球越过双臂下方安全手指(多代理)影子手影子手接球越过双臂下方安全关节(多代理)
影子手接球越过双臂下方安全关节(多代理)
影子手越过安全手指(多代理)
影子手越过安全关节(多代理)
安全Isaac健身房货运弗兰卡关闭抽屉货运弗兰卡货运弗兰卡关闭抽屉
货运弗兰卡拾取和放置
影子手接球越过双臂下方安全手指影子手影子手接球越过双臂下方安全关节
影子手接球越过双臂下方安全关节
影子手越过安全手指
影子手越过安全关节

以下是安全导航任务的一些截图。

代理

任务

基于视觉的安全强化学习

基于视觉的安全强化学习缺乏真实场景。 尽管原始的Safety-Gym可以最低限度地支持视觉输入,但场景过于相似。 为了便于验证基于视觉的安全强化学习算法,我们开发了一系列真实的基于视觉的安全强化学习任务,目前正在对基准进行验证。

作为开胃菜,图像如下所示:

环境使用

注意: 我们支持基于 Gymnasium APIs 明确表达 coststep 方法返回 6 个项目 (next_obervation, reward, cost, terminated, truncated, info),其中包含一个额外的 cost 字段。

import safety_gymnasium

env_id = 'SafetyPointGoal1-v0'
env = safety_gymnasium.make(env_id)

obs, info = env.reset()
while True:
    act = env.action_space.sample()
    obs, reward, cost, terminated, truncated, info = env.step(act)
    if terminated or truncated:
        break
    env.render()

我们还提供了两个便捷的包装器,用于将 Safety-Gymnasium 环境转换为标准 Gymnasium API,反之亦然。

# Safety-Gymnasium API: step 返回 (next_obervation, reward, cost, terminated, truncated, info)
# Gymnasium API:        step 返回 (next_obervation, reward, terminated, truncated, info),cost 在 `info` 字典中与字符串键 `'cost'` 关联

safety_gymnasium_env = safety_gymnasium.make(env_id)
gymnasium_env = safety_gymnasium.wrappers.SafetyGymnasium2Gymnasium(safety_gymnasium_env)

safety_gymnasium_env = safety_gymnasium.wrappers.Gymnasium2SafetyGymnasium(gymnasium_env)

用户可以轻松应用 Gymnasium 包装器:

import gymnasium
import safety_gymnasium

def make_safe_env(env_id):
    safe_env = safety_gymnasium.make(env_id)
    env = safety_gymnasium.wrappers.SafetyGymnasium2Gymnasium(safe_env)
    env = gymnasium.wrappers.SomeWrapper1(env)
    env = gymnasium.wrappers.SomeWrapper2(env, argname1=arg1, argname2=arg2)
    ...
    env = gymnasium.wrappers.SomeWrapperN(env)
    safe_env = safety_gymnasium.wrappers.Gymnasium2SafetyGymnasium(env)
    return safe_env

或者

import functools

import gymnasium
import safety_gymnasium

def make_safe_env(env_id):
    return safety_gymnasium.wrappers.with_gymnasium_wrappers(
        safety_gymnasium.make(env_id),
        gymnasium.wrappers.SomeWrapper1,
        functools.partial(gymnasium.wrappers.SomeWrapper2, argname1=arg1, argname2=arg2),
        ...,
        gymnasium.wrappers.SomeWrapperN,
    )

此外,对于所有 Safety-Gymnasium 环境,我们还提供了相应的 Gymnasium 环境,环境 ID 后缀为 Gymnasium。例如:

import gymnasium
import safety_gymnasium

safety_gymnasium.make('SafetyPointGoal1-v0')    # step 返回 (next_obervation, reward, cost, terminated, truncated, info)
gymnasium.make('SafetyPointGoal1Gymnasium-v0')  # step 返回 (next_obervation, reward, terminated, truncated, info)

安装

从 PyPI 安装

pip install safety-gymnasium

从源代码安装

conda create -n <envname> python=3.8
conda activate <envname>

git clone https://github.com/PKU-Alignment/safety-gymnasium.git
cd safety-gymnasium
pip install -e .

重要说明

如果在服务器上无法渲染,可以尝试:

echo "export MUJOCO_GL=osmesa" >> ~/.bashrc
source ~/.bashrc
apt-get install libosmesa6-dev
apt-get install python3-opengl

使用键盘进行调试

对于简单的智能体,我们提供了通过键盘控制机器人移动的功能,便于调试。只需在任务名称后添加 Debug 后缀,例如 SafetyCarGoal2Debug-v0,然后使用 IKJL 键来引导机器人的移动。 对于更复杂的代理,您还可以根据特定外设制定自定义控制逻辑。为了实现这一点,请为指定的代理实现BaseAgent中的debug方法。

自定义您的环境

我们构建了一个高度可扩展的代码框架,使您能够轻松理解并设计自己的环境,以便于您的研究,平均只需不到100行代码。

详情请参阅我们的文档。 以下是一个最小示例:

# 导入您想使用的对象
# 或者您可以自己定义特定对象,只需确保遵守我们的规范
from safety_gymnasium.assets.geoms import Apples
from safety_gymnasium.bases import BaseTask

# 继承BaseTask
class MytaskLevel0(BaseTask):
    def __init__(self, config):
        super().__init__(config=config)
        # 定义一些属性
        self.num_steps = 500
        self.agent.placements = [(-0.8, -0.8, 0.8, 0.8)]
        self.agent.keepout = 0
        self.lidar_conf.max_dist = 6
        # 向环境中添加对象
        self.add_geoms(Apples(num=2, size=0.3))

    def calculate_reward(self):
        # 实现您的奖励函数
        # 注意:成本计算基于对象,因此是自动的
        reward = 1
        return reward

    def specific_reset(self):
        # 根据您的任务而定

    def specific_step(self):
        # 根据您的任务而定

    def update_world(self):
        # 根据您的任务而定

    @property
    def goal_achieved(self):
        # 根据您的任务而定

许可证

Safety-Gymnasium 根据 Apache License 2.0 发布。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号