class TraclusSimulatedAnnealer(Annealer): def __init__(self, initial_state, max_epsilon_step_change): self.max_epsilon_step_change = max_epsilon_step_change Annealer.__init__(self, initial_state=initial_state) def move(self): new_epsilon = max(0.0, self.state.get_epsilon() + \ random.uniform(-self.max_epsilon_step_change, self.max_epsilon_step_change)) self.state = TraclusSimulatedAnnealingState(self.state.input_trajectories, \ new_epsilon) def energy(self): the_whole_enchilada(point_iterable_list=self.state.get_input_trajectories(), \ epsilon=self.state.get_epsilon(), \ min_neighbors=0, \ min_num_trajectories_in_cluster=1, \ min_vertical_lines=100, \ min_prev_dist=100, \ clusters_hook=self.state.compute_entropy) return self.state.get_entropy()
def test_simulated_annealing_finds_good_solution_quickly(self): input_trajectories = [[Point(0, 0), Point(0, 1)], \ [Point(2, 0), Point(2, 1)], \ [Point(3, 0), Point(3, 1)]] initial_state = TraclusSimulatedAnnealingState(input_trajectories=input_trajectories, \ epsilon=0.7) traclus_sim_anneal = TraclusSimulatedAnnealer(initial_state=initial_state, \ max_epsilon_step_change=0.3) traclus_sim_anneal.updates = 0 traclus_sim_anneal.steps = 50 best_state, best_energy = traclus_sim_anneal.anneal() self.assertAlmostEqual(best_state.get_epsilon(), 1.0, delta=0.5)
############################ #step5 #tuning parameters #adjust epsilon #parsed_patition = parsed_patition[:1000] #here to reduce calculated time, slice the patition input_trajectories = [] for traj in traj_line_segs: input_linesegment = [] start = traj.values()[0] end = traj.values()[1] start_p = Point(start.values()[0], start.values()[1]) end_p = Point(end.values()[0], end.values()[1]) input_linesegment = [start_p, end_p] input_trajectories.append(input_linesegment) initial_state = TraclusSimulatedAnnealingState(input_trajectories=input_trajectories, \ epsilon=0.002898) traclus_sim_anneal = TraclusSimulatedAnnealer(initial_state=initial_state, \ max_epsilon_step_change=0.1) traclus_sim_anneal.updates = 0 traclus_sim_anneal.steps = 100 best_state, best_energy = traclus_sim_anneal.anneal() epsil = best_state.epsilon #adjust MinLns count = 0 sum_n = 0 for clust in parsed_cluster: if len(clust) > 1: count += 1 sum_n = sum_n + len(clust) avg_n = sum_n / count
def move(self): new_epsilon = max(0.0, self.state.get_epsilon() + \ random.uniform(-self.max_epsilon_step_change, self.max_epsilon_step_change)) self.state = TraclusSimulatedAnnealingState(self.state.input_trajectories, \ new_epsilon)
def copy(self): return TraclusSimulatedAnnealingState(self.input_trajectories, self.epsilon)