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)[源代码]
使用 NSGA-II 算法的多目标采样器。
NSGA-II 代表“非支配排序遗传算法 II”(Nondominated Sorting Genetic Algorithm II),这是一种著名、快速且精英主义的多目标遗传算法。
有关 NSGA-II 的更多信息,请参阅以下论文:
注意
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 # We minimize the first objective and maximize the second objective. sampler = optuna.samplers.TPESampler() study = optuna.create_study(directions=["minimize", "maximize"], sampler=sampler) study.optimize(objective, n_trials=100)
有关 v4.0.0 中速度提升的更多详细信息,请参阅我们的 文章。
- 参数:
population_size (int) – 一代中的个体(试次)数量。`population_size` 必须大于或等于 `crossover.n_parents`。对于
UNDXCrossover和SPXCrossover,`n_parents=3`,对于其他算法,`n_parents=2`。mutation_prob (float | None) – 创建新个体时,对每个参数进行变异的概率。如果指定为 `None`,则使用 `1.0 / len(parent_trial.params)`,其中 `parent_trial` 是目标个体的父代试次。
crossover (BaseCrossover | None) –
创建子个体时应用的交叉方式。可用交叉方式列表: https://docs.optuna.cn/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:
试次 x 是可行的,而试次 y 不是。
试次 x 和 y 都是不可行的,但试次 x 的总体违规程度更小。
试次 x 和 y 都是可行的,并且试次 x 支配试次 y。
注意
作为实验性功能在 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`。
注意
`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`。
注意
`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`。
注意
`after_trial_strategy` 参数在 v3.3.0 中作为实验性功能添加。接口可能在更新版本中更改,恕不另行通知。请参阅 https://github.com/optuna/optuna/releases/tag/v3.3.0。
方法
after_trial(study, trial, state, values)试验后处理。
before_trial(study, trial)试验预处理。
get_parent_population(study, generation)获取给定代数的父代种群。
get_population(study, generation)获取给定代数的种群。
get_trial_generation(study, trial)获取给定试代的代数。
infer_relative_search_space(study, trial)为目标试验推断将使用的搜索空间。
重新设置采样器的随机数生成器。
sample_independent(study, trial, param_name, ...)为给定的分布采样一个参数。
sample_relative(study, trial, search_space)在给定的搜索空间中采样参数。
select_parent(study, generation)从给定代数的种群中选择父代试次。
属性
population_size- after_trial(study, trial, state, values)[源代码]
试验后处理。
此方法在目标函数返回后、试验完成并存储其状态之前调用。
注意
于 v2.4.0 添加为实验性功能。接口可能在新版本中更改,恕不另行通知。请参阅 https://github.com/optuna/optuna/releases/tag/v2.4.0。
- 参数:
study (Study) – 目标研究对象。
trial (FrozenTrial) – 目标试验对象。修改此对象前请先复制。
state (TrialState) – 结果试验状态。
- 返回类型:
无
- before_trial(study, trial)[源代码]
试验预处理。
此方法在调用目标函数之前、试验实例化之后调用。更准确地说,此方法在试验初始化期间调用,就在调用
infer_relative_search_space()调用之前。换句话说,它负责在推断搜索空间之前应执行的预处理。注意
于 v3.3.0 作为实验性功能添加。界面可能会在较新版本中更改,恕不另行通知。请参阅 https://github.com/optuna/optuna/releases/tag/v3.3.0。
- 参数:
study (Study) – 目标研究对象。
trial (FrozenTrial) – 目标试验对象。
- 返回类型:
无
- get_parent_population(study, generation)
获取给定代数的父代种群。
此方法将父代种群缓存到 study 的系统属性中。
- 参数:
- 返回:
父代 FrozenTrial 列表。如果 `generation == 0`,则返回空列表。
- 返回类型:
- get_population(study, generation)
获取给定代数的种群。
- 参数:
- 返回:
给定代数的 FrozenTrial 列表。
- 返回类型:
- get_trial_generation(study, trial)
获取给定试代的代数。
此方法返回指定试代的代数。如果代数未在试代的系统属性中设置,它将计算并设置代数。
当前代数取决于所有已完成试代的最大代数。
- 参数:
study (Study) – 试代所属的 Study 对象。
trial (FrozenTrial) – 要获取代数的试代对象。
- 返回:
给定试代的代数。
- 返回类型:
- infer_relative_search_space(study, trial)[源代码]
为目标试验推断将使用的搜索空间。
此方法在调用
sample_relative()方法之前调用,并且此方法返回的搜索空间将传递给它。未包含在搜索空间中的参数将使用sample_independent()方法进行采样。- 参数:
study (Study) – 目标研究对象。
trial (FrozenTrial) – 目标试验对象。修改此对象前请先复制。
- 返回:
包含参数名称和参数分布的字典。
- 返回类型:
另请参阅
请参阅
intersection_search_space()作为infer_relative_search_space()的实现。
- reseed_rng()[源代码]
重新设置采样器的随机数生成器。
如果试验与
n_jobs>1选项并行执行,则Study实例将调用此方法。在这种情况下,采样器实例将被复制,包括随机数生成器的状态,并且它们可能会建议相同的值。为防止此问题,此方法为每个随机数生成器分配不同的种子。- 返回类型:
无
- sample_independent(study, trial, param_name, param_distribution)[源代码]
为给定的分布采样一个参数。
此方法仅对未包含在
sample_relative()方法返回的搜索空间中的参数进行调用。此方法适用于不使用参数之间关系的采样算法,例如随机采样和 TPE。注意
任何内置采样器在采样新参数时都会忽略失败的试验。因此,在采样器看来,失败的试验被视为已删除。
- 参数:
study (Study) – 目标研究对象。
trial (FrozenTrial) – 目标试验对象。修改此对象前请先复制。
param_name (str) – 采样参数的名称。
param_distribution (BaseDistribution) – 指定采样算法先验和/或尺度的分布对象。
- 返回:
参数值。
- 返回类型:
Any
- sample_relative(study, trial, search_space)[源代码]
在给定的搜索空间中采样参数。
此方法在每次试验开始时调用一次,即在评估目标函数之前。此方法适用于使用参数之间关系的采样算法,例如高斯过程和 CMA-ES。
注意
任何内置采样器在采样新参数时都会忽略失败的试验。因此,在采样器看来,失败的试验被视为已删除。
- 参数:
study (Study) – 目标研究对象。
trial (FrozenTrial) – 目标试验对象。修改此对象前请先复制。
search_space (dict[str, BaseDistribution]) – 由
infer_relative_search_space()返回的搜索空间。
- 返回:
包含参数名称和值的字典。
- 返回类型: