def run(self):
        depth = 1
        iter_num = 1
        start = time.time()
        alg_name = 'randomized_greedy_search'
        with open(alg_name + '_' + datetime.now().strftime('%Y_%m_%d_%H_%M_%S') + '.csv', 'a') as file:
            file.write("Alg:\t{0}\n".format(alg_name))
            file.write("Depth:\t{0}\n\n".format(depth))
            file.write("Iteration;\tElapsed (s);\tQuality (-inf,1]\n")

            while True:
                changes_found = False
                generator = RandomChanges()
                for new_assignments in generator.iterate_chained(self.current_assignments, depth=depth):
                    new_cost = self.cost(new_assignments)

                    self.save_if_best_solution(new_assignments, new_cost)

                    if self.current_cost < new_cost:
                        self.current_assignments = new_assignments
                        self.current_cost = new_cost

                        changes_found = True
                        break

                row = "{0};\t\t\t{1};\t{2}\n".format(iter_num, time.time() - start, self.current_cost)
                file.write(row)
                print row
                iter_num += 1

                if not changes_found:
                    break

        return self.current_assignments, self.current_cost, self.best_assignments, self.best_cost
 def generate_next_assignments(self, assignments, temperature):
     depth = randint(1, self.get_max_depth(temperature))
     return RandomChanges.chained(assignments, depth=depth), depth