2

除了 fmincon 之外,还有没有更快更高效的求解器?我正在使用 fmincon 来解决一个特定的问题,并且我用完了中等大小的向量变量的内存。我也没有任何超级计算机或云计算选项可供我使用。我知道任何替代解决方案仍然会耗尽内存,但我只是想看看问题出在哪里。

PS我不想要一个会改变我处理实际问题的方式的解决方案。我知道凸优化是要走的路,而且我已经做了足够的工作来爬到这里。

PPS 我看到了关于开源替代品的另一个问题。这不是我要找的。如果有人遇到同样的问题并转向更好的解决方案,我正在寻找更有效的解决方案。

4

1 回答 1

3

嗯……

如果没有进一步的信息,我猜它会fmincon用完内存,因为它需要 Hessian(鉴于您的决策变量是 10^4,它会10^4 x numel(f(x1,x2,x3,....))很大)。

确定 Hessian 的值也需要很多时间,因为fmincon如果您没有明确指定导数,通常会使用有限差分。

您可以做几件事来加快速度。

  • 如果您事先知道 Hessian 矩阵中会有很多零,则可以通过 传递 Hessian 矩阵的稀疏模式HessPattern。这节省了大量的内存和计算时间。

  • 如果很容易为您的目标函数的 Hessian 提出明确的公式,请创建一个计算 Hessian 的函数并通过optimset 中fmincon的选项将其传递给。HessFcn

  • 梯度也是如此。(GradConstr对于您的非线性约束函数)和/或GradObj(对于您的目标函数)适用于此处。

我可能在这里忘记了一些选项,这也可以帮助您。只需浏览优化工具箱的optimset中的所有选项,看看它们是否可以帮助您。

如果这一切都没有帮助,你真的必须切换优化器。鉴于这fmincon是 MATLAB 优化工具箱的骄傲和乐趣,确实没有比这更好的现成工具了,您必须在其他地方搜索。

TOMLAB是一个非常好的 MATLAB 商业解决方案。如果您不介意使用 C 或 C++...有SNOPT(这是 TOMLAB/SNOPT 的基础)。还有很多你可以在 GSL 中尝试的东西(虽然我还没有看到像 SNOPT 那样先进的东西......)。

我不知道您使用的是哪个版本的 MATLAB,但我知道在 R2009b(可能还有更高版本)中,fmincon对于某些类型的问题有一些真正的弱点。我清楚这一点,因为我曾经因此输掉了一场非常有声望的比赛(GTOC)。我们的方法结果与获胜者的方法完全相同,除了他们可以访问 SNOPT,这使得他们的几百万个变量优化问题在几次迭代中收敛,而根本fmincon无法收敛,无论我们如何尝试过(相信我,我们尝试过)。直到今天,我仍然不知道为什么会发生这种情况,但是当我可以访问 SNOPT 时,我自己验证了它。有一次,当我有无限的时间时,我会发现这一点并将其报告给 MathWorks。但在那之前……我失去了一点信任fmincon:)

于 2013-06-12T13:34:38.673 回答