Python Google或Tools错误:不支持将BoundedLinearExpr计算为布尔值

Python Google或Tools错误:不支持将BoundedLinearExpr计算为布尔值,python,error-handling,scheduling,or-tools,deadlines,Python,Error Handling,Scheduling,Or Tools,Deadlines,我想在m台机器上安排n个作业,有过渡时间和备选方案,并在中修改了示例,因为我还需要某种迟到惩罚 我的测试输入数据为n=9和m=3: jobs_data = [[[(304776, 0, 'r2500', True, 2130458), (-1, 1, 'r2500', False, 2130458), (-1, 2, 'r2500', False, 2130458)]], [[(-1, 0, 'r1200', False, 1295928), (193491, 1, 'r12

我想在m台机器上安排n个作业,有过渡时间和备选方案,并在中修改了示例,因为我还需要某种迟到惩罚

我的测试输入数据为n=9和m=3:

jobs_data = [[[(304776, 0, 'r2500', True, 2130458),
   (-1, 1, 'r2500', False, 2130458),
   (-1, 2, 'r2500', False, 2130458)]],
 [[(-1, 0, 'r1200', False, 1295928),
   (193491, 1, 'r1200', True, 1295928),
   (-1, 2, 'r1200', False, 1295928)]],
 [[(215173, 0, 'v3750', False, 1428522),
   (-1, 1, 'v3750', False, 1428522),
   (-1, 2, 'v3750', False, 1428522)]],
 [[(20226, 0, 'v3000', False, 369014),
   (20226, 1, 'v3000', False, 369014),
   (-1, 2, 'v3000', False, 369014)]],
 [[(222962, 0, 'r2500', False, 6517387),
   (222962, 1, 'r2500', False, 6517387),
   (-1, 2, 'r2500', False, 6517387)]],
 [[(-1, 0, 'r1700', False, 1266091),
   (-1, 1, 'r1700', False, 1266091),
   (80988, 2, 'r1700', False, 1266091)]],
 [[(-1, 0, 'r1350', False, 5138051),
   (-1, 1, 'r1350', False, 5138051),
   (89880, 2, 'r1350', False, 5138051)]],
 [[(-1, 0, 'r1200', False, 5699494),
   (131899, 1, 'r1200', False, 5699494),
   (-1, 2, 'r1200', False, 5699494)]],
 [[(-1, 0, 'r1200', False, 505015),
   (-1, 1, 'r1200', False, 505015),
   (126922, 2, 'r1200', True, 505015)]]]
n个作业的列表,其中包含m个备选任务,
[处理时间、机器id、资源/材料、机器上已激活的作业、截止日期/截止日期]

现在我创建了变量l_lateness。 此时的迟到秒数是计划的结束时间和截止时间之间的差值

l_lateness = model.NewIntVar(-horizon_due_date, horizon_due_date, 'l_lateness')
lateness_seconds = (l_end - job[0][0][4])

model.Add(l_lateness ==  lateness_seconds)

termin.append(l_lateness)
然后,我在目标中使用变量,如下所示:

# Objective.
  makespan = model.NewIntVar(0, horizon, 'makespan')
  model.AddMaxEquality(makespan, job_ends)
  makespan_weight = 1
  transition_weight = 3
  deadline_weight = 5
  print(type(sum(termin)))
  print(type(sum(switch_literals)))
  model.Minimize(makespan * makespan_weight +
                 sum(switch_literals) * transition_weight +
                 sum(termin) * deadline_weight)
这个很好用。 但是我想要

lateness_seconds = max(0,(l_end - job[0][0][4]))
因此,只有那些没有在截止日期前完成的工作才算数

如果我这样做,那么我会收到以下错误消息,我不明白为什么或如何避免它:

NotImplementedError: Evaluating a BoundedLinearExpr as a Boolean value is not supported.
我试着把它改写成

if l_end >= job[0][0][4]:
  model.Add(ueberzogen ==  (l_end - job[0][0][4]))
else:
  model.Add(ueberzogen ==  0)
但是对于表达式
l_end>=job[0][0][4]
,这给了我同样的错误


我使用的是
ortools版本:9.0.9048

我们在9.0版本中添加了迂腐的测试,因为使用min()、max()和其他python构造将无法生成有效的模型


请使用AddMinEquality()或AddMaxEquality()。

我们在9.0版中添加了迂腐的测试,因为使用min()、max()和其他python构造将无法生成有效的模型


请使用AddMinEquality()或AddMaxEquality()。

可能是我知道的一个副本,当您使用类似model.Add(下限不是“max”)的内容时,可能会遇到此错误Python函数,不是来自或工具的函数?要在目标中使用数量,必须将其构造为解算器变量,例如使用AddMaxEquality。我知道,当您使用类似model.Add(下限不是“max”)的函数时,可能会遇到此错误Python函数,而不是来自或工具的函数?要在目标中使用数量,必须将其构造为解算器变量,例如使用AddMaxEquality。