Fmincon / Multistart:局部最小值,但一个非线性约束违反

8视图(30天)
你好,
我试图找到一个最佳点与multistart / fmincon。Matlab发现一个局部最小值,给出了以下消息的输出结构:
当地的最低发现满足约束。
优化完成,因为目标函数中引入可行的方向,
在最优值的宽容,约束是满意的价值
约束宽容。<停止标准细节>
优化完成:相对一阶最优性措施7.337955 e-07
不到选项。OptimalityTolerance = 1.000000 e-06,相对最大constraintviolation7.082693 e-07
不到选项。ConstraintTolerance = 1.000000 e-06。
我有13个非线性约束,其中一个是违反了。
这是约束:
量表(10)= (l1 - l2 - L_3) - 0.001;
我想实现:
abs (l1 - l2 - L_3) < = 0.001;
如果我用手检查这个约束,我得到的
abs (l1 - l2 - L_3) = 0.0011;
超过所需的值0.001是哪一个
约束公差在optimoptions默认设置为1 e-6。
这是怎样发生的呢?输出清晰的说,所有的约束条件都满足,但事实上不是。
6个评论
e_frog
e_frog 2021年3月22日
编辑:e_frog 2021年3月22日
我知道,但是不幸的是我无法提供,因为保密的原因,我真的很抱歉。还我的脚本的结构太复杂,很容易得到一个很小的例子。我理解,在这种情况下很难帮我。
不过它会帮助我很多,如果我可以至少得到帮助与这些问题:
  • 我误解了fmincon的功能吗?
  • 我假设基于文档,fmincon可能违反中间迭代非线性约束,但不是最后一个迭代/解决方案。那是正确的吗?
  • fmincon应该能够突破非线性约束的解决方案吗?
偏差形成极限值总是如此之小,这可能是微不足道的,但它将极大地帮助我基本上明白fmincon处理非线性约束。

登录置评。

接受的答案

马特·J
马特·J 2021年3月22日
编辑:马特·J 2021年3月22日
如果退出消息说约束在公差都满意,那么这就是应该发生。然而,宽容 是相对fmincon算法除了“激活集” 。相对于什么,documentaiton似乎并没有说,但它可能是相对于初始点。这意味着,如果您的初始点违反约束之一说,8000年,然后0.0011将在1 e-6宽容,因为0.0011/8000 < 1 e-6。
一个简单的解决方案可能会减少ConstraintToleance说,1 e-12。或者,使用 有效集 算法,它适用于你的问题。
13个评论

登录置评。

更多的答案(0)

类别

找到更多的在和迭代解算器输出显示帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!