注意
跳转到末尾下载完整的示例代码。
plot_pareto_front
- optuna.visualization.plot_pareto_front(study, *, target_names=None, include_dominated_trials=True, axis_order=None, constraints_func=None, targets=None)[source]
绘制研究的 Pareto 前沿。
另请参阅
有关 Pareto 前沿可视化的教程,请参阅 使用 Optuna 进行多目标优化。
- 参数:
study (Study) – 一个
Study
对象,其 Trials 的目标值将被绘制。当targets
为None
时,目标数量必须为 2 或 3。target_names (list[str] | None) – 用作坐标轴标题的目标名称列表。如果指定为
None
,则使用“Objective {objective_index}”。如果为不包含任何已完成 trial 的研究指定了targets
,则必须指定target_name
。include_dominated_trials (bool) – 一个标志,用于包含所有被支配 trial 的目标值。
axis_order (list[int] | None) –
一个指示坐标轴顺序的索引列表。如果指定为
None
,则使用默认顺序。axis_order
和targets
不能同时使用。警告
在 v3.0.0 中已弃用。此特性将在未来移除。目前计划在 v5.0.0 中移除此特性,但此计划可能会更改。参见 https://github.com/optuna/optuna/releases/tag/v3.0.0。
constraints_func (Callable[[FrozenTrial], Sequence[float]] | None) –
一个可选函数,用于计算目标约束。它必须接受一个
FrozenTrial
并返回约束。返回值必须是一个float
序列。值严格大于 0 意味着违反了约束。值小于等于 0 被认为是可行的。此规范与例如NSGAIISampler
中的相同。如果给定,trials 被分为三类:可行且最优、可行但不最优、以及不可行。类别以不同颜色显示。此处,是否为最优 trial(在 Pareto 前沿上)的判断将忽略所有不可行的 trial。
警告
在 v4.0.0 中已弃用。此特性将在未来移除。目前计划在 v6.0.0 中移除此特性,但此计划可能会更改。参见 https://github.com/optuna/optuna/releases/tag/v4.0.0。
targets (Callable[[FrozenTrial], Sequence[float]] | None) –
一个函数,返回要显示的目标值。此函数的参数为
FrozenTrial
。axis_order
和targets
不能同时使用。如果study.n_objectives
既不是 2 也不是 3,则必须指定targets
。注意
在 v3.0.0 中添加为实验性特性。在未来版本中,接口可能会在没有事先通知的情况下更改。参见 https://github.com/optuna/optuna/releases/tag/v3.0.0。
- 返回:
一个
plotly.graph_objects.Figure
对象。- 返回类型:
Figure
以下代码片段展示了如何绘制研究的 Pareto 前沿。
import optuna
from plotly.io import show
def objective(trial):
x = trial.suggest_float("x", 0, 5)
y = trial.suggest_float("y", 0, 3)
v0 = 4 * x**2 + 4 * y**2
v1 = (x - 5) ** 2 + (y - 5) ** 2
return v0, v1
study = optuna.create_study(directions=["minimize", "minimize"])
study.optimize(objective, n_trials=50)
fig = optuna.visualization.plot_pareto_front(study)
show(fig)
以下代码片段展示了如何绘制一个 3 维研究的 2 维 Pareto 前沿。此示例具有可扩展性,例如可用于绘制 4 维研究的 2 维或 3 维 Pareto 前沿等。
import optuna
from plotly.io import show
def objective(trial):
x = trial.suggest_float("x", 0, 5)
y = trial.suggest_float("y", 0, 3)
v0 = 5 * x**2 + 3 * y**2
v1 = (x - 10) ** 2 + (y - 10) ** 2
v2 = x + y
return v0, v1, v2
study = optuna.create_study(directions=["minimize", "minimize", "minimize"])
study.optimize(objective, n_trials=100)
fig = optuna.visualization.plot_pareto_front(
study,
targets=lambda t: (t.values[0], t.values[1]),
target_names=["Objective 0", "Objective 1"],
)
show(fig)
脚本总运行时间: (0 分钟 0.362 秒)