为什么程序 return 在提供可行猜测时不可行?

Why does the program return infeasible when provided with a feasible guess?

为了求解我的非线性程序,我首先求解问题的零成本版本(即可行性问题),并将结果作为全优化问题的猜测。

可行性问题,约束很多,其中有x * y = slack形式的约束,其中xyslack都是变量(我用的是那代表一个宽松的互补约束)。我使用可行性问题的解决方案作为优化问题的猜测。优化问题就是在 slack 上添加二次成本的可行性问题。

奇怪的是,即使以可行的猜测为起点,优化问题仍然 return 不可行。为什么会这样?程序不应该至少 return 初始可行猜测作为解决方案吗?

完整的程序太长太复杂,无法包含在这个问题中,我还没有将它提炼成一个最小可重现的例子。也许这个问题的答案会为我指明正确的调查方向。提前致谢!

由于您对这个问题使用了 SNOPT 求解器,并且 SNOPT 使用顺序二次规划方法,因此不能保证在每次迭代中都生成可行解,即使初始解是可行的。

您可以参考 SNOPT 手册 https://web.stanford.edu/group/SOL/papers/SNOPT-SIGEST.pdf 了解更多详细信息。 SNOPT 所做的是它定义了一个“评价函数”,它是成本和约束违反(写成约束优化问题的拉格朗日)的组合,并且在每次迭代中 SNOPT 都试图减少这个评价函数。所以它可能会增加对约束的违反,只要成本降低补偿约束违反的增加。