我最近一直在使用或工具,现在我正在使用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。在
也许我遗漏了什么。你对这个问题有什么见解吗?在
目前没有回答
相关问题 更多 >
编程相关推荐