Main Content

本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

容差和停止条件

优化中的迭代次数取决于求解器的停止条件。这些条件包括几个可以设置的容差。一般来说,容差是一个阈值,超过阈值时将终止求解器的迭代。

使用 optimoptions 设置容差和其他条件,如Set and Change Options中所述。

提示

一般情况下,将 OptimalityToleranceStepTolerance 等容差设置为远高于 eps 并通常高于 1e-14。设置小容差并不能始终得到准确的结果。相反,求解器在收敛时无法识别,并可能继续进行无用的迭代。容差值小于 eps 可有效禁用这种终止条件。此技巧不适用于 fzero,它对 TolX 容差使用默认值 eps

您可以在 Optimization 工具 中找到默认容差。不同算法的一些默认容差不同,因此需要同时设置求解器和算法。

optimoptions 显示容差。例如,

options = optimoptions('fmincon');
[options.OptimalityTolerance,options.FunctionTolerance,options.StepTolerance]
ans =

   1.0e-06 *

    1.0000    1.0000    0.0001

您也可以在求解器函数参考页的选项部分找到默认容差。

  • StepTolerance 是步长大小的下界,表示 (xi – xi+1) 的范数。如果求解器尝试采用小于 StepTolerance 的步长,迭代将停止。StepTolerance 通常用作相对边界,这意味着在遇到 |(xi – xi+1)| < StepTolerance*(1 + |xi|) 或类似相对度量时迭代会停止。请参阅Tolerance Details

  • 对于一些算法,FunctionTolerance 是迭代步中目标函数值变化的下界。对于这些算法,如果 |f(xi) – f(xi+1)| < FunctionTolerance,迭代将停止。FunctionTolerance 通常用作相对边界,这意味着在遇到 |f(xi) – f(xi+1)| < FunctionTolerance*(1 + |f(xi)|) 或类似相对度量时,迭代会停止。请参阅Tolerance Details

    注意

    与其他求解器不同,fminsearch同时满足 TolFun(函数容差)和 TolX(步容差)时停止。

  • OptimalityTolerance 是一阶最优性度量的容差。如果最优性度量小于 OptimalityTolerance,迭代将停止。OptimalityTolerance 也可以是一阶最优性度量的相对边界。请参阅Tolerance Details。一阶最优性度量在一阶最优性度量中定义。

  • ConstraintTolerance 是任何约束函数的模的上界。如果求解器返回的点的 x c(x) > ConstraintTolerance|ceq(x)| > ConstraintTolerance,求解器会报告在 x 处违反了约束。ConstraintTolerance 也可以是相对边界。请参阅Tolerance Details

    注意

    ConstraintTolerance 的运算原理不同于其他容差。如果不满足 ConstraintTolerance(即,如果约束函数的模超过 ConstraintTolerance),求解器将尝试继续求解,除非因其他原因而停止。求解器不会仅仅因为满足 ConstraintTolerance 就停止。

  • MaxIterations 是求解器迭代数量的边界。MaxFunctionEvaluations 是函数求值数量的边界。迭代和函数计算在迭代和函数计算次数中有讨论。

另外还有两个容差适用于 TolPCGMaxPCGIter 这两个特定求解器。这些涉及预条件共轭梯度步。有关详细信息,请参阅预条件共轭梯度法

有几个容差仅适用于 fmincon 内点算法。有关详细信息,请参阅 fmincon options 中的内点算法

有几个容差仅适用于 intlinprog。请参阅Some “Integer” Solutions Are Not Integers分支定界

相关主题