ItemDisplayAgent

This commit is contained in:
Jeremi Lisek 2022-06-09 21:54:00 +02:00 committed by Aleksander Szamałek
parent 153f16bcc0
commit 23950ba5b5
4 changed files with 27 additions and 64 deletions

View File

@ -9,6 +9,7 @@ from mesa.time import RandomActivation
from AgentBase import AgentBase from AgentBase import AgentBase
from ForkliftAgent import ForkliftAgent from ForkliftAgent import ForkliftAgent
from InitialStateFactory import InitialStateFactory from InitialStateFactory import InitialStateFactory
from ItemDisplayAgent import ItemDisplayAgent
from PatchAgent import PatchAgent from PatchAgent import PatchAgent
from PatchType import PatchType from PatchType import PatchType
from PictureVisualizationAgent import PictureVisualizationAgent from PictureVisualizationAgent import PictureVisualizationAgent
@ -36,7 +37,9 @@ class Phase(Enum):
class GameModel(Model): class GameModel(Model):
def __init__(self, width, height, graph: GridWithWeights, items: int, orders: int, classificator): def __init__(self, width, height, graph: GridWithWeights, items: int, orders: int, classificator,
item_display_pos: List[GridLocation]):
# self.num_agents = 5 # self.num_agents = 5
self.first = True self.first = True
self.item_recognised = False self.item_recognised = False
@ -68,6 +71,7 @@ class GameModel(Model):
self.schedule.add(self.forklift_agent) self.schedule.add(self.forklift_agent)
self.agents.append(self.forklift_agent) self.agents.append(self.forklift_agent)
self.display_agents: List[ItemDisplayAgent] = []
# INITIALIZATION # # INITIALIZATION #
print("############## INITIALIZATION ##############") print("############## INITIALIZATION ##############")
@ -162,6 +166,12 @@ class GameModel(Model):
self.agents.append(agent) self.agents.append(agent)
self.grid.place_agent(agent, p[1]) self.grid.place_agent(agent, p[1])
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.grid.place_agent(agent, p)
def step(self): def step(self):
self.schedule.step() self.schedule.step()
self.grid.remove_agent(self.forklift_agent) self.grid.remove_agent(self.forklift_agent)

10
ItemDisplayAgent.py Normal file
View File

@ -0,0 +1,10 @@
from PatchAgent import PatchAgent
from PatchType import PatchType
from util.PathDefinitions import GridLocation
class ItemDisplayAgent(PatchAgent):
def __init__(self, model, location: GridLocation):
self.image = None
super().__init__(model, location, patch_type=PatchType.itemDisplay)

View File

@ -11,3 +11,4 @@ class PatchType(enum.Enum):
packingRefrigerator = 7 packingRefrigerator = 7
packingDoor = 8 packingDoor = 8
divider = 9 divider = 9
itemDisplay = 10

68
main.py
View File

@ -3,6 +3,7 @@ import random
from mesa.visualization.ModularVisualization import ModularServer from mesa.visualization.ModularVisualization import ModularServer
from mesa.visualization.modules import CanvasGrid from mesa.visualization.modules import CanvasGrid
from tensorflow import keras
from ForkliftAgent import ForkliftAgent from ForkliftAgent import ForkliftAgent
from GameModel import GameModel from GameModel import GameModel
@ -94,6 +95,8 @@ if __name__ == '__main__':
grid = CanvasGrid(agent_portrayal, gridWidth, gridHeight, scale * gridWidth, scale * gridHeight) grid = CanvasGrid(agent_portrayal, gridWidth, gridHeight, scale * gridWidth, scale * gridHeight)
display_items = [(6, 11), (7, 11), (8, 11), (9, 11)]
readyText = DisplayAttributeElement("phase") readyText = DisplayAttributeElement("phase")
# current_item = DisplayPictureElement("current_item_recognition") # current_item = DisplayPictureElement("current_item_recognition")
provided_itesm = DisplayItemListAttributeElement("provided_items") provided_itesm = DisplayItemListAttributeElement("provided_items")
@ -107,69 +110,8 @@ if __name__ == '__main__':
[grid, readyText, provided_itesm, recognised_items, ordersText, [grid, readyText, provided_itesm, recognised_items, ordersText,
fulfilled_orders], fulfilled_orders],
"Automatyczny Wózek Widłowy", "Automatyczny Wózek Widłowy",
dict(width=gridHeight, height=gridWidth, graph=diagram, items=50, orders=20, classificator=model)) dict(width=gridHeight, height=gridWidth, graph=diagram, items=50, orders=3,
classificator=model,item_display_pos=display_items))
# def order_rule(order: Order):
# return order.id
#
#
# punish_low = 500
# punish_med = 300
# def sum_wrong(member: [Order]) -> int:
# last_high = 0
# last_med = 0
#
# sum_high = 0
# sum_med = 0
# sum_low = 0
#
# counter = 0
#
# for i in range(len(member)):
# o: Order = member[i]
# if o.priority == Priority.HIGH :
# sum_high += 1
# last_high = i
# elif o.priority == Priority.MEDIUM:
# sum_med += 1
# last_med = i
# else:
# sum_low += 1
#
# for i in range(last_high):
# o: Order = member[i]
# if o.priority == Priority.MEDIUM:
# counter += punish_med
# elif o.priority == Priority.LOW:
# counter += punish_low
#
# for i in range(last_med):
# o: Order = member[i]
# if o.priority == Priority.LOW:
# counter += punish_low
#
# print("sum: high:", sum_high, "med:", sum_med, "low:", sum_low)
# print("last_high:", last_high, "last_med:", last_med, "sum:", counter)
# return counter
#
# orders = InitialStateFactory.generate_order_list_XD(20)
# test: GeneticOrder = GeneticOrder(orders)
# punish_low = test.punish_low
# punish_med = test.punish_med
#
# print("SIEMA before: ")
# sum_wrong(orders)
# for i in orders:
# print("id:", i.id, "priority:", i.priority, "sum/time:", i.sum/i.time)
# # print("id:", i.id, "priority:", i.priority)
#
# newOrders = test.get_orders_sorted(orders)
#
# print("NAURA after:")
# sum_wrong(newOrders)
# for i in newOrders:
# print("id:", i.id, "priority:", i.priority, "sum/time:", i.sum/i.time)
# # print("id:", i.id, "priority:", i.priority)
server.port = 8888 server.port = 8888
server.launch() server.launch()