Pyomo 和 VarList - 自动生成变量

Pyomo and VarList - generate variables automatically

我想在 Pyomo 中自动创建一个 VarList。

该模型应该有两组(或最后更多)组:一组关于时间 t(例如 8760),另一组关于不同的组件 k(例如 3)。 理想情况下,每个组件 k 应该得到一个包含 t 个元素的时间序列。

不幸的是,这不起作用,但我还是写了它以便更好地理解并希望有人更好地理解我背后的想法:

import numpy as np
from pyomo.environ import *

mdl = ConcreteModel()
mdl.t = Set(initialize=np.arange(0,8760))
mdl.k = Set(initialize=np.arange(0,3))

# VarList
## generate variable x for each component k
mdl.x = VarList()
for k in mdl.k:
    mdl.x.add()

## generate for each component k a variable for each time t
for k in mdl.k:
    mdl.x[k]=VarList()
    for t in mdl.t:
        mdl.x[k].add()

有没有办法管理这种变量生成?或者类似的?

最诚挚的问候! 马蒂亚斯

欢迎来到本站。

我想你真正想要的是一个按时间 double-indexed 和 k 的变量,对吗?

正确的做法是在创建变量时提供两个索引集,如下所示。这将允许您对约束和 OBJ 中的任一变量等进行求和。

其他建议:制作这些模型时避免numpy。大多数时候不必要,而且会增加混乱。

我已经发布了一堆 pyomo 示例问题,如果您使用 pyomo 标签查看我的个人资料答案,您可能会发现一些其他有用的示例。

import pyomo.environ as pyo

m = pyo.ConcreteModel()

# SETS
m.T = pyo.Set(initialize=range(4))
m.K = pyo.Set(initialize=range(3))

# VARS
m.X = pyo.Var(m.T, m.K, domain=pyo.NonNegativeReals)

# example objective
m.OBJ = pyo.Objective(expr=sum(m.X[t, k] for t in m.T for k in m.K))

m.pprint()