def _setup_optimizer(self): # HEBO internally minimizes, so "max" => -1 if self._mode == "max": self._metric_op = -1. elif self._mode == "min": self._metric_op = 1. if self._metric is None and self._mode: # If only a mode was passed, use anonymous metric self._metric = DEFAULT_METRIC if not isinstance(self._space, hebo.design_space.design_space.DesignSpace): raise ValueError( f"Invalid search space: {type(self._space)}. Either pass a " f"valid search space to the `HEBOSearch` class or pass " f"a `config` parameter to `tune.run()`") if self._space.num_paras <= 0: raise ValueError( "Got empty search space. Please make sure to pass " "a valid search space with at least one parameter to " "`HEBOSearch`") if self._random_state_seed is not None: np.random.seed(self._random_state_seed) torch.random.manual_seed(self._random_state_seed) self._opt = hebo.optimizers.hebo.HEBO(space=self._space, **self._hebo_config) if self._points_to_evaluate: validate_warmstart(self._space.para_names, self._points_to_evaluate, self._evaluated_rewards) if self._evaluated_rewards: self._opt.observe( pd.DataFrame(self._points_to_evaluate), np.array(self._evaluated_rewards) * self._metric_op) else: self._initial_points = self._points_to_evaluate
def _setup_skopt(self): if self._points_to_evaluate and isinstance(self._points_to_evaluate, list): if isinstance(self._points_to_evaluate[0], list): # Keep backwards compatibility self._points_to_evaluate = [ dict(zip(self._parameter_names, point)) for point in self._points_to_evaluate ] # Else: self._points_to_evaluate is already in correct format validate_warmstart(self._parameter_names, self._points_to_evaluate, self._evaluated_rewards) if not self._skopt_opt: if not self._space: raise ValueError( "If you don't pass an optimizer instance to SkOptSearch, " "pass a valid `space` parameter.") self._skopt_opt = sko.Optimizer(self._parameter_ranges) if self._points_to_evaluate and self._evaluated_rewards: skopt_points = [[point[par] for par in self._parameter_names] for point in self._points_to_evaluate] self._skopt_opt.tell(skopt_points, self._evaluated_rewards) elif self._points_to_evaluate: self._initial_points = self._points_to_evaluate self._parameters = self._parameter_names # Skopt internally minimizes, so "max" => -1 if self._mode == "max": self._metric_op = -1.0 elif self._mode == "min": self._metric_op = 1.0 if self._metric is None and self._mode: # If only a mode was passed, use anonymous metric self._metric = DEFAULT_METRIC