Pyomo:使用列表对约束进行参数化

时间:2020-04-07 11:10:09

标签: python list constraints pyomo

我试图在Pyomo中声明一个约束,在该约束中,一个参数将是列表而不是标量,然后通过提供一组正确的维来构建约束,但是Pyomo似乎在做每个集合的笛卡尔积并推论出输入的数量(然后被视为标量)。

下面是我要实现的虚拟示例:

model.inputs = RangeSet(0,1)
model.x = model.inputs*model.inputs

model.p = Var()

def constraint_rule(model,x,i):
     return x[i] > model.p

model.constraint = Constraint(model.x,model.inputs,rule=constraint_rule)

更精确地说明我要实现的目标。我的约束形式为:

f(x_0,x_1,i) > p

我想输入x作为向量,而不是分别输入x_0和x_1(如果我有更多的x_i,则输入更多)。因此,我想为第一个参数输入一个列表列表,并为第二个参数输入一个迭代器,以指定我想要的列表元素。

我当然可以分解n个标量为 x [i] 的长度为n的列表 x ,但是因为我想不断更改输入的大小,所以我想只更改 model.x 并希望它会自动缩放。


下面是完整的数学问题(我没有足够的声誉来放置图片,对此感到抱歉):


Tr(MixiNx) > p

Tr(Nx) = 1

Mi0 + Mi1 = Id

Mi0, Mi1 and Nx SDP

这里MN是2x2矩阵。 对于每个N的值,我们有4个M用于长度为2的位串和2个矩阵i(然后x i 为0或1)。

x指定位串(这里只有x_0和x_1),i指定哪一位(例如,对于i = 0,我们想要值x_0,即x的第一位) 。但是i可能大于x中的位数(例如,我们可以将其设置为i = 2,我们希望值x_0 xor x_1即位的奇偶性)。因此,我想对1sr约束进行编码,以便它接收一个位串x和一个值i,该值可以指定我想要有关该位串的哪些信息。

我希望情况会更清楚

0 个答案:

没有答案