optuna.samplers.GridSampler

class optuna.samplers.GridSampler(search_space, seed=None)[source]

グリッドサーチを用いたサンプラー。

GridSampler を使用すると、スタディ期間中に指定された探索空間内の パラメータの全組み合わせをトライアルが提案します。

使用例

import optuna


def objective(trial):
    x = trial.suggest_float("x", -100, 100)
    y = trial.suggest_int("y", -100, 100)
    return x**2 + y**2


search_space = {"x": [-50, 0, 50], "y": [-99, 0, 99]}
study = optuna.create_study(sampler=optuna.samplers.GridSampler(search_space))
study.optimize(objective)

Note

Ask-and-Tell インターフェース を使用する場合、このサンプラーは最終グリッドの評価直後に RuntimeError を発生させます。これは GridSampler が 内部で stop() メソッドを呼び出し、渡された search_space 内の 全組み合わせが既に評価されている場合に最適化を自動的に停止するためです。回避策として、 https://github.com/optuna/optuna/issues/4121#issuecomment-1305289910 のようにエラーを 手動で処理する必要があります。

Note

GridSampler は離散型提案メソッドで指定されたパラメータの量子化を 考慮せず、探索空間内で指定された値のいずれかをサンプリングします。例えば、以下のコード例では、 x として整数値ではなく -0.5 または 0.5 のいずれかがサンプリングされます。

import optuna


def objective(trial):
    # 以下の提案メソッドは -5 から 5 までの整数値を指定しています。
    x = trial.suggest_float("x", -5, 5, step=1)
    return x**2


# グリッドには非整数値が指定されています。
search_space = {"x": [-0.5, 0.5]}
study = optuna.create_study(sampler=optuna.samplers.GridSampler(search_space))
study.optimize(objective, n_trials=2)

Note

グリッド内のパラメータ設定は、対応するトライアルが終了するまで完了とみなされません。 このため、分散最適化で複数のトライアルが同時に実行される場合、異なるワーカーが 同じパラメータ設定を提案することがあります。実際のトライアル数がグリッドのサイズを超える 可能性がある点にご注意ください。

Note

GridSamplerenqueue_trial() と共に使用する場合、 すべてのパラメータを指定する必要があります。

Parameters:
  • search_space (Mapping[str, Sequence[GridValueType]]) – キーと値がパラメータ名と対応する値の候補からなる辞書

  • seed (int | None) – グリッドのランダムなシャッフル順序を固定するシード値。このシャッフルは optimize()n_trials より大きいグリッド数を指定した場合に、 類似したグリッドの提案を抑制するのに有効です。分散最適化では、各プロセスで seed を 固定することが重複提案を防ぐために強く推奨されます。

メソッド

after_trial(study, trial, state, values)

Trial post-processing.

before_trial(study, trial)

Trial pre-processing.

infer_relative_search_space(study, trial)

Infer the search space that will be used by relative sampling in the target trial.

is_exhausted(study)

Return True if all the possible params are evaluated, otherwise return False.

reseed_rng()

Reseed sampler's random number generator.

sample_independent(study, trial, param_name, ...)

Sample a parameter for a given distribution.

sample_relative(study, trial, search_space)

Sample parameters in a given search space.

after_trial(study, trial, state, values)[source]

トライアルの事後処理。

このメソッドは目的関数の評価が終了し、トライアルが終了して状態が保存される直前に呼び出されます。

Note

v2.4.0 で実験的機能として追加されました。インターフェースは予告なく変更される可能性が あります。詳細は https://github.com/optuna/optuna/releases/tag/v2.4.0 を参照してください。

Parameters:
  • study (Study) – 対象のスタディオブジェクト

  • trial (FrozenTrial) – 対象のトライアルオブジェクト このオブジェクトを変更する前にコピーを取ってください

  • state (TrialState) – トライアルの最終状態

  • values (Sequence[float] | None) – トライアルの最終値 トライアルが成功した場合、None ではないことが保証されます

Return type:

None

before_trial(study, trial)[source]

トライアルの事前処理

このメソッドは目的関数が呼び出される前に呼び出され、トライアルがインスタンス化された直後に 実行されます。より正確には、トライアルの初期化中、infer_relative_search_space() が 呼び出される直前に実行されます。つまり、探索空間を推測する前に行うべき事前処理を担当します。

Note

v3.3.0 で実験的機能として追加されました。インターフェースは予告なく変更される可能性が あります。詳細は https://github.com/optuna/optuna/releases/tag/v3.3.0 を参照してください。

Parameters:
  • study (Study) – 対象のスタディオブジェクト

  • trial (FrozenTrial) – 対象のトライアルオブジェクト

Return type:

None

infer_relative_search_space(study, trial)[source]

対象トライアルで使用する探索空間を推測します。

このメソッドは sample_relative() メソッドの直前に呼び出され、 そのメソッドに探索空間が渡されます。探索空間に含まれないパラメータは sample_independent() メソッドでサンプリングされます。

Parameters:
  • study (Study) – 対象のスタディオブジェクト

  • trial (FrozenTrial) – 対象のトライアルオブジェクト このオブジェクトを変更する前にコピーを取ってください

Returns:

パラメータ名とパラメータの分布を含む辞書

Return type:

dict[str, BaseDistribution]

See also

intersection_search_space()infer_relative_search_space() の実装例です。

is_exhausted(study)[source]

すべての可能なパラメータが評価された場合は True を、それ以外の場合は False を返します。

Parameters:

study (Study)

Return type:

bool

reseed_rng()[source]

サンプラーの乱数生成器のシードを再設定します。

このメソッドは n_jobs>1 オプションでトライアルが並列実行される場合、 Study インスタンスによって呼び出されます。 この場合、乱数生成器の状態を含むサンプラーインスタンスが複製され、 同じ値が提案される可能性があります。この問題を防ぐため、 各乱数生成器に異なるシードを割り当てます。

Return type:

None

sample_independent(study, trial, param_name, param_distribution)[source]

指定された分布からパラメータをサンプリングします。

このメソッドは sample_relative() メソッドで返される 探索空間に含まれないパラメータに対してのみ呼び出されます。 ランダムサンプリングや TPE など、パラメータ間の関係を使用しないサンプリングアルゴリズムに適しています。

Note

組み込みサンプラーは失敗したトライアルを無視して新しいパラメータをサンプリングします。 したがって、失敗したトライアルはサンプラーの観点では削除されたものとみなされます。

Parameters:
  • study (Study) – 対象のスタディオブジェクト

  • trial (FrozenTrial) – 対象のトライアルオブジェクト このオブジェクトを変更する前にコピーを取ってください

  • param_name (str) – サンプリングするパラメータの名前

  • param_distribution (BaseDistribution) – サンプリングアルゴリズムの事前分布とスケールを指定する分布オブジェクト

Returns:

パラメータ値

Return type:

Any

sample_relative(study, trial, search_space)[source]

指定された探索空間からパラメータをサンプリングします。

このメソッドは各トライアルの開始時に1回呼び出されます (目的関数の評価の直前)。 ガウス過程や CMA-ES など、パラメータ間の関係を使用するサンプリングアルゴリズムに適しています。

Note

組み込みサンプラーは失敗したトライアルを無視して新しいパラメータをサンプリングします。 したがって、失敗したトライアルはサンプラーの観点では削除されたものとみなされます。

Parameters:
  • study (Study) – 対象のスタディオブジェクト

  • trial (FrozenTrial) – 対象のトライアルオブジェクト このオブジェクトを変更する前にコピーを取ってください

  • search_space (dict[str, BaseDistribution]) – infer_relative_search_space() で返される探索空間

Returns:

パラメータ名と値を含む辞書

Return type:

dict[str, Any]