FMINCON的替代品

时间:2013-06-12 10:14:22

标签: matlab convex-optimization

除了fmincon之外,还有更快更有效的求解器吗?我正在使用fmincon来解决特定问题,而且我的内存不足以获得适当大小的矢量变量。我也没有任何超级计算机或云计算选项。我知道任何替代解决方案仍然会耗尽内存,但我只是想看看问题出在哪里。

P.S。我不想要一个能改变我接近实际问题的方法的解决方案。我知道凸优化是可行的方法,我已经做了足够的工作,直到这里起床。

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

1 个答案:

答案 0 :(得分:3)

嗯...

如果没有进一步的信息,我猜测fmincon内存不足,因为它需要Hessian(假设你的决策变量是10 ^ 4,那么10^4 x numel(f(x1,x2,x3,....))会很大)。

确定Hessian的值也需要花费大量时间,因为如果没有明确指定派生,fmincon通常会使用有限差分。

你可以采取一些措施来加快速度。

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

  • 如果很容易想出目标函数的Hessian的显式公式,请创建一个计算Hessian的函数,并通过fmincon选项将其传递给HessFcn在优化中。

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

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

如果所有这些都无济于事,那么你真的必须切换优化器。鉴于fmincon是MATLAB优化工具箱的骄傲和喜悦,实际上没有更好的可用性,你必须在别处搜索。

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

我不知道您的MATLAB版本是什么,但我知道在R2009b(可能还有以后)中,fmincon对某些类型的问题有一些真正的弱点。我知道 非常好 ,因为我因此而失去了一场非常有声望的比赛(GTOC)。我们的方法与赢家的方法完全相同,除了他们可以访问SNOPT,这使得他们的几百万个变量优化问题在几次迭代中收敛,而{{1}无论我们尝试什么(并且相信我, WE TRIED ),无法将汇集到所有。直到今天,我仍然不知道为什么会发生这种情况,但是当我访问SNOPT时,我自己验证了这一点。有一次,当我有无限的时间时,我会发现这一点并向MathWorks报告。但在那之前......我对fmincon :)

失去了一点信任