Ejemplo n.º 1
0
    async def run(self):
        if self.agent.traveller.agent_type == "global":
            msg = build_message(
                "request", "get_route", self.agent.name,
                f"{self.agent.traveller.current_node}"
                f"|{self.agent.traveller.destination_node}|{self.agent.traveller.init_state}",
                SUPERVISOR_AGENT)
            await self.send(msg)
        elif self.agent.traveller.agent_type == "local":

            if self.agent.traveller.init_state:
                msg = build_message(
                    "request", "get_speed", self.agent.name,
                    f"{self.agent.traveller.current_node}"
                    f"|{self.agent.traveller.next_node}"
                    f"|{self.agent.traveller.init_state}"
                    f"|{self.agent.traveller.get_route_travel_times()}"
                    f"|{self.agent.traveller.route}", SUPERVISOR_AGENT)
            else:
                msg = build_message(
                    "request", "get_speed", self.agent.name,
                    f"{self.agent.traveller.current_node}"
                    f"|{self.agent.traveller.next_node}"
                    f"|{self.agent.traveller.init_state}"
                    f"|{self.agent.traveller.get_route_travel_times()}"
                    f"|{self.agent.traveller.route[self.agent.traveller.node_count-1:]}",
                    SUPERVISOR_AGENT)
            await self.send(msg)

        self.agent.traveller.init_state = False
        await asyncio.sleep(0)
        self.set_next_state(STATE_RECEIVE_ROUTE)
Ejemplo n.º 2
0
 async def run(self):
     msg = build_message(
         "inform", "spawn", self.agent.name,
         f"{get_timestamp()}|{self.agent.traveller.current_node}|"
         f"{self.agent.traveller.agent_type}", SUPERVISOR_AGENT)
     await self.send(msg)
     await asyncio.sleep(0)
     self.set_next_state(STATE_GET_ROUTE)
Ejemplo n.º 3
0
 async def run(self):
     if self.agent.traveller.agent_type == "global":
         msg = build_message(
             "inform", "edge_start", self.agent.name,
             f"{get_timestamp()}|{self.agent.traveller.current_node}|"
             f"{self.agent.traveller.next_node}|"
             f"{self.agent.traveller.agent_type}", SUPERVISOR_AGENT)
     elif self.agent.traveller.agent_type == "local":
         msg = build_message(
             "inform", "edge_start", self.agent.name,
             f"{get_timestamp()}|{self.agent.traveller.current_node}|"
             f"{self.agent.traveller.next_node}|"
             f"{self.agent.traveller.agent_type}|"
             f"{self.agent.traveller.get_estimated_travel_time()}",
             SUPERVISOR_AGENT)
     await self.send(msg)
     await asyncio.sleep(0)
     self.set_next_state(STATE_DRIVE)
Ejemplo n.º 4
0
 async def run(self):
     msg = build_message(
         "inform", "arrived", self.agent.name, f"{get_timestamp()}|"
         f"{self.agent.traveller.current_node}", SUPERVISOR_AGENT)
     print("arrived")
     await self.send(msg)
     await asyncio.sleep(0)
     self.agent.traveller.inc_route_count()
     if self.agent.traveller.route_count == self.agent.traveller.num_routes:
         self.set_next_state(STATE_FINAL)
     else:
         self.agent.traveller.destination_node = self.agent.traveller.choose_destination_node(
         )
         self.set_next_state(STATE_SPAWN)
Ejemplo n.º 5
0
 async def run(self):
     msg = build_message(
         "inform", "edge_end", self.agent.name,
         f"{self.agent.traveller.current_node}|"
         f"{self.agent.traveller.next_node}", SUPERVISOR_AGENT)
     await self.send(msg)
     self.agent.traveller.current_node = self.agent.traveller.next_node
     if not self.agent.traveller.final_edge:
         self.agent.traveller.set_next_node()
     await asyncio.sleep(0)
     if self.agent.traveller.current_node == self.agent.traveller.destination_node or self.agent.traveller.final_edge:
         self.set_next_state(STATE_ARRIVED)
     else:
         self.set_next_state(STATE_GET_ROUTE)
        async def run(self):
            self.presence.on_subscribe = self.on_subscribe
            msg = await self.receive()
            if msg:
                print(msg)
                to = str(msg.sender)
                agent_id = to
                to = to + "@localhost"
                endpoint = msg.get_metadata("endpoint")
                if endpoint == "get_route":
                    msg_body = msg.body.split("|")
                    current_node = msg_body[0]
                    destination_node = msg_body[1]
                    init_state = msg_body[2]
                    route = self.agent.supervisor.get_route(
                        int(current_node), int(destination_node))
                    next_node = route[1]
                    self.agent.supervisor.increment_density(
                        int(current_node), int(next_node))
                    self.agent.supervisor.update_travel_time(
                        int(current_node), int(next_node))
                    speed = self.agent.supervisor.get_speed(
                        int(current_node), int(next_node))
                    answer = build_message("inform",
                                           "get_network",
                                           self.agent.name, f"{next_node}|"
                                           f"{speed}",
                                           to=to)
                    await self.send(answer)
                    travel_times = self.agent.supervisor.get_route_travel_time(
                        route)
                    if init_state == "True":
                        self.agent.supervisor.planner_logger.log_plan(
                            "INIT", agent_id, get_timestamp(), route,
                            travel_times)
                    else:
                        old_route = self.agent.supervisor.traveller_state_dict[
                            agent_id][0].copy()
                        old_travel_times = self.agent.supervisor.traveller_state_dict[
                            agent_id][1].copy()
                        old_route.pop(0)
                        old_travel_times.pop(0)
                        if route != old_route:
                            self.agent.supervisor.planner_logger.log_plan(
                                "REROUTE", agent_id, get_timestamp(), route,
                                travel_times)
                        elif travel_times != old_travel_times:
                            self.agent.supervisor.planner_logger.log_plan(
                                "UPDATE", agent_id, get_timestamp(), route,
                                travel_times)

                    self.agent.supervisor.traveller_state_dict[agent_id] = [
                        route, travel_times,
                        int(current_node),
                        int(next_node),
                        int(speed)
                    ]
                elif endpoint == "get_speed":
                    msg_body = msg.body.split("|")
                    current_node = msg_body[0]
                    next_node = msg_body[1]
                    init_state = msg_body[2]
                    travel_times = msg_body[3][1:-1]
                    if len(travel_times) > 0:
                        travel_times = [i for i in travel_times.split(",")]
                    travel_times = [float(i) * 1000 for i in travel_times]
                    route = msg_body[4][1:-1]
                    if len(route) > 1:
                        route = [int(i) for i in route.split(",")]
                    self.agent.supervisor.increment_density(
                        int(current_node), int(next_node))
                    self.agent.supervisor.update_travel_time(
                        int(current_node), int(next_node))
                    speed = self.agent.supervisor.get_speed(
                        int(current_node), int(next_node))
                    answer = build_message("inform",
                                           "get_speed",
                                           self.agent.name,
                                           f"{speed}",
                                           to=to)
                    await self.send(answer)
                    if init_state == "True":
                        self.agent.supervisor.planner_logger.log_plan(
                            "INIT", agent_id, get_timestamp(), route,
                            travel_times)
                    else:
                        old_travel_times = self.agent.supervisor.traveller_state_dict[
                            agent_id][1].copy()
                        old_travel_times.pop(0)
                        if travel_times != old_travel_times:
                            self.agent.supervisor.planner_logger.log_plan(
                                "UPDATE", agent_id, get_timestamp(), route,
                                travel_times)

                    self.agent.supervisor.traveller_state_dict[agent_id] = [
                        route, travel_times,
                        int(current_node),
                        int(next_node),
                        int(speed)
                    ]

                elif endpoint == "spawn":
                    msg_body = msg.body.split("|")
                    ts = msg_body[0]
                    start_node = msg_body[1]
                    agent_type = msg_body[2]
                    self.agent.supervisor.car_logger.log_spawn(
                        agent_id, ts, start_node, agent_type)

                elif endpoint == "edge_start":
                    msg_body = msg.body.split("|")
                    ts = msg_body[0]
                    current_node = msg_body[1]
                    next_node = msg_body[2]
                    agent_type = msg_body[3]
                    print(agent_type)
                    if agent_type == "global":
                        self.agent.supervisor.car_logger.log_enter(
                            agent_id, ts, current_node, next_node,
                            int(
                                self.agent.supervisor.get_travel_time(
                                    int(current_node), int(next_node))))
                    elif agent_type == "local":
                        travel_time = msg_body[4]
                        self.agent.supervisor.car_logger.log_enter(
                            agent_id, ts, current_node, next_node,
                            int(float(travel_time) * 1000))

                elif endpoint == "edge_end":
                    msg_body = msg.body.split("|")
                    last_node = msg_body[0]
                    next_node = msg_body[1]
                    self.agent.supervisor.decrement_density(
                        int(last_node), int(next_node))
                    self.agent.supervisor.update_travel_time(
                        int(last_node), int(next_node))
                elif endpoint == "arrived":
                    msg_body = msg.body.split("|")
                    ts = msg_body[0]
                    end_node = msg_body[1]
                    self.agent.supervisor.car_logger.log_arrived(
                        agent_id, ts, end_node)
                elif endpoint == "despawn":
                    self.agent.supervisor.car_logger.log_despawn(
                        agent_id, msg.body)
                elif endpoint == "event_road_works_start":
                    msg_body = msg.body.split("|")
                    ts = msg_body[0]
                    node1 = int(msg_body[1])
                    node2 = int(msg_body[2])
                    factor = float(msg_body[3])
                    self.agent.supervisor.set_factor(node1, node2, factor)
                    self.agent.supervisor.update_travel_time(node1, node2)
                    self.agent.supervisor.event_logger.log_event(
                        ts, node1, node2, factor)
                elif endpoint == "event_road_works_end":
                    msg_body = msg.body.split("|")
                    ts = msg_body[0]
                    node1 = int(msg_body[1])
                    node2 = int(msg_body[2])
                    factor = 1
                    self.agent.supervisor.delete_factor(node1, node2)
                    self.agent.supervisor.update_travel_time(node1, node2)
                    self.agent.supervisor.event_logger.log_event(
                        ts, node1, node2, factor)

                await asyncio.sleep(0)
Ejemplo n.º 7
0
 async def on_end(self):
     print(f"Stopping Agent {self.agent.name}")
     msg = build_message("inform", "despawn", self.agent.name,
                         get_timestamp(), SUPERVISOR_AGENT)
     await self.send(msg)
     self.agent.stop()