diff --git a/AStar.py b/AStar.py index d12a80d..a01f507 100644 --- a/AStar.py +++ b/AStar.py @@ -38,30 +38,40 @@ def get_cost_for_plant(plant_name): def A_star(istate, pole): - # goalTreasure = (random.randint(0,NUM_X-1), random.randint(0,NUM_Y-1)) - # #jeśli chcemy używać random musimy wykreslić sloty z kamieniami, ponieważ tez mogą się wylosować i wtedy traktor w ogóle nie rusza - #lub zrobić to jakoś inaczej, np. funkcja szukająca najmniej nawodnionej rośliny + #goalTreasure = (5, 5) while True: goalTreasure = (random.randint(0, NUM_X - 1), random.randint(0, NUM_Y - 1)) # Współrzędne celu if goalTreasure not in stoneList: break fringe = PriorityQueue() # Kolejka priorytetowa dla wierzchołków do rozpatrzenia explored = [] # Lista odwiedzonych stanów + obrot = 1 # Tworzenie węzła początkowego x = Node.Node(istate) x.g = 0 x.h = heuristic(x.state, goalTreasure) fringe.put((x.g + x.h, x)) # Dodanie węzła do kolejki + total_cost = 0 while not fringe.empty(): _, elem = fringe.get() # Pobranie węzła z najniższym priorytetem if BFS.goalTest3(elem.state, goalTreasure): # Sprawdzenie, czy osiągnięto cel path = [] + total_cost = elem.g + print("Koszt", total_cost) while elem.parent is not None: # Odtworzenie ścieżki path.append([elem.parent, elem.action]) elem = elem.parent + for node, action in path: + # Obliczanie kosztu ścieżki dla każdego pola i wyświetlanie + plant_name = get_plant_name_from_coordinates(node.state['x'], node.state['y'], pole) + plant_cost = get_cost_for_plant(plant_name) + if action == "left" or action == "right": # Liczenie kosztu tylko dla pól nie będących obrotami + total_cost += obrot + else: + total_cost += plant_cost return path explored.append(elem.state) @@ -78,8 +88,11 @@ def A_star(istate, pole): # Pobranie kosztu dla danej rośliny plant_cost = get_cost_for_plant(plant_name) - # Obliczenie kosztu ścieżki dla dziecka - child.g = elem.g + plant_cost + if child.action == "left" or child.action == "right": + child.g = elem.g + obrot + else: + child.g = elem.g + plant_cost + # Obliczenie heurystyki dla dziecka child.h = heuristic(child.state, goalTreasure) diff --git a/App.py b/App.py index fd65da2..9f9b664 100644 --- a/App.py +++ b/App.py @@ -79,12 +79,12 @@ def init_demo(): #Demo purpose if (Astar): aStarRoot = AStar.A_star({'x': 0, 'y': 0, 'direction': "E"}, pole) if aStarRoot: - print("Pełna ścieżka agenta:") + #print("Pełna ścieżka agenta:") aStarRoot.reverse() - for node in aStarRoot: - state = node[0].state # Pobranie stanu z obiektu Node - action = node[1] # Pobranie akcji - #print("Współrzędne pola:", state['x'], state['y'], "- Akcja:",action) # wypisuje ścieżkę i kroki które robi traktor + #for node in aStarRoot: + # state = node[0].state # Pobranie stanu z obiektu Node + # action = node[1] # Pobranie akcji + # print("Współrzędne pola:", state['x'], state['y'], "- Akcja:",action) # wypisuje ścieżkę i kroki które robi traktor print_to_console("Traktor porusza się obliczoną ścieżką A*") traktor.move_by_root(aStarRoot, pole, [traktor.irrigateSlot]) else: