From 0a0536c39af518e2e74bf05d494c408912aa2498 Mon Sep 17 00:00:00 2001 From: Jonas Boysen Date: Tue, 19 Nov 2024 10:29:43 +0100 Subject: [PATCH] improve sa --- AgRobotSwarmForOptimization/field_optimization.ipynb | 8 +++++--- AgRobotSwarmForOptimization/field_optimization.py | 8 ++++++-- AgRobotSwarmForOptimization/graph_optimization.ipynb | 5 ++--- AgRobotSwarmForOptimization/graph_optimization.py | 7 +++++-- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/AgRobotSwarmForOptimization/field_optimization.ipynb b/AgRobotSwarmForOptimization/field_optimization.ipynb index 64d00ab..aed48d2 100644 --- a/AgRobotSwarmForOptimization/field_optimization.ipynb +++ b/AgRobotSwarmForOptimization/field_optimization.ipynb @@ -17,12 +17,14 @@ " terminate = True\n", " return current_state, terminate\n", "\n", - "def t_schedule(t: int) -> float:\n", - " t_max = 100\n", - " return t_max - t\n", "\n", "MAX_ITERATIONS = 50\n", "\n", + "def t_schedule(t: int) -> float:\n", + " return (MAX_ITERATIONS - t) / MAX_ITERATIONS\n", + "\n", + "\n", + "\n", "optimize_sim = Simulation(field_save_dir=\"field\", t_schedule=t_schedule, stochastic_hc=stochastic_hc_successor, random_search=random_search_successor)\n", "optimize_sim.prepare_complete_state_representation()\n", "field_vis = FieldVisualizer(optimize_sim, canvas_size=600)\n", diff --git a/AgRobotSwarmForOptimization/field_optimization.py b/AgRobotSwarmForOptimization/field_optimization.py index 1c91e2b..9ba85e4 100644 --- a/AgRobotSwarmForOptimization/field_optimization.py +++ b/AgRobotSwarmForOptimization/field_optimization.py @@ -314,7 +314,7 @@ class Simulation: # get t t = len(self.cost_history) # calculate temperature with function of user - temperature = self.t_schedule(t) + temperature = self.t_schedule(t) * 100 if temperature <= 0: return self.state, True # choose random successor @@ -327,10 +327,14 @@ class Simulation: cost = self.evaluate_state(state=neighbor_candidate_state) delta_e = cost - self.cost_history[-1] + if delta_e < 0: return neighbor_candidate_state, False else: - propability = np.exp(delta_e / temperature) + propability = np.exp(-delta_e / temperature) + print( + f"Keine Verbesserung mit delta_e {delta_e:.2f}, temperature {temperature / 100:.2f} und Annahmewahrscheinlichkeit {propability * 100:.2f}%" + ) if random.random() <= propability: return neighbor_candidate_state, False else: diff --git a/AgRobotSwarmForOptimization/graph_optimization.ipynb b/AgRobotSwarmForOptimization/graph_optimization.ipynb index a051188..c9ff1c9 100644 --- a/AgRobotSwarmForOptimization/graph_optimization.ipynb +++ b/AgRobotSwarmForOptimization/graph_optimization.ipynb @@ -21,11 +21,10 @@ "\n", "\n", "###### In diesem Teil könnt ihr Änderungen vornehmen ######\n", + "MAX_ITERATIONS = 50\n", "def t_schedule(t: int) -> float:\n", - " t_max = 100\n", - " return t_max - t\n", + " return (MAX_ITERATIONS - t) / MAX_ITERATIONS\n", "\n", - "MAX_ITERATIONS = 50\n", "MANUAL_STATE_TEST = [\"Hof\", 0, 1, 2, 3, \"Hof\", 4, 5, 6, 7]\n", "###### Teil-Ende ######\n", "\n", diff --git a/AgRobotSwarmForOptimization/graph_optimization.py b/AgRobotSwarmForOptimization/graph_optimization.py index dfd59ae..9a9029f 100644 --- a/AgRobotSwarmForOptimization/graph_optimization.py +++ b/AgRobotSwarmForOptimization/graph_optimization.py @@ -229,7 +229,7 @@ class Simulation: # get t t = len(self.cost_history) # calculate temperature with function of user - temperature = self.t_schedule(t) + temperature = self.t_schedule(t) * 100 if temperature <= 0: return self.state, True # choose random successor @@ -245,7 +245,10 @@ class Simulation: if delta_e < 0: return neighbor_candidate_state, False else: - propability = np.exp(delta_e / temperature) + propability = np.exp(-delta_e / temperature) + print( + f"Keine Verbesserung mit delta_e {delta_e:.2f}, temperature {temperature / 100:.2f} und Annahmewahrscheinlichkeit {propability * 100:.2f}%" + ) if random.random() <= propability: return neighbor_candidate_state, False else: -- GitLab