Python 在Pyomo中使用ipopt,如何查询当前解决方案是否可行?
我有一个ipopt模型,有时会遇到一些小的数值问题。我有一个修正算法,可以修正它们,但可能会导致其他不等式的小违规。我需要一种方法来确定当前解决方案是否可行,而无需手动查询每个变量的边界和约束。我怎样才能在pyomo内做到这一点 我知道有一种方法可以将不可行的约束记录到标准输出中,但这对我没有帮助。我需要我的代码对这些不可行性做出动态反应,比如在纠正后再运行几次迭代 更多信息: 我有一个(相对)小但高度非线性的问题,用Pyomo建模。当某些变量接近零时,该模型有时会遇到ipopt的数值问题。(我通过max*uvec=vec对全向量中的单位向量进行建模,并带有一些幅值约束,当向量的幅值接近零时,这会变得非常混乱。)幸运的是,可以从几个关键驱动变量计算模型中的所有内容,因此定义类型约束中的数值不可行性很小(例如,定义单位向量)很容易解决,但这种解决可能会导致对主要问题约束的轻微违反 我尝试过的一些事情:Python 在Pyomo中使用ipopt,如何查询当前解决方案是否可行?,python,pyomo,nonlinear-optimization,ipopt,Python,Pyomo,Nonlinear Optimization,Ipopt,我有一个ipopt模型,有时会遇到一些小的数值问题。我有一个修正算法,可以修正它们,但可能会导致其他不等式的小违规。我需要一种方法来确定当前解决方案是否可行,而无需手动查询每个变量的边界和约束。我怎样才能在pyomo内做到这一点 我知道有一种方法可以将不可行的约束记录到标准输出中,但这对我没有帮助。我需要我的代码对这些不可行性做出动态反应,比如在纠正后再运行几次迭代 更多信息: 我有一个(相对)小但高度非线性的问题,用Pyomo建模。当某些变量接近零时,该模型有时会遇到ipopt的数值问题。(我
Update:我找到了源代码,它可以被用来创建一个(笨拙)的解决方案。然而,我怀疑这仍然会错过一些可能导致IPopt考虑一个解决方案不可行的东西(例如其他的容忍标准)。
(目前,由于无法查询模型的可行性,我在每次解决后都会盲目地运行校正步骤。)我经常使用不同的NLP解算器来解决单个问题。IPOPT擅长接近解决方案,但活动集解算器可能会产生更精细的解决方案。在这种情况下,首先使用IPOPT解算,然后使用活动集算法(如CONOPT或SNOPT)重新启动可能是有意义的。我经常使用不同的NLP解算器来解决问题单个问题。IPOPT擅长接近解决方案,但活动集解算器可能会产生更精细的解决方案。在这种情况下,首先使用IPOPT解决问题,然后使用活动集算法(如CONOPT或SNOPT)重新启动可能是有意义的。