Dodanie wypisywanie kosztu do AStar1 i ustawiono staly koszt obrotu
This commit is contained in:
parent
03434fdb79
commit
af15a10048
23
AStar.py
23
AStar.py
@ -38,30 +38,40 @@ def get_cost_for_plant(plant_name):
|
|||||||
|
|
||||||
|
|
||||||
def A_star(istate, pole):
|
def A_star(istate, pole):
|
||||||
# goalTreasure = (random.randint(0,NUM_X-1), random.randint(0,NUM_Y-1))
|
#goalTreasure = (5, 5)
|
||||||
# #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
|
|
||||||
while True:
|
while True:
|
||||||
goalTreasure = (random.randint(0, NUM_X - 1), random.randint(0, NUM_Y - 1)) # Współrzędne celu
|
goalTreasure = (random.randint(0, NUM_X - 1), random.randint(0, NUM_Y - 1)) # Współrzędne celu
|
||||||
if goalTreasure not in stoneList:
|
if goalTreasure not in stoneList:
|
||||||
break
|
break
|
||||||
fringe = PriorityQueue() # Kolejka priorytetowa dla wierzchołków do rozpatrzenia
|
fringe = PriorityQueue() # Kolejka priorytetowa dla wierzchołków do rozpatrzenia
|
||||||
explored = [] # Lista odwiedzonych stanów
|
explored = [] # Lista odwiedzonych stanów
|
||||||
|
obrot = 1
|
||||||
|
|
||||||
# Tworzenie węzła początkowego
|
# Tworzenie węzła początkowego
|
||||||
x = Node.Node(istate)
|
x = Node.Node(istate)
|
||||||
x.g = 0
|
x.g = 0
|
||||||
x.h = heuristic(x.state, goalTreasure)
|
x.h = heuristic(x.state, goalTreasure)
|
||||||
fringe.put((x.g + x.h, x)) # Dodanie węzła do kolejki
|
fringe.put((x.g + x.h, x)) # Dodanie węzła do kolejki
|
||||||
|
total_cost = 0
|
||||||
|
|
||||||
while not fringe.empty():
|
while not fringe.empty():
|
||||||
_, elem = fringe.get() # Pobranie węzła z najniższym priorytetem
|
_, elem = fringe.get() # Pobranie węzła z najniższym priorytetem
|
||||||
|
|
||||||
if BFS.goalTest3(elem.state, goalTreasure): # Sprawdzenie, czy osiągnięto cel
|
if BFS.goalTest3(elem.state, goalTreasure): # Sprawdzenie, czy osiągnięto cel
|
||||||
path = []
|
path = []
|
||||||
|
total_cost = elem.g
|
||||||
|
print("Koszt", total_cost)
|
||||||
while elem.parent is not None: # Odtworzenie ścieżki
|
while elem.parent is not None: # Odtworzenie ścieżki
|
||||||
path.append([elem.parent, elem.action])
|
path.append([elem.parent, elem.action])
|
||||||
elem = elem.parent
|
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
|
return path
|
||||||
|
|
||||||
explored.append(elem.state)
|
explored.append(elem.state)
|
||||||
@ -78,8 +88,11 @@ def A_star(istate, pole):
|
|||||||
# Pobranie kosztu dla danej rośliny
|
# Pobranie kosztu dla danej rośliny
|
||||||
plant_cost = get_cost_for_plant(plant_name)
|
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 + plant_cost
|
child.g = elem.g + obrot
|
||||||
|
else:
|
||||||
|
child.g = elem.g + plant_cost
|
||||||
|
|
||||||
# Obliczenie heurystyki dla dziecka
|
# Obliczenie heurystyki dla dziecka
|
||||||
child.h = heuristic(child.state, goalTreasure)
|
child.h = heuristic(child.state, goalTreasure)
|
||||||
|
|
||||||
|
10
App.py
10
App.py
@ -79,12 +79,12 @@ def init_demo(): #Demo purpose
|
|||||||
if (Astar):
|
if (Astar):
|
||||||
aStarRoot = AStar.A_star({'x': 0, 'y': 0, 'direction': "E"}, pole)
|
aStarRoot = AStar.A_star({'x': 0, 'y': 0, 'direction': "E"}, pole)
|
||||||
if aStarRoot:
|
if aStarRoot:
|
||||||
print("Pełna ścieżka agenta:")
|
#print("Pełna ścieżka agenta:")
|
||||||
aStarRoot.reverse()
|
aStarRoot.reverse()
|
||||||
for node in aStarRoot:
|
#for node in aStarRoot:
|
||||||
state = node[0].state # Pobranie stanu z obiektu Node
|
# state = node[0].state # Pobranie stanu z obiektu Node
|
||||||
action = node[1] # Pobranie akcji
|
# 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("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*")
|
print_to_console("Traktor porusza się obliczoną ścieżką A*")
|
||||||
traktor.move_by_root(aStarRoot, pole, [traktor.irrigateSlot])
|
traktor.move_by_root(aStarRoot, pole, [traktor.irrigateSlot])
|
||||||
else:
|
else:
|
||||||
|
Loading…
Reference in New Issue
Block a user