optuna.samplers.NSGAIISampler

class optuna.samplers.NSGAIISampler(*, population_size=50, mutation_prob=None, crossover=None, crossover_prob=0.9, swapping_prob=0.5, seed=None, constraints_func=None, elite_population_selection_strategy=None, child_generation_strategy=None, after_trial_strategy=None)[source]

NSGA-IIアルゴリズムを採用した多目的サンプリング手法。

NSGA-II(Non-dominated Sorting Genetic Algorithm II)とは、 広く知られ、高速かつエリート主義的な多目的遺伝的アルゴリズムである。

NSGA-IIに関する詳細情報については、以下の論文を参照されたい:

Note

TPESampler はv4.0.0で大幅に高速化され、動的探索空間の処理やカテゴリカル距離の考慮など、 NSGAIISampler ではサポートされていない複数の機能を備えている。 TPESampler を使用するには、 以下のように明示的にサンプラーを指定する必要がある:

import optuna


def objective(trial):
    x = trial.suggest_float("x", -100, 100)
    y = trial.suggest_categorical("y", [-1, 0, 1])
    f1 = x**2 + y
    f2 = -((x - 2) ** 2 + y)
    return f1, f2


# ここでは第1目的関数を最小化し、第2目的関数を最大化する。
sampler = optuna.samplers.TPESampler()
study = optuna.create_study(directions=["minimize", "maximize"], sampler=sampler)
study.optimize(objective, n_trials=100)

v4.0.0における高速化の詳細については、当社の記事 も併せて参照されたい。

Parameters:
  • population_size (int) – 世代あたりの個体数(トライアル数)。 population_sizecrossover.n_parents 以上の値でなければならない。 UNDXCrossover および SPXCrossover の場合、 n_parents=3 、その他のアルゴリズムでは n_parents=2 となる。

  • mutation_prob (float | None) – 新規個体を生成する際に各パラメータを変異させる確率。 None を指定すると、対象個体の親トライアル(parent_trial)のパラメータ数を len(parent_trial.params) で除した値がデフォルト値として使用される。

  • crossover (BaseCrossover | None) –

    子個体を生成する際に適用する交叉方法。 利用可能な交叉方法は以下の通り: https://optuna.readthedocs.io/en/stable/reference/samplers/nsgaii.html

    UniformCrossover は、 常に CategoricalDistribution からサンプリングされたパラメータに適用され、 この引数が指定されていない場合、他の分布からサンプリングされたパラメータについても デフォルトで適用される。

    各交叉方法についての詳細は、 該当する交叉方法のドキュメントを参照のこと。

  • crossover_prob (float) – 新規個体生成時に交叉(親個体間でのパラメータ交換)が発生する確率。

  • swapping_prob (float) – 交叉時に親個体の各パラメータを交換する確率。

  • seed (int | None) – 乱数生成器のシード値。

  • constraints_func (Callable[[FrozenTrial], Sequence[float]] | None) –

    目的関数の制約条件を計算するオプション関数。 FrozenTrial を引数として受け取り、 制約条件を返す必要がある。 戻り値は float のシーケンスでなければならない。 0より大きい値は制約違反を示し、0以下の値は実行可能とみなされる。 トライアルに対して constraints_func が複数の値を返した場合、 すべての値が0以下の場合に限り、そのトライアルは実行可能と判定される。

    constraints_func は、各成功トライアルの後に評価される。 トライアルが失敗した場合やプルーニングされた場合にはこの関数は呼び出されないが、 この動作は将来のバージョンで変更される可能性がある。

    制約条件の処理には制約付き支配関係が用いられる。 トライアルxがトライアルyを制約付き支配するとは、以下のいずれかの条件が満たされる場合を指す:

    1. トライアルxが実行可能でトライアルyが実行不可能である。

    2. トライアルxとyの両方が実行不可能だが、トライアルxの方が全体的な違反度が小さい。

    3. トライアルxとyが共に実行可能で、トライアルxがトライアルyを支配している。

    Note

    v2.5.0で実験的機能として追加された。インターフェースは事前通知なしに将来のバージョンで変更される可能性がある。 詳細は https://github.com/optuna/optuna/releases/tag/v2.5.0 を参照のこと。

  • elite_population_selection_strategy (Callable[[Study, list[FrozenTrial]], list[FrozenTrial]] | None) –

    現在の個体群プールから生存個体を選定するための戦略。 デフォルトは None

    Note

    引数 elite_population_selection_strategy は v3.3.0で実験的機能として追加された。 インターフェースは事前通知なしに将来のバージョンで変更される可能性がある。 詳細は https://github.com/optuna/optuna/releases/tag/v3.3.0 を参照のこと。

  • child_generation_strategy (Callable[[Study, dict[str, BaseDistribution], list[FrozenTrial]], dict[str, Any]] | None) –

    親トライアルから子パラメータを生成するための戦略。デフォルトは None

    Note

    引数 child_generation_strategy はv3.3.0で実験的機能として追加された。 インターフェースは事前通知なしに将来のバージョンで変更される可能性がある。 詳細は https://github.com/optuna/optuna/releases/tag/v3.3.0 を参照のこと。

  • after_trial_strategy (Callable[[Study, FrozenTrial, TrialState, Sequence[float] | None], None] | None) –

    各トライアル終了後に実行する一連の処理手順。デフォルトは None

    Note

    引数 after_trial_strategy はv3.3.0で実験的機能として追加された。 インターフェースは事前通知なしに将来のバージョンで変更される可能性がある。 詳細は https://github.com/optuna/optuna/releases/tag/v3.3.0 を参照のこと。

Methods

after_trial(study, trial, state, values)

Trial post-processing.

before_trial(study, trial)

Trial pre-processing.

get_parent_population(study, generation)

Get the parent population of the given generation.

get_population(study, generation)

Get the population of the given generation.

get_trial_generation(study, trial)

Get the generation number of the given trial.

infer_relative_search_space(study, trial)

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

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.

select_parent(study, generation)

Select parent trials from the population for the given generation.

属性

population_size

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

get_parent_population(study, generation)

指定された世代の親集団を取得する。

このメソッドは親集団をスタディのシステム属性にキャッシュする。

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

  • generation (int) – 対象の世代番号

Returns:

凍結された親トライアルのリスト。generation == 0 の場合は空のリストを返す

Return type:

list[FrozenTrial]

get_population(study, generation)

指定された世代の集団を取得する。

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

  • generation (int) – 対象の世代番号

Returns:

指定された世代の凍結されたトライアルのリスト

Return type:

list[FrozenTrial]

get_trial_generation(study, trial)

指定されたトライアルの世代番号を取得する。

このメソッドは指定されたトライアルの世代番号を返す。 トライアルのシステム属性に世代番号が設定されていない場合、 世代番号を計算して設定する。

現在の世代番号は、 すべての完了済みトライアルの最大世代番号に依存する。

Parameters:
  • study (Study) – 対象のトライアルが属するスタディオブジェクト

  • trial (FrozenTrial) – 世代番号を取得する対象のトライアルオブジェクト

Returns:

指定されたトライアルの世代番号

Return type:

int

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() の実装例である。

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]

select_parent(study, generation)[source]

指定された世代の集団から親トライアルを選択する。

このメソッドは世代ごとに1回呼び出され、 現在の世代の集団から親を選択するために使用される。

この関数の出力結果はスタディシステムの属性にキャッシュされる。

このメソッドはサブクラスで実装する必要があり、具体的な選択戦略を定義する。

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

  • generation (int) – 対象の世代番号

Returns:

親として選択された凍結済みトライアルのリスト

Return type:

list[FrozenTrial]