优化过早停止(MATLAB)

时间:2012-03-26 20:40:32

标签: matlab

我正在努力在MATLAB中使用fmincon解决这个问题。当我调用该函数时,我得到以下两个错误之一:

超出了功能评估的数量,或

超出迭代次数。

到目前为止,当我查看解决方案时,它远离预期的那个(我知道因为我创建了一个最小向量)。

现在,即使我增加了任何公差约束或最大迭代次数,我仍然会遇到同样的问题。

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

首先,如果您的问题实际上可以转换为线性或二次编程,请先执行此操作。

否则,您是否尝试使用不同的起始值x0播种?如果它从一个不好的地方开始,那么达到最佳状态可能要困难得多。

如果您可以提供函数的渐变,那么可以极大地帮助优化器(尽管显然只有在除了数值微分之外还能找到某种方式)。同样地,如果你可以相对便宜地提供(全部或稀疏)Hessian,那你就是金色的。

您也可以尝试using a different algorithm in the solver

基本上,fmincon默认情况下几乎没有关于它试图优化的功能的信息,提供更多功能非常有帮助。如果您可以告诉我们有关目标函数的更多信息,我们可能会提供更多提示。

答案 1 :(得分:0)

L1规范不可区分。这可能使算法难以收敛到其中一个残差为零的点。我怀疑这就是超出迭代次数限制的原因。如果您的原始问题是

 min norm(residual(x),1)

 s.t. Aeq*x=beq

你可以区别地重新解决问题,如下所示

 min sum(b)

 s.t.  -b(i)<=residual(x,i)<=b(i)

        Aeq*x=beq           

其中残差(x,i)是第i个残差,x是未知数的原始向量,b是你添加到问题中的另一个未知边界向量。