smac.tae.base¶
Classes
|
Interface class to handle the execution of SMAC' configurations. |
- class smac.tae.base.BaseRunner(ta, stats, multi_objectives=['cost'], run_obj='runtime', par_factor=1, cost_for_crash=2147483647.0, abort_on_first_run_crash=True)[source]¶
Bases:
abc.ABC
Interface class to handle the execution of SMAC’ configurations.
This interface defines how to interact with the SMBO loop. The complexity of running a configuration as well as handling the results is abstracted to the SMBO via a BaseRunner.
From SMBO perspective, launching a configuration follows a submit/collect scheme as follows:
A run is launched via submit_run()
Submit_run internally calls run_wrapper(), a method that contains common processing functions among different runners, for example, handling capping and stats checking.
A class that implements BaseRunner defines run() which is really the algorithm to translate a RunInfo to a RunValue, i.e. a configuration to an actual result.
A completed run is collected via get_finished_runs(), which returns any finished runs, if any.
This interface also offers the method wait() as a mechanism to make sure we have enough data in the next iteration to make a decision. For example, the intensifier might not be able to select the next challenger until more results are available.
- Parameters
ta (Union[List[str], Callable]) – target algorithm
stats (Stats) – stats object to collect statistics about runtime/additional info
multi_objectives (List[str]) – names of the objectives, by default it is a single objective parameter “cost”
run_obj (str) – run objective of SMAC
par_factor (int) – penalization factor
cost_for_crash (float) – cost that is used in case of crashed runs (including runs that returned NaN or inf)
abort_on_first_run_crash (bool) – if true and first run crashes, raise FirstRunCrashedException
- results¶
- ta¶
- stats¶
- run_obj¶
- par_factor¶
- cost_for_crash¶
- abort_on_first_run_crash¶
- abstract get_finished_runs()[source]¶
This method returns any finished configuration, and returns a list with the results of exercising the configurations. This class keeps populating results to self.results until a call to get_finished runs is done. In this case, the self.results list is emptied and all RunValues produced by running run() are returned.
- abstract num_workers()[source]¶
Return the active number of workers that will execute tae runs.
- Return type
int
- abstract pending_runs()[source]¶
Whether or not there are configs still running.
Generally if the runner is serial, launching a run instantly returns it’s result. On parallel runners, there might be pending configurations to complete.
- Return type
bool
- abstract run(config, instance, cutoff=None, seed=12345, budget=None, instance_specific='0')[source]¶
Runs target algorithm <self.ta> with configuration <config> on instance <instance> with instance specifics.
<specifics> for at most.
<cutoff> seconds and random seed <seed>
This method exemplifies how to defined the run() method
- Parameters
config (Configuration) – dictionary param -> value
instance (string) – problem instance
cutoff (float, optional) – Wallclock time limit of the target algorithm. If no value is provided no limit will be enforced.
seed (int) – random seed
budget (float, optional) – A positive, real-valued number representing an arbitrary limit to the target algorithm. Handled by the target algorithm internally
instance_specific (str) – instance specific information (e.g., domain file or solution)
- Return type
Tuple
[StatusType
,float
,float
,Dict
]- Returns
status (enum of StatusType (int)) – {SUCCESS, TIMEOUT, CRASHED, ABORT}
cost (float) – cost/regret/quality (float) (None, if not returned by TA)
runtime (float) – runtime (None if not returned by TA)
additional_info (dict) – all further additional run information
- run_wrapper(run_info)[source]¶
Wrapper around run() to exec and check the execution of a given config file.
This function encapsulates common handling/processing, so that run() implementation is simplified.
- abstract submit_run(run_info)[source]¶
This function submits a configuration embedded in a RunInfo object, and uses one of the workers to produce a result (such result will eventually be available on the self.results FIFO).
This interface method will be called by SMBO, with the expectation that a function will be executed by a worker.
What will be executed is dictated by run_info, and “how” will it be executed is decided via the child class that implements a run() method.
Because config submission can be a serial/parallel endeavor, it is expected to be implemented by a child class.
- Parameters
run_info (RunInfo) – An object containing the configuration and the necessary data to run it
- Return type
None