首页 > 解决方案 > 创建整数递增的变量

问题描述

我想创建一个包含 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

所以基本上我没有写到m.var_0 = ...m.var_999 = ...而是使用了一个 for 循环,当然以这种方式它不起作用,但这个想法是创建 1000 个变量而无需硬编码m.var_0m.var_1m.var_2等等,直到m.var_999我该怎么做?

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

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

def create_model_a():
    m = pyomo.ConcreteModel()
    m.var = {}
    for i in range(1000):
        m.var[i] = pyomo.Var(within=pyomo.NonNegativeReals)

    return m

PS2:还检查了如何增加变量名/这是一个坏主意以及如何创建可变数量的变量?...遗憾的是没有帮助

标签: pythonvariablesdeclarationpyomo

解决方案


如果您真的想了解拥有许多 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))

推荐阅读