AutoSampler是个智能采样器,能根据具体问题自动挑选 Optuna 里最合适的优化算法。这个工具在 OptunaHub 上热度很高,每周下载量超过 3 万次。最早的版本对单目标优化做了专门的自动选择逻辑,为了配合下个月发布的 Optuna v4.6,AutoSampler 终于把多目标和约束优化的完整支持做完了。这篇文章会讲清楚新功能怎么用,顺带看看基准测试的表现如何。最新版本其实现在就能用了。
多目标和约束优化的实现新版 AutoSampler 延续了之前的设计思路——分析评估预算、搜索空间、约束条件、目标数量这些因素,然后自动选一个实际效果不比默认差的采样器。
更新后的选择规则覆盖了多目标和约束优化场景。系统会在几个采样器之间自动切换(图 1):
TPESampler:处理带分类变量和条件分支的复杂搜索空间比较在行
GPSampler:连续和整数搜索空间的首选,现在支持多目标和约束了
NSGAIISampler 和 NSGAIIISampler:评估次数多的用 NSGA-II,目标多的用 NSGA-III

图1:AutoSampler 对约束优化和多目标优化的支持终于完整了
使用方式先装依赖,optuna 需要 4.5 或更新的版本:
pip install -U optuna optunahub pip install -r https://hub.optuna.org/samplers/auto_sampler/requirements.txt
然后用 optunahub.load_module 加载 "samplers/auto_sampler" 包,实例化 AutoSampler,就能当普通 Optuna 采样器用了。下面代码是一个多目标优化的例子:
import optuna import optunahub def objective(trial: optuna.Trial) -> tuple[float]: x = trial.suggest_float("x", 0, 5) y = trial.suggest_float("y", 0, 3) return 4 * x**2 + 4 * y**2, (x - 5)**2 + (y - 5)**2 study = optuna.create_study( directions=["minimize", "minimize"], sampler=optunahub.load_module("samplers/auto_sampler").AutoSampler() ) study.optimize(objective, n_trials=300) print(study.best_trials)
如果之前用过 AutoSampler 的话,本地缓存可能是旧版本,所以需要加个 force_reload=True 参数强制更新一下:
>>> import optunahub; optunahub.load_module("samplers/auto_sampler", force_reload=True)
性能表现拿最新的 AutoSampler 和 Optuna 默认采样器对比了下多目标和约束优化场景的表现。
多目标优化测试多目标基准用的是 WFG1 问题。从图 2 能看出来 AutoSampler 的搜索效果更好。默认采样器固定用 NSGA-II 算法,AutoSampler 会根据评估次数、目标数量、搜索空间这些特征在 GPSampler、TPESampler、NSGAIISampler、NSGAIIISampler 四个方法之间动态切换。这种自适应策略让它能找到更好的解。

图2:WFG1 基准测试结果
约束优化测试约束问题用的是 bbob-constrained 基准集里 5 维旋转 Rastrigin 函数加三个约束条件。图 3 显示 AutoSampler 又是更好的那个。
优势来自新的选择规则引入了具备约束感知能力的 GPSampler(Optuna v4.2 引入),在约束搜索空间里导航效率明显高一些。对于同时有约束和多目标的问题,还能用上 Optuna v4.5 里 GPSampler 的进一步增强。

图3:旋转 Rastrigin 函数基准测试结果
总结这次更新让 AutoSampler 完整支持了多目标和约束优化。在集成到工作流后,基本能达到和默认采样器持平或更好的效果,而且不需要用手动选算法。这样省下的精力可以专注在问题本身,优化策略交给 Optuna 自动处理就行。
https://avoid.overfit.cn/post/67621750374c48e1a5cf8c00e11991ac
作者:Yoshihiko Ozaki