SI_InteligentnyWozekWidlowy/GameModel.py
Aleksander Szamałek 59676e176a Pathfinder
2022-04-08 00:43:25 +02:00

67 lines
2.2 KiB
Python

from mesa import Model
from mesa.space import MultiGrid
from mesa.time import RandomActivation
from ForkliftAgent import ForkliftAgent
from PatchAgent import PatchAgent
from PatchType import PatchType
from util.PathDefinitions import inverse_y
from util.PathVisualiser import draw_grid, reconstruct_path
from util.Pathfinder import a_star_search
class GameModel(Model):
def __init__(self, width, height, graph):
# self.num_agents = 5
self.running = True
self.grid = MultiGrid(height, width, True)
self.schedule = RandomActivation(self)
self.agents = []
self.forklift_agent = ForkliftAgent(0, self)
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)
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)
agent = PatchAgent(1, self, PatchType.pickUp)
# self.schedule.add(agent)
self.grid.place_agent(agent, (self.grid.width - 1, self.grid.height - 1))
self.agents.append(agent)
agent = PatchAgent(2, self, PatchType.dropOff)
# self.schedule.add(agent)
self.grid.place_agent(agent, (0, self.grid.height - 1))
self.agents.append(agent)
for i in range(3):
a = PatchAgent(i + 3, self, PatchType.item)
self.agents.append(a)
self.grid.place_agent(a, (i, 0))
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)