python - 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
为什么我收到此错误。
解决方案
DOcplex 表达式由决策变量和常量构建而成,它本身就是一个决策对象。它的值仅在solve()之后定义,并且可以通过solution_value
属性查询。==
关系运算符,如<=
和>=
已被重载以生成约束,例如 x==1 实际上是一个约束,而不是 Python 布尔值。编写诸如if x==1
无法工作的代码,因为 x 实际上是一个决策变量,在求解之前没有任何价值。这就是为什么消息告诉您正在尝试测试两个表达式之间的相等性的原因。这可以使用is
or 方法完成equals
,但不能使用==
.
不幸的是,您的代码不允许重现该问题并理解您为什么要这样做。
推荐阅读
- python - Python上传文件 - 将文件放在屏幕中间
- selenium - 如何编写具有 ::before 和 ::after (selenium) 的 xpath
- python - 如何使用存储在列表中的列表名称来执行列表操作?
- powershell - powershell convert-tojson 没有给出最佳结果
- next.js - 如何在两个表之间建立关系并进行有效查询?
- c++ - 是否可以使用范围适配器将投影成员恢复为原始类对象?
- css - 是否可以将所有孩子及其后代与根网格对齐?
- javascript - onPageFisnished 中的 javascript 启动 Uncaught TypeError: Cannot set property 'value' of null in android webview
- http - 服务器修改请求内容时的 HTTP 响应
- python-3.x - 如何在 pytest 中断言两个具有模拟属性的 pydantic 模型相等?