This: -simplified cost taking for A*

This commit is contained in:
jakzar 2024-04-28 11:51:47 +02:00
parent eb17e42686
commit e448c80739

View File

@ -27,7 +27,7 @@ def heuristic(state, goal):
return manhattan_distance return manhattan_distance
def get_cost_for_plant(plant_name): '''def get_cost_for_plant(plant_name):
plant_costs = { plant_costs = {
"pszenica": 7, "pszenica": 7,
"kukurydza": 9, "kukurydza": 9,
@ -43,7 +43,7 @@ def get_cost_for_plant(plant_name):
else: else:
# Jeśli nazwa rośliny nie istnieje w słowniku, zwróć domyślną wartość # Jeśli nazwa rośliny nie istnieje w słowniku, zwróć domyślną wartość
return 0 return 0
'''
def A_star(istate, pole, goalTreasure): def A_star(istate, pole, goalTreasure):
# goalTreasure = (random.randint(0,NUM_X-1), random.randint(0,NUM_Y-1)) # goalTreasure = (random.randint(0,NUM_X-1), random.randint(0,NUM_Y-1))
@ -79,8 +79,7 @@ def A_star(istate, pole, goalTreasure):
elem = elem.parent elem = elem.parent
for node, action in path: for node, action in path:
# Obliczanie kosztu ścieżki dla każdego pola i wyświetlanie # 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_plant_name_and_cost_from_coordinates(child_state['x'], child_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 if action == "left" or action == "right": # Liczenie kosztu tylko dla pól nie będących obrotami
total_cost += obrot total_cost += obrot
else: else:
@ -97,9 +96,9 @@ def A_star(istate, pole, goalTreasure):
child.action = resp[0] child.action = resp[0]
# Pobranie nazwy rośliny z danego slotu na podstawie współrzędnych # Pobranie nazwy rośliny z danego slotu na podstawie współrzędnych
plant_name = get_plant_name_from_coordinates(child_state['x'], child_state['y'], pole) plant_cost = get_plant_name_and_cost_from_coordinates(child_state['x'], child_state['y'], 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)
if child.action == "left" or child.action == "right": if child.action == "left" or child.action == "right":
child.g = elem.g + obrot child.g = elem.g + obrot
@ -130,15 +129,15 @@ def A_star(istate, pole, goalTreasure):
return False return False
def get_plant_name_from_coordinates(x, y, pole): def get_plant_name_and_cost_from_coordinates(x, y, pole):
if (x, y) in pole.slot_dict: # Sprawdzenie, czy podane współrzędne znajdują się na polu if (x, y) in pole.slot_dict: # Sprawdzenie, czy podane współrzędne znajdują się na polu
slot = pole.slot_dict[(x, y)] # Pobranie slotu na podstawie współrzędnych slot = pole.slot_dict[(x, y)] # Pobranie slotu na podstawie współrzędnych
if slot.plant: # Sprawdzenie, czy na slocie znajduje się roślina if slot.plant: # Sprawdzenie, czy na slocie znajduje się roślina
return slot.plant.nazwa # Zwrócenie nazwy rośliny na slocie return slot.plant.stan.koszt # Zwrócenie nazwy rośliny na slocie
else: else:
return None # jeśli na slocie nie ma rośliny return 0 # jeśli na slocie nie ma rośliny
else: else:
return None # jeśli podane współrzędne są poza polem return 0 # jeśli podane współrzędne są poza polem
#to ogólnie identyczna funkcja jak w BFS ale nie chciałam tam ruszać, żeby przypadkiem nie zapsuć do BFS, #to ogólnie identyczna funkcja jak w BFS ale nie chciałam tam ruszać, żeby przypadkiem nie zapsuć do BFS,
@ -216,9 +215,7 @@ def A_star2(istate, pole, goalTreasure):
child.action = resp[0] child.action = resp[0]
# Pobranie nazwy rośliny z danego slotu na podstawie współrzędnych # Pobranie nazwy rośliny z danego slotu na podstawie współrzędnych
plant_name = get_plant_name_from_coordinates(child_state['x'], child_state['y'], pole) plant_cost = get_plant_name_and_cost_from_coordinates(child_state['x'], child_state['y'], pole)
# Pobranie kosztu dla danej rośliny
plant_cost = get_cost_for_plant(plant_name)
# Obliczenie kosztu ścieżki dla dziecka # Obliczenie kosztu ścieżki dla dziecka
child.g = elem.g + plant_cost child.g = elem.g + plant_cost