optuna.samplers.NSGAIIISampler

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

使用 NSGA-III 算法的多目标采样器。

NSGA-III 代表“非支配排序遗传算法 III”,它是 NSGA-II 的一个修改版本,用于解决多目标优化问题。

有关 NSGA-III 的更多信息,请参阅以下论文

参数:
  • reference_points (np.ndarray | None) – 一个二维 numpy.ndarray,其列数等于目标维度。表示用于确定哪些个体将存活的参考点列表。非支配排序后,将根据每个个体最近的参考点的稀疏程度来确定边缘前沿中的哪些个体将存活。默认设置下,算法使用 均匀 分布的点来多样化结果。通过给出任意一组 目标 点,也可以反映您的 偏好,因为算法会优先选择参考点周围的个体。

  • dividing_parameter (int) – 一个参数,用于确定默认参考点的密度。此参数确定每个轴上参考点之间的划分数量。该值越小,参考点越少。默认值为 3。请注意,当 reference_points 不是 None 时,不使用此参数。

  • population_size (int)

  • mutation_prob (float | None)

  • crossover (BaseCrossover | None)

  • crossover_prob (float)

  • swapping_prob (float)

  • seed (int | None)

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

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

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

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

注意

除了 reference_pointsdividing_parameter 之外的其他参数与 NSGAIISampler 相同。

注意

在 v3.2.0 中作为实验性功能添加。接口在更新版本中可能会更改,恕不另行通知。请参阅 https://github.com/optuna/optuna/releases/tag/v3.2.0

方法

after_trial(study, trial, state, values)

试验后处理。

before_trial(study, trial)

试验预处理。

infer_relative_search_space(study, trial)

推断目标试验中相对采样将使用的搜索空间。

reseed_rng()

重置采样器随机数生成器的种子。

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

为给定分布采样一个参数。

sample_relative(study, trial, search_space)

在给定搜索空间中采样参数。

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

试验后处理。

此方法在目标函数返回后调用,并在试验完成并存储其状态之前调用。

注意

在 v2.4.0 中作为实验性功能添加。接口在更新版本中可能会更改,恕不另行通知。请参阅 https://github.com/optuna/optuna/releases/tag/v2.4.0

参数:
  • study (Study) – 目标研究对象。

  • trial (FrozenTrial) – 目标试验对象。在修改此对象之前请先复制。

  • state (TrialState) – 试验结果状态。

  • values (Sequence[float] | None) – 试验结果值。如果试验成功,保证不是 None

返回类型:

None

before_trial(study, trial)[source]

试验预处理。

此方法在目标函数调用之前以及试验实例化之后调用。更准确地说,此方法在试验初始化期间调用,就在调用 infer_relative_search_space() 之前。换句话说,它负责在推断搜索空间之前应进行的预处理。

注意

在 v3.3.0 中作为实验性功能添加。接口在更新版本中可能会更改,恕不另行通知。请参阅 https://github.com/optuna/optuna/releases/tag/v3.3.0

参数:
  • study (Study) – 目标研究对象。

  • trial (FrozenTrial) – 目标试验对象。

返回类型:

None

infer_relative_search_space(study, trial)[source]

推断目标试验中相对采样将使用的搜索空间。

此方法在 sample_relative() 方法之前调用,此方法返回的搜索空间将传递给后者。不包含在搜索空间中的参数将使用 sample_independent() 方法采样。

参数:
  • study (Study) – 目标研究对象。

  • trial (FrozenTrial) – 目标试验对象。在修改此对象之前请先复制。

返回:

包含参数名称和参数分布的字典。

返回类型:

dict[str, BaseDistribution]

另请参阅

请参阅 intersection_search_space() 作为 infer_relative_search_space() 的实现。

reseed_rng()[source]

重置采样器随机数生成器的种子。

如果以 n_jobs>1 选项并行执行试验,则 Study 实例会调用此方法。在这种情况下,采样器实例将被复制,包括随机数生成器的状态,它们可能会建议相同的值。为了防止此问题,此方法会为每个随机数生成器分配不同的种子。

返回类型:

None

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

为给定分布采样一个参数。

此方法仅用于采样 sample_relative() 方法返回的搜索空间中不包含的参数。此方法适用于不使用参数之间关系的采样算法,例如随机采样和 TPE。

注意

任何内置采样器在采样新参数时都会忽略失败的试验。因此,从采样器的角度来看,失败的试验被视为已删除。

参数:
  • study (Study) – 目标研究对象。

  • trial (FrozenTrial) – 目标试验对象。在修改此对象之前请先复制。

  • param_name (str) – 被采样参数的名称。

  • param_distribution (BaseDistribution) – 指定采样算法先验和/或尺度的分布对象。

返回:

参数值。

返回类型:

Any

sample_relative(study, trial, search_space)[source]

在给定搜索空间中采样参数。

此方法在每个试验开始时调用一次,即在评估目标函数之前。此方法适用于使用参数之间关系的采样算法,例如高斯过程和 CMA-ES。

注意

任何内置采样器在采样新参数时都会忽略失败的试验。因此,从采样器的角度来看,失败的试验被视为已删除。

参数:
返回:

包含参数名称和参数值的字典。

返回类型:

dict[str, Any]