optuna.samplers.nsgaii.VSBXCrossover

class optuna.samplers.nsgaii.VSBXCrossover(eta=None, uniform_crossover_prob=0.5, use_child_gene_prob=0.5)[源代码]

NSGAIISampler 使用的修改版模拟二进制交叉操作。

vSBX 在生成子个体时,不排除参数空间的任何区域,同时保持 SBX 的优秀特性。

在论文中,vSBX 只有一个参数 eta,并生成两个子个体。然而,Optuna 在一次交叉操作中只能返回一个子个体,因此它使用 uniform_crossover_probuse_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)[源代码]

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

此方法在 sample_relative() 中调用。

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

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

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

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

返回:

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

返回类型:

np.ndarray