Skip to content

Commit 7935cef

Browse files
authored
Merge pull request #81 from adf-python/feature/center
Office系の仮実装
2 parents 4f5732e + 59704ee commit 7935cef

15 files changed

+329
-84
lines changed

adf_core_python/cli/template/config/module.yaml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,17 @@ DefaultTacticsPoliceForce:
2222
CommandExecutorPolice: adf_core_python.implement.centralized.DefaultCommandExecutorPolice
2323
CommandExecutorScout: adf_core_python.implement.centralized.DefaultCommandExecutorScoutPolice
2424

25-
# DefaultTacticsAmbulanceCentre:
26-
# TargetAllocator: sample_team.module.complex.SampleAmbulanceTargetAllocator
27-
# CommandPicker: adf_core_python.implement.centralized.DefaultCommandPickerAmbulance
25+
DefaultTacticsAmbulanceCenter:
26+
TargetAllocator: adf_core_python.implement.module.complex.default_ambulance_target_allocator.DefaultAmbulanceTargetAllocator
27+
# CommandPicker: adf_core_python.implement.centralized.DefaultCommandPickerAmbulance
2828

29-
# DefaultTacticsFireStation:
30-
# TargetAllocator: sample_team.module.complex.SampleFireTargetAllocator
31-
# CommandPicker: adf_core_python.implement.centralized.DefaultCommandPickerFire
29+
DefaultTacticsFireStation:
30+
TargetAllocator: adf_core_python.implement.module.complex.default_fire_target_allocator.DefaultFireTargetAllocator
31+
# CommandPicker: adf_core_python.implement.centralized.DefaultCommandPickerFire
3232

33-
# DefaultTacticsPoliceOffice:
34-
# TargetAllocator: sample_team.module.complex.SamplePoliceTargetAllocator
35-
# CommandPicker: adf_core_python.implement.centralized.DefaultCommandPickerPolice
33+
DefaultTacticsPoliceOffice:
34+
TargetAllocator: adf_core_python.implement.module.complex.default_police_target_allocator.DefaultPoliceTargetAllocator
35+
# CommandPicker: adf_core_python.implement.centralized.DefaultCommandPickerPolice
3636

3737
SampleSearch:
3838
PathPlanning: adf_core_python.implement.module.algorithm.a_star_path_planning.AStarPathPlanning
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
from adf_core_python.core.agent.agent import Agent
2+
from adf_core_python.core.agent.config.module_config import ModuleConfig
3+
from adf_core_python.core.agent.develop.develop_data import DevelopData
4+
from adf_core_python.core.agent.info.scenario_info import Mode
5+
from adf_core_python.core.agent.module.module_manager import ModuleManager
6+
from adf_core_python.core.agent.precompute.precompute_data import PrecomputeData
7+
from adf_core_python.core.component.tactics.tactics_center import TacticsCenter
8+
from adf_core_python.core.logger.logger import get_agent_logger
9+
10+
11+
class Office(Agent):
12+
def __init__(
13+
self,
14+
tactics_center: TacticsCenter,
15+
team_name: str,
16+
is_precompute: bool,
17+
is_debug: bool,
18+
data_storage_name: str,
19+
module_config: ModuleConfig,
20+
develop_data: DevelopData,
21+
) -> None:
22+
super().__init__(
23+
is_precompute,
24+
self.__class__.__qualname__,
25+
is_debug,
26+
team_name,
27+
data_storage_name,
28+
module_config,
29+
develop_data,
30+
)
31+
self._tactics_center = tactics_center
32+
self._team_name = team_name
33+
self._is_precompute = is_precompute
34+
self._is_debug = is_debug
35+
self._data_storage_name = data_storage_name
36+
self._module_config = module_config
37+
self._develop_data = develop_data
38+
39+
def post_connect(self) -> None:
40+
super().post_connect()
41+
self.precompute_data: PrecomputeData = PrecomputeData(self._data_storage_name)
42+
43+
self._logger = get_agent_logger(
44+
f"{self.__class__.__module__}.{self.__class__.__qualname__}",
45+
self._agent_info,
46+
)
47+
48+
self._module_manager: ModuleManager = ModuleManager(
49+
self._agent_info,
50+
self._world_info,
51+
self._scenario_info,
52+
self._module_config,
53+
self._develop_data,
54+
)
55+
56+
self._message_manager.set_channel_subscriber(
57+
self._module_manager.get_channel_subscriber(
58+
"MessageManager.PlatoonChannelSubscriber",
59+
"adf_core_python.implement.module.communication.default_channel_subscriber.DefaultChannelSubscriber",
60+
)
61+
)
62+
self._message_manager.set_message_coordinator(
63+
self._module_manager.get_message_coordinator(
64+
"MessageManager.PlatoonMessageCoordinator",
65+
"adf_core_python.implement.module.communication.default_message_coordinator.DefaultMessageCoordinator",
66+
)
67+
)
68+
69+
self._tactics_center.initialize(
70+
self._agent_info,
71+
self._world_info,
72+
self._scenario_info,
73+
self._module_manager,
74+
self._precompute_data,
75+
self._message_manager,
76+
self._develop_data,
77+
)
78+
79+
match self._scenario_info.get_mode():
80+
case Mode.PRECOMPUTATION:
81+
pass
82+
case Mode.PRECOMPUTED:
83+
pass
84+
case Mode.NON_PRECOMPUTE:
85+
self._tactics_center.prepare(
86+
self._agent_info,
87+
self._world_info,
88+
self._scenario_info,
89+
self._module_manager,
90+
self.precompute_data,
91+
self._develop_data,
92+
)
93+
94+
def think(self) -> None:
95+
self._tactics_center.think(
96+
self._agent_info,
97+
self._world_info,
98+
self._scenario_info,
99+
self._module_manager,
100+
self._precompute_data,
101+
self._message_manager,
102+
self._develop_data,
103+
)
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from rcrs_core.connection.URN import Entity as EntityURN
2+
3+
from adf_core_python.core.agent.config.module_config import ModuleConfig
4+
from adf_core_python.core.agent.develop.develop_data import DevelopData
5+
from adf_core_python.core.agent.office.office import Office
6+
from adf_core_python.core.component.tactics.tactics_center import TacticsCenter
7+
8+
9+
class OfficeAmbulance(Office):
10+
def __init__(
11+
self,
12+
tactics_center: TacticsCenter,
13+
team_name: str,
14+
is_precompute: bool,
15+
is_debug: bool,
16+
data_storage_name: str,
17+
module_config: ModuleConfig,
18+
develop_data: DevelopData,
19+
) -> None:
20+
super().__init__(
21+
tactics_center,
22+
team_name,
23+
is_precompute,
24+
is_debug,
25+
data_storage_name,
26+
module_config,
27+
develop_data,
28+
)
29+
30+
def precompute(self) -> None:
31+
pass
32+
33+
def get_requested_entities(self) -> list[EntityURN]:
34+
return [EntityURN.AMBULANCE_CENTRE]
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from rcrs_core.connection.URN import Entity as EntityURN
2+
3+
from adf_core_python.core.agent.config.module_config import ModuleConfig
4+
from adf_core_python.core.agent.develop.develop_data import DevelopData
5+
from adf_core_python.core.agent.office.office import Office
6+
from adf_core_python.core.component.tactics.tactics_center import TacticsCenter
7+
8+
9+
class OfficeFire(Office):
10+
def __init__(
11+
self,
12+
tactics_center: TacticsCenter,
13+
team_name: str,
14+
is_precompute: bool,
15+
is_debug: bool,
16+
data_storage_name: str,
17+
module_config: ModuleConfig,
18+
develop_data: DevelopData,
19+
) -> None:
20+
super().__init__(
21+
tactics_center,
22+
team_name,
23+
is_precompute,
24+
is_debug,
25+
data_storage_name,
26+
module_config,
27+
develop_data,
28+
)
29+
30+
def precompute(self) -> None:
31+
pass
32+
33+
def get_requested_entities(self) -> list[EntityURN]:
34+
return [EntityURN.FIRE_STATION]
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from rcrs_core.connection.URN import Entity as EntityURN
2+
3+
from adf_core_python.core.agent.config.module_config import ModuleConfig
4+
from adf_core_python.core.agent.develop.develop_data import DevelopData
5+
from adf_core_python.core.agent.office.office import Office
6+
from adf_core_python.core.component.tactics.tactics_center import TacticsCenter
7+
8+
9+
class OfficePolice(Office):
10+
def __init__(
11+
self,
12+
tactics_center: TacticsCenter,
13+
team_name: str,
14+
is_precompute: bool,
15+
is_debug: bool,
16+
data_storage_name: str,
17+
module_config: ModuleConfig,
18+
develop_data: DevelopData,
19+
) -> None:
20+
super().__init__(
21+
tactics_center,
22+
team_name,
23+
is_precompute,
24+
is_debug,
25+
data_storage_name,
26+
module_config,
27+
develop_data,
28+
)
29+
30+
def precompute(self) -> None:
31+
pass
32+
33+
def get_requested_entities(self) -> list[EntityURN]:
34+
return [EntityURN.POLICE_OFFICE]

adf_core_python/core/launcher/agent_launcher.py

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,31 +4,26 @@
44
from adf_core_python.core.component.abstract_loader import AbstractLoader
55
from adf_core_python.core.config.config import Config
66
from adf_core_python.core.launcher.config_key import ConfigKey
7-
8-
# from rcrs_core.connection.componentLauncher import ComponentLauncher
97
from adf_core_python.core.launcher.connect.component_launcher import ComponentLauncher
108
from adf_core_python.core.launcher.connect.connector import Connector
11-
12-
# from adf_core_python.core.launcher.connect.connector_ambulance_centre import (
13-
# ConnectorAmbulanceCentre,
14-
# )
9+
from adf_core_python.core.launcher.connect.connector_ambulance_center import (
10+
ConnectorAmbulanceCenter,
11+
)
1512
from adf_core_python.core.launcher.connect.connector_ambulance_team import (
1613
ConnectorAmbulanceTeam,
1714
)
1815
from adf_core_python.core.launcher.connect.connector_fire_brigade import (
1916
ConnectorFireBrigade,
2017
)
21-
22-
# from adf_core_python.core.launcher.connect.connector_fire_station import (
23-
# ConnectorFireStation,
24-
# )
18+
from adf_core_python.core.launcher.connect.connector_fire_station import (
19+
ConnectorFireStation,
20+
)
2521
from adf_core_python.core.launcher.connect.connector_police_force import (
2622
ConnectorPoliceForce,
2723
)
28-
29-
# from adf_core_python.core.launcher.connect.connector_police_office import (
30-
# ConnectorPoliceOffice,
31-
# )
24+
from adf_core_python.core.launcher.connect.connector_police_office import (
25+
ConnectorPoliceOffice,
26+
)
3227
from adf_core_python.core.logger.logger import get_logger
3328

3429

@@ -53,11 +48,11 @@ def init_connector(self) -> None:
5348
)
5449

5550
self.connectors.append(ConnectorAmbulanceTeam())
56-
# self.connectors.append(ConnectorAmbulanceCentre())
51+
self.connectors.append(ConnectorAmbulanceCenter())
5752
self.connectors.append(ConnectorFireBrigade())
58-
# self.connectors.append(ConnectorFireStation())
53+
self.connectors.append(ConnectorFireStation())
5954
self.connectors.append(ConnectorPoliceForce())
60-
# self.connectors.append(ConnectorPoliceOffice())
55+
self.connectors.append(ConnectorPoliceOffice())
6156

6257
def launch(self) -> None:
6358
host: str = self.config.get_value(ConfigKey.KEY_KERNEL_HOST, "localhost")
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
import threading
22

3-
from rcrs_core.agents.ambulanceCenterAgent import AmbulanceCenterAgent
4-
53
from adf_core_python.core.agent.config.module_config import ModuleConfig
64
from adf_core_python.core.agent.develop.develop_data import DevelopData
5+
from adf_core_python.core.agent.office.office_ambulance import OfficeAmbulance
76
from adf_core_python.core.component.abstract_loader import AbstractLoader
7+
from adf_core_python.core.component.tactics.tactics_ambulance_center import (
8+
TacticsAmbulanceCenter,
9+
)
810
from adf_core_python.core.config.config import Config
911
from adf_core_python.core.launcher.config_key import ConfigKey
1012
from adf_core_python.core.launcher.connect.component_launcher import ComponentLauncher
1113
from adf_core_python.core.launcher.connect.connector import Connector
1214
from adf_core_python.core.logger.logger import get_logger
1315

1416

15-
class ConnectorAmbulanceCentre(Connector):
17+
class ConnectorAmbulanceCenter(Connector):
1618
def __init__(self) -> None:
1719
super().__init__()
1820
self.logger = get_logger(__name__)
@@ -30,41 +32,45 @@ def connect(
3032
threads: list[threading.Thread] = []
3133

3234
for _ in range(count):
33-
# tactics_ambulance_centre: TacticsAmbulanceCentre
34-
if loader.get_tactics_ambulance_center() is not None:
35+
if loader.get_tactics_ambulance_center() is None:
3536
self.logger.error("Cannot load ambulance centre tactics")
36-
# tactics_ambulance_centre = loader.get_tactics_ambulance_centre()
37-
else:
38-
# tactics_ambulance_centre = DummyTacticsAmbulanceCentre()
39-
pass
4037

41-
module_config: ModuleConfig = ModuleConfig( # noqa: F841
38+
tactics_ambulance_center: TacticsAmbulanceCenter = (
39+
loader.get_tactics_ambulance_center()
40+
)
41+
42+
module_config: ModuleConfig = ModuleConfig(
4243
config.get_value(
4344
ConfigKey.KEY_MODULE_CONFIG_FILE_NAME,
4445
ModuleConfig.DEFAULT_CONFIG_FILE_NAME,
4546
)
4647
)
4748

48-
develop_data: DevelopData = DevelopData( # noqa: F841
49+
develop_data: DevelopData = DevelopData(
4950
config.get_value(ConfigKey.KEY_DEBUG_FLAG, False),
5051
config.get_value(
5152
ConfigKey.KEY_DEVELOP_DATA_FILE_NAME, DevelopData.DEFAULT_FILE_NAME
5253
),
5354
)
5455

5556
request_id: int = component_launcher.generate_request_id()
56-
# TODO: component_launcher.generate_request_ID can cause race condition
5757
thread = threading.Thread(
5858
target=component_launcher.connect,
5959
args=(
60-
AmbulanceCenterAgent(
60+
OfficeAmbulance(
61+
tactics_ambulance_center,
62+
"ambulance_center",
6163
config.get_value(ConfigKey.KEY_PRECOMPUTE, False),
62-
), # type: ignore
64+
config.get_value(ConfigKey.KEY_DEBUG_FLAG, False),
65+
"test",
66+
module_config,
67+
develop_data,
68+
),
6369
request_id,
6470
),
65-
name=f"AmbulanceCentreAgent-{request_id}",
71+
name=f"AmbulanceCenterAgent-{request_id}",
6672
)
6773
threads.append(thread)
6874

69-
self.logger.info("Connected ambulance centre (count: %d)" % count)
75+
self.logger.info("Connected ambulance center (count: %d)" % count)
7076
return threads

0 commit comments

Comments
 (0)