首页 > 解决方案 > docplex 问题:TypeError:无法使用 == 来测试表达式是否相等,请尝试使用 Python is 运算符或方法等于:

问题描述

mymodel = Model("OPL_Purchasing_plan");
nr_month= range(0, 12)
na_pur_req = [550, 750, 6500, 675, 210, 120, 0, 560, 140, 320, 0, 100]
na_average_cost = 12.5, 12.5, 12.5, 12.5, 12.5, 12.5, 12.5, 12.5, 12.5, 12.5, 12.5, 12.5]

for i in nr_month:
    if(na_pur_req[i] == 0):
        mymodel.add_constraint(na_actual_cost_test[0][i] <= na_actual_suply[0][i] * 0,'con9');
     
    else:
        mymodel.add_constraint(na_actual_cost_test[0][i] <= na_actual_suply[0][i] * na_average_cost[i],'con10');

我收到如下错误

TypeError: Cannot use == to test expression equality, try using Python is operator or method equals

为什么我收到此错误。

标签: pythondocplex

解决方案


DOcplex 表达式由决策变量和常量构建而成,它本身就是一个决策对象。它的值仅在solve()之后定义,并且可以通过solution_value属性查询。==关系运算符,如<=>=已被重载以生成约束,例如 x==1 实际上是一个约束,而不是 Python 布尔值。编写诸如if x==1无法工作的代码,因为 x 实际上是一个决策变量,在求解之前没有任何价值。这就是为什么消息告诉您正在尝试测试两个表达式之间的相等性的原因。这可以使用isor 方法完成equals,但不能使用==.

不幸的是,您的代码不允许重现该问题并理解您为什么要这样做。


推荐阅读