Skip to content

Commit 2240b04

Browse files
authored
Merge pull request #40 from adf-python/adf/core/launcher/agent_launcher
adf/core/launcher/agent_launcherとその依存モジュールの実装
2 parents 807a3cb + baff75a commit 2240b04

29 files changed

+975
-102
lines changed
Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,54 @@
11
from abc import ABC, abstractmethod
2+
from typing import TYPE_CHECKING, Optional
3+
4+
if TYPE_CHECKING:
5+
from adf_core_python.core.component.tactics.tactics_ambulance_center import (
6+
TacticsAmbulanceCenter,
7+
)
8+
from adf_core_python.core.component.tactics.tactics_ambulance_team import (
9+
TacticsAmbulanceTeam,
10+
)
11+
from adf_core_python.core.component.tactics.tactics_fire_brigade import (
12+
TacticsFireBrigade,
13+
)
14+
from adf_core_python.core.component.tactics.tactics_fire_station import (
15+
TacticsFireStation,
16+
)
17+
from adf_core_python.core.component.tactics.tactics_police_force import (
18+
TacticsPoliceForce,
19+
)
20+
from adf_core_python.core.component.tactics.tactics_police_office import (
21+
TacticsPoliceOffice,
22+
)
223

324

425
class AbstractLoader(ABC):
5-
def __init__(self) -> None:
6-
self._team_name: str = ""
26+
def __init__(self, team_name: Optional[str] = None):
27+
self._team_name: str = "" if team_name is None else team_name
728

829
def get_team_name(self) -> str:
930
return self._team_name
1031

11-
def set_team_name(self, team_name: str) -> None:
12-
self._team_name = team_name
13-
14-
# TODO: Add more abstract methods here
1532
@abstractmethod
16-
def get_tactics_ambulance_team(self) -> None:
33+
def get_tactics_ambulance_team(self) -> TacticsAmbulanceTeam:
1734
raise NotImplementedError
1835

1936
@abstractmethod
20-
def get_tactics_fire_brigade(self) -> None:
37+
def get_tactics_fire_brigade(self) -> TacticsFireBrigade:
2138
raise NotImplementedError
2239

2340
@abstractmethod
24-
def get_tactics_police_force(self) -> None:
41+
def get_tactics_police_force(self) -> TacticsPoliceForce:
2542
raise NotImplementedError
2643

2744
@abstractmethod
28-
def get_tactics_ambulance_centre(self) -> None:
45+
def get_tactics_ambulance_center(self) -> TacticsAmbulanceCenter:
2946
raise NotImplementedError
3047

3148
@abstractmethod
32-
def get_tactics_fire_station(self) -> None:
49+
def get_tactics_fire_station(self) -> TacticsFireStation:
3350
raise NotImplementedError
3451

3552
@abstractmethod
36-
def get_tactics_police_office(self) -> None:
53+
def get_tactics_police_office(self) -> TacticsPoliceOffice:
3754
raise NotImplementedError
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
from __future__ import annotations
2+
3+
from abc import abstractmethod
4+
from typing import TYPE_CHECKING
5+
6+
from rcrs_core.entities.human import Human
7+
8+
if TYPE_CHECKING:
9+
from adf_core_python.core.agent.develop.develop_data import DevelopData
10+
from adf_core_python.core.agent.info.agent_info import AgentInfo
11+
from adf_core_python.core.agent.info.scenario_info import ScenarioInfo
12+
from adf_core_python.core.agent.info.world_info import WorldInfo
13+
from adf_core_python.core.agent.module.module_manager import ModuleManager
14+
from adf_core_python.core.agent.precompute.precompute_data import PrecomputeData
15+
from adf_core_python.core.component.module.complex.target_detector import (
16+
TargetDetector,
17+
)
18+
19+
20+
class HumanDetector(TargetDetector[Human]):
21+
def __init__(
22+
self,
23+
agent_info: AgentInfo,
24+
world_info: WorldInfo,
25+
scenario_info: ScenarioInfo,
26+
module_manager: ModuleManager,
27+
develop_data: DevelopData,
28+
) -> None:
29+
super().__init__(
30+
agent_info, world_info, scenario_info, module_manager, develop_data
31+
)
32+
33+
def precompute(self, precompute_data: PrecomputeData) -> HumanDetector:
34+
super().precompute(precompute_data)
35+
return self
36+
37+
def resume(self, precompute_data: PrecomputeData) -> HumanDetector:
38+
super().resume(precompute_data)
39+
return self
40+
41+
def prepare(self) -> HumanDetector:
42+
super().prepare()
43+
return self
44+
45+
@abstractmethod
46+
def calculate(self) -> HumanDetector:
47+
return self
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
from __future__ import annotations
2+
3+
from abc import abstractmethod
4+
from typing import TYPE_CHECKING
5+
6+
from rcrs_core.entities.area import Area
7+
8+
if TYPE_CHECKING:
9+
from adf_core_python.core.agent.develop.develop_data import DevelopData
10+
from adf_core_python.core.agent.info.agent_info import AgentInfo
11+
from adf_core_python.core.agent.info.scenario_info import ScenarioInfo
12+
from adf_core_python.core.agent.info.world_info import WorldInfo
13+
from adf_core_python.core.agent.module.module_manager import ModuleManager
14+
from adf_core_python.core.agent.precompute.precompute_data import PrecomputeData
15+
from adf_core_python.core.component.module.complex.target_detector import (
16+
TargetDetector,
17+
)
18+
19+
20+
class Search(TargetDetector[Area]):
21+
def __init__(
22+
self,
23+
agent_info: AgentInfo,
24+
world_info: WorldInfo,
25+
scenario_info: ScenarioInfo,
26+
module_manager: ModuleManager,
27+
develop_data: DevelopData,
28+
) -> None:
29+
super().__init__(
30+
agent_info, world_info, scenario_info, module_manager, develop_data
31+
)
32+
33+
def precompute(self, precompute_data: PrecomputeData) -> Search:
34+
super().precompute(precompute_data)
35+
return self
36+
37+
def resume(self, precompute_data: PrecomputeData) -> Search:
38+
super().resume(precompute_data)
39+
return self
40+
41+
def prepare(self) -> Search:
42+
super().prepare()
43+
return self
44+
45+
@abstractmethod
46+
def calculate(self) -> Search:
47+
return self
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
from __future__ import annotations
2+
3+
from abc import abstractmethod
4+
from typing import TYPE_CHECKING, Generic, TypeVar
5+
6+
from rcrs_core.entities.entity import Entity
7+
8+
from adf_core_python.core.component.module.abstract_module import AbstractModule
9+
10+
if TYPE_CHECKING:
11+
from rcrs_core.worldmodel.entityID import EntityID
12+
13+
from adf_core_python.core.agent.communication.message_manager import MessageManager
14+
from adf_core_python.core.agent.develop.develop_data import DevelopData
15+
from adf_core_python.core.agent.info.agent_info import AgentInfo
16+
from adf_core_python.core.agent.info.scenario_info import ScenarioInfo
17+
from adf_core_python.core.agent.info.world_info import WorldInfo
18+
from adf_core_python.core.agent.module.module_manager import ModuleManager
19+
from adf_core_python.core.agent.precompute.precompute_data import PrecomputeData
20+
21+
T = TypeVar("T", bound=Entity)
22+
23+
24+
class TargetDetector(AbstractModule, Generic[T]):
25+
def __init__(
26+
self,
27+
agent_info: AgentInfo,
28+
world_info: WorldInfo,
29+
scenario_info: ScenarioInfo,
30+
module_manager: ModuleManager,
31+
develop_data: DevelopData,
32+
) -> None:
33+
super().__init__(
34+
agent_info, world_info, scenario_info, module_manager, develop_data
35+
)
36+
37+
@abstractmethod
38+
def get_target_entity_id(self) -> EntityID:
39+
pass
40+
41+
@abstractmethod
42+
def calculate(self) -> TargetDetector[T]:
43+
pass
44+
45+
def precompute(self, precompute_data: PrecomputeData) -> TargetDetector[T]:
46+
super().precompute(precompute_data)
47+
return self
48+
49+
def resume(self, precompute_data: PrecomputeData) -> TargetDetector[T]:
50+
super().resume(precompute_data)
51+
return self
52+
53+
def prepare(self) -> TargetDetector[T]:
54+
super().prepare()
55+
return self
56+
57+
def update_info(self, message_manager: MessageManager) -> TargetDetector[T]:
58+
super().update_info(message_manager)
59+
return self

adf_core_python/core/component/tactics/tactics_agent.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from typing import TYPE_CHECKING, Any, Optional
55

66
if TYPE_CHECKING:
7+
from adf_core_python.core.agent.action.action import Action
78
from adf_core_python.core.agent.communication.message_manager import MessageManager
89
from adf_core_python.core.agent.develop.develop_data import DevelopData
910
from adf_core_python.core.agent.info.agent_info import AgentInfo
@@ -74,7 +75,7 @@ def prepare(
7475
raise NotImplementedError
7576

7677
@abstractmethod
77-
def update_info(
78+
def think(
7879
self,
7980
agent_info: AgentInfo,
8081
world_info: WorldInfo,
@@ -83,7 +84,7 @@ def update_info(
8384
precompute_data: PrecomputeData,
8485
message_manager: MessageManager,
8586
develop_data: DevelopData,
86-
) -> None:
87+
) -> Action:
8788
raise NotImplementedError
8889

8990
def get_parent_tactics(self) -> Optional[TacticsAgent]:

adf_core_python/core/component/tactics/tactics_ambulance_center.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
from __future__ import annotations
22

3-
from typing import TYPE_CHECKING, Optional
3+
from typing import Optional
44

5-
if TYPE_CHECKING:
6-
from adf_core_python.core.component.tactics.tactics_center import TacticsCenter
5+
from adf_core_python.core.component.tactics.tactics_center import TacticsCenter
76

87

98
class TacticsAmbulanceCenter(TacticsCenter):

adf_core_python/core/component/tactics/tactics_ambulance_team.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
from __future__ import annotations
22

3-
from typing import TYPE_CHECKING, Optional
3+
from typing import Optional
44

5-
if TYPE_CHECKING:
6-
from adf_core_python.core.component.tactics.tactics_agent import TacticsAgent
5+
from adf_core_python.core.component.tactics.tactics_agent import TacticsAgent
76

87

98
class TacticsAmbulanceTeam(TacticsAgent):

adf_core_python/core/component/tactics/tactics_fire_brigade.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
from __future__ import annotations
22

3-
from typing import TYPE_CHECKING, Optional
3+
from typing import Optional
44

5-
if TYPE_CHECKING:
6-
from adf_core_python.core.component.tactics.tactics_agent import TacticsAgent
5+
from adf_core_python.core.component.tactics.tactics_agent import TacticsAgent
76

87

98
class TacticsFireBrigade(TacticsAgent):

adf_core_python/core/component/tactics/tactics_fire_station.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
from __future__ import annotations
22

3-
from typing import TYPE_CHECKING, Optional
3+
from typing import Optional
44

5-
if TYPE_CHECKING:
6-
from adf_core_python.core.component.tactics.tactics_center import TacticsCenter
5+
from adf_core_python.core.component.tactics.tactics_center import TacticsCenter
76

87

98
class TacticsFireStation(TacticsCenter):

adf_core_python/core/component/tactics/tactics_police_force.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
from __future__ import annotations
22

3-
from typing import TYPE_CHECKING, Optional
3+
from typing import Optional
44

5-
if TYPE_CHECKING:
6-
from adf_core_python.core.component.tactics.tactics_agent import TacticsAgent
5+
from adf_core_python.core.component.tactics.tactics_agent import TacticsAgent
76

87

98
class TacticsPoliceForce(TacticsAgent):

0 commit comments

Comments
 (0)