Google OR-Tools报BoundedLinearExpr布尔值评估不支持错误如何解决
OR-Tools 排班约束报错解决方案
问题根因
该报错是OR-Tools v9.7及以上版本的非兼容更新导致的:旧版本CP-SAT解析器支持直接在model.Add()中传入a <= b <= c形式的链式不等式,新版本不再支持将带上下界的线性表达式(BoundedLinearExpr)直接作为布尔值传入约束方法,因此触发NotImplementedError。
你部署在谷歌云VM的环境应该是开启了依赖自动更新,最近两周OR-Tools推送了v9.7+正式版,云端环境更新后触发报错;本地安装的是v9.6及以下的旧版本,所以运行正常。
处理方案
你可以二选一:
- 方案1:固定依赖版本,无需修改业务代码
在项目的依赖声明文件(如requirements.txt)中指定OR-Tools版本低于9.7即可,示例:
重新部署云端环境后即可恢复正常运行。ortools==9.6.2534 - 方案2:修改代码适配所有版本,更稳妥
将你写的链式不等式约束拆为两条独立的约束即可,修改后的代码如下:
该写法兼容所有已发布的OR-Tools版本,不会再触发该报错。work_sum = sum(work[k, s, d] for s in range(1, 4) for d in range(i, j)) model.Add(work_sum >= min_hour) model.Add(work_sum <= max_hour)
不需要等待官方修复,这是版本更新的规则调整,不属于功能缺陷。
内容的提问来源于stack exchange,提问作者Michiel V.
相关产品推荐
相关产品推荐

