diff --git a/AgRobotSwarmForOptimization/field_optimization.ipynb b/AgRobotSwarmForOptimization/field_optimization.ipynb index 64d00ab1e679f45d66ad7c033299d405661ac4f7..aed48d2b09d91600b3b4319fd83d27e0ae00ed2b 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 1c91e2b3aa04f9b6a9421ba9d529380be98b5971..9ba85e4e35cc70909720772fbf41a4091531a106 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 a051188219b590474601f6cc8b1862394681cf86..c9ff1c90f9d01e6342bc6d887c6011780945349a 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 dfd59aef1c2aafbc8bf55c03bb7a434d9dc3de48..9a9029fdd8a998f4bff5d3ba428acb13280653e7 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: