我有一个ipopt模型,有时会遇到一些小的数值问题。我有一个修正算法,可以修正它们,但可能会导致其他不等式的小违规。我需要一种方法来确定当前解决方案是否可行,而无需手动查询每个变量的边界和约束。我怎样才能在pyomo内做到这一点
我知道有一种方法可以将不可行的约束记录到标准输出中,但这对我没有帮助。我需要我的代码对这些不可行性做出动态反应,比如在纠正后再运行几次迭代
更多信息: 我有一个(相对)小但高度非线性的问题,用Pyomo建模。当某些变量接近零时,该模型有时会遇到ipopt的数值问题。(我通过max*uvec=vec对全向量中的单位向量进行建模,并带有一些幅值约束,当向量的幅值接近零时,这会变得非常混乱。)幸运的是,可以从几个关键驱动变量计算模型中的所有内容,因此定义类型约束中的数值不可行性很小(例如,定义单位向量)很容易解决,但这种解决可能会导致对主要问题约束的轻微违反
我尝试过的一些事情:
Update:我找到了在https://github.com/Pyomo/pyomo/blob/master/pyomo/util/infeasible.py上的源代码,它可以被用来创建一个(笨拙)的解决方案。然而,我怀疑这仍然会遗漏一些可能导致IPopt考虑一个解决方案不可行的东西(例如其他的容忍标准)。
(目前,由于无法查询模型的可行性,我在每次解决后都会盲目地运行校正步骤。)
目前没有回答
相关问题 更多 >
编程相关推荐