From e448c807395bf2df3ffce31ea85aaa926f347ee4 Mon Sep 17 00:00:00 2001 From: jakzar Date: Sun, 28 Apr 2024 11:51:47 +0200 Subject: [PATCH] This: -simplified cost taking for A* --- AStar.py | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/AStar.py b/AStar.py index 63d87dc..ef2f799 100644 --- a/AStar.py +++ b/AStar.py @@ -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