Source code for selector.run_ac

"""Module of selector to run from Python."""
import sys
import os
sys.path.append(os.getcwd())

os.environ["OMP_NUM_THREADS"] = "1"
os.environ["OPENBLAS_NUM_THREADS"] = "1"
os.environ["MKL_NUM_THREADS"] = "1"
os.environ["VECLIB_MAXIMUM_THREADS"] = "1"
os.environ["NUMEXPR_NUM_THREADS"] = "1"

import importlib
import logging
import numpy as np
import ray

from selector.scenario import Scenario, parse_args
from selector.log_setup import clear_logs, check_log_folder, save_latest_logs
from selector.mini_tournaments import offline_mini_tournament_configuration
from selector.best_conf import safe_best

sys.path.append(os.getcwd())


[docs]def ac(scen_files, ray_mode, **kwargs): """ Run selector as a Python function. Parameters ---------- scen_files : dict Paths to 'paramfile', 'instance_file', 'feature_file'. ray_mode : str 'desktop' or 'cluster' (SLURM). kwargs : dict Anything else you want to set, see scenario.py. """ # Add args to scenario for key, val in kwargs.items(): if val != '': sys.argv.extend(['--' + key, str(val)]) else: sys.argv.extend(['--' + key]) selector_args = parse_args() selector_args['scenario_file'] = scen_files # Get wrapper for TA wrapper_mod = importlib.import_module(selector_args["wrapper_mod_name"]) wrapper_name = selector_args["wrapper_class_name"] wrapper_ = getattr(wrapper_mod, wrapper_name) ta_wrapper = wrapper_() # Initialize scenario scenario = Scenario(selector_args["scenario_file"], selector_args) np.random.seed(scenario.seed) check_log_folder(scenario, scenario.log_folder) clear_logs(scenario, scenario.log_folder) # Set up logger logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) if scenario.verbosity == 0: # Disable propagation to the root logger logger.propagate = False # Clear existing handlers (if any) if logger.hasHandlers(): logger.handlers.clear() handler = \ logging.FileHandler( f"{scenario.log_location}{scenario.log_folder}/main.log") handler.setLevel(logging.INFO) formatter = logging.Formatter('%(asctime)s %(message)s') handler.setFormatter(formatter) logger.addHandler(handler) logger.info(f"Logging to {scenario.log_folder}") # Set up ray for desktop or HPC if ray_mode == 'desktop': ray.init() if ray_mode == 'cluster': ray.init(address="auto") logger.info("Ray info: {}".format(ray.cluster_resources())) logger.info("Ray nodes {}".format(ray.nodes())) logger.info("WD: {}".format(os.getcwd())) # Run AC process offline_mini_tournament_configuration(scenario, ta_wrapper, logger) print('\n') print('Processing results...') print('\n') # Process results save_latest_logs(scenario.log_folder, scenario) if scenario.run_obj == 'runtime': best = safe_best(f'./selector/logs/{scenario.log_folder}/', scenario.cutoff_time) elif scenario.run_obj == 'quality': best = safe_best(f'./selector/logs/{scenario.log_folder}/', scenario.crash_cost) print('Best Configuration:\n', best[list(best.keys())[0]]['conf']) ray.shutdown() print('\n') print(f'See ./selector/logs/{scenario.log_folder}/') print('\n')
if __name__ == "__main__": pass