Skip to content

Commit 93bd1b4

Browse files
committed
docs: update agent control tutorial with entity class details and examples
1 parent 8e6c163 commit 93bd1b4

File tree

1 file changed

+55
-31
lines changed

1 file changed

+55
-31
lines changed

docs/source/tutorial/agent/agent_control.md

Lines changed: 55 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -130,81 +130,96 @@ python main.py
130130

131131
## `Human Detector` モジュールの実装で使用するクラス・メソッド
132132

133-
### WorldInfo
134-
135-
`WorldInfo` クラスは,エージェントが把握している情報とそれに関する操作をおこなうメソッドをもったクラスです. エージェントはこのクラスのインスタンスを通して,他のエージェントやオブジェクトの状態を確認します.
133+
### Entity
136134

137-
モジュール内では,`WorldInfo` クラスのインスタンスを `self._world_info` として保持しています
135+
`Entity` クラスは,エンティティの基底クラスです. このクラスは,エンティティの基本情報を保持します
138136

139-
### AgentInfo
137+
RRS上のエンティティは下図のように `Entity` を継承したクラスで表現されています. 赤枠で囲まれたクラスは,クラスの意味がそのままRRSの直接的な構成要素を表しています.
140138

141-
`AgentInfo` クラスは,エージェント自身の情報とそれに関する操作をおこなうメソッドをもったクラスです. エージェントはこのクラスのインスタンスを通して,エージェント自身の状態を取得します
139+
例: Road クラスのインスタンスの中には, Hydrant クラスを継承してない通常の道路を表すものも存在しています
142140

143-
モジュール内では,`AgentInfo` クラスのインスタンスを `self._agent_info` として保持しています.
141+
![エンティティの継承関係](./../../images/entity.png)
144142

145143
### EntityID
146144

147145
`EntityID` クラスは,全てのエージェント/オブジェクトを一意に識別するためのID(識別子)を表すクラスです. RRSではエージェントとオブジェクトをまとめて,エンティティと呼んでいます.
148146

149-
- 自分自身のエンティティIDを取得する
147+
### Civilian
148+
149+
`Civilian` クラスは,市民を表すクラスです.このクラスからは,エージェントの位置や負傷の進行状況を取得することができます.
150+
151+
- `entity` が市民であるかどうかを判定する
150152

151153
```python
152-
self._agent_info.get_entity_id()
154+
isinstance(entity, Civilian)
153155
```
154156

155-
### Entity
157+
- エンティティIDを取得する
156158

157-
`Entity` クラスは,エンティティの基底クラスです. このクラスは,エンティティの基本情報を保持します.
159+
```python
160+
entity.get_id()
161+
```
158162

159-
- エンティティIDからエンティティを取得する
163+
- 市民が生きているかどうかを判定する
160164

161165
```python
162-
self._world_info.get_entity(entity_id)
166+
hp: Optional[int] = entity.get_hp()
167+
if hp is None or hp <= 0:
168+
return False
163169
```
164170

165-
- 同じクラスのエンティティを全て取得する
171+
- 市民が埋まっているかどうかを判定する
166172

167173
```python
168-
self._world_info.get_entities_by_type([Building, Road])
174+
buriedness: Optional[int] = entity.get_buriedness()
175+
if buriedness is None or buriedness <= 0:
176+
return False
169177
```
170178

171-
### Civilian
179+
### WorldInfo
172180

173-
`Civilian` クラスは,市民を表すクラスです.このクラスからは,エージェントの位置や負傷の進行状況を取得することができます
181+
`WorldInfo` クラスは,エージェントが把握している情報とそれに関する操作をおこなうメソッドをもったクラスです. エージェントはこのクラスのインスタンスを通して,他のエージェントやオブジェクトの状態を確認します
174182

175-
- `entity` が市民であるかどうかを判定する
183+
モジュール内では,`WorldInfo` クラスのインスタンスを `self._world_info` として保持しています.
184+
185+
- エンティティIDからエンティティを取得する
176186

177187
```python
178-
isinstance(entity, Civilian)
188+
self._world_info.get_entity(entity_id)
179189
```
180190

181-
- 市民が生きているかどうかを判定する
191+
- 指定したクラスのエンティティを全て取得する
182192

183193
```python
184-
hp: Optional[int] = entity.get_hp()
185-
if hp is None or hp <= 0:
186-
return False
194+
self._world_info.get_entities_by_type([Building, Road])
187195
```
188196

189-
- 市民が埋まっているかどうかを判定する
197+
- エージェントの位置から指定したエンティティまでの距離を取得する
190198

191199
```python
192-
buriedness: Optional[int] = entity.get_buriedness()
193-
if buriedness is None or buriedness <= 0:
194-
return False
200+
self._world_info.get_distance(me, civilian.get_id())
195201
```
196202

197-
### entityの継承
203+
[詳細はこちら](../../adf_core_python.core.agent.info.rst)
204+
205+
### AgentInfo
198206

199-
RRS上のエンティティは下図のように Entity を継承したクラスで表現されています. 赤枠で囲まれたクラスは,クラスの意味がそのままRRSの直接的な構成要素を表しています
207+
`AgentInfo` クラスは,エージェント自身の情報とそれに関する操作をおこなうメソッドをもったクラスです. エージェントはこのクラスのインスタンスを通して,エージェント自身の状態を取得します
200208

201-
例: Road クラスのインスタンスの中には, Hydrant クラスを継承してない通常の道路を表すものも存在しています
209+
モジュール内では,`AgentInfo` クラスのインスタンスを `self._agent_info` として保持しています
202210

203-
![エンティティの継承関係](./../../images/entity.png)
211+
- 自分自身のエンティティIDを取得する
212+
213+
```python
214+
self._agent_info.get_entity_id()
215+
```
216+
217+
[詳細はこちら](../../adf_core_python.core.agent.info.rst)
204218

205219
## `Human Detector` モジュールの実装
206220

207221
`Human Detector` モジュールの実装を行います.
222+
以下のコードを`fire_brigade_human_detector.py` に記述してください。
208223

209224
```python
210225
from typing import Optional
@@ -289,3 +304,12 @@ class SampleHumanDetector(HumanDetector):
289304
"""
290305
return self._result
291306
```
307+
308+
シミュレーションサーバーを起動し,エージェントを実行してみましょう.
309+
310+
```bash
311+
cd WORKING_DIR/<your_team_name>
312+
python main.py
313+
```
314+
315+
埋没している市民を消防隊エージェントが救出できるようになっていれば成功です.

0 commit comments

Comments
 (0)