如何在docplex中实现切片?

时间:2019-04-09 16:17:47

标签: docplex

我正在将一些代码从OPL传输到docplex,并且切片语法存在问题。我正在尝试创建一组约束,这些约束包含与另一个决策变量有关的所有值的总和。

我已经尝试过add_constraintsadd_constraint(在for循环内),但是遇到了无效的语法错误。我在Google OR上使用了这种格式,所以我希望它能正常工作。

这是我的OPL代码:

forall(<var1,var3> in Index2)
        sum(<var1,var2,var3> in Index1) 
            dev_var[var1,var2,var3] == cec_var2[<var1,var3>];

我在docplex中尝试了以下操作:

for row2 in df1.itertuples():
    solver.add_constraint(solver.sum(dec_var[row.var1,row.var2,row.var3] 
       for row in df2.itertuples()) == dec_var2[row2.var1,row2.var3] 
           if row2.var1 = row.var1 and row2.var3 = row.var3)

我希望为每个var1,var3组合创建一个约束,该约束包括在另一个索引/数据框中找到的var1,var2,var3的所有相关索引。使用“ if”语句时,出现“无效语法”错误,但是如果没有它,我将得到包括其他索引的完整笛卡尔连接而没有任何过滤的约束。

2 个答案:

答案 0 :(得分:1)

在您的if语句中,您是否尝试使用==(相等运算符)而不是=(赋值运算符)?我不确定python / pandas是否喜欢条件表达式中的赋值。

答案 1 :(得分:0)

inches city  Pizza_Price
  5       A        10
  6       B        12

出了点问题,希望对您有所帮助