Dodanie wypisywanie kosztu do AStar1 i ustawiono staly koszt obrotu
This commit is contained in:
parent
03434fdb79
commit
af15a10048
21
AStar.py
21
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
|
||||
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)
|
||||
|
||||
|
10
App.py
10
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:
|
||||
|
Loading…
Reference in New Issue
Block a user