Samplers

class optuna.multi_objective.samplers.BaseMultiObjectiveSampler[源代码]

multi-objective sampler 基类。

该类的抽象方法和 BaseSampler 定义的抽象方法一致,除了接受 multi-objective 版 study 和 trial 实例作为参数之外。

注解

在 v1.4.0 中作为试验性特性引入,在未来版本中,该接口可能在没有预先告知的情况下被改变。参考 https://github.com/optuna/optuna/releases/tag/v1.4.0.

abstract infer_relative_search_space(study: optuna.multi_objective.study.MultiObjectiveStudy, trial: optuna.multi_objective.trial.FrozenMultiObjectiveTrial) → Dict[str, optuna.distributions.BaseDistribution][源代码]

推断将在 target trial 中使用的搜索空间。

该方法在 sample_relative() 方法之前被调用。而该方法返回的搜索空间会被传入它。那些不包含在该搜索空间中的参数将通过 sample_independent() 来采样。

参数
  • study -- Target study object.

  • trial -- Target trial object.

返回

一个包含了参数名和参数分布的字典。

参见

参见 作为 infer_relative_search_space() 的实现的 intersection_search_space()

abstract sample_independent(study: optuna.multi_objective.study.MultiObjectiveStudy, trial: optuna.multi_objective.trial.FrozenMultiObjectiveTrial, param_name: str, param_distribution: optuna.distributions.BaseDistribution) → Any[源代码]

对给定的分布进行参数采样。

该方法只在参数不包含在 sample_relative() 方法返回的结果中的情况下使用。该方法适用于那些不依赖参数之间关系的采样算法,比如随机采样。

参数
  • study -- Target study object.

  • trial -- Target trial object.

  • param_name -- 采样参数名

  • param_distribution -- 指定了先验或者/和采样算法的分布对象。

返回

参数值。

abstract sample_relative(study: optuna.multi_objective.study.MultiObjectiveStudy, trial: optuna.multi_objective.trial.FrozenMultiObjectiveTrial, search_space: Dict[str, optuna.distributions.BaseDistribution]) → Dict[str, Any][源代码]

在给定的搜索空间中采样。

在每个 trial 开始时该方法会被调用一次,也就是在目标函数被求值前被调用。该方法适用于那些依赖参数间关系的采样算法。

参数
返回

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

class optuna.multi_objective.samplers.NSGAIIMultiObjectiveSampler(population_size: int = 50, mutation_prob: Optional[float] = None, crossover_prob: float = 0.9, swapping_prob: float = 0.5, seed: Optional[int] = None)[源代码]

使用 NSGA-II 算法的 Multi-objective sampler。

NSGA-II 指 "Nondominated Sorting Genetic Algorithm II",这是一个著名的快速且优秀 multi-objective 遗传算法。

要了解更多关于 NSGA-II 的信息的话,请参考以下论文:

参数
  • population_size -- 每一代中的 个体(trial)数。

  • mutation_prob -- 在创建新个体时每个参数突变的概率。如果设置成 None 的话,那么该值实际上会是 1.0 / len(parent_trial.params) 。其中 parent_trial 是 target trial 的父代 trial。

  • crossover_prob -- 产生新的个体时发生交叉互换的概率。

  • swapping_prob -- 在交叉互换中交换父代参数中每一个参数的概率。

  • seed -- 随机数生成器种子。

注解

在 v1.5.0 中作为试验性特性引入,在未来版本中,该接口可能在没有预先告知的情况下被改变。参考 https://github.com/optuna/optuna/releases/tag/v1.5.0.

class optuna.multi_objective.samplers.RandomMultiObjectiveSampler(seed: Optional[int] = None)[源代码]

使用随机采样的 Multi-objective sampler

该 sampler 是基于 independent sampling 的。关于 'independent sampling' 的更多细节请参考 BaseMultiObjectiveSampler

示例

import optuna
from optuna.multi_objective.samplers import RandomMultiObjectiveSampler

def objective(trial):
    x = trial.suggest_uniform('x', -5, 5)
    y = trial.suggest_uniform('y', -5, 5)
    return x ** 2, y + 10

study = optuna.multi_objective.create_study(
    ["minimize", "minimize"],
    sampler=RandomMultiObjectiveSampler()
)
study.optimize(objective, n_trials=10)
Args:

seed: 随机数生成器种子。

注解

在 v1.4.0 中作为试验性特性引入,在未来版本中,该接口可能在没有预先告知的情况下被改变。参考 https://github.com/optuna/optuna/releases/tag/v1.4.0.