我正在尝试创建一个Pyomo索引,该索引将同时应用于熊猫数据框的列名和行索引。
原因是我在每列上都有约束,但也想将df行分成4部分,每部分都有各种约束。我可以通过创建仅在矩阵列名称上建立索引的4个单独的Params来使此公式起作用,但是如果子集需要具有不同数量的部件,则这将是不灵活的。
我的代码尝试对矩阵的x和y进行子集化:
model=ConcreteModel()
model.N = Set(initialize=col_names)
model.I = Set(initialize=full_df.index)
model.M = Param(model.I, model.N, initialize=full_df[col_names].values)
任何帮助将不胜感激。
答案 0 :(得分:1)
Param可支持字典,而字典则支持元组键。
创建一组(i,n)元组,其中i是I的元素,n是N的元素。此集将包含元组,而不是包含数字或字符串。
model.your_set = Set(initialize=list_of_tuples)
确保您有一个字典或数据对象表示形式,该表示形式允许每个元组只有一个数值(即矩阵的内容)。我们最初将其称为d
。
必须以这种方式声明参数:
model.M = Param(model.your_set, initialize=d)
这样,您的元组将成为字典的键。