我正在努力在MATLAB中使用fmincon解决这个问题。当我调用该函数时,我得到以下两个错误之一:
超出了功能评估的数量,或
超出迭代次数。
到目前为止,当我查看解决方案时,它远离预期的那个(我知道因为我创建了一个最小向量)。
现在,即使我增加了任何公差约束或最大迭代次数,我仍然会遇到同样的问题。
感谢任何帮助。
答案 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是你添加到问题中的另一个未知边界向量。