我试图在 MATLAB 中以数值方式解决一个受约束的优化问题,我想知道fmincon
当没有提供梯度时该函数如何计算梯度。这里有谁知道,或者知道我怎么能找到?
运行优化问题所花费的时间比我想要的要多,所以我希望通过分析提供梯度来加速它。然而,当我这样做时,我最终得到了截然不同的解决方案,与 MATLAB 在我不提供渐变时生成的解决方案相比,这些解决方案似乎不太合理。
作为检查,我使用CheckGradients
了fmincon
. 可以预见的是,我提供的梯度没有通过这个测试。即使我设置FiniteDifferenceType
为'central'
. 一个明显的解释是我提供的导数确实是不正确的。但是,我已经检查了好几次,我很确定它们不是。
作为一个健全的检查,我试图用数值计算我的目标的梯度,gradient
文档建议使用有限差分计算。不幸的是, 的输出与计算gradient
的梯度相差甚远fmincon
。
我真的不确定发生了什么,如果有人可以帮助阐明这种情况,我将不胜感激。
编辑:我对为什么产生不同的数值导数更感兴趣fmincon
,gradient
尽管表面上两者都是使用有限差分计算的。除非我误解了这些选项,否则即使我给它们相同的有限差分步长,差异仍然存在。
此外,如果它是相关的:
我实际上正在使用GlobalSearch
(然后调用fmincon
)来解决形式的约束优化问题
实际上是一些线性规划问题的值函数,我编写了一个脚本来调用linprog
来计算我的目标值。也线性地进入该问题的目标和约束。是非线性的。