Exemplo n.º 1
0
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)
Exemplo n.º 3
0
############################
#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
Exemplo n.º 4
0
 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)
Exemplo n.º 5
0
 def copy(self):
     return TraclusSimulatedAnnealingState(self.input_trajectories, self.epsilon)