Ejemplo n.º 1
0
    def _append_trial(
            self,
            value=None,  # type: Optional[float]
            params=None,  # type: Optional[Dict[str, Any]]
            distributions=None,  # type: Optional[Dict[str, BaseDistribution]]
            user_attrs=None,  # type: Optional[Dict[str, Any]]
            system_attrs=None,  # type: Optional[Dict[str, Any]]
            intermediate_values=None,  # type: Optional[Dict[int, float]]
            state=TrialState.COMPLETE,  # type: TrialState
            datetime_start=None,  # type: Optional[datetime.datetime]
            datetime_complete=None,  # type: Optional[datetime.datetime]
    ):
        # type: (...) -> int

        params = params or {}
        distributions = distributions or {}
        user_attrs = user_attrs or {}
        system_attrs = system_attrs or {}
        intermediate_values = intermediate_values or {}
        datetime_start = datetime_start or datetime.datetime.now()

        if state.is_finished():
            datetime_complete = datetime_complete or datetime.datetime.now()

        trial = FrozenTrial(
            number=-1,  # dummy value.
            trial_id=-1,  # dummy value.
            state=state,
            value=value,
            datetime_start=datetime_start,
            datetime_complete=datetime_complete,
            params=params,
            distributions=distributions,
            user_attrs=user_attrs,
            system_attrs=system_attrs,
            intermediate_values=intermediate_values,
        )

        trial._validate()

        trial_id = self._storage.create_new_trial(self._study_id,
                                                  template_trial=trial)
        return trial_id
Ejemplo n.º 2
0
    def add_trial(self, trial: FrozenTrial) -> None:
        """Add trial to study.

        The trial is validated before being added.

        Example:

            .. testcode::

                import optuna
                from optuna.distributions import UniformDistribution


                def objective(trial):
                    x = trial.suggest_uniform("x", 0, 10)
                    return x ** 2


                study = optuna.create_study()
                assert len(study.trials) == 0

                trial = optuna.trial.create_trial(
                    params={"x": 2.0},
                    distributions={"x": UniformDistribution(0, 10)},
                    value=4.0,
                )

                study.add_trial(trial)
                assert len(study.trials) == 1

                study.optimize(objective, n_trials=3)
                assert len(study.trials) == 4

                other_study = optuna.create_study()

                for trial in study.trials:
                    other_study.add_trial(trial)
                assert len(other_study.trials) == len(study.trials)

                other_study.optimize(objective, n_trials=2)
                assert len(other_study.trials) == len(study.trials) + 2

        .. seealso::

            This method should in general be used to add already evaluated trials
            (``trial.state.is_finished() == True``). To queue trials for evaluation,
            please refer to :func:`~optuna.study.Study.enqueue_trial`.

        .. seealso::

            See :func:`~optuna.trial.create_trial` for how to create trials.

        Args:
            trial: Trial to add.

        Raises:
            :exc:`ValueError`:
                If trial is an invalid state.

        """

        trial._validate()

        self._storage.create_new_trial(self._study_id, template_trial=trial)