我用Python为医院的一个部门开发了一个护士排班程序,该程序使用了OR工具,并基于以下示例:https://github.com/google/or-tools/blob/master/examples/python/shift_scheduling_sat.py
为了限制员工在一周/一个月内可以工作的班次数量,我使用了以下形式的限制:
model.Add(min_hour <= sum(work[k, s, d] for s in range(1, 4) for d in range(i, j)) <= max_hour)
这里,(i,j)表示周或月的开始/结束。
这个程序运行了几个月都很好,直到大约两周前。然后我开始收到这种类型的约束的错误。具体来说,我收到了以下消息:
NotImplementedError: Evaluating a BoundedLinearExpr as a Boolean value is not supported.
由于运行时问题,我通常在Google Cloud VM上运行代码,所以这就是我遇到麻烦的地方。然而,当我在本地机器上运行代码时,可能有不同版本的OR-Tools,我没有得到任何错误。
我在文档中找不到关于这个问题的任何东西。因此我想知道如何解决这个问题?是需要在软件包中修复还是需要重写代码。如果是这样,我需要做什么修改,示例代码似乎没有改变?
3条答案
按热度按时间mnemlml81#
Python Package 器已更新,以捕获更多用户错误。
在
ortools==8.2.8710
中,此函数将打印OPTIMAL
:而在较新的版本中它会引发错误。
您必须将约束拆分为2个
model.Add
。(或者删除约束以获得相同的错误行为)编辑:在您的情况下
2eafrhcq2#
在重写代码并按照@Stradivari建议的方式实现约束之后,我能够成功地运行代码,而不会遇到BoundedLinearExpr错误:
9bfwbjaz3#
使用以下命令时也会出现此错误
代替