You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pymoo框架下达到指定目标值时如何终止最小化优化迭代?

pymoo单目标优化设置最优适应度阈值终止的解决方案

pymoo没有内置直接的f_threshold阈值终止配置,你可以通过以下两种可行方案实现需求:

方案1:自定义终止条件类(推荐)

这是pymoo官方推荐的扩展终止规则的方式,逻辑清晰且可以和原有内置终止条件组合使用:

  • 首先自定义阈值终止类:
from pymoo.core.termination import Termination
import numpy as np

class FThresholdTermination(Termination):
    def __init__(self, f_threshold, is_minimize=True):
        super().__init__()
        self.f_threshold = f_threshold
        self.is_minimize = is_minimize

    def _do_terminate(self, algorithm):
        # 获取当前迭代的最优适应度值
        current_opt_f = algorithm.opt.get("F").min() if self.is_minimize else algorithm.opt.get("F").max()
        # 最小化问题判断是否小于等于阈值,最大化反之
        if self.is_minimize:
            return current_opt_f <= self.f_threshold
        else:
            return current_opt_f >= self.f_threshold
  • 与原有默认终止条件组合使用(避免无限迭代):
    pymoo支持多个终止条件逻辑或组合,只要触发任意一个就停止迭代:
from pymoo.core.termination import OR
from pymoo.termination.default import SingleObjectiveDefaultTermination

# 组合原有默认终止 + 自定义阈值终止
termination = OR(
    SingleObjectiveDefaultTermination(
        x_tol=1e-8,
        cv_tol=1e-6,
        f_tol=1e-6,
        nth_gen=5,
        n_last=20,
        n_max_gen=1000,
        n_max_evals=100000
    ),
    FThresholdTermination(f_threshold=1e-3) # 替换为你需要的目标阈值
)
  • 正常将上述termination对象传入minimize方法的对应参数即可。

方案2:通过回调实现临时终止

如果只是临时测试不想单独定义类,可以通过回调函数判断后手动停止迭代:

from pymoo.core.callback import Callback

class StopAtFThreshold(Callback):
    def __init__(self, f_threshold, is_minimize=True):
        super().__init__()
        self.f_threshold = f_threshold
        self.is_minimize = is_minimize

    def notify(self, algorithm):
        current_opt_f = algorithm.opt.get("F").min() if self.is_minimize else algorithm.opt.get("F").max()
        if (self.is_minimize and current_opt_f <= self.f_threshold) or (not self.is_minimize and current_opt_f >= self.f_threshold):
            algorithm.termination.force_termination = True

使用时将回调传入minimize方法的callback参数即可,建议同时保留原有默认终止条件兜底。

内容的提问来源于stack exchange,提问作者Thomas Wagenaar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 13:18:02