首页 > 解决方案 > 由 Param 定义的 Var 界限不会在 6.0.1 中更新

问题描述

我有一个 Var,其边界由可变参数定义。Param 在构造时有一个默认值,稍后会更新。在 Pyomo 5.7.3 版中,边界值已正确更新;但是在 6.0.1 版本中,绑定的值不会更新并保持默认值。似乎破坏 6.0.1 版本的是单位是否包含在 Var 和 Param 中。

这是一个简单的例子:

    import pyomo.environ as pyomo
    from pyomo.environ import units as u

    model = pyomo.ConcreteModel()

    model.avail_gen = pyomo.Param(within=pyomo.NonNegativeReals,
                                  default=0,
                                  mutable=True,
                                  units=u.MW
                                  )
    model.generation = pyomo.Var(domain=pyomo.NonNegativeReals,
                                 bounds=(0, model.avail_gen),
                                 units=u.MW
                                 )
    model.avail_gen.set_value(10)
    model.obj = pyomo.Objective(expr=model.generation, sense=pyomo.maximize)

    solver = pyomo.SolverFactory('glpk')
    results = solver.solve(model)

    print(pyomo.value(model.obj))

由于 model.generation = 0 的界限,obj 值在 0 处不正确。但是,如果将 units=u.MW 行注释掉,则 obj 值在 10 处是正确的。5.7.3 不会发生这种情况.

我使用的单位不正确还是有错误?

标签: pythonpyomo

解决方案


推荐阅读