Dodanie wypisywanie kosztu do AStar1 i ustawiono staly koszt obrotu

This commit is contained in:
Paulina Smierzchalska 2024-04-27 20:09:12 +02:00
parent 03434fdb79
commit af15a10048
2 changed files with 23 additions and 10 deletions

View File

@ -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
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)

8
App.py
View File

@ -79,11 +79,11 @@ 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
#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])