def __run_solver(solver_name, timeout, handled_parameters, active_parameters_values): pm = ParametersModule(FileModule.get_solver_file_path(solver_name), Config.Filepaths.RESULTS_FOLDER, Config.Defaults.USED_CORES_NUMBER, handled_parameters, active_parameters_values) tl = ThreadsLauncher(pm, Config.Defaults.USED_CORES_NUMBER, timeout, 0.5, functools.partial(UI.__save_solver_output_data, Config.Filepaths.RESULTS_FOLDER)) tl.run() UI.__process_results(tl.get_results(), timeout)
def _start_sub_experiment(self): self._tabued_number = 0 self._best_results.append((None, None)) if self._best_results[len(self._best_results)-2][0] is not None: start_params_vals = self._best_results[len(self._best_results)-2][0] start_values_generator = StartValues(self.get_solver_file_name(), self._handled_parameters_indexes, self._start_parameters_values_file_path) self._start_parameters_values = start_values_generator.create_start_values(start_params_vals) else: print("Local minimum found.") return False parameters_module = ParametersModule(self._solver_file_path, self._cnf_file_path, self._reports_folder_path, self._max_threads_number, self._handled_parameters_indexes, self._start_parameters_values, self._max_delta, self._max_hamming_distance) parameters_module.skip_start_values() if self._tabu_module.add_area(parameters_module.get_area()): thread_launcher = ThreadsLauncher(parameters_module, self._max_threads_number, self._solver_timeout, self._THREAD_LAUNCHER_SLEEPING_TIME, functools.partial(TabuExperiment._check_params_on_tabu, self), functools.partial(TabuExperiment.__handle_result, self), functools.partial(SimpleExperiment._save_solver_output_data, self, self._reports_folder_path)) thread_launcher.run() self._number_of_experiments_produced += 1 best_time = self._best_results[len(self._best_results)-1][1] print("Iteration №" + str(self._number_of_experiments_produced) + ". Best time = " + str(best_time) + ". Parameters values: " + str(self._best_results[len(self._best_results)-1][0]) + "\n" + "Tabued number: " + str(self._tabued_number)) self._solver_timeout = best_time return self._number_of_experiments_produced < self._restarts_number else: return False
def _find_random_point(self): random_parameters_module = RandomParametersModule(self._solver_file_path, self._cnf_file_path, self._reports_folder_path, self._max_threads_number, self._handled_parameters_indexes, self._start_parameters_values, 10) thread_launcher = ThreadsLauncher(random_parameters_module, self._max_threads_number, # максимально допустимое время не более чем в 1.5 раза хуже стартового self._best_results[0][1]*1.5, self._THREAD_LAUNCHER_SLEEPING_TIME, functools.partial(AnnealingExperiment.__check_random_params_on_tabu, self), functools.partial(AnnealingExperiment.__handle_random_result, self, random_parameters_module), functools.partial(SimpleExperiment._save_solver_output_data, self, self._reports_folder_path)) thread_launcher.run()