it's alive!
This commit is contained in:
parent
61be80491d
commit
5d5cbb4e59
59
agent.py
59
agent.py
@ -20,7 +20,7 @@ class Agent:
|
|||||||
self.warehouse = assigned_warehouse
|
self.warehouse = assigned_warehouse
|
||||||
self.is_loaded = False
|
self.is_loaded = False
|
||||||
self.transported_package = None
|
self.transported_package = None
|
||||||
self.dest = Node(0, 0)
|
self.dest = Node(1, 1)
|
||||||
self.closed = list()
|
self.closed = list()
|
||||||
self.open = list()
|
self.open = list()
|
||||||
self.path = list()
|
self.path = list()
|
||||||
@ -30,23 +30,23 @@ class Agent:
|
|||||||
self.open.append(start_node)
|
self.open.append(start_node)
|
||||||
while self.open:
|
while self.open:
|
||||||
current_node = self.open.pop()
|
current_node = self.open.pop()
|
||||||
|
print(current_node.x, current_node.y)
|
||||||
self.closed.append(current_node)
|
self.closed.append(current_node)
|
||||||
if current_node.x == self.dest.x and current_node.y == self.dest.y:
|
if current_node.x == self.dest.x and current_node.y == self.dest.y:
|
||||||
while current_node != start_node:
|
while current_node.x != start_node.x and current_node.y != start_node.y:
|
||||||
path.append(current_node)
|
self.path.append(current_node)
|
||||||
current_node = current_node.parent
|
current_node = current_node.parent
|
||||||
return True
|
return True
|
||||||
neighbour_list = self.get_neighbours(current_node)
|
neighbour_list = self.get_neighbours(current_node)
|
||||||
for neighbour in neighbour_list:
|
for neighbour in neighbour_list:
|
||||||
if neighbour in self.closed:
|
if not self.check_if_closed(neighbour):
|
||||||
continue
|
cost = current_node.g_cost + self.heur_cost_est(current_node, neighbour)
|
||||||
cost = current_node.g_cost + self.heur_cost_est(current_node, neighbour)
|
if (cost < neighbour.g_cost) or not self.check_if_open(neighbour):
|
||||||
if cost < neighbour.g_cost or neighbour not in self.open:
|
neighbour.g_cost = cost
|
||||||
neighbour.g_cost = cost
|
neighbour.h_cost = self.heur_cost_est(neighbour, self.dest)
|
||||||
neighbour.h_cost = self.heur_cost_est(neighbour, self.dest)
|
neighbour.parent = current_node
|
||||||
neighbour.parent = current_node
|
if not self.check_if_open(neighbour):
|
||||||
if neighbour not in self.open:
|
self.open.append(neighbour);
|
||||||
self.open.append(neighbour);
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def heur_cost_est(self, nodeA: Node, nodeB: Node):
|
def heur_cost_est(self, nodeA: Node, nodeB: Node):
|
||||||
@ -55,17 +55,32 @@ class Agent:
|
|||||||
if deltaX > deltaY:
|
if deltaX > deltaY:
|
||||||
return (14 * deltaY) + (10 * (deltaX - deltaY))
|
return (14 * deltaY) + (10 * (deltaX - deltaY))
|
||||||
return (14 * deltaX) + (10 *(deltaY - deltaX))
|
return (14 * deltaX) + (10 *(deltaY - deltaX))
|
||||||
|
|
||||||
|
def check_if_open(self, nodeA: Node):
|
||||||
|
for node in self.open:
|
||||||
|
if node.x == nodeA.x and node.y == nodeA.y:
|
||||||
|
print("open")
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def check_if_closed(self, nodeA: Node):
|
||||||
|
for node in self.closed:
|
||||||
|
if node.x == nodeA.x and node.y == nodeA.y:
|
||||||
|
print("closed")
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
def get_neighbours(self, node: Node):
|
def get_neighbours(self, node: Node):
|
||||||
neighbours = list()
|
neighbours = []
|
||||||
#if self.check_if_can_move(Coordinates(node.x + 1, node.y)):
|
print(neighbours)
|
||||||
neighbours.append(Node(node.x + 1, node.y))
|
if self.check_if_can_move(Coordinates(node.x + 1, node.y)):
|
||||||
#if self.check_if_can_move(Coordinates(node.x - 1, node.y)):
|
neighbours.append(Node(node.x + 1, node.y))
|
||||||
neighbours.append(Node(node.x - 1, node.y))
|
if self.check_if_can_move(Coordinates(node.x - 1, node.y)):
|
||||||
#if self.check_if_can_move(Coordinates(node.x, node.y + 1)):
|
neighbours.append(Node(node.x - 1, node.y))
|
||||||
neighbours.append(Node(node.x, node.y + 1))
|
if self.check_if_can_move(Coordinates(node.x, node.y + 1)):
|
||||||
#if self.check_if_can_move(Coordinates(node.x, node.y - 1)):
|
neighbours.append(Node(node.x, node.y + 1))
|
||||||
neighbours.append(Node(node.x, node.y - 1))
|
if self.check_if_can_move(Coordinates(node.x, node.y - 1)):
|
||||||
|
neighbours.append(Node(node.x, node.y - 1))
|
||||||
return neighbours
|
return neighbours
|
||||||
|
|
||||||
def move(self):
|
def move(self):
|
||||||
@ -78,6 +93,8 @@ class Agent:
|
|||||||
self.y = next.y
|
self.y = next.y
|
||||||
|
|
||||||
def check_if_can_move(self, next_coords: Coordinates):
|
def check_if_can_move(self, next_coords: Coordinates):
|
||||||
|
if next_coords.x < 0 or next_coords.y < 0:
|
||||||
|
return False
|
||||||
next_tile = self.warehouse.tiles[next_coords.x][next_coords.y]
|
next_tile = self.warehouse.tiles[next_coords.x][next_coords.y]
|
||||||
tile_passable = isinstance(next_tile, Tile) and next_tile.category.passable
|
tile_passable = isinstance(next_tile, Tile) and next_tile.category.passable
|
||||||
tile_on_map = 0 <= next_coords.x < self.warehouse.width and 0 <= next_coords.y < self.warehouse.height
|
tile_on_map = 0 <= next_coords.x < self.warehouse.width and 0 <= next_coords.y < self.warehouse.height
|
||||||
|
Loading…
Reference in New Issue
Block a user