Files
Apollo3D_SE/agent/base_agent.py
2026-03-10 09:35:27 -04:00

81 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import logging
from agent.agent import Agent
from world.robot import T1, Robot
from behaviors.behavior_manager import BehaviorManager
from world.world import World
from communication.server import Server
from communication.world_parser import WorldParser
logger = logging.getLogger(__file__)
class Base_Agent:
def __init__(
self,
team_name: str = "Default",
number: int = 1,
host: str = "localhost",
port: int = 60000,
field: str = 'fifa'
):
"""
Initializes the agent and all its main components.
Args:
team_name (str): The name of the team the agent belongs to.
number (int): The player number assigned to this agent.
host (str): The host address of the simulator server.
port (int): The port number of the simulator server.
field (str): The name of the field configuration to use.
"""
self.world: World = World(agent=self, team_name=team_name, number=number, field_name=field)
self.world_parser: WorldParser = WorldParser(agent=self)
self.server: Server = Server(
host=host, port=port, world_parser=self.world_parser
)
self.robot: Robot = T1(agent=self)
self.skills_manager: BehaviorManager = BehaviorManager(agent=self)
self.decision_maker: Agent = Agent(agent=self)
def run(self):
"""
Starts the agents main control loop.
This method:
1. Connects to the simulator server.
2. Sends the initial configuration (init message).
3. Enters the main loop, where it:
- Receives and parses world updates.
- Updates internal world representation.
- Executes the decision-making process.
- Sends the next set of commands to the server.
"""
self.server.connect()
self.server.send_immediate(
f"(init {self.robot.name} {self.world.team_name} {self.world.number})"
)
while True:
try:
self.server.receive()
self.world.update()
self.decision_maker.update_current_behavior()
self.server.send()
except Exception:
self.shutdown()
raise
def shutdown(self):
"""
Safely shuts down the agent.
Logs a shutdown message and closes the server connection.
"""
logger.info("Shutting down.")
self.server.shutdown()