如何在文档中实现切片



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

我已经尝试了add_constraintsadd_constraint(在 for 循环内(,但我收到无效的语法错误。我在谷歌或 OR 中使用了这种格式,所以我希望它能工作。

这是我的 OPL 代码:

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

我在文档中尝试了以下内容:

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"语句后,我得到一个"语法无效"错误,但没有它,我会得到包含另一个索引的完整笛卡尔连接的约束,而无需任何过滤。

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

for var1 in index2:
    for var3 in index2:
        model.add_constraint(model.sum(model.sum(model.sum(dev_var[a,b,c] for a in index1) for b in index1) for c in index1) == cec_var2[var1,var3])

有事,希望对你有所帮助

最新更新