From 8b5029645ffae1c031b17c78b6a8f2c16a67426d Mon Sep 17 00:00:00 2001 From: coolneng Date: Mon, 19 Apr 2021 15:51:39 +0200 Subject: [PATCH] Return the best solution when you can't explore --- src/local_search.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/local_search.py b/src/local_search.py index 2b5d7fa..cd64486 100644 --- a/src/local_search.py +++ b/src/local_search.py @@ -17,26 +17,35 @@ def replace_worst_element(previous, data): return solution, worst_index +def choose_best_solution(previous, current, index): + if previous.loc[index].distance >= current.loc[index].distance: + return previous + return current + + def get_random_solution(previous, data): candidates = [] candidates.append(previous) solution, worst_index = replace_worst_element(previous, data) previous_worst_distance = previous["distance"].loc[worst_index] - while candidates[-1].distance.loc[worst_index] <= previous_worst_distance: - last_solution = candidates[-1] + last_solution = candidates[-1] + while last_solution.distance.loc[worst_index] <= previous_worst_distance: solution, _ = replace_worst_element(previous=solution, data=data) if solution.equals(last_solution): - return last_solution + best_solution = choose_best_solution( + previous=previous, current=solution, index=worst_index + ) + return best_solution candidates.append(solution) - return solution - - + last_solution = candidates[-1] + return last_solution def explore_neighbourhood(element, data, max_iterations=100000): neighbourhood = [] neighbourhood.append(element) - for _ in range(max_iterations): + for i in range(max_iterations): + print(f"Iteration {i}") previous_solution = neighbourhood[-1] neighbour = get_random_solution(previous=previous_solution, data=data) if neighbour.equals(previous_solution):