Source code for selector.generators.surrogates.surrogates

"""This module contains surrogate management functions."""

import copy
from selector.pool import Surrogates
from selector.generators.surrogates.smac_surrogate import SmacSurr
from selector.generators.surrogates.ggapp_surrogate import GGAppSurr
from selector.generators.surrogates.cppl_surrogate import CPPL


[docs]class SurrogateManager(): """ Managing surrogates and related functions. Parameters ---------- scenario : selector.scenario.Scenario AC scenario. seed : int Random seed. logger : logging.Logger Logger from main loop. Default is None, so no Debug infos. """ def __init__(self, scenario, seed=False, logger=None): self.seed = seed self.surrogates = { Surrogates.SMAC: SmacSurr(scenario, seed=self.seed, pca_dim=scenario.smac_pca_dim), Surrogates.GGApp: GGAppSurr(scenario, seed=self.seed, logger=logger), Surrogates.CPPL: CPPL(scenario, seed=self.seed, features=scenario.features) }
[docs] def suggest(self, suggestor, scenario, n_samples, data, results, next_instance_set): """Suggest points based on surrogate. Parameters ---------- suggestor : selector.pool.Surrogates Key to the surrogate model. scenario : selector.scenario.Scenario AC scenario. seed : int Random seed. logger : logging.Logger Logger from main loop. Default is None, so no Debug infos. Returns ------- list of selector.pool.Configuration Suggested configurations. """ sugg = \ self.surrogates[suggestor].get_suggestions(scenario, n_samples, data, results, next_instance_set) return sugg
[docs] def update_surr(self, surrogate, history, configs, results, terminations, ac_runtime=None): """Update surrogate model with runhistory. Parameters ---------- surrogate : selector.pool.Surrogates Key to the surrogate model. history : list of selector.pool.Tournament Tournament history. configs : list of selector.pool.Configuration Configurations that participated in the tournament. results : dict Results of the tournament. terminations : dict Information about terminations of runs that occurred. ac_runtime : int Total AC runtime in seconds so far. """ confs = copy.deepcopy(configs) self.surrogates[surrogate].update(history, confs, results, terminations, ac_runtime=ac_runtime)
[docs] def predict(self, surrogate, configs, cot, next_instance_set): """ Get prediction for mean and variance concerning the points quality. Parameters ---------- surrogate : selector.pool.Surrogates Key to the surrogate model. configs : list of selector.pool.Configuration Suggested configurations. cot : float Timelimit set in AC scenario. next_instance_set : list List of next instances to run the tournament on. Returns ------- list of dict of dict [{"Configuartion ID": {"qual": mean predicted performance, "var": variance, "gen": selector.pool.Generator}}] """ suggestions = copy.deepcopy(configs) if surrogate == Surrogates.SMAC: predict = self.surrogates[surrogate].predict(suggestions, next_instance_set) try: predict = self.surrogates[surrogate].predict(suggestions, next_instance_set) mean = predict[0] var = predict[1] return [{sugg.id: {'qual': mean[s], 'var': var[s], 'gen': sugg.generator}} for s, sugg in enumerate(suggestions)] except: return [{sugg.id: {'qual': cot, 'var': 0, 'gen': sugg.generator}} for sugg in suggestions]
[docs] def ei(self, surrogate, suggestions, next_instance_set): """ Compute expected improvement. Parameters ---------- surrogate : selector.pool.Surrogates Key to the surrogate model. suggestions : list of selector.pool.Configuration Suggested configurations. next_instance_set : list of str List of next instances to be run. Returns ------- ndarray or list **ei**: Expected improvements for suggestions. """ suggs = copy.deepcopy(suggestions) try: ei = self.surrogates[surrogate].\ expected_improvement(suggs, next_instance_set) return ei except: return [[0] for sugg in suggestions]
[docs] def pi(self, surrogate, suggestions, cot, results, next_instance_set): """Compute probability of improvement. Parameters ---------- surrogate : selector.pool.Surrogates Key to the surrogate model. suggestions : list of selector.pool.Configuration Suggested configurations. cot : float Timelimit set in AC scenario. results : dict Performances of the configuration on the instance set of the tournament. next_instance_set : list List of next instances to run the tournament on. Returns ------- ndarray **pi**: Probabilities of improvement. """ suggs = copy.deepcopy(suggestions) pi = self.surrogates[surrogate].\ probability_improvement(suggs, results, next_instance_set) return pi