or-tools单driver第一个解题
or-tools single driver first solution problem
在我的应用程序中,我有一个 driver 和许多车辆。即,他可以在上一次行程结束后驾驶下一辆车
就约束而言,它类似于
routing.solver().AddConstraint(
time_dimension.CumulVar(routing.End(int(pre_vehicle_id))) <=
time_dimension.CumulVar(routing.Start(int(vehicle_id)))
)
经过多次尝试,我发现只有当我将第一个解决方案策略设置为 PARALLEL_CHEAPEST_INSERTION 时,这种约束才有效。
这里,我遇到了一些问题:
- 有时会无缘无故失败,或者需要很长时间才能得到第一个解决方案。
这是一个错误吗?或者我做错了什么。实现这种约束的正确方法是什么
路由求解器正在尽最大努力构建具有不同 driver 的并行路由。
您的额外约束只是打破了求解器正在构建的所有可行路线,因此很难找到可行的解决方案。
要解决你的问题,你只需要有一辆driver(路线中的车辆API)。
由于容量限制,一辆车不足以访问所有节点。您需要从 reload model 中获得灵感,其中初始节点副本处的重新加载对应于车辆更改。
在我的应用程序中,我有一个 driver 和许多车辆。即,他可以在上一次行程结束后驾驶下一辆车 就约束而言,它类似于
routing.solver().AddConstraint(
time_dimension.CumulVar(routing.End(int(pre_vehicle_id))) <=
time_dimension.CumulVar(routing.Start(int(vehicle_id)))
)
经过多次尝试,我发现只有当我将第一个解决方案策略设置为 PARALLEL_CHEAPEST_INSERTION 时,这种约束才有效。
这里,我遇到了一些问题:
- 有时会无缘无故失败,或者需要很长时间才能得到第一个解决方案。 这是一个错误吗?或者我做错了什么。实现这种约束的正确方法是什么
路由求解器正在尽最大努力构建具有不同 driver 的并行路由。 您的额外约束只是打破了求解器正在构建的所有可行路线,因此很难找到可行的解决方案。
要解决你的问题,你只需要有一辆driver(路线中的车辆API)。
由于容量限制,一辆车不足以访问所有节点。您需要从 reload model 中获得灵感,其中初始节点副本处的重新加载对应于车辆更改。