我是Pyomo和Python的新手。我想知道是否有人可以帮助我处理基于集合P的集合Q的情况。
model.P = pyo.Set(initialize=list(df.iloc[:,0]))
model.Q = pyo.Set(model.P)Model.P代表我从文件中读入的产品。Model.Q是每个产品的可能数量。所以,举个例子:产品"AAA“有3个不同的量,我想设置model.Q。q”AAA“等于范围(1,3)。产品"BBB“有7个不同的数量,我想设置model.Q。q”BBB“等于范围(1,7)。
数量被读入一个列表3,7,...
当我想像下面这样初始化一个参数时,它会给出一个错误,如下面的例子所示。
# Setup time
model.st = pyo.Param(model.P,model.Q,initialize=setupTimes,domain=pyo.NonNegativeReals)
TypeError: Cannot apply a Set operator to an indexed Set component (Q)我如何实现这一点?谢谢你的帮助。
发布于 2021-04-10 21:01:59
我真的不知道你打算用这个集合做什么,但我觉得可能有其他方法可以用一个集合和每个集合的数量参数来有效地模拟你的问题。
然而,为了做你想做的事情,我建议的一种方法是创建第二个集合"model.PP“,它将范围(max(List))作为元素。然后创建一个元组列表,将每个model.P适当地映射到model.PP的元素,然后使用这些元素初始化Model.Qie。
model.Q = pyo.Set(within=model.P*model.PP, initialise=[("AAA",1), ("AAA",2). . .])您可以使用for循环创建这个新列表。
https://stackoverflow.com/questions/67022789
复制相似问题