Google OR-Tools Error: Evaluating a BoundedLinearExpr as a Boolean value is not supported
Google OR-Tools Error: Evaluating a BoundedLinearExpr as a Boolean value is not supported
我想在 m 台机器上安排 n 个作业,并有转换时间和备选方案,并修改了 github/or-tools/scheduling_with_transitions_sat.py 中的示例,因为我还想要某种迟到惩罚。
我的测试输入数据是 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 个备选任务 [processing time, machine_id, resource/material, job already active on machine?, deadline/due date]
。
现在我创建了变量 l_lateness。
lateness_seconds 目前是预定 end_time 和截止日期之间的差异。
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中的变量如下:
# 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 Version: 9.0.9048
。
我们在 9.0 版中添加了学究式测试,因为使用 min()、max() 和其他 python 构造不会生成有效模型。
请使用 AddMinEquality() 或 AddMaxEquality()。
我想在 m 台机器上安排 n 个作业,并有转换时间和备选方案,并修改了 github/or-tools/scheduling_with_transitions_sat.py 中的示例,因为我还想要某种迟到惩罚。
我的测试输入数据是 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 个备选任务 [processing time, machine_id, resource/material, job already active on machine?, deadline/due date]
。
现在我创建了变量 l_lateness。 lateness_seconds 目前是预定 end_time 和截止日期之间的差异。
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中的变量如下:
# 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 Version: 9.0.9048
。
我们在 9.0 版中添加了学究式测试,因为使用 min()、max() 和其他 python 构造不会生成有效模型。
请使用 AddMinEquality() 或 AddMaxEquality()。