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
def get_cost_for_plant(plant_name):
'''def get_cost_for_plant(plant_name):
plant_costs = {
"pszenica": 7,
"kukurydza": 9,
@ -43,7 +43,7 @@ def get_cost_for_plant(plant_name):
else:
# Jeśli nazwa rośliny nie istnieje w słowniku, zwróć domyślną wartość
return 0
'''
def A_star(istate, pole, goalTreasure):
# 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
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)
plant_cost = get_plant_name_and_cost_from_coordinates(child_state['x'], child_state['y'], pole)
if action == "left" or action == "right": # Liczenie kosztu tylko dla pól nie będących obrotami
total_cost += obrot
else:
@ -97,9 +96,9 @@ def A_star(istate, pole, goalTreasure):
child.action = resp[0]
# 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)
#plant_cost = get_cost_for_plant(plant_name)
if child.action == "left" or child.action == "right":
child.g = elem.g + obrot
@ -130,15 +129,15 @@ def A_star(istate, pole, goalTreasure):
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
slot = pole.slot_dict[(x, y)] # Pobranie slotu na podstawie współrzędnych
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:
return None # jeśli na slocie nie ma rośliny
return 0 # jeśli na slocie nie ma rośliny
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,
@ -216,9 +215,7 @@ def A_star2(istate, pole, goalTreasure):
child.action = resp[0]
# 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)
# Pobranie kosztu dla danej rośliny
plant_cost = get_cost_for_plant(plant_name)
plant_cost = get_plant_name_and_cost_from_coordinates(child_state['x'], child_state['y'], pole)
# Obliczenie kosztu ścieżki dla dziecka
child.g = elem.g + plant_cost