From b37847b304f63bfd7a18a780b4973ecaac88538d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aleksander=20Szama=C5=82ek?= Date: Thu, 9 Jun 2022 22:36:19 +0200 Subject: [PATCH] item display row --- ForkliftAgent.py | 2 +- GameModel.py | 15 +++++++++++---- InitialStateFactory.py | 7 ++++--- data/Item.py | 3 ++- main.py | 15 ++++++++++++++- 5 files changed, 32 insertions(+), 10 deletions(-) diff --git a/ForkliftAgent.py b/ForkliftAgent.py index 2791a5b..32b4580 100644 --- a/ForkliftAgent.py +++ b/ForkliftAgent.py @@ -141,8 +141,8 @@ class ForkliftAgent(AgentBase): [Action(ActionType.DROP_ITEM)] ) - self.current_item = None self.current_order_delivered_items.append(self.current_item) + self.current_item = None self.item_station_completed = False def step(self) -> None: diff --git a/GameModel.py b/GameModel.py index 8d8fc11..162a0f4 100644 --- a/GameModel.py +++ b/GameModel.py @@ -71,12 +71,12 @@ class GameModel(Model): self.schedule.add(self.forklift_agent) self.agents.append(self.forklift_agent) - self.display_agents: List[ItemDisplayAgent] = [] + self.item_display_agents: List[ItemDisplayAgent] = [] # INITIALIZATION # print("############## INITIALIZATION ##############") self.phase = Phase.INIT - self.initialize_grid(graph) + self.initialize_grid(graph, item_display_pos) self.orderList: List[Order] = InitialStateFactory.generate_order_list(orders) self.fulfilled_orders: List[Order] = [] self.forklift_agent.orderList = self.orderList @@ -105,7 +105,7 @@ class GameModel(Model): print(actions) self.forklift_agent.queue_movement_actions(actions) - def initialize_grid(self, graph: GridWithWeights): + def initialize_grid(self, graph: GridWithWeights, item_display_pos): print("INITIALIZING GRID") # Add the agent to a random grid cell x = 5 @@ -126,6 +126,7 @@ class GameModel(Model): self.place_walls_agents(graph.walls) self.place_puddles(graph.puddles) self.place_packing_stations(graph.packingStations) + self.place_order_items_display(item_display_pos) def place_dividers(self): for i in range(0, 10): @@ -169,13 +170,19 @@ class GameModel(Model): def place_order_items_display(self, item_positions: List[GridLocation]): for p in item_positions: agent = ItemDisplayAgent(self, p) - self.display_agents.append(agent) + self.item_display_agents.append(agent) self.grid.place_agent(agent, p) + def update_item_display(self): + for index, item in enumerate(self.forklift_agent.current_order_delivered_items): + if item is not None: + self.item_display_agents[index].image = item.image + def step(self): self.schedule.step() self.grid.remove_agent(self.forklift_agent) self.grid.place_agent(self.forklift_agent, self.forklift_agent.current_position) + self.update_item_display() if self.phase == Phase.ITEM_RECOGNITION: if not self.item_recognised and self.forklift_agent.current_position == self.drop_off.location: diff --git a/InitialStateFactory.py b/InitialStateFactory.py index 1289f0c..83fb4d1 100644 --- a/InitialStateFactory.py +++ b/InitialStateFactory.py @@ -5,13 +5,14 @@ from data.Order import Order from data.enum.ItemType import ItemType from data.enum.Priority import Priority from util.ClientParamsFactory import ClientParamsFactory +from util.PathByEnum import PathByEnum class InitialStateFactory: @staticmethod def generate_item_list(output_list_size: int): - item_list : [Item] = [] + item_list: [Item] = [] for i in range(output_list_size): item_list.append(InitialStateFactory.__generate_item()) @@ -74,7 +75,7 @@ class InitialStateFactory: @staticmethod def generate_input_sequence(self, input_sequence_size): - sequence : [Item] = [] + sequence: [Item] = [] for i in range(0, input_sequence_size): sequence.append(self.__generate_item()) @@ -83,4 +84,4 @@ class InitialStateFactory: @staticmethod def __generate_item() -> Item: randomly_picked_type = random.choice(list(ItemType)) - return Item(randomly_picked_type) + return Item(randomly_picked_type, PathByEnum.get_random_path(randomly_picked_type)) diff --git a/data/Item.py b/data/Item.py index bf2f67c..4d50d18 100644 --- a/data/Item.py +++ b/data/Item.py @@ -6,9 +6,10 @@ from data.enum.ItemType import ItemType class Item: id_counter = count(start=0) - def __init__(self, item_type: ItemType): + def __init__(self, item_type: ItemType, image): self.id = next(self.id_counter) self.real_type = item_type + self.image = image self.guessed_type = None def __repr__(self) -> str: diff --git a/main.py b/main.py index b8b216b..71326f9 100644 --- a/main.py +++ b/main.py @@ -8,6 +8,7 @@ from tensorflow import keras from ForkliftAgent import ForkliftAgent from GameModel import GameModel from InitialStateFactory import InitialStateFactory +from ItemDisplayAgent import ItemDisplayAgent from PatchAgent import PatchAgent from PatchType import PatchType from PictureVisualizationAgent import PictureVisualizationAgent @@ -79,6 +80,18 @@ def agent_portrayal(agent): if isinstance(agent, PictureVisualizationAgent): portrayal = {"Shape": f"{agent.img}", "scale": 3.0, "Layer": 0} + if isinstance(agent, ItemDisplayAgent): + if agent is not None and agent.image is not None: + portrayal = {"Shape": f"{agent.image}", "scale": 1.0, "Layer": 0} + else: + portrayal = \ + {"Shape": "rect", + "Filled": "true", + "Layer": 0, + "Color": "black", + "w": 1, + "h": 1} + return portrayal @@ -111,7 +124,7 @@ if __name__ == '__main__': fulfilled_orders], "Automatyczny Wózek Widłowy", dict(width=gridHeight, height=gridWidth, graph=diagram, items=50, orders=3, - classificator=model,item_display_pos=display_items)) + classificator=model, item_display_pos=display_items)) server.port = 8888 server.launch()