def __init__(self, solver_file_path, cnf_file_path, reports_folder_path, threads_number, handled_parameters_indexes, # количество = количеству обрабатываемых активных параметров (лишних значений нет) start_parameters_values, max_delta, max_hamming_distance, min_hamming_distance=1): self.__solver_name = FileModule.get_file_name(solver_file_path) self.__solver_file_path = solver_file_path self.__cnf_file_path = cnf_file_path self.__reports_folder_path = reports_folder_path self.__handled_parameters_indexes = handled_parameters_indexes # start_parameters_values это массив, элементы которого могут быть: # bool значением для параметра типа BOOL # кортежем из 2-х double для параметра типа RANGE self.__start_parameters_values = start_parameters_values self.__last_parameters_values_tuple = list() self.__parameters_templates = SolversDescriptions.get_handled_parameters_template(self.__solver_name, threads_number, handled_parameters_indexes) parameters_classes = self.__create_parameters_classes() self.__max_delta = max_delta self.__values_factory = ParametersValuesFactory(parameters_classes, max_delta, max_hamming_distance, min_hamming_distance)
def __init__(self, solver_file_path, cnf_file_path, root_experiments_path, start_parameters_values_file_path, max_delta, max_hamming_distance, restarts_number, max_threads_number, handled_parameters_indexes, experiment_name=''): ExperimentDescription.__init__(self, solver_file_path, cnf_file_path, root_experiments_path, start_parameters_values_file_path, handled_parameters_indexes, max_threads_number, experiment_name) self._max_delta = max_delta self._max_hamming_distance = max_hamming_distance self._restarts_number = restarts_number self._number_of_experiments_produced = 0 self._start_parameters_values = self.get_start_parameters_values() experiment_name_folder = (self._experiment_name + '/') if len(self._experiment_name) != 0 else "" solver_name = FileModule.get_file_name(self._solver_file_path) cnf_name = FileModule.get_file_name(self._cnf_file_path) self._reports_folder_path = self._root_experiments_path \ + "SimpleExperiment/" \ + experiment_name_folder \ + solver_name + '/' \ + cnf_name + '/' \ + ExperimentDescription.get_current_time_string() + '/' FileModule.create_folder(self._reports_folder_path) print("Calculating solver timeout...") self._solver_timeout = self._get_solver_timeout() print("Solver timeout = " + str(self._solver_timeout) + " seconds") # (parameters_values, time) self._best_results = list() self._best_results.append((self._get_default_parameters_values(), self._solver_timeout))
def run(self): working_instances_number = 0 list_of_working_instances = list() # contains tuples: (solver_instance, output_pipe, cnf_name) while True: if self.__parameters_module.has_new_parameters_list() and \ (working_instances_number < self.__threads_number): parameters_list = self.__parameters_module.get_parameters_list() cnf_name = FileModule.get_file_name(self.__parameters_module.get_last_cnf_file_path()) print("Run instance: " + self.__parameters_module.get_progress_string()) self.__run_solver_instance(list_of_working_instances, parameters_list, cnf_name) working_instances_number += 1 elif working_instances_number == 0: break working_instances_number = self. \ __check_instances_on_finish(list_of_working_instances, working_instances_number) time.sleep(self.__sleeping_time)
def __init__(self, solver_file_path, cnf_file_path, reports_folder_path, threads_number, handled_parameters_indexes, start_parameters_values, max_delta): self.__solver_name = FileModule.get_file_name(solver_file_path) self.__solver_file_path = solver_file_path self.__cnf_file_path = cnf_file_path self.__reports_folder_path = reports_folder_path self.__handled_parameters_indexes = handled_parameters_indexes self.__start_parameters_values = start_parameters_values self.__max_delta = max_delta self.__last_parameters_values_tuple = list() self.__parameters_templates = SolversDescriptions.get_handled_parameters_template(self.__solver_name, threads_number, handled_parameters_indexes) parameters_classes = self.__create_parameters_classes() self.__values_factory = RandomParametersValuesFactory(parameters_classes) self.__stop = False
def __init__( self, solver_file_path, reports_folder_path, threads_number, handled_parameters_indexes, # количество = количеству обрабатываемых активных параметров (лишних значений нет) start_parameters_values, ): self.__solver_name = FileModule.get_file_name(solver_file_path) self.__solver_file_path = solver_file_path self.__next_cnf_index = 0 self.__current_cnf = "" self.__cnf_files_paths = FileModule.get_cnf_file_path() self.__reports_folder_path = reports_folder_path self.__handled_parameters_indexes = handled_parameters_indexes # start_parameters_values это массив, элементы которого могут быть: # bool значением для параметра типа BOOL # double значением для параметра типа RANGE self.__start_parameters_values = start_parameters_values self.__parameters_templates = SolversDescriptions.get_handled_parameters_template( self.__solver_name, threads_number, handled_parameters_indexes )
def get_solver_file_name(self): return FileModule.get_file_name(self._solver_file_path)
def __create_output_file_name(self): return FileModule.get_file_name(self.__current_cnf)