示例#1
0
    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
示例#2
0
    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