【问题标题】:Fmincon / Multistart: Local minimum found, but one nonlinear constraint is violatedFmincon / Multistart:找到局部最小值,但违反了一个非线性约束
【发布时间】:2021-06-17 02:02:23
【问题描述】:

我正在尝试使用 multistart / fmincon 找到最佳点。 Matlab 找到一个局部最小值,在输出结构中给出以下消息:

Local minimum found that satisfies the constraints.
Optimization completed because the objective function is non-decreasing in feasible directions, 
to within the value of the optimality tolerance,and constraints are satisfied to within the value of the 
constraint tolerance.<stopping criteria details>
Optimization completed: The relative first-order optimality measure, 7.337955e-07,
is less than options.OptimalityTolerance = 1.000000e-06, and the relative maximum constraintviolation, 7.082693e-07, is less than options.ConstraintTolerance = 1.000000e-06.

我有 13 个非线性约束,其中一个被违反了。

这是约束:

c(10) = abs(L_1 - (L_2 - L_3)) - 0.001;

我想实现:

abs(L_1 - (L_2 - L_3)) <= 0.001;

如果我手动检查这个约束,我会得到

abs(L_1 - (L_2 - L_3)) = 0.0011;

大于期望值 0.001 optimoptions 中的约束容差默认设置为 1e-6。 这怎么可能发生?输出清楚地表明,所有的约束都得到了满足,但实际上并没有。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    我认为您误解了fmincon 提供的内容。保证解决方案满足界限。无法保证所有约束(线性或非线性)都会得到满足。

    我承认您在查看MATLAB documentation 时必须在字里行间阅读。

    对于默认的“内部点”算法,fmincon 将 x0 中违反边界 lb ≤ x ≤ ub 或等于边界的分量设置为边界区域的内部。对于“trust-region-reflective”算法,fmincon 将违规组件设置为绑定区域的内部。对于其他算法,fmincon 将违规组件设置为最接近的界限。尊重边界的组件不会改变。请参阅迭代可能违反约束。

    【讨论】:

    • 但是如果 fmincon 仍然违反非线性约束,为什么能够定义非线性约束呢?还有,为什么matlab说所有的约束都满足?
    • 如果您能提供足够的细节来重新创建我的解决方案,那将是理想的。 fmincon 将返回和退出标志和最佳可行点输出结构以及其他值得检查的细节。
    • 很遗憾,由于我的程序非常复杂,因此我无法为您提供该问题的最小示例。 Matlab 产生 exitflag 1。也许你可以通过解释为什么我可能误解了 fmincon 的作用来进一步帮助我。
    • 我想补充一点,我使用上限和下限以及非线性约束。 fmincon 的所有其他条件都设置为 [ ]。
    猜你喜欢
    • 2017-11-08
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 2011-10-18
    • 1970-01-01
    相关资源
    最近更新 更多