SI_InteligentnyWozekWidlowy/GameModel.py

79 lines
2.7 KiB
Python
Raw Normal View History

2022-04-16 14:55:25 +02:00
from typing import List
from mesa import Model, Agent
2022-04-08 00:43:25 +02:00
from mesa.space import MultiGrid
from mesa.time import RandomActivation
2022-04-16 14:55:25 +02:00
from AgentBase import AgentBase
2022-04-08 00:43:25 +02:00
from ForkliftAgent import ForkliftAgent
from PatchAgent import PatchAgent
from PatchType import PatchType
2022-04-16 14:55:25 +02:00
from util.PathDefinitions import inverse_y, GridLocation, GridWithWeights
2022-04-08 00:43:25 +02:00
from util.PathVisualiser import draw_grid, reconstruct_path
from util.Pathfinder import a_star_search
class GameModel(Model):
2022-04-16 14:55:25 +02:00
def __init__(self, width, height, graph: GridWithWeights):
2022-04-08 00:43:25 +02:00
# self.num_agents = 5
self.running = True
self.grid = MultiGrid(height, width, True)
self.schedule = RandomActivation(self)
2022-04-16 14:55:25 +02:00
self.agents = [AgentBase]
2022-04-08 00:43:25 +02:00
2022-04-16 14:55:25 +02:00
self.forklift_agent = ForkliftAgent(self)
2022-04-08 00:43:25 +02:00
self.schedule.add(self.forklift_agent)
self.agents.append(self.forklift_agent)
# Add the agent to a random grid cell
x = 5
y = 5
self.grid.place_agent(self.forklift_agent, (x, y))
self.forklift_agent.current_position = (x, y)
2022-04-16 14:55:25 +02:00
# start, goal = (x, y), (2, 1)
# came_from, cost_so_far = a_star_search(graph, start, goal)
# draw_grid(graph, point_to=came_from, start=start, goal=goal)
#
# path = map(lambda t: (t[0], inverse_y(height, t[1])),
# reconstruct_path(came_from=came_from, start=start, goal=goal))
#
# print("cam from: {}".format(came_from))
# print("costerino: {}".format(cost_so_far))
# draw_grid(graph, path=reconstruct_path(came_from, start=start, goal=goal))
# self.forklift_agent.assign_new_movement_task(path)
self.place_patch_agents()
self.place_walls_agents(graph.walls)
def place_patch_agents(self):
agent = PatchAgent(self, PatchType.pickUp)
self.schedule.add(agent)
2022-04-08 00:43:25 +02:00
self.grid.place_agent(agent, (self.grid.width - 1, self.grid.height - 1))
self.agents.append(agent)
2022-04-16 14:55:25 +02:00
agent = PatchAgent(self, PatchType.dropOff)
2022-04-08 00:43:25 +02:00
# self.schedule.add(agent)
self.grid.place_agent(agent, (0, self.grid.height - 1))
self.agents.append(agent)
for i in range(3):
2022-04-16 14:55:25 +02:00
a = PatchAgent(self, PatchType.item)
2022-04-08 00:43:25 +02:00
self.agents.append(a)
self.grid.place_agent(a, (i, 0))
2022-04-16 14:55:25 +02:00
def place_walls_agents(self, walls: List[GridLocation]):
for w in walls:
agent = PatchAgent(self, PatchType.wall)
self.agents.append(agent)
self.grid.place_agent(agent, w)
2022-04-08 00:43:25 +02:00
def step(self):
self.schedule.step()
print("update multiGrid")
self.grid.remove_agent(self.forklift_agent)
self.grid.place_agent(self.forklift_agent, self.forklift_agent.current_position)