44
55## エージェントの制御について
66
7- RRSの災害救助エージェントは3種類あり、種類毎にそれぞれ異なるプログラムを書く必要があります。しかし、初めから全てのプログラムを書くことは困難です。ここではまず初めに、消防隊エージェントを操作するプログラムの一部を書いてみましょう.
7+ RRSの災害救助エージェントは3種類あり、種類毎にそれぞれ異なるプログラムを書く必要があります。しかし、初めから全てのプログラムを書くことは困難です。ここではまず初めに、消防隊エージェントを操作するプログラムの一部を書いてみましょう。
88
99``` {note}
10- エージェントを操作するプログラムは, エージェントの種類毎に同一です. プログラムは各エージェントに配られ, そのエージェントのみの操作を担います. 消防隊エージェントを操作するプログラムを書けば, それがすべての消防隊エージェント上でそれぞれ動作します.
10+ エージェントを操作するプログラムは、 エージェントの種類毎に同一です。 プログラムは各エージェントに配られ、 そのエージェントのみの操作を担います。 消防隊エージェントを操作するプログラムを書けば、 それがすべての消防隊エージェント上でそれぞれ動作します。
1111```
1212
1313![ 消防隊エージェント] ( ./../../images/agent_control.jpg )
1414
1515## エージェントの動作フロー
1616
17- エージェントの動作を決めているのはTacticsというプログラムです.
17+ エージェントの動作を決めているのはTacticsというプログラムです。
1818
19- 消防隊の思考ルーチンは下の図の通りにおおよそおこなわれます. 消防隊の動作としては, まず救助対象の市民を捜索し(` Human Detector ` ), 見つかった市民を救助します(` Action Rescue ` ). 救助対象の市民が見つからない場合は, 探索場所を変更して市民を捜索するため, 次の捜索場所を決定して(` Search ` )移動します(` Action Ext move ` ). なお, エージェントは1ステップ内で, 移動と救助活動を同時におこなうことが出来ません. つまり, ステップごとに更新される自身の周辺情報を確認して, 動作の対象と動作内容を決定していくということになります. これらそれぞれの機能が, モジュールと呼ばれるプログラムとして分割して表現されています.
19+ 消防隊の思考ルーチンは下の図の通りにおおよそおこなわれます。 消防隊の動作としては、 まず救助対象の市民を捜索し(` Human Detector ` )、 見つかった市民を救助します(` Action Rescue ` )。 救助対象の市民が見つからない場合は、 探索場所を変更して市民を捜索するため、 次の捜索場所を決定して(` Search ` )移動します(` Action Ext move ` )。 なお、 エージェントは1ステップ内で、 移動と救助活動を同時におこなうことが出来ません。 つまり、 ステップごとに更新される自身の周辺情報を確認して、 動作の対象と動作内容を決定していくということになります。 これらそれぞれの機能が、 モジュールと呼ばれるプログラムとして分割して表現されています。
2020
21- 今回はこの中で, 救助(掘り起こし)対象を決定する ` Human Detector ` モジュールを開発します.
21+ 今回はこの中で、 救助(掘り起こし)対象を決定する ` Human Detector ` モジュールを開発します。
2222
2323![ 消防隊エージェントの動作フロー] ( ./../../images/agent_flow.png )
2424
2525## ` Human Detector ` モジュールの実装の準備
2626
27- まず、` Human Detector ` モジュールを記述するためのファイルを作成します.
27+ まず、` Human Detector ` モジュールを記述するためのファイルを作成します。
2828
2929``` bash
3030cd WORKING_DIR/< your_team_name>
3131touch src/< your_team_name> /module/complex/fire_brigade_human_detector.py
3232```
3333
34- 次に、` Human Detector ` モジュールの雛形の実装を行います. 以下のコードを` fire_brigade_human_detector.py ` に記述してください.
34+ 次に、` Human Detector ` モジュールの雛形の実装を行います。 以下のコードを` fire_brigade_human_detector.py ` に記述してください。
3535
3636``` python
3737from typing import Optional
@@ -91,62 +91,62 @@ class FireBrigadeHumanDetector(HumanDetector):
9191
9292## モジュールの登録
9393
94- 次に、作成したモジュールを登録します.
94+ 次に、作成したモジュールを登録します。
9595
96- ` WORKING_DIR/<your_team_name>/config/module.yaml ` ファイルを開き, 以下の部分を
96+ ` WORKING_DIR/<your_team_name>/config/module.yaml ` ファイルを開き、 以下の部分を
9797
9898``` yaml
9999DefaultTacticsFireBrigade :
100100 HumanDetector : src.<your_team_name>.module.complex.sample_human_detector.SampleHumanDetector
101101` ` `
102102
103- 以下のように変更してください.
103+ 以下のように変更してください。
104104
105105` ` ` yaml
106106DefaultTacticsFireBrigade :
107107 HumanDetector : src.<your_team_name>.module.complex.fire_brigade_human_detector.FireBrigadeHumanDetector
108108` ` `
109109
110- シミュレーションサーバーを起動し、エージェントを実行してみましょう.
110+ シミュレーションサーバーを起動し、エージェントを実行してみましょう。
111111
112112` ` ` bash
113113cd WORKING_DIR/<your_team_name>
114114python main.py
115115```
116116
117- 標準出力に ` Calculate FireBrigadeHumanDetector ` と表示されれば成功です.
117+ 標準出力に ` Calculate FireBrigadeHumanDetector ` と表示されれば成功です。
118118
119119## ` Human Detector ` モジュールの設計
120120
121- 救助対象選択プログラムの中身を書き, 消防隊エージェントが救助活動をおこなえるように修正します.
121+ 救助対象選択プログラムの中身を書き、 消防隊エージェントが救助活動をおこなえるように修正します。
122122
123- 消防隊エージェントの救助対象を最も簡単に選択する方法は, 埋没している市民の中で最も自身に近い市民を選択する方法です. 今回は, この方法を採用した消防隊エージェントの行動対象決定モジュールを書いてみましょう.
123+ 消防隊エージェントの救助対象を最も簡単に選択する方法は、 埋没している市民の中で最も自身に近い市民を選択する方法です。 今回は、 この方法を採用した消防隊エージェントの行動対象決定モジュールを書いてみましょう。
124124
125- 埋没している市民の中で最も自身に近い市民を救助対象として選択する方法は, フローチャートで表すと下図のようになります.
125+ 埋没している市民の中で最も自身に近い市民を救助対象として選択する方法は、 フローチャートで表すと下図のようになります。
126126
127127![ 救助対象選択フローチャート] ( ./../../images/human_detector_flow.png )
128128
129- このフローチャート中の各処理を, 次小節で紹介する各クラス・メソッド等で置き換えたものを, ` fire_brigade_human_detector.py ` に記述していくことで, 救助対象選択プログラムを完成させます.
129+ このフローチャート中の各処理を、 次小節で紹介する各クラス・メソッド等で置き換えたものを、 ` fire_brigade_human_detector.py ` に記述していくことで、 救助対象選択プログラムを完成させます。
130130
131131## ` Human Detector ` モジュールの実装で使用するクラス・メソッド
132132
133133### Entity
134134
135- ` Entity ` クラスは, エンティティの基底クラスです. このクラスは, エンティティの基本情報を保持します.
135+ ` Entity ` クラスは、 エンティティの基底クラスです。 このクラスは、 エンティティの基本情報を保持します。
136136
137- RRS上のエンティティは下図のように ` Entity ` を継承したクラスで表現されています. 赤枠で囲まれたクラスは, クラスの意味がそのままRRSの直接的な構成要素を表しています.
137+ RRS上のエンティティは下図のように ` Entity ` を継承したクラスで表現されています。 赤枠で囲まれたクラスは、 クラスの意味がそのままRRSの直接的な構成要素を表しています。
138138
139- 例: Road クラスのインスタンスの中には, Hydrant クラスを継承してない通常の道路を表すものも存在しています.
139+ 例: Road クラスのインスタンスの中には、 Hydrant クラスを継承してない通常の道路を表すものも存在しています。
140140
141141![ エンティティの継承関係] ( ./../../images/entity.png )
142142
143143### EntityID
144144
145- ` EntityID ` クラスは, 全てのエージェント/オブジェクトを一意に識別するためのID(識別子)を表すクラスです. RRSではエージェントとオブジェクトをまとめて, エンティティと呼んでいます.
145+ ` EntityID ` クラスは、 全てのエージェント/オブジェクトを一意に識別するためのID(識別子)を表すクラスです。 RRSではエージェントとオブジェクトをまとめて、 エンティティと呼んでいます。
146146
147147### Civilian
148148
149- ` Civilian ` クラスは, 市民を表すクラスです. このクラスからは, エージェントの位置や負傷の進行状況を取得することができます.
149+ ` Civilian ` クラスは、 市民を表すクラスです。 このクラスからは、 エージェントの位置や負傷の進行状況を取得することができます。
150150
151151- ` entity ` が市民であるかどうかを判定する
152152
@@ -178,9 +178,9 @@ if buriedness is None or buriedness <= 0:
178178
179179### WorldInfo
180180
181- ` WorldInfo ` クラスは, エージェントが把握している情報とそれに関する操作をおこなうメソッドをもったクラスです. エージェントはこのクラスのインスタンスを通して, 他のエージェントやオブジェクトの状態を確認します.
181+ ` WorldInfo ` クラスは、 エージェントが把握している情報とそれに関する操作をおこなうメソッドをもったクラスです。 エージェントはこのクラスのインスタンスを通して、 他のエージェントやオブジェクトの状態を確認します。
182182
183- モジュール内では, ` WorldInfo ` クラスのインスタンスを ` self._world_info ` として保持しています.
183+ モジュール内では、 ` WorldInfo ` クラスのインスタンスを ` self._world_info ` として保持しています。
184184
185185- エンティティIDからエンティティを取得する
186186
@@ -204,9 +204,9 @@ self._world_info.get_distance(me, civilian.get_id())
204204
205205### AgentInfo
206206
207- ` AgentInfo ` クラスは, エージェント自身の情報とそれに関する操作をおこなうメソッドをもったクラスです. エージェントはこのクラスのインスタンスを通して, エージェント自身の状態を取得します.
207+ ` AgentInfo ` クラスは、 エージェント自身の情報とそれに関する操作をおこなうメソッドをもったクラスです。 エージェントはこのクラスのインスタンスを通して、 エージェント自身の状態を取得します。
208208
209- モジュール内では, ` AgentInfo ` クラスのインスタンスを ` self._agent_info ` として保持しています.
209+ モジュール内では、 ` AgentInfo ` クラスのインスタンスを ` self._agent_info ` として保持しています。
210210
211211- 自分自身のエンティティIDを取得する
212212
@@ -218,7 +218,7 @@ self._agent_info.get_entity_id()
218218
219219## ` Human Detector ` モジュールの実装
220220
221- ` Human Detector ` モジュールの実装を行います.
221+ ` Human Detector ` モジュールの実装を行います。
222222以下のコードを` fire_brigade_human_detector.py ` に記述してください。
223223
224224``` python
@@ -305,11 +305,11 @@ class SampleHumanDetector(HumanDetector):
305305 return self ._result
306306```
307307
308- シミュレーションサーバーを起動し, エージェントを実行してみましょう.
308+ シミュレーションサーバーを起動し、 エージェントを実行してみましょう。
309309
310310``` bash
311311cd WORKING_DIR/< your_team_name>
312312python main.py
313313```
314314
315- 埋没している市民を消防隊エージェントが救出できるようになっていれば成功です.
315+ 埋没している市民を消防隊エージェントが救出できるようになっていれば成功です。
0 commit comments