【问题标题】:Why does IPOPT evaluate objective function despite breaching constraints?尽管违反了约束条件,IPOPT 为什么要评估目标函数?
【发布时间】:2019-05-07 14:32:21
【问题描述】:

我在 Julia 中使用 IPOPT。我的目标函数会对某些参数值抛出错误(具体来说,虽然我认为这无关紧要,但它涉及协方差矩阵的 Cholesky 分解,因此要求协方差矩阵是正定的)。因此,我对参数进行非线性约束,以便它们不会产生错误。尽管有这个限制,IPOPT 仍然坚持在参数处评估目标函数,这会导致我的目标函数抛出错误。这会导致我的脚本崩溃,导致痛苦和痛苦。

我很感兴趣,一般来说,IPOPT 会在违反约束的参数处评估函数。 (我确保它确实在评估函数之前检查了约束。)如果可能,我想知道如何阻止它这样做。

我已将 IPOPT 的“bound_relax_factor”参数设置为零;这没有帮助。我知道我可以要求目标函数返回 NaN 而不是抛出错误,但是当我这样做时,IPOPT 似乎变得更加困惑并且最终没有收敛。可怜的东西。

如果有帮助,我很乐意提供一些示例代码。

提前非常感谢:):)

编辑:

一位评论者建议我要求我的目标函数在违反约束时返回一个错误的目标值。不幸的是,当我这样做时会发生这种情况:

我不确定为什么 Ipopt 会从 2.0016x10^2 的评估点变为 10^10 的评估点 - 我担心我不理解 IPOPT 的一些非常基本的东西。

将“constr_viol_tol”和“acceptable_constr_viol_tol”设置为最小值不会显着影响优化,“过度约束”我的参数也不会(即确保它们不能接近不可接受的值)。

【问题讨论】:

  • 另外,IPOPT 参数constr_viol_tolacceptable_constr_viol_tol 可能是相关的。
  • 感谢您的 cmets @DanGetz -- 我已经回复了我原来的问题的编辑 :)
  • 也许模型中的约束没有指定所需的区域?这将导致评估功能出现问题。在任何情况下,也许添加一个单位矩阵乘以大多数负特征值的大小(强制正定性)将允许目标评估在约束范围内平稳地继续进行(诚然,这有点猜测)。

标签: julia mathematical-optimization non-linear-regression ipopt


【解决方案1】:

Ipopt 在所有中间迭代中保证满足的唯一约束是变量的简单上限和下限。在求解器在最终迭代中完成收敛(如果它可以达到满足终止条件的点)之前,不一定会满足任何其他线性或非线性等式或不等式约束。在存在任意非凸等式和不等式约束的情况下,保证中间迭代总是可行的是难以处理的。牛顿步长方向基于局部一阶和二阶导数信息,因此将是一个近似值,如果问题具有非平凡曲率,可能会留下可行点空间。以x * y == constant 为例,考虑点的空间。

您应该重新表述您的问题,以避免需要在无效点评估目标或约束函数。例如,不要对从数据构造的协方差矩阵进行 Cholesky 分解,而是引入单位下三角矩阵 L 和对角矩阵 D。对所有i in 1:size(D,1) 施加下限约束D[i, i] >= 0,并施加非线性等式约束L * D * L' == A,其中A 是您的协方差矩阵。然后在需要对 Cholesky 分解进行操作的任何地方使用 L * sqrtm(D)(这可能是半定分解,因此比经典的严格正定 L * L' 分解更多的是修改后的 Cholesky 表示)。

请注意,如果您的问题是凸问题,那么可能有一个专门的公式,即圆锥求解器在求解方面比 Ipopt 等通用非线性求解器更有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-13
    • 2018-09-29
    • 2017-01-25
    • 1970-01-01
    • 2017-11-17
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    相关资源
    最近更新 更多