使用Python在or-tools上实现break_intervals的XOR语句

2024-05-15 14:38:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近一直在使用或工具,现在我正在使用python来研究CVRP的中断间隔。在

我想实现的是为一辆车创建N个中断,并在XOR约束上加上一个,这样就只执行一个中断。在

我创建了中断和每个中断间隔的执行值列表,如下所示:

 for i in xrange(len(self.breaks)):
     name_break = "break_{}".format(i)
     start_min, start_max, duration_break = breaks[i]
     optional_break = True

     break_intervals.append(solver.FixedDurationIntervalVar(start_min, start_max, duration_break, optional_break, name_break))
     performed_values.add(break_intervals[i].PerformedExpr())

然后我使用solver的语法糖,使用SumEquality方法添加一个约束,并将中断间隔添加到车辆:

^{2}$

routing.GetDimensionOrDie("Time").SetBreakIntervalsOfVehicle(break_intervals, 0)

当只有一个break inbreaks时,该约束非常有效(这与将“optional_break”的值更改为False相同)。问题是当我添加一个新的break inbreaks时,没有解决方案。赋值为空。在

这个解决方案是可行的,在第一个break我得到一个赋值,添加一个可选的break不应该返回空赋值。在

除了break interval约束和minimize time variables语句外,我几乎遵循了这个cpp tutorial。在

也许我遗漏了什么。你对这个问题有什么见解吗?在


Tags: 工具name间隔解决方案minstartoptionalmax