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