我有一个使用ipopt和fmincon成功解决的问题。worhp在局部不可行时终止。我的x0 (init)是可行的。
内点算法可能会发生这种情况,但我希望sqp始终保持在可行域?
发布于 2019-06-18 06:21:42
也许还可以通过启用CheckValuesDF、CheckValuesDG、CheckValuesHM、CheckStructureDF、CheckStructureDG和CheckStructureHM (如果您提供它们)来使用WORHP检查衍生工具。我要指出的是,WORHP需要一种非常特殊的坐标存储格式(特别是对于黑森语)。这里的错误会导致错误的搜索方向。
发布于 2019-06-18 05:26:48
由于QP子问题的近似误差,这通常不是您可以预期的事情。考虑一下这个问题

它会有qp子问题

对于当前的x和拉格朗日乘子lambda,可以通过确定必要的导数来看出。有了初始值x_0 = 0和lambda_0 = 1,我们就有了一个可行的初始猜测。要解决的第一个QP是

它有唯一的解决方案d = 2。现在,根据实现的行搜索,可能会执行完整的步骤,即下一次迭代是x_1 = x_0 + d。这意味着x_1 = 2,这不再是一个可行点。事实上,如果您禁用par.InitialLMest并最终在x = 1处找到全局最优值,WORHP的SQP算法将像这样迭代。
除了这个基本属性之外,还可能有其他导致迭代离开可行集的影响,这将非常特定于实际的求解器实现。例如,数值不准确、QP求解过程中的困难或某些恢复策略。至于为什么你的问题不能使用WORHP的SQP算法成功解决,我不能说太多,因为我对问题本身一无所知。
https://stackoverflow.com/questions/56615427
复制相似问题