【问题标题】:Optimization stops prematurely (MATLAB)优化过早停止 (M​​ATLAB)
【发布时间】:2014-01-16 00:42:44
【问题描述】:

我正在尽我所能在 MATLAB 中使用 fmincon 解决它。当我调用该函数时,出现以下两个错误之一:

超出函数评估次数,或

超出迭代次数。

到目前为止,当我查看解决方案时,它与预期的结果相去甚远(我知道是因为我创建了一个最小向量)。

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

感谢任何帮助。

【问题讨论】:

  • 尺寸是多少?您是否尝试从已知的解决方案开始?你提供梯度和粗麻布吗?
  • 不,我提供的是等式矩阵和向量:Aeq 和 beq。我现在只考虑只有等式约束的 L1 最小化问题,但模拟仍然需要很多时间并给出错误的结果(附近没有),或者求解器产生内存错误。我的意思是,JPEG 怎么能在 1 毫秒内以这种内存/时间开销压缩图像?

标签: matlab


【解决方案1】:

首先,如果您的问题实际上可以转换为线性或二次规划,请先这样做。

否则,您是否尝试过使用不同的起始值 x0 为其播种?如果从一个糟糕的地方开始,可能更难达到最佳状态。

如果您可以提供函数的梯度,那将极大地帮助优化器(尽管显然只有当您可以通过数值微分以外的其他方式找到它时)。同样,如果您可以相对便宜地提供(完整的或稀疏的)Hessian,那么您就是黄金。

你也可以试试using a different algorithm in the solver

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

【讨论】:

  • 你把我想说的都说了,但是更好。 +1,太棒了。
  • @Dougal """首先,如果您的问题实际上可以转换为线性或二次规划,请先执行此操作""" 已经完成,所以我从所有零向量开始,嗯,我'我会尝试这样做。这是L1范数,我不知道它是否可微。因此,目标函数实际上是像素的列向量。所以我想做的是将此函数应用于图像的整个列。这与原子分解有关。
  • @ToniAz 我不太明白你的意思。如果是线性或二次规划问题,则不应使用fmincon', but instead linprog` 或quadprog。此外,如果您的目标函数确实是 L1 范数,您可以以封闭形式做到这一点:||x - q||_1 的最小值只是 q.... 但 L1 范数是可微的(0 除外);部分w.r.t。一个分量只是该分量绝对值的导数,即它的符号乘以内部导数:对于直接 L1 范数,这只是 1 或 -1。所以grad_x( || x ||_1 ) 就是sign(x)
【解决方案2】:

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           

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

【讨论】:

    猜你喜欢
    • 2016-09-10
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 2020-09-16
    相关资源
    最近更新 更多