Как я могу установить значение индексированной переменной? - Pyomo - PullRequest
1 голос
/ 28 февраля 2020

Я работаю над проектом, связанным с A C OPF (оптимальный расход энергии), и я пытался решить проблему в python, используя pyomo. Есть 3 шины, и напряжение шины и угол наклона шины ограничены. Однако 1-я шина должна иметь напряжение = 1 и угол = 0.

Итак, я попробовал это:

model.busvoltage = Var(model.bus, initialize=1, bounds=(0.95, 1.05), doc='Bus Voltage')
model.busvoltage[1].fixed=True
model.busangle = Var(model.bus, initialize=0, bounds=(-3.14, 3.14), doc='Bus angle')
model.busangle[1].fixed=True

Проблема заключается в том, что я просто хочу установить напряжение и шину шины для первой шины, не инициализируя остальные значениями. Я не знаю, важно ли это писать, но я использую ipopt в качестве решателя.

(Это мой первый раз программирование на Python). Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

1 голос
/ 01 марта 2020

Вы после .value атрибута переменной. Кроме того, установка значения переменной и ее одновременная фиксация могут быть упрощены до вызова .fix():

model.busvoltage = Var(model.bus, bounds=(0.95, 1.05), doc='Bus Voltage')
model.busvoltage[1].fixed = True
model.busvoltage[1].value = 1

model.busangle = Var(model.bus, bounds=(-3.14, 3.14), doc='Bus angle')
model.busangle[1].fix(0)
0 голосов
/ 28 февраля 2020

Рассматривали ли вы инициализацию значения в ограничении, а не в определении Var?

model.busvoltage = Var(model.bus, bounds=(0.95, 1.05), doc='Bus Voltage')
model.busvoltage[1].fixed=True

def bus_voltage_1_value_constraint(model, b):
    if b == 1:
        return model.busvoltage[b] == 1
    return Constraint.Skip

model.bus_voltage_1_value = Constraint(model.bus, rule=bus_voltage_1_value_constraint)
...