You need to provide the following for an AC run with Selector:
- A .pcs file with a parameter space definition according to PCS (PCS Manual, PCS Example) and the path to it.
- Instances: A problem instance set for training, a .txt with paths to the instances (one path per line) and the path to it.
- Instance features: A .txt file with the first line as headers, with INSTANCE_NAME,featureName1,featureName2..., and a line with the instance name and feature values for each instance in the training set and the path to it. If you cannot provide features, set up mock features, e.g. a few features with all values set to 1. However, providing meaningful features will increase the AC success.
- A parameterized target algorithm that can be called via shell and passed paraemeters to.
- A Python wrapper for the target algorithm, its name and the name of the class. It is of the following form:
import argparse
import ast
class Your_Wrapper():
def get_command_line_args(self, runargs, config):
instance = runargs["instance"]
id = runargs["id"]
configuration =""
for param, value in config.items():
configuration += f" --{param}={value}"
exc = '/absolute/path/to/your/target_alorithm'
# Example command
cmd = f"stdbuf -oL {exc} {configuration} -instance {instance}"
return cmd
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('--runargs',type=ast.literal_eval)
parser.add_argument('--config',type=ast.literal_eval)
args = vars(parser.parse_args())
wrapper = Your_Wrapper()- The value 'desktop' or 'cluster' set to ray_mode, if using the Selector facade (see Example section)
- The optimization objective ('runtime' or 'quality')
- The termination criterion ('runtime' or 'quality')
- The time limit for target algorithm runs (set to cutoff_time)
- The penalty value for target algorithm runs (if not solving instance within time limit, or crashing)
- How many configurations can be considered as winner in one tournament
- The instance set size
- The size of the subset of instances for the first tournament
- The path to the directory Selector ought to log to
- The time Selector has for the complete AC process
Below you will find a table describing all of Selectors hyperparameters.
| Name | Type | Default | Description |
|---|---|---|---|
| --file | str | "" | Path to the file containing selector arguments. |
| --check_path | bool | False | If True, validates the paths passed to Selector. |
| --seed | int | 42 | Sets all random generators in Selector. |
| --verbosity | int | 0 | Selector prints less, if 0, more if 1. |
| --log_folder | str | "latest" | Path to the directory Selector ought to log to. |
| --memory_limit | int | 3069 | Maximum allowed memory for a target algorithm run to use at once. |
| --wrapper_mod_name | str | "" | Name of the target algorithm wrapper. Notation as in module import, e.g. module.sub_module.wrapper. |
| --wrapper_class_name | str | "" | Name of the class in the wrapper module. |
| --quality_match | str | "" | Regex for a line that signifies a solved instance in quality optimization. |
| --solve_match | list of str | [] | List of strings that signify a solved instance in runtime optimization, e.g. ['SAT', 'UNSAT']. |
| --quality_extract | str | "" | Regex to extract the objective value. |
| --winners_per_tournament | int | 1 | Number of configurations to regard as winners in a tournament. |
| --tournament_size | int | 5 | Number of configurations to compete in a tournament. |
| --number_tournaments | int | 2 | Number of parallel tournaments. |
| --monitor | str | "tournament_level" | For runtime optimization ("tournament_level" or "instance_level"), level of capping. |
| --surrogate_amortized_time | int | 30 | If the GGA model requires more than the set seconds, it will be updated less frequently. |
| --termination_criterion | str | "runtime" | Termination criterion for AC run ("runtime" or "total_tournament_number"). |
| --total_tournament_number | int | 10 | Total number of tournaments for the main loop. |
| --model_update_iteration | int | 3 | Sets the frequency of GGA updates if amortized time violated (# concluded tournaments). |
| --generator_multiple | int | 5 | Factor to multiply the number of suggestions from one method. |
| --initial_instance_set_size | int | 5 | Instance set size of the first tournaments. |
| --set_size | int | 50 | Size of the training instance set. |
| --smac_pca_dim | int | 8 | PCA dimension of SMAC. |
| --tn | int | 100 | Evaluation history is reduced each time this many tournaments concluded. |
| --cleanup | bool | False | If True, tmp directory is regularly, actively cleaned by selector. |
| --cpu_binding | bool | False | If True, target algorithm and all its child processes are bound to one CPU. |
| --scenario_file | str | None | Path to a file containing hyperparameters concerning the AC scenario, see example. |
| --run_obj | str | None | Optimization metric ("runtime" or "quality"). |
| --overall_obj | str | None | PAR to use with the evaluation results. |
| --cutoff_time | str | None | Time limit for a target algorithm to run on one instance. |
| --crash_cost | float | 10000000 | Penalty for unfinished instance or crash. |
| --wallclock_limit | str | None | Total amount of time Selector can run. |
| --instance_file | str | None | Path to the file containing the instance paths. |
| --feature_file | str | None | Path to the file containing the instance features. |
| --paramfile | str | None | Path to the parameter space definition of the target algorithm. |
| --runtime_feedback | str | "" | Regex to extract runtime if target algorithm reports it (runtime optimization). |
paramfile = /your/path/to/params.pcs
execdir = .
run_obj = runtime
overall_obj = PAR10
cutoff_time = 30
wallclock_limit = 6400
instance_file = /your/path/to/instances.txt
feature_file = /your/path/to/features.txt--seed 44
--par 10
--winners_per_tournament 1
--tournament_size 4
--number_tournaments 2
--termination_criterion total_runtime
--monitor tournament_level
--initial_instance_set_size 5
--set_size 91
--generator_multiple 1
--ta_pid_name ""
--memory_limit 2048
--cutoff_time 30
--check_path False
--log_folder selector_log
--wrapper_mod_name selector.your_wrapper
--wrapper_class_name Your_Wrapper
You can add whichever arguments you like to these files.