首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Optaplanner -时间窗口未实现

Optaplanner -时间窗口未实现
EN

Stack Overflow用户
提问于 2014-12-04 14:20:22
回答 1查看 342关注 0票数 1

我正在使用OptaPlanner进行与业务相关的优化。

事关6.1.0。最终版本:当我修改优化问题时,一辆车必须在一个时间窗口内到达(尽可能早和最新的到达时间,在太早或太晚的时候受到严厉的惩罚)和当我只带两个顾客乘坐一辆车时,时间窗口1比时间窗口2(时间窗口1的结束+到客户的旅行时间2< timewindow 2的开始时间)早得多,那么车辆最早就会满足时间窗口1,但到达客户2的时间太早了。

这辆车(2363)首先从270号仓库出发,到达客户13 (时间窗口为8:50-10:50),并于8:50到达。工作时间为75分钟。出发时间是10:05,车辆在10:12到达顾客16点(时间窗口是15:45-17:45)。在某些业务情况下,最好是等待,而不是太早到达。

我怎样才能强迫车辆等待,以便它及时到达下一个客户的位置?

PS:圆圈显示可能到达时间的时间窗口(内圆: 0-12h,外圆:12-24小时)。地点间的时间和距离由GraphHopper确定。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-05 07:39:09

那么,您想要在以前的停顿(=前客户或仓库)等待,而不是在当前的客户?

在OptaPlanner VRP示例中,departureTime = arrivalTime + duration。因此,arrivalTime是一个影子变量(基于previousStandstill),而departureTime只是在此基础上的计算(因此departureTime本身不是影子变量,因为它甚至不是一个字段(或者换个说法,因为它不是java变量--它不能是规划变量(真正的或影子的))。

在您的变体中,也要让departureTime成为一个影子变量,定义如下:departureTime = Math.max((arrivalTime + duration), nextCustomer.readyTime - drivingTime)。这个新的影子变量(以及它的VariableListener)依赖于规划变量arrivalTimenextCustomer。所以影子变量取决于影子变量。注意这个建议中没有循环:使用了nextCustomer.readyTime,但readyTime是一个问题事实。

为此,您可能需要升级到6.2.0.CR2或更高版本,因为6.1可能还不支持依赖于影子变量的影子变量(我再也不记得了)。我还担心optaplanner不会自动重新排序触发的变量侦听器,它还需要遵循层次结构(尽管可以对此进行jira ),因此,这意味着您必须使用变量侦听器声明getter,如下所示: previousStandstill、nextCustomer、arrivalTime、departureTime。

VariableListener触发顺序将在以后的版本中得到更多的形式化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27296345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档