optuna.samplers

The samplers 模块定义了参数采样的基类,这在 BaseSampler 中有详尽的描述。该模块中的其他类代表子类,它们继承自 BaseSampler,实现了不同的采样策略。

另请参阅

高效优化算法 教程解释了采样器类的概述。

另请参阅

用户自定义采样器 教程在您想实现自己的采样器类时可能会有所帮助。

另请参阅

如果您不确定使用哪个采样器,请考虑使用 AutoSampler,它在优化过程中自动选择采样器。更多详情,请参阅 关于 AutoSampler 的文章

AutoSampler

RandomSampler

TPESampler

GPSampler

CmaEsSampler

NSGAIISampler

NSGAIIISampler

GridSampler

QMCSampler

BoTorchSampler

BruteForceSampler

浮点数参数

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\blacktriangle\)

\(\blacktriangle\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\) (\(\color{red}\times\) 对于无限域)

整数参数

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\blacktriangle\)

\(\blacktriangle\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\blacktriangle\)

\(\color{green}\checkmark\)

类别参数

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\blacktriangle\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\blacktriangle\)

\(\blacktriangle\)

\(\color{green}\checkmark\)

剪枝

\(\blacktriangle\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\blacktriangle\)

\(\blacktriangle\)

\(\color{red}\times\) (\(\blacktriangle\) 对于单目标)

\(\color{red}\times\) (\(\blacktriangle\) 对于单目标)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\blacktriangle\)

\(\color{green}\checkmark\)

多变量优化

\(\color{green}\checkmark\)

\(\blacktriangle\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\blacktriangle\)

\(\blacktriangle\)

\(\blacktriangle\)

\(\blacktriangle\)

\(\color{green}\checkmark\)

\(\blacktriangle\)

条件搜索空间

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\blacktriangle\)

\(\blacktriangle\)

\(\blacktriangle\)

\(\blacktriangle\)

\(\blacktriangle\)

\(\blacktriangle\)

\(\blacktriangle\)

\(\color{green}\checkmark\)

多目标优化

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{red}\times\)

\(\color{green}\checkmark\) (\(\blacktriangle\) 对于单目标)

\(\color{green}\checkmark\) (\(\blacktriangle\) 对于单目标)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

批量优化

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\blacktriangle\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

分布式优化

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\blacktriangle\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

约束优化

\(\color{green}\checkmark\)

\(\color{red}\times\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{red}\times\)

\(\color{green}\checkmark\)

\(\color{green}\checkmark\)

\(\color{red}\times\)

\(\color{red}\times\)

\(\color{green}\checkmark\)

\(\color{red}\times\)

时间复杂度 (每次试验) (*)

不适用

\(O(d)\)

\(O(dn \log n)\)

\(O(n^3)\)

\(O(d^3)\)

\(O(mp^2)\) (***)

\(O(mp^2)\) (***)

\(O(dn)\)

\(O(dn)\)

\(O(n^3)\)

\(O(d)\)

推荐预算 (#试验) (**)

任意数量

任意数量

100–1000

–500

1000–10000

100–10000

100–10000

组合数量

任意数量

10–100

组合数量

注意

\(\color{green}\checkmark\): 支持此功能. \(\blacktriangle\): 可用,但不高效. \(\color{red}\times\): 导致错误或没有接口.

(*): 我们假设 \(d\) 是搜索空间的维度,\(n\) 是已完成的试验次数,\(m\) 是目标数量,\(p\) 是种群大小 (算法特定参数). 此表显示了采样算法的时间复杂度。我们可能省略了 Optuna 实现中依赖的其他项,包括调用采样方法的 \(O(d)\) 和收集已完成试验的 \(O(n)\)。这意味着,例如,RandomSampler 的实际时间复杂度是 \(O(d+n+d) = O(d+n)\)。从另一个角度看,除了 NSGAIISamplerNSGAIIISampler 之外,所有时间复杂度都是为单目标优化而编写的。

(**): (1) 预算取决于参数的数量和目标的数量。(2) 如果采样器有一个 n_startup_trials 作为其参数之一,则此预算包括 n_startup_trials

(***): 此时间复杂度假设种群大小 \(p\) 的数量和并行化数量是常规的。这意味着并行化数量不应超过种群大小 \(p\)

注意

采样器通过在初始化时指定 seed 参数来初始化其随机数生成器。但是,当 optuna.study.Study.optimize()n_jobs!=1 时,采样器会重新设置它们,以避免使用相同的生成器采样重复的参数。因此,在使用 n_jobs!=1 时,很难重现优化结果。出于相同的原因,请确保在分布式优化(在 轻松并行化 教程中解释)中使用 seed=None 或在进程之间使用不同的 seed 值。

注意

关于浮点数、整数或类别参数,请参阅 Pythonic 搜索空间 教程。

关于剪枝,请参阅 高效优化算法 教程。

关于多变量优化,请参阅 BaseSampler。多变量优化在 Optuna 中实现为 sample_relative()。请查看采样器的具体文档以获取更多详细信息。

关于条件搜索空间,请参阅 Pythonic 搜索空间 教程和 TPESamplerTPESamplergroup 选项允许 TPESampler 处理条件搜索空间。

关于多目标优化,请参阅 使用 Optuna 进行多目标优化 教程。

关于批量优化,请参阅 批量优化 教程。请注意,TPESamplerconstant_liar 选项允许 TPESampler 处理批量优化。

关于分布式优化,请参阅 轻松并行化 教程。请注意,TPESamplerconstant_liar 选项允许 TPESampler 处理分布式优化。

关于约束优化,请参阅 示例

BaseSampler

采样器的基类。

RandomSampler

使用随机采样的采样器。

TPESampler

使用 TPE (Tree-structured Parzen Estimator) 算法的采样器。

GPSampler

基于高斯过程的贝叶斯优化采样器。

CmaEsSampler

使用 cmaes 作为后端的采样器。

NSGAIISampler

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

NSGAIIISampler

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

GridSampler

使用网格搜索的采样器。

QMCSampler

生成低差异序列的准蒙特卡罗采样器。

BruteForceSampler

使用暴力搜索的采样器。

PartialFixedSampler

具有部分固定参数的采样器。

注意

以下 optuna.samplers.nsgaii 模块定义了 NSGAIISampler 使用的交叉操作。