создать набор наборов в pyomo на основе определенных условий

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

Предположим, у меня есть набор O «операций» и набор V «узлов». Каждая операция связана с определенным списком узлов, содержащихся в V.

Я хотел бы создать серию подмножеств O на основе условия, что они содержат определенный заданный элемент x из V.

Я думал о следующем псевдокоде для заполнения гипотетического подмножества S.x:

create empty set S.x
    for each v in V:
        for each o in O:
           if v is in o:
              populate S.x with operation o

Однако я не знаю, как это оформить в Pyomo. Есть ли у вас какие-либо предложения о том, какому подходу следовать?

Спасибо!


person Mike    schedule 20.04.2018    source источник


Ответы (1)


Я думаю, что вам нужен проиндексированный набор:

# Assume a dict v_in_o, with keys o and values of a list of v's in that o
model.V = Set(initialize=set(v for o in v_in_o for v in v_in_o[o])
model.O = Set(initialize=v_in_o.keys())
model.S = Set(model.O, within=model.V, initialize=v_in_o) 
person jsiirola    schedule 20.04.2018
comment
Да, возможно, я мог бы попробовать с этим. Я не уверен, будет ли простое определение S таким образом обрабатывать условие, что элемент должен содержаться в исходном O. Спасибо - person Mike; 20.04.2018