# unreal-hmp
**Repository Path**: xthaf/unreal-hmp
## Basic Information
- **Project Name**: unreal-hmp
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2023-12-13
- **Last Updated**: 2024-03-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
> The present study aims to identify potential collaboration partners. If interested in this research project, please feel free to contact our office at CASIA: tenghai.qiu@ia.ac.cn.
>
> 我们(中科院自动化研究所,群体智能团队)欢迎来自各院所的合作伙伴,可分享拓展资源(地图,智能体建模等),请通过以下邮箱联系我们:`tenghai.qiu@ia.ac.cn`
# Unreal-MAP (Previous name: UHMP)
This is Unreal-based Multi-Agent Playground (U-Map, previous project name is UHMP for ~~Hybrid Unreal-based Multi-agent Playground~~)
Here you can use all the capabilities of Unreal Engine (Blueprints, Behavior tree, Physics engine, AI navigation, 3D models/animations and Plugin resources, etc) to build elegant (but also computational efficient) and magnificent (but also experimentally reproducible) multi-agent environments.
Developed with Unreal Engine, documenting is in process. 基于UnrealEngine开发,文档正在完善中。
**Please ```star``` the Github project. Your encouragement is extremely important to us as researchers: ```https://github.com/binary-husky/unreal-hmp```** 此项目处于活跃开发阶段,请打星关注哦。
# Intro 简介
Unreal-based Multi-Agent Playground (U-Map, previously called UHMP) is a new generation of multi-agent environment simulation environment based on the Unreal Engine.
This platform supports adversial training between swarms & algorithms, and it is the first (and currently the only) Extensible RL environment based on the Unreal Engine to support multi-team training.
U-Map is oriented to adversarial heterogeneous multi-agent reinforcement learning scenarios.
The interface is written in Python,
The Unreal Engine part uses C++ to handle the communication interface with Python, and other parts use blueprints.
The project introduces libs such as xtensor to accelerate the mathematical operations of C++.
In terms of scientific research and experiment:
- Pure computing mode that can be compiled into Headless (i.e. dedicated server for training)
- Simulation acceleration at any rate can be achieved until the CPU burns
- Strong repeatability. We have already solved various butterfly effect factors in Unreal Engine that would cause unrepeatable experiments when repeating random seed.
- Support large-scale Swarm. The communication protocol with Python is highly optimized to avoid IO jam caused by the increase of the number of agents
- Very efficient, extremely CPU efficient. The Unreal Engine itself is far more efficient than expected.
- Cross platform. Whether Windows, Linux, or MacOs can compile Headless mode and rendering mode clients
- You can connect the headless process in training across OS, and even watch the environment in training
Unreal-based Multi-Agent Playground (U-Map, 之前的名称是UHMP) 是基于虚幻引擎的新一代多智能体环境仿真环境。
该平台支持多队伍对抗,为第一个(也是目前为止唯一一个)基于虚幻引擎的多智能体+多队伍强化学习环境。
U-Map面向对抗性异构多智能体强化学习场景。
接口部分采用Python编写,
虚幻引擎部分采用C++处理与Python的通讯接口,其他部分采用蓝图。
项目引入xtensor用于加速C++部分的数学运算。
在科研实验方面:
- 可编译为Headless的纯计算模式(即dedicated server,用于训练)
- 可实现任意倍率的仿真加速,直到跑满CPU
- 可重复性强。排除了UnrealEngine中各种会造成实验不可重复的蝴蝶效应因素
- 支持大规模。与Python端的通讯协议高度优化,避免了随智能体数量增多导致的IO卡顿
- 非常高效,极其节省CPU。Unreal引擎本身的效率远超预想。
- 跨平台。不管是Windows、Linux还是MacOs都能编译Headless模式和渲染模式的客户端
- 可跨OS连接训练中的Headless进程,甚至可以观看训练中的环境.
# Install 安装方法
- Step 1, you must install the Unreal Engine from the source code. For details, see the official document of the Unreal Engine: ```https://docs.unrealengine.com/4.27/zh-CN/ProductionPipelines/DevelopmentSetup/BuildingUnrealEngine/```
- Step 2: Clone the git resp ```git clone https://github.com/binary-husky/unreal-hmp.git```
- Step 3: Download large files that github cannot manage. Run ```python Please_ Run_ This_ First_ To_ Fetch_ Big_ Files.py```
- Step 4: Right click the ```UHMP.upproject``` downloaded in step 3, select ```switch unreal engine version```, and then select ```source build at xxxxx``` to confirm. Then open the generated ```UHMP. sln``` and compile it
- Finally, double-click ```UHMP. upproject``` to enter the Unreal Engine Editor.
Note that steps 1 and 4 are difficult. It is recommended to refer to the following video (the 0:00->1:46 in the video is the steps 1, and 1:46->end is steps 4): ```https://ageasga-my.sharepoint.com/:v:/g/personal/fuqingxu_yiteam_tech/EawfqsV2jF5Nsv3KF7X1-woBH-VTvELL6FSRX4cIgUboLg?e=Vmp67E```
- 第1步,必须从```源代码```安装虚幻引擎,具体方法见虚幻引擎的官方文档:https://docs.unrealengine.com/4.27/zh-CN/ProductionPipelines/DevelopmentSetup/BuildingUnrealEngine/
- 第2步,克隆本仓库。```git clone https://github.com/binary-husky/unreal-hmp.git```
- 第3步,下载github不能管理的大文件。运行```python Please_Run_This_First_To_Fetch_Big_Files.py```。
- 第4步,```右```击第3步下载得到的```UHMP.uproject```,选择```switch unreal engine version```,再选择```source build at xxxxx```确认。然后打开生成的```UHMP.sln```,编译即可。
- 最后,双击```UHMP.uproject```进入虚幻引擎编辑器。
注意,第1步和第4步较难,建议参考以下视频(视频中前1分46秒为第1步流程,后面为第4步流程): ```https://ageasga-my.sharepoint.com/:v:/g/personal/fuqingxu_yiteam_tech/EawfqsV2jF5Nsv3KF7X1-woBH-VTvELL6FSRX4cIgUboLg?e=Vmp67E```
# Only install compiled binary 直接安装编译后的二进制客户端
```https://github.com/binary-husky/hmp2g/blob/master/ZDOCS/use_unreal_hmap.md```
# Tutorial 环境设计方法
The document is being improved. For the video tutorial of simple demo, see ```EnvDesignTutorial.pptx``` (you need to complete step 3 of installation to download this pptx file)
Directory:
- Chapter I. Unreal Engine
- - Build a map (Level) ```https://www.bilibili.com/video/BV1U24y1D7i4/?spm_id_from=333.999.0.0&vd_source=e3bc3eddd1d2414cb64ae72b6a64df55```
- - Establish Agent Actor
- - Design agent blueprint program logic
- - Episode key event notification mechanism
- - Define Custom actions (Unreal Engine side)
- - The Python side controls the custom parameters of the agent
- Chapter II. Python Interface
- - Create a task file (SubTask)
- - Modify agent initialization code
- - Modify the agent reward code
- - Select the control algorithm of each team
- - Full closed loop debugging method
- Chapter III. Appendix
- - Headless acceleration and cross-compiling Linux package
- - Define Custom actions (Need to be familiar with the full closed-loop debugging method first)
- - - Draft a list of actions
- - - Python side action generation
- - - UE-side action parse and execution
- - - Action discretization
- - Installation guide for cross compilation tool chain
文档正在完善,简单demo的视频教程见```EnvDesignTutorial.pptx```(需要完成安装步骤3以下载此pptx文件)
设计方法目录:
- 第一章 虚幻引擎部分
- - 1.1 建立地图(Level): ```https://www.bilibili.com/video/BV1U24y1D7i4/?spm_id_from=333.999.0.0&vd_source=e3bc3eddd1d2414cb64ae72b6a64df55```
- - 1.2 建立智能体蓝图(Agent Actor)
- - 1.3 设计智能体蓝图程序逻辑
- - 1.4 Episode关键事件通知机制
- - 1.5 自定义动作(虚幻引擎侧)(见第三章)
- - 1.6 由Python端控制Agent的自定义参数
- 第二章 Python接口部分
- - 2.1 建立任务文件(SubTask)
- - 2.2 修改智能体初始化代码
- - 2.3 修改智能体奖励代码
- - 2.4 选择各队伍的控制算法
- - 2.5 全闭环调试方法(Python-UMAP回环)
- 第三章 附录
- - 3.1 无渲染加速与交叉编译Linux二进制包
- - 3.2 自定义动作 (需要首先熟悉2.5全闭环调试方法)
- - - 3.2.1 起草动作清单
- - - 3.2.2 Python侧动作生成
- - - 3.2.3 UE侧动作解析与执行
- - - 3.2.4 强化学习动作离散化
- - 3.3 交叉编译工具链的安装指南
# Build binary 编译二进制客户端的方法
Run following scripts.
- Among them, ```Render/Server``` represents ```including graphic rendering / only computing```, the later is generally used for RL training.
- Among them, ```Windows/linux``` represents the target operating system. Note that you need to install ```Unreal Engine Cross Compilation Tool``` to compile Linux programs on Windows.
运行一下脚本即可。
- 其中```Render/Server```代表```包含图形渲染/无界面仅计算```,后者一般用于RL训练。
- 其中```Win/linux```代表目标操作系统,注意在windows上编译linux程序需要安装```虚幻引擎交叉编译工具```。
```
python BuildlinuxRender.py
python BuildLinuxServer.py
python BuildWinRender.py
python BuildWinServer.py
```
- After adding new ActionSets in ```Content/Assets/DefAction/ParseAction.uasset```. You may encounter ```Ensure condition failed: !FindPin(FFunctionEntryHelper::GetWorldContextPinName())``` error during packaging, if so, find and remove an extra blueprint function parameter named ```__WorldContext``` that you created by accident in ```ParseAction.uasset```. 如果在添加新的自定义动作之后遇到上述错误,说明你无意间添加了一个叫```__WorldContext```的蓝图函数参数,找到并删除它即可。 ```https://forums.unrealengine.com/t/ensure-condition-failed-on-project-start/469587```.
- 如果在迁移项目后发生BuildCMakeLib.Automation.cs(45,54): error CS1002,请在VS中重新生成 (**Rebuild**, not Build!) AutomationTool即可。```https://forums.unrealengine.com/t/unreal-engine-version-4-27-2-i-get-an-error-when-trying-to-package-any-project/270627```
# cite this project
```
@misc{fu2023unrealmap,
author = {Qingxu Fu and Tianyi Hu},
title = {U-Map: Developing Complex Multi-Agent Reinforcement Learning Benchmarks with Unreal Engine.},
howpublished = {\url{https://github.com/binary-husky/unreal-map/}},
year = {2023}
}
```
# Dev log 项目开发日志
- 2023-10-18 版本3.14
- 2023-4-30 版本3.8,引入标准化的高效感知模块
- 2023-3-9 正在尝试用共享内存通讯替换tcp通讯,以提高IO效率,待上传到4.0版本
- 2023-3-1 实现高效感知模块,待上传到4.0版本
- 2023-2-15 版本3.7融入master分支
- 2023-2-14 3.7上传中
- 2023-2-14 ```EnvDesignTutorial.pptx```中更新了自定义动作的文档
- 2023-2-14 上传了一个微缩版的hmp代码,作为入门用的U-MAP驱动,文档待写
- 2023-2-1 将读起来蹩脚的UHMAP缩写名称改为U-Map
- 2023-1-8 update readme
- 2023-12-25 covid is not a flu /(ㄒoㄒ)/
- 2022-12-22 版本3.6融入master分支
- 2022-12-21 解决智能体scale!=1的情况下,飞行智能体高度越来越低的问题
- 2022-12-21 修复超大规模智能体数量情况下缓存区溢出的问题
- 2022-12-18 优化大文件下载脚本
- 2022-12-17 版本3.5融入master分支