Установите другое начальное значение для переменной с другим субиндексом в pyomo - PullRequest
0 голосов
/ 19 марта 2019

Я получаю следующую базовую настройку:

model.X = ['A','B']
model.stage = range(1,3)
model.Y = ['C','D']
model.area = pyo.Var(model.X, model.stage, model.Y, initialize = 2, bounds=(0,100))

, но мне бы хотелось, чтобы область переменной могла быть инициализирована с другим значением, например

model.area['A',1,'C'] initialize = 1
model.area['A',1,'D'] initialize = 1
model.area['B',1,'C'] initialize = 2
model.area['B',1,'D'] initialize = 2
model.area['A',2,'C'] initialize = 1
model.area['A',2,'D'] initialize = 1
model.area['B',2,'C'] initialize = 2
model.area['B',2,'D'] initialize = 2

Я не знаю, как выполнить итерациюопределенная переменная область с другим субиндексом, кто-нибудь может поделиться некоторыми идеями?Спасибо

1 Ответ

0 голосов
/ 19 марта 2019

Если model объект ConcreteModel, вы можете просто написать

model.area['A',1,'C'].value = 1
model.area['B',1,'C'].value = 2

Если это AbstractModel, вы можете сделать то же самое для созданного экземпляра или определить правило и назначить его для ключевого слова initialize:

def area_init(m,i,j,k):
    if (i,j,k) in [('A',1,'C'),...]:
        return 1
    elif ...:
        return 2
model.area = pyo.Var(model.X,model.stage,model.Y,initialize=area_init,bounds=(0,100))
...