创建整数递增的变量

时间:2019-03-27 15:33:46

标签: python variables declaration pyomo

我想创建一个具有1000个基本pyomo变量的pyomo模型。 我知道这样做像下面的脚本是一个坏主意。 而且它也不起作用。希望您能理解这个想法并能对我有所帮助。

import pyomo.core as pyomo

def create_model_a():
    m = pyomo.ConcreteModel()

    for i in range(1000):
        m.var_i = pyomo.Var(within=pyomo.NonNegativeReals)

    return m

因此,我基本上没有使用{for循环,而没有将m.var_0 = ...写入m.var_999 = ...,而是以这种方式工作,但是这种想法是在没有硬编码{{1}的情况下创建1000个变量},m.var_0m.var_1,依此类推,直到m.var_2我该怎么做?

我想创建此模型以不进行任何建模,但是我想在此函数上使用内存配置文件来了解具有1000个变量的pyomo模型需要多少内存。

Ps:我尝试了以下操作,但它不起作用(当我投射m.var_999时看不到任何声明):

m.pprint()

PS2:也检查了How to increment variable names/Is this a bad ideaHow do I create a variable number of variables? ...很遗憾没有帮助

1 个答案:

答案 0 :(得分:1)

如果您真的想了解拥有许多Pyomo变量的内存含义,则应将拥有许多单例变量的情况与拥有一个大型索引变量的情况进行比较。两者的示例如下:

# Make a large indexed variable
m = ConcreteModel()
m.s = RangeSet(1000)
m.v = Var(m.s, within=NonNegativeReals)

# Make many singleton variables
m = ConcreteModel()
for i in range(1000):
    name = 'var_' + str(i)
    m.add_component(name, Var(within=NonNegativeReals))