From 7a4a475ff146c25f53a07dd3588e36c2bcde034b Mon Sep 17 00:00:00 2001 From: shima004 Date: Wed, 4 Dec 2024 15:55:19 +0900 Subject: [PATCH 1/7] WIP --- adf_core_python/core/agent/agent.py | 7 +- .../core/agent/precompute/precompute_data.py | 72 ++++++++++++++++++- .../launcher/connect/errors/agent_error.py | 2 + .../launcher/connect/errors/server_error.py | 2 + 4 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 adf_core_python/core/launcher/connect/errors/agent_error.py create mode 100644 adf_core_python/core/launcher/connect/errors/server_error.py diff --git a/adf_core_python/core/agent/agent.py b/adf_core_python/core/agent/agent.py index 55506e1..fbf6c11 100644 --- a/adf_core_python/core/agent/agent.py +++ b/adf_core_python/core/agent/agent.py @@ -112,9 +112,14 @@ def __init__( self.is_precompute = is_precompute if is_precompute: - # PrecomputeData.remove_date(data_storage_name) self.mode = Mode.PRECOMPUTATION + try: + precompute_data = PrecomputeData(data_storage_name) + precompute_data.remove_precompute_data() + except Exception as _: + pass + self._module_config = module_config self._develop_data = develop_data self._precompute_data = PrecomputeData(data_storage_name) diff --git a/adf_core_python/core/agent/precompute/precompute_data.py b/adf_core_python/core/agent/precompute/precompute_data.py index ba5840f..a80ce96 100644 --- a/adf_core_python/core/agent/precompute/precompute_data.py +++ b/adf_core_python/core/agent/precompute/precompute_data.py @@ -1,4 +1,74 @@ -# TODO: Implement the PrecomputeData class +import json +import os + +ENCODE = "utf-8" + + class PrecomputeData: def __init__(self, file_path: str) -> None: + """ + Initialize the PrecomputeData object. + + Parameters + ---------- + file_path : str + The path to the precompute data file. + + Raises + ------ + Exception + """ + self._precompute_data = self.read_json_data() self._file_path = file_path + + def read_json_data(self) -> dict: + """ + Read the precompute data from the file. + + Returns + ------- + dict + The precompute data. + + Raises + ------ + Exception + """ + + with open(self._file_path, "r", encoding=ENCODE) as file: + return json.load(file) + + def write_json_data(self, data: dict) -> None: + """ + Write the precompute data to the file. + + Parameters + ---------- + data : dict + The data to write. + + Raises + ------ + Exception + """ + + with open(self._file_path, "w", encoding=ENCODE) as file: + json.dump(data, file, indent=4) + + def remove_precompute_data(self) -> None: + """ + Remove the precompute data file. + """ + if os.path.exists(self._file_path): + os.remove(self._file_path) + + def get_precompute_data(self) -> dict: + """ + Get the precompute data. + + Returns + ------- + dict + The precompute data. + """ + return self._precompute_data diff --git a/adf_core_python/core/launcher/connect/errors/agent_error.py b/adf_core_python/core/launcher/connect/errors/agent_error.py new file mode 100644 index 0000000..8725dba --- /dev/null +++ b/adf_core_python/core/launcher/connect/errors/agent_error.py @@ -0,0 +1,2 @@ +class AgentError(Exception): + pass diff --git a/adf_core_python/core/launcher/connect/errors/server_error.py b/adf_core_python/core/launcher/connect/errors/server_error.py new file mode 100644 index 0000000..8c3951c --- /dev/null +++ b/adf_core_python/core/launcher/connect/errors/server_error.py @@ -0,0 +1,2 @@ +class ServerError(Exception): + pass From c6e13d0d40c9fa1046855e2ecbd50087165032cb Mon Sep 17 00:00:00 2001 From: shima004 Date: Wed, 11 Dec 2024 16:07:37 +0900 Subject: [PATCH 2/7] fix: Remove unused AgentError and ServerError classes to streamline error handling --- adf_core_python/core/launcher/connect/errors/agent_error.py | 2 -- adf_core_python/core/launcher/connect/errors/server_error.py | 2 -- 2 files changed, 4 deletions(-) delete mode 100644 adf_core_python/core/launcher/connect/errors/agent_error.py delete mode 100644 adf_core_python/core/launcher/connect/errors/server_error.py diff --git a/adf_core_python/core/launcher/connect/errors/agent_error.py b/adf_core_python/core/launcher/connect/errors/agent_error.py deleted file mode 100644 index 8725dba..0000000 --- a/adf_core_python/core/launcher/connect/errors/agent_error.py +++ /dev/null @@ -1,2 +0,0 @@ -class AgentError(Exception): - pass diff --git a/adf_core_python/core/launcher/connect/errors/server_error.py b/adf_core_python/core/launcher/connect/errors/server_error.py deleted file mode 100644 index 8c3951c..0000000 --- a/adf_core_python/core/launcher/connect/errors/server_error.py +++ /dev/null @@ -1,2 +0,0 @@ -class ServerError(Exception): - pass From a0044b4f8c386f483cf44a62e8bb608a23cfc2b3 Mon Sep 17 00:00:00 2001 From: shima004 Date: Wed, 11 Dec 2024 17:24:31 +0900 Subject: [PATCH 3/7] feat: Add precompute configuration and implement precompute method in agent classes --- .../module/complex/sample_road_detector.py | 17 ++++--- adf_core_python/core/agent/agent.py | 14 +++--- adf_core_python/core/agent/office/office.py | 20 +++++++- adf_core_python/core/agent/platoon/platoon.py | 20 +++++++- .../core/agent/precompute/precompute_data.py | 33 ++++++------- .../core/component/tactics/tactics_center.py | 13 ++++++ adf_core_python/core/launcher/config_key.py | 1 + .../connect/connector_ambulance_center.py | 6 ++- .../connect/connector_ambulance_team.py | 6 ++- .../connect/connector_fire_brigade.py | 4 +- .../connect/connector_fire_station.py | 4 +- .../connect/connector_police_force.py | 4 +- .../connect/connector_police_office.py | 4 +- .../action/default_extend_action_clear.py | 20 +++----- .../action/default_extend_action_move.py | 20 +++----- .../action/default_extend_action_rescue.py | 20 +++----- .../action/default_extend_action_transport.py | 20 +++----- .../module/algorithm/k_means_clustering.py | 30 ++++++++++++ .../module/complex/default_road_detector.py | 17 ++++--- .../default_tactics_ambulance_center.py | 28 +++++++---- .../tactics/default_tactics_ambulance_team.py | 46 +++++++++---------- .../tactics/default_tactics_fire_brigade.py | 46 +++++++++---------- .../tactics/default_tactics_fire_station.py | 28 +++++++---- .../tactics/default_tactics_police_force.py | 46 +++++++++---------- .../tactics/default_tactics_police_office.py | 28 +++++++---- config/launcher.yaml | 2 + 26 files changed, 292 insertions(+), 205 deletions(-) diff --git a/adf_core_python/cli/template/src/team_name/module/complex/sample_road_detector.py b/adf_core_python/cli/template/src/team_name/module/complex/sample_road_detector.py index 3dd95d8..fcb29a9 100644 --- a/adf_core_python/cli/template/src/team_name/module/complex/sample_road_detector.py +++ b/adf_core_python/cli/template/src/team_name/module/complex/sample_road_detector.py @@ -31,15 +31,14 @@ def __init__( super().__init__( agent_info, world_info, scenario_info, module_manager, develop_data ) - match scenario_info.get_mode(): - case Mode.NON_PRECOMPUTE: - self._path_planning: PathPlanning = cast( - PathPlanning, - module_manager.get_module( - "SampleRoadDetector.PathPlanning", - "adf_core_python.implement.module.algorithm.a_star_path_planning.AStarPathPlanning", - ), - ) + + self._path_planning: PathPlanning = cast( + PathPlanning, + module_manager.get_module( + "SampleRoadDetector.PathPlanning", + "adf_core_python.implement.module.algorithm.a_star_path_planning.AStarPathPlanning", + ), + ) self.register_sub_module(self._path_planning) self._result = None diff --git a/adf_core_python/core/agent/agent.py b/adf_core_python/core/agent/agent.py index fbf6c11..7cfef70 100644 --- a/adf_core_python/core/agent/agent.py +++ b/adf_core_python/core/agent/agent.py @@ -115,14 +115,12 @@ def __init__( self.mode = Mode.PRECOMPUTATION try: - precompute_data = PrecomputeData(data_storage_name) - precompute_data.remove_precompute_data() + self._precompute_data = PrecomputeData(data_storage_name) except Exception as _: pass self._module_config = module_config self._develop_data = develop_data - self._precompute_data = PrecomputeData(data_storage_name) self._message_manager: MessageManager = MessageManager() self._communication_module: CommunicationModule = StandardCommunicationModule() @@ -136,11 +134,10 @@ def post_connect(self) -> None: if self.is_precompute: self._mode = Mode.PRECOMPUTATION else: - # if self._precompute_data.is_ready(): - # self._mode = Mode.PRECOMPUTED - # else: - # self._mode = Mode.NON_PRECOMPUTE - self._mode = Mode.NON_PRECOMPUTE + if self._precompute_data.is_available(): + self._mode = Mode.PRECOMPUTED + else: + self._mode = Mode.NON_PRECOMPUTE self.config.set_value(ConfigKey.KEY_DEBUG_FLAG, self.is_debug) self.config.set_value( @@ -157,6 +154,7 @@ def post_connect(self) -> None: self._agent_info, ) + self.logger.info("Agent running in %s mode", self._mode) self.logger.debug(f"agent_config: {self.config}") def update_step_info( diff --git a/adf_core_python/core/agent/office/office.py b/adf_core_python/core/agent/office/office.py index 09e97bd..98911f8 100644 --- a/adf_core_python/core/agent/office/office.py +++ b/adf_core_python/core/agent/office/office.py @@ -82,9 +82,25 @@ def post_connect(self) -> None: match self._scenario_info.get_mode(): case Mode.PRECOMPUTATION: - pass + self._tactics_center.precompute( + self._agent_info, + self._world_info, + self._scenario_info, + self._module_manager, + self._precompute_data, + self._message_manager, + self._develop_data, + ) case Mode.PRECOMPUTED: - pass + self._tactics_center.resume( + self._agent_info, + self._world_info, + self._scenario_info, + self._module_manager, + self._precompute_data, + self._message_manager, + self._develop_data, + ) case Mode.NON_PRECOMPUTE: self._tactics_center.prepare( self._agent_info, diff --git a/adf_core_python/core/agent/platoon/platoon.py b/adf_core_python/core/agent/platoon/platoon.py index c5ff9f8..8a66099 100644 --- a/adf_core_python/core/agent/platoon/platoon.py +++ b/adf_core_python/core/agent/platoon/platoon.py @@ -83,9 +83,25 @@ def post_connect(self) -> None: match self._scenario_info.get_mode(): case Mode.PRECOMPUTATION: - pass + self._tactics_agent.precompute( + self._agent_info, + self._world_info, + self._scenario_info, + self._module_manager, + self._precompute_data, + self._message_manager, + self._develop_data, + ) case Mode.PRECOMPUTED: - pass + self._tactics_agent.resume( + self._agent_info, + self._world_info, + self._scenario_info, + self._module_manager, + self._precompute_data, + self._message_manager, + self._develop_data, + ) case Mode.NON_PRECOMPUTE: self._tactics_agent.prepare( self._agent_info, diff --git a/adf_core_python/core/agent/precompute/precompute_data.py b/adf_core_python/core/agent/precompute/precompute_data.py index a80ce96..41b2029 100644 --- a/adf_core_python/core/agent/precompute/precompute_data.py +++ b/adf_core_python/core/agent/precompute/precompute_data.py @@ -5,23 +5,22 @@ class PrecomputeData: - def __init__(self, file_path: str) -> None: + def __init__(self, dir_path: str) -> None: """ Initialize the PrecomputeData object. Parameters ---------- - file_path : str - The path to the precompute data file. + dir_path : str + The directory path to save the precompute data. Raises ------ Exception """ - self._precompute_data = self.read_json_data() - self._file_path = file_path + self._dir_path = dir_path - def read_json_data(self) -> dict: + def read_json_data(self, module_name: str) -> dict: """ Read the precompute data from the file. @@ -35,10 +34,10 @@ def read_json_data(self) -> dict: Exception """ - with open(self._file_path, "r", encoding=ENCODE) as file: + with open(f"{self._dir_path}/{module_name}.json", "r", encoding=ENCODE) as file: return json.load(file) - def write_json_data(self, data: dict) -> None: + def write_json_data(self, data: dict, module_name: str) -> None: """ Write the precompute data to the file. @@ -51,24 +50,26 @@ def write_json_data(self, data: dict) -> None: ------ Exception """ + if not os.path.exists(self._dir_path): + os.makedirs(self._dir_path) - with open(self._file_path, "w", encoding=ENCODE) as file: + with open(f"{self._dir_path}/{module_name}.json", "w", encoding=ENCODE) as file: json.dump(data, file, indent=4) def remove_precompute_data(self) -> None: """ Remove the precompute data file. """ - if os.path.exists(self._file_path): - os.remove(self._file_path) + if os.path.exists(self._dir_path): + os.remove(self._dir_path) - def get_precompute_data(self) -> dict: + def is_available(self) -> bool: """ - Get the precompute data. + Check if the precompute data is available. Returns ------- - dict - The precompute data. + bool + True if the precompute data is available, False otherwise. """ - return self._precompute_data + return os.path.exists(self._dir_path) diff --git a/adf_core_python/core/component/tactics/tactics_center.py b/adf_core_python/core/component/tactics/tactics_center.py index ea95edf..2469cc6 100644 --- a/adf_core_python/core/component/tactics/tactics_center.py +++ b/adf_core_python/core/component/tactics/tactics_center.py @@ -46,6 +46,19 @@ def resume( ) -> None: raise NotImplementedError + @abstractmethod + def precompute( + self, + agent_info: AgentInfo, + world_info: WorldInfo, + scenario_info: ScenarioInfo, + module_manager: ModuleManager, + precompute_data: PrecomputeData, + message_manager: MessageManager, + develop_data: DevelopData, + ) -> None: + raise NotImplementedError + @abstractmethod def prepare( self, diff --git a/adf_core_python/core/launcher/config_key.py b/adf_core_python/core/launcher/config_key.py index d32afb2..591876e 100644 --- a/adf_core_python/core/launcher/config_key.py +++ b/adf_core_python/core/launcher/config_key.py @@ -23,3 +23,4 @@ class ConfigKey: KEY_FIRE_STATION_COUNT: Final[str] = "adf.team.office.fire.count" KEY_POLICE_OFFICE_COUNT: Final[str] = "adf.team.office.police.count" # adf-core-python + KEY_PRECOMPUTE_DATA_DIR: Final[str] = "adf.agent.precompute.dir_name" diff --git a/adf_core_python/core/launcher/connect/connector_ambulance_center.py b/adf_core_python/core/launcher/connect/connector_ambulance_center.py index 33e736e..132a985 100644 --- a/adf_core_python/core/launcher/connect/connector_ambulance_center.py +++ b/adf_core_python/core/launcher/connect/connector_ambulance_center.py @@ -53,8 +53,10 @@ def connect( ), ) - request_id: int = component_launcher.generate_request_id() + precompute_data_dir: str = f"{config.get_value(ConfigKey.KEY_PRECOMPUTE_DATA_DIR, 'precompute')}/ambulance_center" + finish_post_connect_event = threading.Event() + request_id: int = component_launcher.generate_request_id() thread = threading.Thread( target=component_launcher.connect, args=( @@ -63,7 +65,7 @@ def connect( "ambulance_center", config.get_value(ConfigKey.KEY_PRECOMPUTE, False), config.get_value(ConfigKey.KEY_DEBUG_FLAG, False), - "test", + precompute_data_dir, module_config, develop_data, finish_post_connect_event, diff --git a/adf_core_python/core/launcher/connect/connector_ambulance_team.py b/adf_core_python/core/launcher/connect/connector_ambulance_team.py index 44620e8..d2aa8c0 100644 --- a/adf_core_python/core/launcher/connect/connector_ambulance_team.py +++ b/adf_core_python/core/launcher/connect/connector_ambulance_team.py @@ -53,8 +53,10 @@ def connect( ), ) - request_id: int = component_launcher.generate_request_id() + precompute_data_dir: str = f"{config.get_value(ConfigKey.KEY_PRECOMPUTE_DATA_DIR, 'precompute')}/ambulance_team" + finish_post_connect_event = threading.Event() + request_id: int = component_launcher.generate_request_id() thread = threading.Thread( target=component_launcher.connect, args=( @@ -63,7 +65,7 @@ def connect( "ambulance_team", config.get_value(ConfigKey.KEY_PRECOMPUTE, False), config.get_value(ConfigKey.KEY_DEBUG_FLAG, False), - "test", + precompute_data_dir, module_config, develop_data, finish_post_connect_event, diff --git a/adf_core_python/core/launcher/connect/connector_fire_brigade.py b/adf_core_python/core/launcher/connect/connector_fire_brigade.py index 2f5ecf5..747f503 100644 --- a/adf_core_python/core/launcher/connect/connector_fire_brigade.py +++ b/adf_core_python/core/launcher/connect/connector_fire_brigade.py @@ -51,6 +51,8 @@ def connect( ), ) + precompute_data_dir: str = f"{config.get_value(ConfigKey.KEY_PRECOMPUTE_DATA_DIR, 'precompute')}/fire_brigade" + request_id: int = component_launcher.generate_request_id() finish_post_connect_event = threading.Event() thread = threading.Thread( @@ -61,7 +63,7 @@ def connect( "fire_brigade", config.get_value(ConfigKey.KEY_PRECOMPUTE, False), config.get_value(ConfigKey.KEY_DEBUG_FLAG, False), - "test", + precompute_data_dir, module_config, develop_data, finish_post_connect_event, diff --git a/adf_core_python/core/launcher/connect/connector_fire_station.py b/adf_core_python/core/launcher/connect/connector_fire_station.py index 7efec93..8f099ee 100644 --- a/adf_core_python/core/launcher/connect/connector_fire_station.py +++ b/adf_core_python/core/launcher/connect/connector_fire_station.py @@ -51,6 +51,8 @@ def connect( ), ) + precompute_data_dir: str = f"{config.get_value(ConfigKey.KEY_PRECOMPUTE_DATA_DIR, 'precompute')}/fire_station" + request_id: int = component_launcher.generate_request_id() finish_post_connect_event = threading.Event() thread = threading.Thread( @@ -61,7 +63,7 @@ def connect( "fire_station", config.get_value(ConfigKey.KEY_PRECOMPUTE, False), config.get_value(ConfigKey.KEY_DEBUG_FLAG, False), - "test", + precompute_data_dir, module_config, develop_data, finish_post_connect_event, diff --git a/adf_core_python/core/launcher/connect/connector_police_force.py b/adf_core_python/core/launcher/connect/connector_police_force.py index bd29160..e17fe76 100644 --- a/adf_core_python/core/launcher/connect/connector_police_force.py +++ b/adf_core_python/core/launcher/connect/connector_police_force.py @@ -51,6 +51,8 @@ def connect( ), ) + precompute_data_dir: str = f"{config.get_value(ConfigKey.KEY_PRECOMPUTE_DATA_DIR, 'precompute')}/police_force" + request_id: int = component_launcher.generate_request_id() finish_post_connect_event = threading.Event() thread = threading.Thread( @@ -61,7 +63,7 @@ def connect( "police_force", config.get_value(ConfigKey.KEY_PRECOMPUTE, False), config.get_value(ConfigKey.KEY_DEBUG_FLAG, False), - "test", + precompute_data_dir, module_config, develop_data, finish_post_connect_event, diff --git a/adf_core_python/core/launcher/connect/connector_police_office.py b/adf_core_python/core/launcher/connect/connector_police_office.py index 69fd76b..52c3aac 100644 --- a/adf_core_python/core/launcher/connect/connector_police_office.py +++ b/adf_core_python/core/launcher/connect/connector_police_office.py @@ -53,6 +53,8 @@ def connect( ), ) + precompute_data_dir: str = f"{config.get_value(ConfigKey.KEY_PRECOMPUTE_DATA_DIR, 'precompute')}/police_office" + request_id: int = component_launcher.generate_request_id() finish_post_connect_event = threading.Event() thread = threading.Thread( @@ -63,7 +65,7 @@ def connect( "police_office", config.get_value(ConfigKey.KEY_PRECOMPUTE, False), config.get_value(ConfigKey.KEY_DEBUG_FLAG, False), - "test", + precompute_data_dir, module_config, develop_data, finish_post_connect_event, diff --git a/adf_core_python/implement/action/default_extend_action_clear.py b/adf_core_python/implement/action/default_extend_action_clear.py index 39aa859..53c2ebc 100644 --- a/adf_core_python/implement/action/default_extend_action_clear.py +++ b/adf_core_python/implement/action/default_extend_action_clear.py @@ -63,19 +63,13 @@ def __init__( self._old_clear_y = 0 self.count = 0 - match self.scenario_info.get_mode(): - case Mode.NON_PRECOMPUTE: - self._path_planning = cast( - PathPlanning, - self.module_manager.get_module( - "DefaultExtendActionClear.PathPlanning", - "adf_core_python.implement.module.algorithm.a_star_path_planning.AStarPathPlanning", - ), - ) - case Mode.PRECOMPUTATION: - pass - case Mode.PRECOMPUTED: - pass + self._path_planning = cast( + PathPlanning, + self.module_manager.get_module( + "DefaultExtendActionClear.PathPlanning", + "adf_core_python.implement.module.algorithm.a_star_path_planning.AStarPathPlanning", + ), + ) def precompute(self, precompute_data: PrecomputeData) -> ExtendAction: super().precompute(precompute_data) diff --git a/adf_core_python/implement/action/default_extend_action_move.py b/adf_core_python/implement/action/default_extend_action_move.py index 6614ffd..94f9ade 100644 --- a/adf_core_python/implement/action/default_extend_action_move.py +++ b/adf_core_python/implement/action/default_extend_action_move.py @@ -33,19 +33,13 @@ def __init__( self._target_entity_id: Optional[EntityID] = None self._threshold_to_rest: int = develop_data.get_value("threshold_to_rest", 100) - match self.scenario_info.get_mode(): - case Mode.NON_PRECOMPUTE: - self._path_planning: PathPlanning = cast( - PathPlanning, - self.module_manager.get_module( - "DefaultExtendActionMove.PathPlanning", - "adf_core_python.implement.module.algorithm.a_star_path_planning.AStarPathPlanning", - ), - ) - case Mode.PRECOMPUTATION: - pass - case Mode.PRECOMPUTED: - pass + self._path_planning: PathPlanning = cast( + PathPlanning, + self.module_manager.get_module( + "DefaultExtendActionMove.PathPlanning", + "adf_core_python.implement.module.algorithm.a_star_path_planning.AStarPathPlanning", + ), + ) def precompute(self, precompute_data: PrecomputeData) -> ExtendAction: super().precompute(precompute_data) diff --git a/adf_core_python/implement/action/default_extend_action_rescue.py b/adf_core_python/implement/action/default_extend_action_rescue.py index 640d088..2291136 100644 --- a/adf_core_python/implement/action/default_extend_action_rescue.py +++ b/adf_core_python/implement/action/default_extend_action_rescue.py @@ -42,19 +42,13 @@ def __init__( "adf_core_python.implement.action.DefaultExtendActionRescue.rest", 100 ) - match self.scenario_info.get_mode(): - case Mode.NON_PRECOMPUTE: - self._path_planning = cast( - PathPlanning, - self.module_manager.get_module( - "DefaultExtendActionRescue.PathPlanning", - "adf_core_python.implement.module.algorithm.a_star_path_planning.AStarPathPlanning", - ), - ) - case Mode.PRECOMPUTATION: - pass - case Mode.PRECOMPUTED: - pass + self._path_planning = cast( + PathPlanning, + self.module_manager.get_module( + "DefaultExtendActionRescue.PathPlanning", + "adf_core_python.implement.module.algorithm.a_star_path_planning.AStarPathPlanning", + ), + ) def precompute(self, precompute_data: PrecomputeData) -> ExtendAction: super().precompute(precompute_data) diff --git a/adf_core_python/implement/action/default_extend_action_transport.py b/adf_core_python/implement/action/default_extend_action_transport.py index 1ee2fd4..3475192 100644 --- a/adf_core_python/implement/action/default_extend_action_transport.py +++ b/adf_core_python/implement/action/default_extend_action_transport.py @@ -44,19 +44,13 @@ def __init__( self.agent_info, ) - match self.scenario_info.get_mode(): - case Mode.NON_PRECOMPUTE: - self._path_planning: PathPlanning = cast( - PathPlanning, - self.module_manager.get_module( - "DefaultExtendActionMove.PathPlanning", - "adf_core_python.implement.module.algorithm.a_star_path_planning.AStarPathPlanning", - ), - ) - case Mode.PRECOMPUTATION: - pass - case Mode.PRECOMPUTED: - pass + self._path_planning: PathPlanning = cast( + PathPlanning, + self.module_manager.get_module( + "DefaultExtendActionMove.PathPlanning", + "adf_core_python.implement.module.algorithm.a_star_path_planning.AStarPathPlanning", + ), + ) def precompute(self, precompute_data: PrecomputeData) -> ExtendAction: super().precompute(precompute_data) diff --git a/adf_core_python/implement/module/algorithm/k_means_clustering.py b/adf_core_python/implement/module/algorithm/k_means_clustering.py index b40f7c4..8598abf 100644 --- a/adf_core_python/implement/module/algorithm/k_means_clustering.py +++ b/adf_core_python/implement/module/algorithm/k_means_clustering.py @@ -17,6 +17,7 @@ from adf_core_python.core.agent.info.scenario_info import ScenarioInfo from adf_core_python.core.agent.info.world_info import WorldInfo from adf_core_python.core.agent.module.module_manager import ModuleManager +from adf_core_python.core.agent.precompute.precompute_data import PrecomputeData from adf_core_python.core.component.module.algorithm.clustering import Clustering @@ -86,6 +87,35 @@ def __init__( def calculate(self) -> Clustering: return self + def precompute(self, precompute_data: PrecomputeData) -> Clustering: + cluster_entities = self.create_cluster(self._cluster_number, self.entities) + precompute_data.write_json_data( + { + "cluster_entities": [ + [entity.get_id().get_value() for entity in cluster] + for cluster in cluster_entities + ] + }, + self.__class__.__name__, + ) + return self + + def resume(self, precompute_data): + data = precompute_data.read_json_data(self.__class__.__name__) + self.cluster_entities = [ + [ + entity + for entity_id in cluster + if (entity := self._world_info.get_entity(EntityID(entity_id))) + is not None + ] + for cluster in data["cluster_entities"] + ] + self._logger.info( + f"Resume {self.__class__.__name__} with {len(self.cluster_entities)} clusters" + ) + return self + def get_cluster_number(self) -> int: return self._cluster_number diff --git a/adf_core_python/implement/module/complex/default_road_detector.py b/adf_core_python/implement/module/complex/default_road_detector.py index 5e598b9..03562a5 100644 --- a/adf_core_python/implement/module/complex/default_road_detector.py +++ b/adf_core_python/implement/module/complex/default_road_detector.py @@ -31,15 +31,14 @@ def __init__( super().__init__( agent_info, world_info, scenario_info, module_manager, develop_data ) - match scenario_info.get_mode(): - case Mode.NON_PRECOMPUTE: - self._path_planning: PathPlanning = cast( - PathPlanning, - module_manager.get_module( - "DefaultRoadDetector.PathPlanning", - "adf_core_python.implement.module.algorithm.a_star_path_planning.AStarPathPlanning", - ), - ) + + self._path_planning: PathPlanning = cast( + PathPlanning, + module_manager.get_module( + "DefaultRoadDetector.PathPlanning", + "adf_core_python.implement.module.algorithm.a_star_path_planning.AStarPathPlanning", + ), + ) self.register_sub_module(self._path_planning) self._result = None diff --git a/adf_core_python/implement/tactics/default_tactics_ambulance_center.py b/adf_core_python/implement/tactics/default_tactics_ambulance_center.py index 909f448..65f1f54 100644 --- a/adf_core_python/implement/tactics/default_tactics_ambulance_center.py +++ b/adf_core_python/implement/tactics/default_tactics_ambulance_center.py @@ -26,17 +26,27 @@ def initialize( message_manager: MessageManager, develop_data: DevelopData, ) -> None: - match scenario_info.get_mode(): - case Mode.NON_PRECOMPUTE: - self._allocator: TargetAllocator = cast( - TargetAllocator, - module_manager.get_module( - "DefaultTacticsAmbulanceCenter.TargetAllocator", - "adf_core_python.implement.module.complex.default_ambulance_target_allocator.DefaultAmbulanceTargetAllocator", - ), - ) + self._allocator: TargetAllocator = cast( + TargetAllocator, + module_manager.get_module( + "DefaultTacticsAmbulanceCenter.TargetAllocator", + "adf_core_python.implement.module.complex.default_ambulance_target_allocator.DefaultAmbulanceTargetAllocator", + ), + ) self.register_module(self._allocator) + def precompute( + self, + agent_info: AgentInfo, + world_info: WorldInfo, + scenario_info: ScenarioInfo, + module_manager: ModuleManager, + precompute_data: PrecomputeData, + message_manager: MessageManager, + develop_data: DevelopData, + ) -> None: + self.module_precompute(precompute_data) + def resume( self, agent_info: AgentInfo, diff --git a/adf_core_python/implement/tactics/default_tactics_ambulance_team.py b/adf_core_python/implement/tactics/default_tactics_ambulance_team.py index 888caf2..c1016d5 100644 --- a/adf_core_python/implement/tactics/default_tactics_ambulance_team.py +++ b/adf_core_python/implement/tactics/default_tactics_ambulance_team.py @@ -39,30 +39,28 @@ def initialize( message_manager, develop_data, ) - match scenario_info.get_mode(): - case Mode.NON_PRECOMPUTE: - self._search: Search = cast( - Search, - module_manager.get_module( - "DefaultTacticsAmbulanceTeam.Search", - "adf_core_python.core.component.module.complex.search.Search", - ), - ) - self._human_detector: HumanDetector = cast( - HumanDetector, - module_manager.get_module( - "DefaultTacticsAmbulanceTeam.HumanDetector", - "adf_core_python.core.component.module.complex.human_detector.HumanDetector", - ), - ) - self._action_transport = module_manager.get_extend_action( - "DefaultTacticsAmbulanceTeam.ExtendActionTransport", - "adf_core_python.implement.action.default_extend_action_transport.DefaultExtendActionTransport", - ) - self._action_ext_move = module_manager.get_extend_action( - "DefaultTacticsAmbulanceTeam.ExtendActionMove", - "adf_core_python.implement.action.default_extend_action_move.DefaultExtendActionMove", - ) + self._search: Search = cast( + Search, + module_manager.get_module( + "DefaultTacticsAmbulanceTeam.Search", + "adf_core_python.core.component.module.complex.search.Search", + ), + ) + self._human_detector: HumanDetector = cast( + HumanDetector, + module_manager.get_module( + "DefaultTacticsAmbulanceTeam.HumanDetector", + "adf_core_python.core.component.module.complex.human_detector.HumanDetector", + ), + ) + self._action_transport = module_manager.get_extend_action( + "DefaultTacticsAmbulanceTeam.ExtendActionTransport", + "adf_core_python.implement.action.default_extend_action_transport.DefaultExtendActionTransport", + ) + self._action_ext_move = module_manager.get_extend_action( + "DefaultTacticsAmbulanceTeam.ExtendActionMove", + "adf_core_python.implement.action.default_extend_action_move.DefaultExtendActionMove", + ) self.register_module(self._search) self.register_module(self._human_detector) self.register_action(self._action_transport) diff --git a/adf_core_python/implement/tactics/default_tactics_fire_brigade.py b/adf_core_python/implement/tactics/default_tactics_fire_brigade.py index 4247b48..3b4c8e7 100644 --- a/adf_core_python/implement/tactics/default_tactics_fire_brigade.py +++ b/adf_core_python/implement/tactics/default_tactics_fire_brigade.py @@ -40,30 +40,28 @@ def initialize( develop_data, ) - match scenario_info.get_mode(): - case Mode.NON_PRECOMPUTE: - self._search: Search = cast( - Search, - module_manager.get_module( - "DefaultTacticsFireBrigade.Search", - "adf_core_python.core.component.module.complex.search.Search", - ), - ) - self._human_detector: HumanDetector = cast( - HumanDetector, - module_manager.get_module( - "DefaultTacticsFireBrigade.HumanDetector", - "adf_core_python.core.component.module.complex.human_detector.HumanDetector", - ), - ) - self._action_rescue = module_manager.get_extend_action( - "DefaultTacticsFireBrigade.ExtendActionRescue", - "adf_core_python.implement.action.default_extend_action_rescue.DefaultExtendActionRescue", - ) - self._action_ext_move = module_manager.get_extend_action( - "DefaultTacticsAmbulanceTeam.ExtendActionMove", - "adf_core_python.implement.action.default_extend_action_move.DefaultExtendActionMove", - ) + self._search: Search = cast( + Search, + module_manager.get_module( + "DefaultTacticsFireBrigade.Search", + "adf_core_python.core.component.module.complex.search.Search", + ), + ) + self._human_detector: HumanDetector = cast( + HumanDetector, + module_manager.get_module( + "DefaultTacticsFireBrigade.HumanDetector", + "adf_core_python.core.component.module.complex.human_detector.HumanDetector", + ), + ) + self._action_rescue = module_manager.get_extend_action( + "DefaultTacticsFireBrigade.ExtendActionRescue", + "adf_core_python.implement.action.default_extend_action_rescue.DefaultExtendActionRescue", + ) + self._action_ext_move = module_manager.get_extend_action( + "DefaultTacticsAmbulanceTeam.ExtendActionMove", + "adf_core_python.implement.action.default_extend_action_move.DefaultExtendActionMove", + ) self.register_module(self._search) self.register_module(self._human_detector) self.register_action(self._action_rescue) diff --git a/adf_core_python/implement/tactics/default_tactics_fire_station.py b/adf_core_python/implement/tactics/default_tactics_fire_station.py index 63693d7..491e837 100644 --- a/adf_core_python/implement/tactics/default_tactics_fire_station.py +++ b/adf_core_python/implement/tactics/default_tactics_fire_station.py @@ -26,15 +26,13 @@ def initialize( message_manager: MessageManager, develop_data: DevelopData, ) -> None: - match scenario_info.get_mode(): - case Mode.NON_PRECOMPUTE: - self._allocator: TargetAllocator = cast( - TargetAllocator, - module_manager.get_module( - "DefaultTacticsFireStation.TargetAllocator", - "adf_core_python.implement.module.complex.default_fire_target_allocator.DefaultFireTargetAllocator", - ), - ) + self._allocator: TargetAllocator = cast( + TargetAllocator, + module_manager.get_module( + "DefaultTacticsFireStation.TargetAllocator", + "adf_core_python.implement.module.complex.default_fire_target_allocator.DefaultFireTargetAllocator", + ), + ) self.register_module(self._allocator) def resume( @@ -49,6 +47,18 @@ def resume( ) -> None: self.module_resume(precompute_data) + def precompute( + self, + agent_info: AgentInfo, + world_info: WorldInfo, + scenario_info: ScenarioInfo, + module_manager: ModuleManager, + precompute_data: PrecomputeData, + message_manager: MessageManager, + develop_data: DevelopData, + ) -> None: + self.module_precompute(precompute_data) + def prepare( self, agent_info: AgentInfo, diff --git a/adf_core_python/implement/tactics/default_tactics_police_force.py b/adf_core_python/implement/tactics/default_tactics_police_force.py index d605cba..ed8c429 100644 --- a/adf_core_python/implement/tactics/default_tactics_police_force.py +++ b/adf_core_python/implement/tactics/default_tactics_police_force.py @@ -43,30 +43,28 @@ def initialize( # scenario_info.get_value("clear.repair.distance", "null") # ) - match scenario_info.get_mode(): - case Mode.NON_PRECOMPUTE: - self._search: Search = cast( - Search, - module_manager.get_module( - "DefaultTacticsPoliceForce.Search", - "adf_core_python.core.component.module.complex.search.Search", - ), - ) - self._road_detector: RoadDetector = cast( - RoadDetector, - module_manager.get_module( - "DefaultTacticsPoliceForce.RoadDetector", - "adf_core_python.core.component.module.complex.road_detector.RoadDetector", - ), - ) - self._action_ext_clear = module_manager.get_extend_action( - "DefaultTacticsPoliceForce.ExtendActionClear", - "adf_core_python.implement.action.default_extend_action_clear.DefaultExtendActionClear", - ) - self._action_ext_move = module_manager.get_extend_action( - "DefaultTacticsPoliceForce.ExtendActionMove", - "adf_core_python.implement.action.default_extend_action_move.DefaultExtendActionMove", - ) + self._search: Search = cast( + Search, + module_manager.get_module( + "DefaultTacticsPoliceForce.Search", + "adf_core_python.core.component.module.complex.search.Search", + ), + ) + self._road_detector: RoadDetector = cast( + RoadDetector, + module_manager.get_module( + "DefaultTacticsPoliceForce.RoadDetector", + "adf_core_python.core.component.module.complex.road_detector.RoadDetector", + ), + ) + self._action_ext_clear = module_manager.get_extend_action( + "DefaultTacticsPoliceForce.ExtendActionClear", + "adf_core_python.implement.action.default_extend_action_clear.DefaultExtendActionClear", + ) + self._action_ext_move = module_manager.get_extend_action( + "DefaultTacticsPoliceForce.ExtendActionMove", + "adf_core_python.implement.action.default_extend_action_move.DefaultExtendActionMove", + ) self.register_module(self._search) self.register_module(self._road_detector) self.register_action(self._action_ext_clear) diff --git a/adf_core_python/implement/tactics/default_tactics_police_office.py b/adf_core_python/implement/tactics/default_tactics_police_office.py index f2d54c9..05be972 100644 --- a/adf_core_python/implement/tactics/default_tactics_police_office.py +++ b/adf_core_python/implement/tactics/default_tactics_police_office.py @@ -26,15 +26,13 @@ def initialize( message_manager: MessageManager, develop_data: DevelopData, ) -> None: - match scenario_info.get_mode(): - case Mode.NON_PRECOMPUTE: - self._allocator: TargetAllocator = cast( - TargetAllocator, - module_manager.get_module( - "DefaultTacticsPoliceOffice.TargetAllocator", - "adf_core_python.implement.module.complex.default_police_target_allocator.DefaultPoliceTargetAllocator", - ), - ) + self._allocator: TargetAllocator = cast( + TargetAllocator, + module_manager.get_module( + "DefaultTacticsPoliceOffice.TargetAllocator", + "adf_core_python.implement.module.complex.default_police_target_allocator.DefaultPoliceTargetAllocator", + ), + ) self.register_module(self._allocator) def resume( @@ -49,6 +47,18 @@ def resume( ) -> None: self.module_resume(precompute_data) + def precompute( + self, + agent_info: AgentInfo, + world_info: WorldInfo, + scenario_info: ScenarioInfo, + module_manager: ModuleManager, + precompute_data: PrecomputeData, + message_manager: MessageManager, + develop_data: DevelopData, + ) -> None: + self.module_precompute(precompute_data) + def prepare( self, agent_info: AgentInfo, diff --git a/config/launcher.yaml b/config/launcher.yaml index 1b6bdfd..7702d17 100644 --- a/config/launcher.yaml +++ b/config/launcher.yaml @@ -13,6 +13,8 @@ adf: agent: moduleconfig: filename: config/module.yaml + precompute: + dir_name: precompute develop: flag: true From 2df08659bd0a4c78cdb02b5dc974b9c0dd8f6a7d Mon Sep 17 00:00:00 2001 From: shima004 Date: Wed, 11 Dec 2024 17:26:19 +0900 Subject: [PATCH 4/7] fix: Remove unused Mode import from scenario_info in multiple files --- .../src/team_name/module/complex/sample_road_detector.py | 2 +- adf_core_python/implement/action/default_extend_action_clear.py | 2 +- adf_core_python/implement/action/default_extend_action_move.py | 2 +- .../implement/action/default_extend_action_rescue.py | 1 - .../implement/action/default_extend_action_transport.py | 2 +- .../implement/module/algorithm/k_means_clustering.py | 2 +- .../implement/module/complex/default_road_detector.py | 2 +- .../implement/tactics/default_tactics_ambulance_center.py | 2 +- .../implement/tactics/default_tactics_ambulance_team.py | 2 +- .../implement/tactics/default_tactics_fire_brigade.py | 2 +- .../implement/tactics/default_tactics_fire_station.py | 2 +- .../implement/tactics/default_tactics_police_force.py | 2 +- .../implement/tactics/default_tactics_police_office.py | 2 +- 13 files changed, 12 insertions(+), 13 deletions(-) diff --git a/adf_core_python/cli/template/src/team_name/module/complex/sample_road_detector.py b/adf_core_python/cli/template/src/team_name/module/complex/sample_road_detector.py index fcb29a9..2f554db 100644 --- a/adf_core_python/cli/template/src/team_name/module/complex/sample_road_detector.py +++ b/adf_core_python/cli/template/src/team_name/module/complex/sample_road_detector.py @@ -9,7 +9,7 @@ from adf_core_python.core.agent.communication.message_manager import MessageManager from adf_core_python.core.agent.develop.develop_data import DevelopData from adf_core_python.core.agent.info.agent_info import AgentInfo -from adf_core_python.core.agent.info.scenario_info import Mode, ScenarioInfo +from adf_core_python.core.agent.info.scenario_info import ScenarioInfo from adf_core_python.core.agent.info.world_info import WorldInfo from adf_core_python.core.agent.module.module_manager import ModuleManager from adf_core_python.core.agent.precompute.precompute_data import PrecomputeData diff --git a/adf_core_python/implement/action/default_extend_action_clear.py b/adf_core_python/implement/action/default_extend_action_clear.py index 53c2ebc..d23c8d1 100644 --- a/adf_core_python/implement/action/default_extend_action_clear.py +++ b/adf_core_python/implement/action/default_extend_action_clear.py @@ -22,7 +22,7 @@ from adf_core_python.core.agent.communication.message_manager import MessageManager from adf_core_python.core.agent.develop.develop_data import DevelopData from adf_core_python.core.agent.info.agent_info import AgentInfo -from adf_core_python.core.agent.info.scenario_info import Mode, ScenarioInfo +from adf_core_python.core.agent.info.scenario_info import ScenarioInfo from adf_core_python.core.agent.info.world_info import WorldInfo from adf_core_python.core.agent.module.module_manager import ModuleManager from adf_core_python.core.agent.precompute.precompute_data import PrecomputeData diff --git a/adf_core_python/implement/action/default_extend_action_move.py b/adf_core_python/implement/action/default_extend_action_move.py index 94f9ade..e4936a4 100644 --- a/adf_core_python/implement/action/default_extend_action_move.py +++ b/adf_core_python/implement/action/default_extend_action_move.py @@ -10,7 +10,7 @@ from adf_core_python.core.agent.communication.message_manager import MessageManager from adf_core_python.core.agent.develop.develop_data import DevelopData from adf_core_python.core.agent.info.agent_info import AgentInfo -from adf_core_python.core.agent.info.scenario_info import Mode, ScenarioInfo +from adf_core_python.core.agent.info.scenario_info import ScenarioInfo from adf_core_python.core.agent.info.world_info import WorldInfo from adf_core_python.core.agent.module.module_manager import ModuleManager from adf_core_python.core.agent.precompute.precompute_data import PrecomputeData diff --git a/adf_core_python/implement/action/default_extend_action_rescue.py b/adf_core_python/implement/action/default_extend_action_rescue.py index 2291136..e76e96a 100644 --- a/adf_core_python/implement/action/default_extend_action_rescue.py +++ b/adf_core_python/implement/action/default_extend_action_rescue.py @@ -13,7 +13,6 @@ from adf_core_python.core.agent.develop.develop_data import DevelopData from adf_core_python.core.agent.info.agent_info import AgentInfo from adf_core_python.core.agent.info.scenario_info import ( - Mode, ScenarioInfo, ScenarioInfoKeys, ) diff --git a/adf_core_python/implement/action/default_extend_action_transport.py b/adf_core_python/implement/action/default_extend_action_transport.py index 3475192..8e6c71a 100644 --- a/adf_core_python/implement/action/default_extend_action_transport.py +++ b/adf_core_python/implement/action/default_extend_action_transport.py @@ -15,7 +15,7 @@ from adf_core_python.core.agent.communication.message_manager import MessageManager from adf_core_python.core.agent.develop.develop_data import DevelopData from adf_core_python.core.agent.info.agent_info import AgentInfo -from adf_core_python.core.agent.info.scenario_info import Mode, ScenarioInfo +from adf_core_python.core.agent.info.scenario_info import ScenarioInfo from adf_core_python.core.agent.info.world_info import WorldInfo from adf_core_python.core.agent.module.module_manager import ModuleManager from adf_core_python.core.agent.precompute.precompute_data import PrecomputeData diff --git a/adf_core_python/implement/module/algorithm/k_means_clustering.py b/adf_core_python/implement/module/algorithm/k_means_clustering.py index 8598abf..d45a64c 100644 --- a/adf_core_python/implement/module/algorithm/k_means_clustering.py +++ b/adf_core_python/implement/module/algorithm/k_means_clustering.py @@ -100,7 +100,7 @@ def precompute(self, precompute_data: PrecomputeData) -> Clustering: ) return self - def resume(self, precompute_data): + def resume(self, precompute_data: PrecomputeData) -> Clustering: data = precompute_data.read_json_data(self.__class__.__name__) self.cluster_entities = [ [ diff --git a/adf_core_python/implement/module/complex/default_road_detector.py b/adf_core_python/implement/module/complex/default_road_detector.py index 03562a5..035cc61 100644 --- a/adf_core_python/implement/module/complex/default_road_detector.py +++ b/adf_core_python/implement/module/complex/default_road_detector.py @@ -9,7 +9,7 @@ from adf_core_python.core.agent.communication.message_manager import MessageManager from adf_core_python.core.agent.develop.develop_data import DevelopData from adf_core_python.core.agent.info.agent_info import AgentInfo -from adf_core_python.core.agent.info.scenario_info import Mode, ScenarioInfo +from adf_core_python.core.agent.info.scenario_info import ScenarioInfo from adf_core_python.core.agent.info.world_info import WorldInfo from adf_core_python.core.agent.module.module_manager import ModuleManager from adf_core_python.core.agent.precompute.precompute_data import PrecomputeData diff --git a/adf_core_python/implement/tactics/default_tactics_ambulance_center.py b/adf_core_python/implement/tactics/default_tactics_ambulance_center.py index 65f1f54..d1dd248 100644 --- a/adf_core_python/implement/tactics/default_tactics_ambulance_center.py +++ b/adf_core_python/implement/tactics/default_tactics_ambulance_center.py @@ -3,7 +3,7 @@ from adf_core_python.core.agent.communication.message_manager import MessageManager from adf_core_python.core.agent.develop.develop_data import DevelopData from adf_core_python.core.agent.info.agent_info import AgentInfo -from adf_core_python.core.agent.info.scenario_info import Mode, ScenarioInfo +from adf_core_python.core.agent.info.scenario_info import ScenarioInfo from adf_core_python.core.agent.info.world_info import WorldInfo from adf_core_python.core.agent.module.module_manager import ModuleManager from adf_core_python.core.agent.precompute.precompute_data import PrecomputeData diff --git a/adf_core_python/implement/tactics/default_tactics_ambulance_team.py b/adf_core_python/implement/tactics/default_tactics_ambulance_team.py index c1016d5..83d0cdf 100644 --- a/adf_core_python/implement/tactics/default_tactics_ambulance_team.py +++ b/adf_core_python/implement/tactics/default_tactics_ambulance_team.py @@ -7,7 +7,7 @@ from adf_core_python.core.agent.communication.message_manager import MessageManager from adf_core_python.core.agent.develop.develop_data import DevelopData from adf_core_python.core.agent.info.agent_info import AgentInfo -from adf_core_python.core.agent.info.scenario_info import Mode, ScenarioInfo +from adf_core_python.core.agent.info.scenario_info import ScenarioInfo from adf_core_python.core.agent.info.world_info import WorldInfo from adf_core_python.core.agent.module.module_manager import ModuleManager from adf_core_python.core.agent.precompute.precompute_data import PrecomputeData diff --git a/adf_core_python/implement/tactics/default_tactics_fire_brigade.py b/adf_core_python/implement/tactics/default_tactics_fire_brigade.py index 3b4c8e7..d0f8512 100644 --- a/adf_core_python/implement/tactics/default_tactics_fire_brigade.py +++ b/adf_core_python/implement/tactics/default_tactics_fire_brigade.py @@ -7,7 +7,7 @@ from adf_core_python.core.agent.communication.message_manager import MessageManager from adf_core_python.core.agent.develop.develop_data import DevelopData from adf_core_python.core.agent.info.agent_info import AgentInfo -from adf_core_python.core.agent.info.scenario_info import Mode, ScenarioInfo +from adf_core_python.core.agent.info.scenario_info import ScenarioInfo from adf_core_python.core.agent.info.world_info import WorldInfo from adf_core_python.core.agent.module.module_manager import ModuleManager from adf_core_python.core.agent.precompute.precompute_data import PrecomputeData diff --git a/adf_core_python/implement/tactics/default_tactics_fire_station.py b/adf_core_python/implement/tactics/default_tactics_fire_station.py index 491e837..6b3dcb2 100644 --- a/adf_core_python/implement/tactics/default_tactics_fire_station.py +++ b/adf_core_python/implement/tactics/default_tactics_fire_station.py @@ -3,7 +3,7 @@ from adf_core_python.core.agent.communication.message_manager import MessageManager from adf_core_python.core.agent.develop.develop_data import DevelopData from adf_core_python.core.agent.info.agent_info import AgentInfo -from adf_core_python.core.agent.info.scenario_info import Mode, ScenarioInfo +from adf_core_python.core.agent.info.scenario_info import ScenarioInfo from adf_core_python.core.agent.info.world_info import WorldInfo from adf_core_python.core.agent.module.module_manager import ModuleManager from adf_core_python.core.agent.precompute.precompute_data import PrecomputeData diff --git a/adf_core_python/implement/tactics/default_tactics_police_force.py b/adf_core_python/implement/tactics/default_tactics_police_force.py index ed8c429..63836a3 100644 --- a/adf_core_python/implement/tactics/default_tactics_police_force.py +++ b/adf_core_python/implement/tactics/default_tactics_police_force.py @@ -7,7 +7,7 @@ from adf_core_python.core.agent.communication.message_manager import MessageManager from adf_core_python.core.agent.develop.develop_data import DevelopData from adf_core_python.core.agent.info.agent_info import AgentInfo -from adf_core_python.core.agent.info.scenario_info import Mode, ScenarioInfo +from adf_core_python.core.agent.info.scenario_info import ScenarioInfo from adf_core_python.core.agent.info.world_info import WorldInfo from adf_core_python.core.agent.module.module_manager import ModuleManager from adf_core_python.core.agent.precompute.precompute_data import PrecomputeData diff --git a/adf_core_python/implement/tactics/default_tactics_police_office.py b/adf_core_python/implement/tactics/default_tactics_police_office.py index 05be972..554fe53 100644 --- a/adf_core_python/implement/tactics/default_tactics_police_office.py +++ b/adf_core_python/implement/tactics/default_tactics_police_office.py @@ -3,7 +3,7 @@ from adf_core_python.core.agent.communication.message_manager import MessageManager from adf_core_python.core.agent.develop.develop_data import DevelopData from adf_core_python.core.agent.info.agent_info import AgentInfo -from adf_core_python.core.agent.info.scenario_info import Mode, ScenarioInfo +from adf_core_python.core.agent.info.scenario_info import ScenarioInfo from adf_core_python.core.agent.info.world_info import WorldInfo from adf_core_python.core.agent.module.module_manager import ModuleManager from adf_core_python.core.agent.precompute.precompute_data import PrecomputeData From b674043cd397b870985ae7a60d8d7938210d190e Mon Sep 17 00:00:00 2001 From: shima004 Date: Thu, 12 Dec 2024 13:48:58 +0900 Subject: [PATCH 5/7] fix: Remove precompute method from agent classes and update logging in connection handling --- .gitignore | 1 + adf_core_python/core/agent/agent.py | 13 ++++--------- adf_core_python/core/agent/office/office_fire.py | 3 --- adf_core_python/core/agent/office/office_police.py | 3 --- .../core/agent/platoon/platoon_ambulance.py | 3 --- adf_core_python/core/agent/platoon/platoon_fire.py | 3 --- .../core/agent/platoon/platoon_police.py | 3 --- 7 files changed, 5 insertions(+), 24 deletions(-) diff --git a/.gitignore b/.gitignore index 7e7baef..6119e70 100644 --- a/.gitignore +++ b/.gitignore @@ -172,3 +172,4 @@ cython_debug/ # ADF agent.log* +precompute diff --git a/adf_core_python/core/agent/agent.py b/adf_core_python/core/agent/agent.py index 7cfef70..d371cac 100644 --- a/adf_core_python/core/agent/agent.py +++ b/adf_core_python/core/agent/agent.py @@ -154,7 +154,6 @@ def post_connect(self) -> None: self._agent_info, ) - self.logger.info("Agent running in %s mode", self._mode) self.logger.debug(f"agent_config: {self.config}") def update_step_info( @@ -213,10 +212,6 @@ def update_step_info( def think(self) -> None: pass - @abstractmethod - def precompute(self) -> None: - pass - @abstractmethod def get_requested_entities(self) -> list[EntityURN]: pass @@ -269,12 +264,12 @@ def handle_connect_ok(self, msg: Any) -> None: self.send_acknowledge(msg.request_id) self.post_connect() self.logger.info( - f"Connected to kernel: {self.__class__.__qualname__} (request_id: {msg.request_id})", + f"Connected to kernel: {self.__class__.__qualname__} (request_id: {msg.request_id}, agent_id: {self.agent_id}, mode: {self.mode})", request_id=msg.request_id, ) - if self.precompute_flag: - print("self.precompute_flag: ", self.precompute_flag) - self.precompute() + if self.is_precompute: + self.logger.info("Precompute finished") + exit(0) self.finish_post_connect_event.set() diff --git a/adf_core_python/core/agent/office/office_fire.py b/adf_core_python/core/agent/office/office_fire.py index dcab2bd..16b93cd 100644 --- a/adf_core_python/core/agent/office/office_fire.py +++ b/adf_core_python/core/agent/office/office_fire.py @@ -31,8 +31,5 @@ def __init__( finish_post_connect_event, ) - def precompute(self) -> None: - pass - def get_requested_entities(self) -> list[EntityURN]: return [EntityURN.FIRE_STATION] diff --git a/adf_core_python/core/agent/office/office_police.py b/adf_core_python/core/agent/office/office_police.py index b4c9fc4..4b2ca8b 100644 --- a/adf_core_python/core/agent/office/office_police.py +++ b/adf_core_python/core/agent/office/office_police.py @@ -31,8 +31,5 @@ def __init__( finish_post_connect_event, ) - def precompute(self) -> None: - pass - def get_requested_entities(self) -> list[EntityURN]: return [EntityURN.POLICE_OFFICE] diff --git a/adf_core_python/core/agent/platoon/platoon_ambulance.py b/adf_core_python/core/agent/platoon/platoon_ambulance.py index 8a4d976..169d208 100644 --- a/adf_core_python/core/agent/platoon/platoon_ambulance.py +++ b/adf_core_python/core/agent/platoon/platoon_ambulance.py @@ -31,8 +31,5 @@ def __init__( finish_post_connect_event, ) - def precompute(self) -> None: - pass - def get_requested_entities(self) -> list[EntityURN]: return [EntityURN.AMBULANCE_TEAM] diff --git a/adf_core_python/core/agent/platoon/platoon_fire.py b/adf_core_python/core/agent/platoon/platoon_fire.py index 01d75ba..3071eef 100644 --- a/adf_core_python/core/agent/platoon/platoon_fire.py +++ b/adf_core_python/core/agent/platoon/platoon_fire.py @@ -31,8 +31,5 @@ def __init__( finish_post_connect_event, ) - def precompute(self) -> None: - pass - def get_requested_entities(self) -> list[EntityURN]: return [EntityURN.FIRE_BRIGADE] diff --git a/adf_core_python/core/agent/platoon/platoon_police.py b/adf_core_python/core/agent/platoon/platoon_police.py index 569159e..6df9440 100644 --- a/adf_core_python/core/agent/platoon/platoon_police.py +++ b/adf_core_python/core/agent/platoon/platoon_police.py @@ -31,8 +31,5 @@ def __init__( finish_post_connect_event, ) - def precompute(self) -> None: - pass - def get_requested_entities(self) -> list[EntityURN]: return [EntityURN.POLICE_FORCE] From 93954d7c235b3a24e73a779d6277c114ca7b95e7 Mon Sep 17 00:00:00 2001 From: shima004 Date: Thu, 12 Dec 2024 17:03:35 +0900 Subject: [PATCH 6/7] fix: Update mode attribute to private in Agent class and adjust logging accordingly --- adf_core_python/core/agent/agent.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/adf_core_python/core/agent/agent.py b/adf_core_python/core/agent/agent.py index d371cac..bdf45c6 100644 --- a/adf_core_python/core/agent/agent.py +++ b/adf_core_python/core/agent/agent.py @@ -112,7 +112,7 @@ def __init__( self.is_precompute = is_precompute if is_precompute: - self.mode = Mode.PRECOMPUTATION + self._mode = Mode.PRECOMPUTATION try: self._precompute_data = PrecomputeData(data_storage_name) @@ -264,7 +264,7 @@ def handle_connect_ok(self, msg: Any) -> None: self.send_acknowledge(msg.request_id) self.post_connect() self.logger.info( - f"Connected to kernel: {self.__class__.__qualname__} (request_id: {msg.request_id}, agent_id: {self.agent_id}, mode: {self.mode})", + f"Connected to kernel: {self.__class__.__qualname__} (request_id: {msg.request_id}, agent_id: {self.agent_id}, mode: {self._mode})", request_id=msg.request_id, ) if self.is_precompute: From b689fa202603f1b9e9718713384a646101348ba0 Mon Sep 17 00:00:00 2001 From: shima004 Date: Thu, 12 Dec 2024 17:30:41 +0900 Subject: [PATCH 7/7] fix: Remove unnecessary logging in KMeansClustering and update argument parsing for precompute and debug flags --- .../implement/module/algorithm/k_means_clustering.py | 3 --- adf_core_python/launcher.py | 5 ++--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/adf_core_python/implement/module/algorithm/k_means_clustering.py b/adf_core_python/implement/module/algorithm/k_means_clustering.py index d45a64c..57228b7 100644 --- a/adf_core_python/implement/module/algorithm/k_means_clustering.py +++ b/adf_core_python/implement/module/algorithm/k_means_clustering.py @@ -111,9 +111,6 @@ def resume(self, precompute_data: PrecomputeData) -> Clustering: ] for cluster in data["cluster_entities"] ] - self._logger.info( - f"Resume {self.__class__.__name__} with {len(self.cluster_entities)} clusters" - ) return self def get_cluster_number(self) -> int: diff --git a/adf_core_python/launcher.py b/adf_core_python/launcher.py index 310ff9d..bd2025d 100644 --- a/adf_core_python/launcher.py +++ b/adf_core_python/launcher.py @@ -74,11 +74,10 @@ def __init__( ) parser.add_argument( "--precompute", - type=bool, + action="store_true", help="precompute flag", - metavar="", ) - parser.add_argument("--debug", type=bool, help="debug flag", metavar="") + parser.add_argument("--debug", action="store_true", help="debug flag") args = parser.parse_args() config_map = {