Poprawka, aby agent nie przejeżdżał przez regały gdy jest załadowany, poprawka warunku odpalenia rekurencyjnie find_nearest_rack_for
This commit is contained in:
parent
06ce652016
commit
e54769abdd
8
agent.py
8
agent.py
@ -2,7 +2,6 @@ from warehouse import Coordinates, Tile, Pack
|
|||||||
from queue import PriorityQueue
|
from queue import PriorityQueue
|
||||||
from math import sqrt
|
from math import sqrt
|
||||||
from attributes import TURN_LEFT_DIRECTIONS, TURN_RIGHT_DIRECTIONS, PackStatus, PackSize
|
from attributes import TURN_LEFT_DIRECTIONS, TURN_RIGHT_DIRECTIONS, PackStatus, PackSize
|
||||||
import pdb
|
|
||||||
import pygame
|
import pygame
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
@ -160,7 +159,7 @@ class Agent:
|
|||||||
if not tile_on_map:
|
if not tile_on_map:
|
||||||
return False
|
return False
|
||||||
next_tile = self.warehouse.tiles[next_coords.x][next_coords.y]
|
next_tile = self.warehouse.tiles[next_coords.x][next_coords.y]
|
||||||
if not self.is_loaded:
|
if not self.is_loaded or (next_coords.x, next_coords.y) != (self.dest.x, self.dest.y):
|
||||||
tile_passable = isinstance(next_tile, Tile) and next_tile.category.passable
|
tile_passable = isinstance(next_tile, Tile) and next_tile.category.passable
|
||||||
return tile_passable
|
return tile_passable
|
||||||
|
|
||||||
@ -196,14 +195,13 @@ class Agent:
|
|||||||
quarter_racks = [[t for t in row if t.category.name == "Rack" and not t.occupied and t.category.pack_size in accepted_weights] for row in quarter]
|
quarter_racks = [[t for t in row if t.category.name == "Rack" and not t.occupied and t.category.pack_size in accepted_weights] for row in quarter]
|
||||||
quarter_racks = [t for row in quarter_racks for t in row]
|
quarter_racks = [t for row in quarter_racks for t in row]
|
||||||
racks_costs = []
|
racks_costs = []
|
||||||
if not quarter_racks:
|
|
||||||
self.find_nearest_rack_for(package, expand_box+1)
|
|
||||||
for rack in quarter_racks:
|
for rack in quarter_racks:
|
||||||
new_node = Node(rack.x_position, rack.y_position)
|
new_node = Node(rack.x_position, rack.y_position)
|
||||||
cost = self.heuristic(start_node, new_node)
|
cost = self.heuristic(start_node, new_node)
|
||||||
if cost > 0:
|
if cost > 0:
|
||||||
racks_costs.append((rack, cost))
|
racks_costs.append((rack, cost))
|
||||||
rack = min(racks_costs, key=lambda l: l[1])[0]
|
|
||||||
|
rack = self.find_nearest_rack_for(package, expand_box + 1) if not racks_costs else min(racks_costs, key=lambda l: l[1])[0]
|
||||||
return rack
|
return rack
|
||||||
|
|
||||||
|
|
||||||
|
4
main.py
4
main.py
@ -21,7 +21,7 @@ class MainGameFrame:
|
|||||||
self.display = pygame.display.set_mode(WINDOW_SIZE)
|
self.display = pygame.display.set_mode(WINDOW_SIZE)
|
||||||
agent_radius = int(TILE_WIDTH/2)
|
agent_radius = int(TILE_WIDTH/2)
|
||||||
self.agent_tex = pygame.image.load('forklift.png')
|
self.agent_tex = pygame.image.load('forklift.png')
|
||||||
self.warehouse_map = warehouse.Warehouse(20, 20, 150, 20)
|
self.warehouse_map = warehouse.Warehouse(20, 20, 150, 40)
|
||||||
starting_x, starting_y = self.set_starting_agent_position()
|
starting_x, starting_y = self.set_starting_agent_position()
|
||||||
self.agent = agent.Agent(starting_x, starting_y, self.warehouse_map, agent_radius)
|
self.agent = agent.Agent(starting_x, starting_y, self.warehouse_map, agent_radius)
|
||||||
self.clock = pygame.time.Clock()
|
self.clock = pygame.time.Clock()
|
||||||
@ -37,7 +37,7 @@ class MainGameFrame:
|
|||||||
self.draw_agent()
|
self.draw_agent()
|
||||||
self.agent.move()
|
self.agent.move()
|
||||||
pygame.display.update()
|
pygame.display.update()
|
||||||
self.clock.tick(5)
|
self.clock.tick(8)
|
||||||
|
|
||||||
def draw_floor(self):
|
def draw_floor(self):
|
||||||
for x in range(self.warehouse_map.width):
|
for x in range(self.warehouse_map.width):
|
||||||
|
Loading…
Reference in New Issue
Block a user