81 lines
2.5 KiB
Python
81 lines
2.5 KiB
Python
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 = 'sim3d_7vs7'
|
||
):
|
||
"""
|
||
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 agent’s 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() |