news 2026/7/6 20:36:42

Miniworld环境创建教程:零基础打造专属强化学习训练场景

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Miniworld环境创建教程:零基础打造专属强化学习训练场景

Miniworld环境创建教程:零基础打造专属强化学习训练场景

【免费下载链接】MiniworldSimple and easily configurable 3D FPS-game-like environments for reinforcement learning项目地址: https://gitcode.com/gh_mirrors/mi/Miniworld

Miniworld是一款简单且高度可配置的3D FPS游戏风格强化学习环境,让开发者能够轻松构建自定义训练场景。本文将带你从零开始,通过4个简单步骤创建专属的强化学习环境,即使没有3D建模经验也能快速上手。

为什么选择Miniworld?

强化学习的效果很大程度上依赖于训练环境的质量。Miniworld作为轻量级3D环境框架,具有以下优势:

  • 极简配置:无需复杂的3D建模知识,几行代码即可生成复杂场景
  • 丰富预设:内置多种环境模板,如迷宫、房间、走廊等
  • 高度可定制:支持自定义地图尺寸、物体摆放、奖励机制
  • 轻量高效:对硬件要求低,普通电脑即可流畅运行

图1:Miniworld内置的单房间环境,适合基础导航任务训练

准备工作:5分钟快速安装

环境要求

  • Python 3.6+
  • 支持OpenGL的显卡
  • 操作系统:Windows/macOS/Linux

两种安装方式

快速安装(推荐新手)

pip install miniworld

源码安装(适合开发者)

git clone https://gitcode.com/gh_mirrors/mi/Miniworld cd Miniworld python3 -m pip install -e .

开发模式安装(-e参数)允许你修改源码并实时生效,推荐需要自定义环境的用户使用。

第一步:创建基础环境类

创建环境的核心是定义一个继承自MiniWorldEnv的类。以下是基础模板代码:

from miniworld.miniworld import MiniWorldEnv class MyCustomEnv(MiniWorldEnv): def __init__(self, size=10, **kwargs): self.size = size # 环境尺寸 super().__init__(**kwargs) # 定义动作空间:左转(0)、右转(1)、前进(2)、后退(3) self.action_space = spaces.Discrete(self.actions.move_forward + 1)

这个基础类设置了环境的基本属性和动作空间。MiniWorld默认使用X-Z平面进行移动,简化了3D空间的操作难度。

第二步:生成环境地图

通过重写_gen_world方法来创建环境地图。最简单的是生成一个矩形房间:

def _gen_world(self): # 创建矩形房间:min_x, max_x, min_z, max_z self.add_rect_room(min_x=0, max_x=self.size, min_z=0, max_z=self.size) # 放置智能体 self.place_agent()

运行代码后,你将得到一个空房间环境,如下图所示:

图2:基础矩形房间环境,红色三角形代表智能体

提示:可以通过调整size参数改变房间大小,数值越大房间面积越大。

第三步:添加交互物体

在环境中添加目标物体,让智能体有任务可做:

from miniworld.entity import Box import numpy as np def _gen_world(self): self.add_rect_room(min_x=0, max_x=self.size, min_z=0, max_z=self.size) # 放置蓝色箱子作为目标 self.box = self.place_entity( Box(color='blue'), pos=np.array([4.5, 0.5, 4.5]), # 位置坐标 dir=0.0 # 朝向角度 ) self.place_agent()

现在环境中多了一个蓝色箱子,智能体需要学会与之交互:

图3:添加蓝色箱子后的环境,智能体需要到达目标位置

MiniWorld提供多种预设物体,如:

  • Box:立方体
  • Key:钥匙
  • Ball:球体
  • Door:门

这些物体都可以通过类似的方式添加到环境中。

第四步:设置奖励机制

强化学习需要奖励信号来引导智能体学习。添加以下代码实现"靠近箱子获得奖励"的机制:

def step(self, action): # 调用父类的step方法 obs, reward, termination, truncation, info = super().step(action) # 当智能体靠近箱子时给予奖励 if self.near(self.box): reward += self._reward() # 奖励值默认为1.0 termination = True # 任务完成 return obs, reward, termination, truncation, info

现在,当智能体移动到蓝色箱子附近时,会获得奖励并结束当前回合。

高级技巧:创建复杂环境

1. 迷宫环境示例

MiniWorld可以轻松创建复杂的迷宫环境,只需添加多个房间和连接通道:

def _gen_world(self): # 创建多个房间 room1 = self.add_rect_room(min_x=0, max_x=5, min_z=0, max_z=5) room2 = self.add_rect_room(min_x=5, max_x=10, min_z=5, max_z=10) # 添加连接通道 self.connect_rooms(room1, room2, min_x=5, max_x=5, min_z=3, max_z=7) self.place_agent(room=room1) self.place_entity(Box(color='red'), room=room2)

图4:复杂迷宫环境示例,适合训练导航和探索能力

2. 环境参数化

通过参数化设计,可以生成无限多种环境变体:

def __init__(self, size=10, num_objects=3, **kwargs): self.size = size self.num_objects = num_objects # 物体数量 super().__init__(**kwargs) def _gen_world(self): self.add_rect_room(min_x=0, max_x=self.size, min_z=0, max_z=self.size) # 随机放置多个物体 for _ in range(self.num_objects): self.place_entity(Box(color=np.random.choice(['red', 'blue', 'green']))) self.place_agent()

运行与测试环境

创建完环境后,可以使用手动控制脚本测试:

from miniworld.manual_control import manual_control env = MyCustomEnv(size=15) manual_control(env)

通过键盘方向键控制智能体移动,观察环境是否符合预期。

总结

通过本文介绍的四个步骤,你已经掌握了Miniworld环境创建的基本方法:

  1. 创建环境类继承MiniWorldEnv
  2. 重写_gen_world生成地图
  3. 添加交互物体
  4. 设置奖励机制

MiniWorld的灵活性使得创建各种强化学习场景变得简单,从简单的导航任务到复杂的多目标操作。更多高级功能可以参考官方文档:docs/content/create_env.md

现在就动手创建你的第一个强化学习环境吧!如有问题,可以查阅docs/content/troubleshooting.md或项目Issues获取帮助。

【免费下载链接】MiniworldSimple and easily configurable 3D FPS-game-like environments for reinforcement learning项目地址: https://gitcode.com/gh_mirrors/mi/Miniworld

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/6 20:36:23

Translation MotionLayout

1、简介 1.1 Android中动画 Android原生动画主要有三种: View动画,在Activity切换时会用到,这个是最早引入的动画,在API 1的时候引入; 属性动画,目前最常使用的动画,在API 11引入。常用于实现平移、缩放、旋转以及一些自定义动画效果; 过渡动画,在API 18开始引用…

作者头像 李华
网站建设 2026/7/6 20:35:57

MKXP:让RPG Maker游戏在Linux上重获新生的开源引擎

MKXP:让RPG Maker游戏在Linux上重获新生的开源引擎 【免费下载链接】mkxp Free Software implementation of the Ruby Game Scripting System (RGSS) 项目地址: https://gitcode.com/gh_mirrors/mk/mkxp 想象一下,你花费数百小时精心制作的RPG Ma…

作者头像 李华
网站建设 2026/7/6 20:34:46

FutureKit社区贡献指南:如何参与FutureKit开源项目开发

FutureKit社区贡献指南:如何参与FutureKit开源项目开发 【免费下载链接】FutureKit A Swift based Future/Promises Library for IOS and OS X. 项目地址: https://gitcode.com/gh_mirrors/fu/FutureKit FutureKit是一个基于Swift的iOS和OS X异步编程库&…

作者头像 李华
网站建设 2026/7/6 20:34:31

vz安全指南:正确配置entitlements和权限的最佳实践

vz安全指南:正确配置entitlements和权限的最佳实践 【免费下载链接】vz Create virtual machines and run Linux-based operating systems in Go using Apple Virtualization.framework. 项目地址: https://gitcode.com/gh_mirrors/vz1/vz vz是基于Apple Vir…

作者头像 李华
网站建设 2026/7/6 20:31:24

解锁漫画阅读新境界:5个EhViewer实用技巧让漫画浏览效率翻倍

解锁漫画阅读新境界:5个EhViewer实用技巧让漫画浏览效率翻倍 EhViewer是一款基于Material Design 2设计风格的Android漫画阅读器,专为E-Hentai等漫画网站优化。这款开源应用不仅提供了流畅的漫画浏览体验,还集成了智能下载、离线阅读、个性化…

作者头像 李华