我可以用python集合列表初始化pyomo中的Set()嗎?換句話說,我希望做這樣的事情:Pyomo - 用(Python)集合列表初始化Set()
from pyomo.environ import *
model = AbstractModel()
a = set([1,2,3])
b = set([4,5,6])
model.c = Set(initialize = [a,b])
instance = model.create_instance()
不幸的是,這給了我一個錯誤:
ERROR: Constructing component 'a' from data=None failed:
TypeError: Problem inserting set([1, 2, 3]) into set c
是否有另一種方式來實現,我很想念同樣的效果?
TL; DR:我正在研究網絡攔截模型。我的模型Set表示網絡中的一組路徑。我想使用(python)集來存儲路徑,因爲模型約束被限制在可行的路徑中。因此,我需要檢查路徑中是否存在任何邊,並且哈希函數將允許我有效地檢查停頓邊是否在路徑上發生。換句話說,我以後的功能:
def is_feasible(model, path):
return any([edge in path and model.Interdicts[edge].value] for edge in model.edges)
其中path是我的集合中的元素,並且model.Interdicts是VAR(model.edges,內=二進制)
我後退了一直使用引用外部列表中的路徑的索引來初始化我的Set,但是之後我必須將我的pyomo模型與非模型元素混合來評估模型約束,這是一個真正令人頭痛的問題(但大多數網絡攔截器建模...)
完美!在上面的代碼中,我用'a = frozenset([1,2,3])替換了'a = set([1,2,3])和'b = set([4,5,6])'和'b = frozenset([4,5,6])',它的工作原理。謝謝! – Tim