From 0b917706699b8ad1e86f381a1ff5b72922f7e3bd Mon Sep 17 00:00:00 2001 From: shima004 Date: Sat, 30 Nov 2024 01:23:28 +0900 Subject: [PATCH] fix: Update documentation for clustering and search modules, including terminal commands and agent team name references --- docs/source/download/cluster_plot.zip | Bin 0 -> 11999 bytes docs/source/hands-on/clustering.md | 57 +++++++++++++++++- docs/source/hands-on/search.md | 38 ++++++++---- docs/source/images/cluster.png | Bin 0 -> 64512 bytes .../source/install/environment/environment.md | 6 ++ docs/source/tutorial/agent/agent.md | 7 ++- docs/source/tutorial/agent/agent_control.md | 38 +++++++++--- docs/source/tutorial/config/config.md | 2 +- 8 files changed, 126 insertions(+), 22 deletions(-) create mode 100644 docs/source/download/cluster_plot.zip create mode 100644 docs/source/images/cluster.png diff --git a/docs/source/download/cluster_plot.zip b/docs/source/download/cluster_plot.zip new file mode 100644 index 0000000000000000000000000000000000000000..122b555b4497dde4ce0d5e33bbe4e20006e84846 GIT binary patch literal 11999 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.module.algorithm.k_means_pp_clustering.KMeansPPClustering ``` -シミュレーションサーバーを起動して、エージェントを起動してください。エージェントが起動すると、標準出力にクラスタリング結果が表示されます。 +ターミナルを2つ起動します。 + +片方のターミナルを開き、シミュレーションサーバーを以下のコマンドで起動します: + +```bash +# Terminal A +cd WORKING_DIR/rcrs-server/scripts +./start-comprun.sh -m ../maps/tutorial_ambulance_team_only/map -c ../maps/tutorial_ambulance_team_only/config +``` + +その後、別のターミナルを開き、エージェントを起動します: + +```bash +# Terminal B +cd WORKING_DIR/ +python main.py +``` + +エージェントが起動すると、標準出力にクラスタリング結果が表示されます。 + +```bash +[info ] Clustered entities: [[257, 259, 262, 263, 270, 278, 280, 297, 336, 913, 914, 915, 916, 917, 918, 919, 933, 941, 942, 943, 944, 945, 946, 947, 974, 250, 253], [349, 896, 899, 902, 934, 960, 968, 969, 970, 971, 248, 251], [258, 266, 268, 269, 274, 275, 279, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 932, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 975, 976, 254, 255], [256, 271, 273, 281, 296, 298, 314, 330, 903, 904, 905, 910, 911, 912, 935, 936, 937, 938, 939, 940, 247, 249]] [KMeansPPClustering] +[info ] Agent cluster indices: [([89544, 19925], 1), ([69989, 120063], 0), ([130029, 50380], 2), ([29898, 59056], 3)] [KMeansPPClustering] +``` + +このままだと、クラスタリング結果がわかりにくいので、クラスタリング結果を地図上に表示してみましょう。 + +{download}`クラスターの可視化用スクリプト <./../download/cluster_plot.zip>`をダウンロードして解凍し、`main.py`の以下の部分に + +```python +# クラスタリング結果 +clusters = [] +``` + +出力の`Clustered entities: `の後ろの部分の配列をコピーして貼り付けてください。 + +例 + +```python +# クラスタリング結果 +clusters = [[257, 259, 262, 263, 270, 278, 280, 297, 336, 913, 914, 915, 916, 917, 918, 919, 933, 941, 942, 943, 944, 945, 946, 947, 974, 250, 253], [349, 896, 899, 902, 934, 960, 968, 969, 970, 971, 248, 251], [258, 266, 268, 269, 274, 275, 279, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 932, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 975, 976, 254, 255], [256, 271, 273, 281, 296, 298, 314, 330, 903, 904, 905, 910, 911, 912, 935, 936, 937, 938, 939, 940, 247, 249]] +``` + +貼り付けたら、以下のコマンドを実行してください。 + +```bash +python main.py +``` + +以下のような画像が出力されます。 + +![クラスタリングの画像](./../images/cluster.png) diff --git a/docs/source/hands-on/search.md b/docs/source/hands-on/search.md index 8b6ac94..293ef8b 100644 --- a/docs/source/hands-on/search.md +++ b/docs/source/hands-on/search.md @@ -70,13 +70,13 @@ class KMeansPPSearch(Search): ```yaml DefaultTacticsAmbulanceTeam: - Search: src..module.complex.k_means_pp_search.KMeansPPSearch + Search: src..module.complex.k_means_pp_search.KMeansPPSearch DefaultTacticsFireBrigade: - Search: src..module.complex.k_means_pp_search.KMeansPPSearch + Search: src..module.complex.k_means_pp_search.KMeansPPSearch DefaultTacticsPoliceForce: - Search: src..module.complex.k_means_pp_search.KMeansPPSearch + Search: src..module.complex.k_means_pp_search.KMeansPPSearch ``` ## モジュールの実装 @@ -87,7 +87,7 @@ DefaultTacticsPoliceForce: ```yaml KMeansPPSearch: - Clustering: src..module.algorithm.k_means_pp_clustering.KMeansPPClustering + Clustering: src..module.algorithm.k_means_pp_clustering.KMeansPPClustering ``` 次に、`KMeansPPSearch` モジュールで `KMeansPPClustering` モジュールを呼び出せるようにします。 @@ -146,7 +146,23 @@ class KMeansPPSearch(Search): 以上で、`KMeansPPClustering` モジュールを用いた `KMeansPPSearch` モジュールの実装が完了しました。 -実行すると、各エージェントが担当地域内からランダムに探索対象を選択し、探索を行います。 +ターミナルを2つ起動します。 + +片方のターミナルを開き、シミュレーションサーバーを以下のコマンドで起動します: + +```bash +# Terminal A +cd WORKING_DIR/rcrs-server/scripts +./start-comprun.sh -m ../maps/tutorial_ambulance_team_only/map -c ../maps/tutorial_ambulance_team_only/config +``` + +その後、別のターミナルを開き、エージェントを起動します: + +```bash +# Terminal B +cd WORKING_DIR/ +python main.py +``` ## モジュールの改善 @@ -172,13 +188,13 @@ class KMeansPPSearch(Search): ### 探索対象がステップごとに変わってしまう問題 ```{admonition} 方針のヒント -:class: tip dropdown +:class: hint dropdown 一度選択した探索対象に到達するまで、探索対象を変更しないようにする ``` ```{admonition} プログラム例 -:class: tip dropdown +:class: hint dropdown ````python def calculate(self) -> Search: @@ -212,13 +228,13 @@ class KMeansPPSearch(Search): ### すでに探索したエンティティを再度探索対象として選択してしまう問題 ```{admonition} 方針のヒント -:class: tip dropdown +:class: hint dropdown すでに探索したエンティティを何かしらの方法で記録し、再度探索対象として選択しないようにする ``` ```{admonition} プログラム例 -:class: tip dropdown +:class: hint dropdown ````python def __init__( @@ -287,13 +303,13 @@ class KMeansPPSearch(Search): ### 近くに未探索のエンティティがあるのに、遠くのエンティティを探索対象として選択してしまう ```{admonition} 方針のヒント -:class: tip dropdown +:class: hint dropdown エンティティ間の距離を計算し、もっとも近いエンティティを探索対象として選択する ``` ```{admonition} プログラム例 -:class: tip dropdown +:class: hint dropdown ````python def calculate(self) -> Search: diff --git a/docs/source/images/cluster.png b/docs/source/images/cluster.png new file mode 100644 index 0000000000000000000000000000000000000000..4e0b9fb886e3f98080d8afa11f04e09e66051ba4 GIT binary patch literal 64512 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 として参照します。 +``` + 入力後、下記のようなエージェントのテンプレートがカレントディレクトリに作成されます。 ```bash @@ -55,7 +60,7 @@ cd WORKING_DIR/rcrs-server/scripts ```bash # Terminal B -cd WORKING_DIR/my-agent +cd WORKING_DIR/ python main.py ``` diff --git a/docs/source/tutorial/agent/agent_control.md b/docs/source/tutorial/agent/agent_control.md index afc3457..cc4c6f0 100644 --- a/docs/source/tutorial/agent/agent_control.md +++ b/docs/source/tutorial/agent/agent_control.md @@ -107,9 +107,20 @@ DefaultTacticsFireBrigade: HumanDetector: src..module.complex.fire_brigade_human_detector.FireBrigadeHumanDetector ``` -シミュレーションサーバーを起動し、エージェントを実行してみましょう。 +ターミナルを2つ起動します。 + +片方のターミナルを開き、シミュレーションサーバーを以下のコマンドで起動します: + +```bash +# Terminal A +cd WORKING_DIR/rcrs-server/scripts +./start-comprun.sh -m ../maps/tutorial_fire_brigade_only/map -c ../maps/tutorial_fire_brigade_only/config +``` + +その後、別のターミナルを開き、エージェントを起動します: ```bash +# Terminal B cd WORKING_DIR/ python main.py ``` @@ -151,13 +162,13 @@ RRS上のエンティティは下図のように `Entity` を継承したクラ - `entity` が市民であるかどうかを判定する ```python -isinstance(entity, Civilian) +is_civilian: bool = isinstance(entity, Civilian) ``` - エンティティIDを取得する ```python -entity.get_id() +entity_id: EntityID = entity.get_id() ``` - 市民が生きているかどうかを判定する @@ -185,19 +196,19 @@ if buriedness is None or buriedness <= 0: - エンティティIDからエンティティを取得する ```python -self._world_info.get_entity(entity_id) +entity: Entity = self._world_info.get_entity(entity_id) ``` - 指定したクラスのエンティティを全て取得する ```python -self._world_info.get_entities_by_type([Building, Road]) +entities: list[Entity] = self._world_info.get_entities_by_type([Building, Road]) ``` - エージェントの位置から指定したエンティティまでの距離を取得する ```python -self._world_info.get_distance(me, civilian.get_id()) +distance: float = self._world_info.get_distance(me, civilian.get_id()) ``` [詳細はこちら](../../adf_core_python.core.agent.info.rst) @@ -211,7 +222,7 @@ self._world_info.get_distance(me, civilian.get_id()) - 自分自身のエンティティIDを取得する ```python -self._agent_info.get_entity_id() +my_entity_id: EntityID = self._agent_info.get_entity_id() ``` [詳細はこちら](../../adf_core_python.core.agent.info.rst) @@ -305,9 +316,20 @@ class SampleHumanDetector(HumanDetector): return self._result ``` -シミュレーションサーバーを起動し、エージェントを実行してみましょう。 +ターミナルを2つ起動します。 + +片方のターミナルを開き、シミュレーションサーバーを以下のコマンドで起動します: + +```bash +# Terminal A +cd WORKING_DIR/rcrs-server/scripts +./start-comprun.sh -m ../maps/tutorial_fire_brigade_only/map -c ../maps/tutorial_fire_brigade_only/config +``` + +その後、別のターミナルを開き、エージェントを起動します: ```bash +# Terminal B cd WORKING_DIR/ python main.py ``` diff --git a/docs/source/tutorial/config/config.md b/docs/source/tutorial/config/config.md index 3257086..5f951c1 100644 --- a/docs/source/tutorial/config/config.md +++ b/docs/source/tutorial/config/config.md @@ -4,7 +4,7 @@ ```bash . -└── +└── └── config ├── development.json ├── launcher.yaml