Readme添加语言badge

Readme排版修正
This commit is contained in:
Koha9 2024-01-24 17:02:48 +09:00
parent 96914d39b0
commit 2b22cc92a8
2 changed files with 9 additions and 16 deletions

View File

@ -1,24 +1,23 @@
# Aimbot-ParallelEnv
これはUnity ML-Agentsに基づいたFPSゲームのマルチエージェントトレーニング環境で、特定の目標と対応する難易度を生成し、エージェントのアクションに基づいて報酬をフィードバックして強化学習エージェントをトレーニングするための環境です。
---
[![Chinese badge](https://img.shields.io/badge/简体中文-Simplified_Chinese-blue)](./README.md)
[![Japanese badge](https://img.shields.io/badge/日本語-Japanese-blue)](./README-JP.md)
## Description
プロジェクトは[ML-Agents 2.0.1](https://github.com/Unity-Technologies/ml-agents/tree/develop)を基にして、Unity 2021.3.14f1を使用して開発されています。
Python側では、[mlagents-envs 0.30.0](https://pypi.org/project/mlagents-envs/)を使用してゲーム環境と通信を行います。
---
## Quick start
プロジェクト[Aimbot-PPO](https://koha9.asuscomm.com/yurugit/Koha9/Aimbot-PPO)では、この環境を使用してPPOアルゴリズムのトレーニングが行われています。具体的な使用例は[AimbotEnv.py](https://koha9.asuscomm.com/yurugit/Koha9/Aimbot-PPO/src/branch/OffP-FullMNN-V2/Aimbot-PPO-Python/Pytorch/AimbotEnv.py)で記載されています。
---
## ゲーム環境の概要
本環境は初代Doomの基本モードを模したFPSゲームで、エージェントには異なる目標が与えられます。エージェントは目標の種類と位置、自身の状態に基づいて、撃つかどうか、撃つ方向、移動方向を決定します。この環境には2つのモードと3種類の目標があります訓練モードとテストモード、そして`FreeTarget`、`GotoTarget`、`AttackTarget`です。`FreeTarget`では、エージェントは武器を使ってエリア内のすべての敵を倒す必要があります。`GotoTarget`と`AttackTarget`では、エリア内に目標ブロックが生成され、エージェントはそれに応じた異なる行動を取る必要があります。さらに、`GotoTarget`と`AttackTarget`では、生成される目標ブロックの構造に応じて5つの異なる難易度に分けられています。
---
## ゲームの概要
この環境は初代Doomの基本モードを模したFPSゲームで、エージェントには異なる目標が与えられます。エージェントは目標の種類と位置、自身の状態に基づいて、撃つかどうか、撃つ方向、移動方向を決定します。この環境には2つのモードと3種類の目標があります訓練モードとテストモード、そして`FreeTarget`、`GotoTarget`、`AttackTarget`です。`FreeTarget`では、エージェントは武器を使ってエリア内のすべての敵を倒す必要があります。`GotoTarget`と`AttackTarget`では、エリア内に目標ブロックが生成され、エージェントはそれに応じた異なる行動を取る必要があります。さらに、`GotoTarget`と`AttackTarget`では、生成される目標ブロックの構造によって、5つの異なる難易度に分けられています。
---
## モード
訓練モードとテストモードは、Python側と通信が必要で、この環境から観測されたObservationに基づいてActionを生成し、環境にフィードバックします。環境を起動する際、ゲーム内でユーザーが操作してモードを選択する必要があります。ML-Agentsにはタイムリミットが存在するため、45秒以内にモードを選択する必要があります。45秒を超えると、自動的にゲーム環境から退出します。
@ -29,7 +28,6 @@ Python側では、[mlagents-envs 0.30.0](https://pypi.org/project/mlagents-envs/
### テストモード
テストモードでは、ユーザーが手動でエージェントに命令を指定する必要があります。画面右上のメニューをクリックすることで、目標ブロックや敵を生成したり、目標モードを切り替えたりすることができます。このモードでは、訓練モードにはない新しいターゲット`StayTarget`が追加されています。ユーザーが特定の目標を指定しない場合やゲームをクリアした場合、`StayTarget`がエージェントに割り当てられます。右上隅のメニューをクリックすると、マウスモードを切り替えて敵Enemyを生成するモードや、特定の難易度のターゲットブロックを生成するモードに変更できます。マウスがブロック生成モードで、マウスをゲームエリアに移動すると、生成するオブジェクトのプレビューが表示され、マウスの右クリックで指定した位置に対応する敵やブロックを生成できます。ターゲットブロックを生成すると、対応するターゲットが自動的にエージェントに割り当てられます。`FreeTarget`を割り当てる必要がある場合は、`FreeMode`ボタンをクリックします。`ClearGame`をクリックすると、すべての敵とブロックがクリアされ、エージェントのターゲットが`StayTarget`に設定されます。`StayMode`をクリックすると、エージェントのターゲットを強制的に`StayTarget`に設定できます。
---
## Target
### FreeTarget
@ -75,7 +73,6 @@ Python側では、[mlagents-envs 0.30.0](https://pypi.org/project/mlagents-envs/
*注nは各エージェントのRaycast数、MaxDistanceは各エージェントのレイキャストの最大探知距離を指します。*
---
## Action Space
FPSゲームにおけるプレイヤーのキーボードとマウスの同時操作をシミュレートするため、本環境のActionSpaceは`Discrete Action`(離散動作)と`Continuous Action`連続動作の2つの部分に分かれています。`Discrete Action`はプレイヤーのキーボードによる離散的な操作を模擬し、`Continuous Action`はマウスによる連続的な操作を模擬します。両方のActionSpaceに対応する操作は[`MLAgentsCustomController.cs`](https://koha9.asuscomm.com/yurugit/Koha9/Aimbot-ParallelEnv/src/branch/main/Assets/Script/GameScript/MLAgentsCustomController.cs)内のoverrideされた`Heuristic`関数で参照できます。具体的な実装は[`AgentController.cs`](https://koha9.asuscomm.com/yurugit/Koha9/Aimbot-ParallelEnv/src/branch/main/Assets/Script/GameScript/Character/AgentController.cs)内の`MoveAgent`関数と`CameraControl`関数にあります。
@ -93,7 +90,6 @@ FPSゲームにおけるプレイヤーのキーボードとマウスの同時
|------|-------------------|----------------|---------------------------------------------------------------------------------|
| 0 | 水平回転 | -Inf ~ Inf | エージェントの水平方向(左右)の視角回転を制御。正の値で右に、負の値で左に回転する。 |
---
## Reward
与えられた各ターゲットにおいて、エージェントが異なるタスクを達成することに注力するため、リワードの設計もそれぞれ異なります。訓練モードでは、リワードは共通リワード「Common Reward」と各ターゲット専用のリワードで構成されています。

View File

@ -1,20 +1,19 @@
# Aimbot-ParallelEnv
这是一个基于Unity ML-Agents的基于FPS游戏的多智能体训练环境用于生成指定目标和对应难度并且根据Agent的Action反馈Reward来训练强化学习Agent的环境。
---
[![Chinese badge](https://img.shields.io/badge/简体中文-Simplified_Chinese-blue)](./README.md)
[![Japanese badge](https://img.shields.io/badge/日本語-Japanese-blue)](./README-JP.md)
## Description
项目基于[ML-Agents 2.0.1](https://github.com/Unity-Technologies/ml-agents/tree/develop)使用Unity 2021.3.14f1开发。
Python侧则使用[mlagents-envs 0.30.0](https://pypi.org/project/mlagents-envs/)与环境进行通信。
---
## 快速开始
在项目[Aimbot-PPO](https://koha9.asuscomm.com/yurugit/Koha9/Aimbot-PPO)中使用了本环境进行了PPO算法的训练其中在[AimbotEnv.py](https://koha9.asuscomm.com/yurugit/Koha9/Aimbot-PPO/src/branch/OffP-FullMNN-V2/Aimbot-PPO-Python/Pytorch/AimbotEnv.py)中给出了本环境的使用方法。
---
## 游戏简介
这是一个模仿初代Doom的基本模式的FPS游戏环境Agent将会被给到不同的目标Agent需要根据目标的类型和位置以及自身的状态来决定是否开枪射击射击的方向以及移动方向。环境内包含两种模式和3种目标分别是训练模式和测试模式以及`FreeTarget``GotoTarget`和`AttackTarget`。`FreeTarget`需要Agent使用武器击倒区域内所有的敌人`GotoTarget`和`AttackTarget`会在区域内生成一个目标区块Agent需要对目标区块进行不同的对应来完成任务。同时`GotoTarget`和`AttackTarget`中根据生成目标区块的构造不同分为了5种不同的难度。
---
## 模式介绍
训练模式和测试模式都需要与Python侧进行通信根据从本环境中观测到的Observation生成Action并传递回本环境。在环境启动时需要使用者在游戏内进行操作来选择模式由于ML-Agents存在Time limit所以需要在45s内进行模式选择超过45s后将自动退出游戏环境。
@ -25,7 +24,6 @@ Python侧则使用[mlagents-envs 0.30.0](https://pypi.org/project/mlagents-envs/
### 测试模式
测试模式中用户需要手动来对Agent下达命令用户可以通过点击右上角的菜单来执行生成目标区块或敌人切换目标模式等。在该模式中比训练模式多出一个新的Target为StayTarget当用户未指定目标或者清空游戏时将会以将该Target指派给Agent。通过点击右上角的菜单可以将鼠标的模式切换为生成Enemy或者生成对应难度Target区块的模式此时鼠标移动到游戏区域内后将会出现生成物件的预览内点击鼠标右键则可以在对应的位置生成对应的Enemy或者区块。当生成Target区块时会自动指派对应target给agent需要指派`FreeTarget`时则需要点击`FreeMode`按钮。通过点击`ClearGame`可以清空所有enemy和区块并将Agent的目标指派为`StayTarget`,通过点击`StayMode`则可以强制将Agent目标指派为`StayTarget`。
---
## 目标介绍
### FreeTarget
@ -69,9 +67,9 @@ Python侧则使用[mlagents-envs 0.30.0](https://pypi.org/project/mlagents-envs/
*注n为每个Agent的RayCast数量MaxDistance为每个Agent的RayCast最大探测距离*
---
## Action Space
为了模拟FPS游戏中玩家对于键盘和鼠标的同时操作本环境中的Action Space分为两个部分分别是`Discrete Action`和`Continuous Action`。其中`Discrete Action`用于模拟玩家对于键盘的离散操作,`Continuous Action`用于模拟玩家对于鼠标的连续操作。两个Action Space的对应操作可以参考于[`MLAgentsCustomController.cs`](https://koha9.asuscomm.com/yurugit/Koha9/Aimbot-ParallelEnv/src/branch/main/Assets/Script/GameScript/MLAgentsCustomController.cs)中被override的`Heuristic`函数。具体实现则于[`AgentController.cs`](https://koha9.asuscomm.com/yurugit/Koha9/Aimbot-ParallelEnv/src/branch/main/Assets/Script/GameScript/Character/AgentController.cs)中的`MoveAgent`和`CameraControl`函数中。
### Discrete Action
在`Discrete Action`中Agent可以对各方向的移动和攻击进行离散操作其中移动操作包括垂直移动操作和水平移动操作攻击操作可以对武器进行操。
| Num | Action | Action Space | Description |
@ -79,13 +77,13 @@ Python侧则使用[mlagents-envs 0.30.0](https://pypi.org/project/mlagents-envs/
| 0 | Vertical Move | 0,1,-1 | 用于控制Agent在其正面方向的垂直轴上移动。0=停止1=向前移动,-1=向后移动 |
| 1 | Horizontal Move | 0,1,-1 | 用于控制Agent在其正面方向的水平轴上移动。0=停止1=向右移动,-1=向左移动 |
| 2 | Attack | 0,1 | 用于控制Agent的攻击操作。0=不攻击1=执行攻击 |
### Continuous Action
在`Continuous Action`中可以对Agent的视角进行操作。由于本环境是模拟早期Doom的FPS环境所以Agent的视角被设定为仅能在水平方向上进行旋转。
| Num | Action | Action Space | Description |
|-----|-------------------|--------------|---------------------------------------------------------------------------------|
| 0 | Vertical Rotation | -Inf~Inf | 控制Agent在水平方向左右上的视角旋转。正值使视角向右负值则使视角向左旋转。 |
---
## Reward
在各给定的目标中为了让Agent注重于完成不同的任务Reward的设计也有所不同。在训练模式中Reward由共同Reward`Common Reward`和各个目标的专用Reward组成。
### Common Reward
@ -142,6 +140,5 @@ $$
| SuppressiveReward | 5 | Agent对`FireBase`进行压制攻击时获得奖励 |
| FacingAreaReward | 2 | Agent面朝目标时获得的持续奖励 |
---
## Side Channel
为了方便对于环境的调试和实现Unity与Python间非实时通信本环境中使用了ML-Agents提供的Side Channel用于向Python侧传递一些额外的信息。这里我参考了huggingface的[Custom Side Channels](https://github.com/huggingface/ml-agents-patch/blob/develop/docs/Custom-SideChannels.md)。在Unity端Side Channel的实现位于[`AimbotSideChannel.cs`](https://koha9.asuscomm.com/yurugit/Koha9/Aimbot-ParallelEnv/src/branch/main/Assets/Script/GameScript/SideChannel/AimbotSideChannel.cs)和[`AimBotSideChannelController.cs`](https://koha9.asuscomm.com/yurugit/Koha9/Aimbot-ParallelEnv/src/branch/main/Assets/Script/GameScript/SideChannel/AimBotSideChannelController.cs)中。每个Log信息将会以`|`来分隔字段其中第一个字段为Log的类型随后字段为自定义Log信息。在本环境中Unity的SideChannel将会发送所有`LogType.Warning`和`LogType.Error`类型的Log到Python侧。其中`LogType.Warning`会传递一回合结束后的的胜败信息和从Unity发送至Python的指令。胜败信息将类似于`Warning|Result|Win`和`Warning|Result|Lose`。而指令则传递了在下一训练结束后保存模型的命令,它的内容为`Warning|Command`。