Skip to content

Commit e0d5442

Browse files
authored
Merge pull request #44 from adf-python/adf/core/agent/platoon
adf/core/agent/platoon/platoon_ambulance
2 parents 1698a4b + da95b86 commit e0d5442

File tree

5 files changed

+181
-2
lines changed

5 files changed

+181
-2
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
from rcrs_core.entities.entity import Entity
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.info.scenario_info import Mode
6+
from adf_core_python.core.agent.precompute.precompute_data import PrecomputeData
7+
8+
9+
class Agent(Entity):
10+
def __init__(
11+
self,
12+
team_name: str,
13+
is_precompute: bool,
14+
is_debug: bool,
15+
data_storage_name: str,
16+
module_config: ModuleConfig,
17+
develop_data: DevelopData,
18+
):
19+
self._tema_name = team_name
20+
self._is_precompute = is_precompute
21+
self._is_debug = is_debug
22+
23+
if self._is_precompute:
24+
# PrecomputeData.remove_data(data_storage_name)
25+
self._mode = Mode.PRECOMPUTATION
26+
27+
self._module_config: ModuleConfig = module_config
28+
self._develop_data: DevelopData = develop_data
29+
self._precompute_data: PrecomputeData = PrecomputeData(data_storage_name)
30+
self._message_manager = None

adf_core_python/core/agent/info/scenario_info.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from enum import Enum
22

3-
from rcrs_core.config.config import Config
3+
from adf_core_python.core.config.config import Config
44

55

66
class Mode(Enum):
@@ -71,4 +71,4 @@ def get_config_value(self, key: str, default: str) -> str:
7171
str
7272
Value of the configuration
7373
"""
74-
return self._config.get_value_or_default(key, default)
74+
return self._config.get_value(key, default)

adf_core_python/core/agent/info/world_info.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from typing import Any
22

3+
from rcrs_core.worldmodel.changeSet import ChangeSet
34
from rcrs_core.worldmodel.entityID import EntityID
45
from rcrs_core.worldmodel.worldmodel import WorldModel
56

@@ -10,6 +11,7 @@ def __init__(self, world_model: WorldModel):
1011
self._time: int = 0
1112
self._is_run_rollback: bool = False
1213
self._rollback: dict[EntityID, dict[int, dict[int, Any]]] = {}
14+
self._change_set: ChangeSet
1315

1416
# TODO: Implement the worldmodel access methods
1517
def get_world_model(self) -> WorldModel:
@@ -22,3 +24,14 @@ def get_world_model(self) -> WorldModel:
2224
World model
2325
"""
2426
return self._world_model
27+
28+
def set_change_set(self, change_set: ChangeSet) -> None:
29+
"""
30+
Set the change set
31+
32+
Parameters
33+
----------
34+
change_set : ChangeSet
35+
Change set
36+
"""
37+
self._change_set = change_set
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
from logging import Logger, getLogger
2+
3+
from rcrs_core.agents.agent import Agent
4+
from rcrs_core.commands.Command import Command
5+
from rcrs_core.worldmodel.changeSet import ChangeSet
6+
7+
from adf_core_python.core.agent.action.action import Action
8+
from adf_core_python.core.agent.communication.message_manager import MessageManager
9+
from adf_core_python.core.agent.config.module_config import ModuleConfig
10+
from adf_core_python.core.agent.develop.develop_data import DevelopData
11+
from adf_core_python.core.agent.info.agent_info import AgentInfo
12+
from adf_core_python.core.agent.info.scenario_info import Mode, ScenarioInfo
13+
from adf_core_python.core.agent.info.world_info import WorldInfo
14+
from adf_core_python.core.agent.module.module_manager import ModuleManager
15+
from adf_core_python.core.agent.precompute.precompute_data import PrecomputeData
16+
from adf_core_python.core.component.tactics.tactics_agent import TacticsAgent
17+
18+
19+
class Platoon(Agent):
20+
def __init__(
21+
self,
22+
tactics_agent: TacticsAgent,
23+
team_name: str,
24+
is_precompute: bool,
25+
is_debug: bool,
26+
data_storage_name: str,
27+
module_config: ModuleConfig,
28+
develop_data: DevelopData,
29+
) -> None:
30+
super().__init__(
31+
is_precompute,
32+
)
33+
self._tactics_agent = tactics_agent
34+
self._team_name = team_name
35+
self._is_precompute = is_precompute
36+
self._is_debug = is_debug
37+
self._data_storage_name = data_storage_name
38+
self._module_config = module_config
39+
self._develop_data = develop_data
40+
41+
def post_connect(self) -> None:
42+
self._logger: Logger = getLogger(__name__)
43+
self._agent_info: AgentInfo = AgentInfo(self, self.world_model)
44+
self._world_info: WorldInfo = WorldInfo(self.world_model)
45+
self._precompute_data: PrecomputeData = PrecomputeData(self._data_storage_name)
46+
47+
if self._is_precompute:
48+
self._mode = Mode.PRECOMPUTATION
49+
else:
50+
# if self._precompute_data.is_ready():
51+
# self._mode = Mode.PRECOMPUTED
52+
# else:
53+
# self._mode = Mode.NON_PRECOMPUTE
54+
self._mode = Mode.NON_PRECOMPUTE
55+
56+
self._scenario_info: ScenarioInfo = ScenarioInfo(self.config, self._mode) # type: ignore
57+
self._module_manager: ModuleManager = ModuleManager(
58+
self._agent_info,
59+
self._world_info,
60+
self._scenario_info,
61+
self._module_config,
62+
self._develop_data,
63+
)
64+
65+
self._tactics_agent.initialize(
66+
self._agent_info,
67+
self._world_info,
68+
self._scenario_info,
69+
self._module_manager,
70+
self._precompute_data,
71+
MessageManager(),
72+
self._develop_data,
73+
)
74+
75+
match self._mode:
76+
case Mode.PRECOMPUTATION:
77+
pass
78+
case Mode.PRECOMPUTED:
79+
pass
80+
case Mode.NON_PRECOMPUTE:
81+
self._tactics_agent.prepare(
82+
self._agent_info,
83+
self._world_info,
84+
self._scenario_info,
85+
self._module_manager,
86+
self._precompute_data,
87+
self._develop_data,
88+
)
89+
90+
def think(self, time: int, change_set: ChangeSet, hear: list[Command]) -> None:
91+
action: Action = self._tactics_agent.think(
92+
self._agent_info,
93+
self._world_info,
94+
self._scenario_info,
95+
self._module_manager,
96+
self._precompute_data,
97+
MessageManager(),
98+
self._develop_data,
99+
)
100+
if action is not None and self.agent_id is not None:
101+
self._agent_info.set_executed_action(time, action)
102+
self.send_msg(action.get_command(self.agent_id, time))
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from rcrs_core.connection import URN
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.platoon.platoon import Platoon
6+
from adf_core_python.core.component.tactics.tactics_agent import TacticsAgent
7+
8+
9+
class PlatoonAmbulance(Platoon):
10+
def __init__(
11+
self,
12+
tactics_agent: TacticsAgent,
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+
):
20+
super().__init__(
21+
tactics_agent,
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[str]:
34+
return [URN.Entity.AMBULANCE_TEAM]

0 commit comments

Comments
 (0)