'Constrviolation' 在 Matlab 的 fmincon 输出中的物理含义是什么?

What does 'Constrviolation' physically mean in Matlab's fmincon output?

我在 Matlab 中使用 fmincon 函数。当您 运行 函数并调用输出时,我一直在尝试弄清楚 'constrviolation' 的含义。当您得到不可行的解决方案或求解器过早结束时,您会得到一个非零(和非整数)的构造函数。

我放了一个屏幕截图以供参考。

我搜索了文档,它说它的意思是 "Maximum of constraint functions",但我不知道那是什么意思。它不是整数,所以我的第一个猜测是它是违反(或满足)约束的百分比。

如有任何帮助,我们将不胜感激。

只是解释给定 一些 优化背景的文档:

constrviolation

Maximum of constraint functions

这只是所有绝对约束函数误差的最大值

示例:

x0 + x1 = 1
x0 + x1 + x2 = 2

解决办法是:

x = [0.6, 0.5, 0.9]

构造违规是:

max( abs( 0.6 + 0.5 - 1 ), abs( 0.6 + 0.5 + 0.9 - 2 ) ) = max( 0.1, 0 ) = 0.1

这很糟糕,技术上意味着:您的解决方案不可行!(应该收敛到零;例如 1e-8)

由于求解器没有很好地结束,它无法为您提供有关问题的真实状态(可行与不可行)。

添加以下内容可能很有价值:内点算法(如此处使用的)可能(有些会,有些不会)迭代不可行的解决方案,最终只会收敛到一个可行的解决方案(如果存在)!

也不好:

firstorderopt

 Measure of first-order optimality

也应该收敛到零(例如 1e-8)!在您的示例中未实现!

发生这种情况的原因有很多。由于您没有提供任何代码,我们只能猜测(并且不会对此感到高兴)。

您可能达到了一些迭代限制,例如 MaxFunctionEvaluationsMaxIterationsfuncCountiterations的比值看起来像数值微分,可以把函数调用的次数推得大大的!