==在Gurobi Python中如何工作?

创建所需的变量(x[s,d,r])之后,我试图制作一个if语句,例如x[s,d,r] == 1。问题是,该语句始终为真,因此无论我将其设置为x[s,d,r]==0还是x[s,d,r]==2都无关紧要,它始终是相同的。

x[s,d,r]是由x[s,d,r] = m.addVar(0.0,1.0,1.0,GRB.BINARY,"x_"+ s+"_"+ d +"_" + r)定义的二进制变量。

z = 0.0
for s in students:
    for d in dates:
        if (s,d) in preferences:
            if preferences[s,d]!=0:
                for r in rooms:
                    if (d,r) in tutorials:
                        if x[s,d,r]>0.001:
                            print('%s:%s:%s:%s '%(s,d,r,preferences[s,d]))
                            z = z + preferences[s,d]
                        else:
                            print('no')

 m.setObjective((z), GRB.MAXIMIZE)


因此,如果x [s,d,r]> 0.001:是始终评估为“ true”的部分。

最佳答案

grb.Expr的==运算符返回grb.Constraint对象。如answer所述,约束对象始终是真实的,因此您将始终获得'if'部分。

假设您已经优化,则需要优化解决方案中x值的实际值。这是由grb.Variable上的X属性给出的。
所以你应该用

                        if x[s,d,r].X>0.001:


它应该可以按预期工作。

09-11 04:38