optuna.samplers.nsgaii.SBXCrossover

class optuna.samplers.nsgaii.SBXCrossover(eta=None, uniform_crossover_prob=0.5, use_child_gene_prob=0.5)[source]

optuna.samplers.NSGAIISampler 使用的模拟二进制交叉 (SBX) 操作。

根据多项式概率分布从两个父代个体生成一个子代。

在该论文中,SBX 只有一个参数 `eta`,并生成两个子代个体。然而,Optuna 在一次交叉操作中只能返回一个子代个体,因此它使用 `uniform_crossover_prob` 和 `use_child_gene_prob` 参数将两个个体组合成一个。

参数:
  • eta (float | None) – 分布指数。`eta` 的小值允许选择距离较远的解作为子代解。如果未指定,对于单目标函数取默认值 `2`,对于多目标函数取默认值 `20`。

  • uniform_crossover_prob (float) – `uniform_crossover_prob` 是在选作候选子代个体的两个个体之间进行均匀交叉的概率。此参数控制两个个体是否交叉以生成一个子代个体。如果 `uniform_crossover_prob` 超过 0.5,结果等同于 `1-uniform_crossover_prob`,因为它返回交叉结果的两个个体之一。如果未指定,取默认值 `0.5`。取值范围是 `[0.0, 1.0]`。

  • use_child_gene_prob (float) – `use_child_gene_prob` 是使用生成的子代变量值而不是父代变量值的概率。此概率独立应用于每个变量。其中 `1-use_chile_gene_prob` 是使用父代值不变的概率。如果未指定,取默认值 `0.5`。取值范围是 `(0.0, 1.0]`。

注意

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

方法

crossover(parents_params, rng, study, ...)

对选定的父代个体执行交叉。

属性

n_parents

crossover(parents_params, rng, study, search_space_bounds)[source]

对选定的父代个体执行交叉。

此方法在 sample_relative() 中调用。

参数:
  • parents_params (np.ndarray) – 一个维度为 `num_parents x num_parameters` 的 `numpy.ndarray`。表示每个父代个体的参数空间。对于数值参数,此空间是连续的。

  • rng (np.random.RandomState) – `numpy.random.RandomState` 的一个实例。

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

  • search_space_bounds (np.ndarray) – 一个维度为 `len_search_space x 2` 的 `numpy.ndarray`,表示根据转换后的搜索空间构建的数值分布边界。

返回值:

包含新参数组合的一维 `numpy.ndarray`。

返回类型:

np.ndarray