67 lines
2.2 KiB
Python
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)
|