создание переменных с увеличением целых чисел - PullRequest
1 голос
/ 27 марта 2019

Я хочу создать модель pyomo с 1000 базовыми переменными 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_0, m.var_1, m.var_2 и так далее до m.var_999. Как я могу это сделать?

Я хочу создать это, чтобы ничего не моделировать, но я хочу использовать профиль памяти в этой функции, чтобы понять, сколько памяти необходимо для модели pyomo с 1000 переменными.

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: также проверено Как увеличить имена переменных / Это плохая идея и Как создать переменное число переменных? ... к сожалению, не поможет

1 Ответ

1 голос
/ 27 марта 2019

Если вы действительно хотите понять последствия использования множества переменных 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))
...