Bounds=(0.0, None) 的 Pyomo 变量得到一个负值

Pyomo Variable with Bounds=(0.0, None) getting a Minus Value

我正在使用 pyomo-Concreate 模型,在这个模型中有一个名为 Lambda 的 pyomo 变量,它以 (0.0, None) 为界,在 =Non.NegativeReals.[=13 之内=]

问题是在求解模型后它以某种方式得到负值,这不应该发生。

您认为可能是什么问题?

PS: 我正在使用 GLPK Solver v4.61 求解模型。

这是变量 Lambda 的声明,也是结果:

    m.Lambda = pyomo.Var(
        within=pyomo.NonNegativeReals,
        bounds=(0.0, None),
        doc='Sub Problem Objective')

Check the last iteration, even though the results are right, lambda should not have a value of minus something???

除了 Bethany 的评论之外,从更一般的意义上讲,由于使用有限精度算法来求解模型,所有求解器都需要使用内置公差。尽管您 link 的输出在上一次迭代中为负数,但它的负数足够小,根据您的求解器使用的容差,它可能被认为是可行的。您可以使用求解器的选项来收紧此容差,但最后,当您对正在编写脚本的任何算法进行额外检查时,您将需要在自己的代码中使用容差(例如,assert var.value <= var.ub + feas_abstol,其中 feas_abstol 设置为一些小数字,例如代码中某处的 1e-8