我正在研究VRP的一个变体,并希望使用Optaplanner来解决它。
我有一家运输公司,其中列出了第二天需要履行的所有工作(因此需求至少提前一天生成)。该公司有多个驱动程序可能适合维护一个或多个工作。
每项工作都有以下要素:
JOB_ID
取件时间(作业必须在此时或之后取件)
取件地点
交货时间(作业必须在此时或之前下降)
送货地点,
有资格执行此项工作的可能驱动程序列表(其中只有一名司机最终会完成这项工作。)
一个驱动程序可以为一个或多个作业提供服务,但每个作业必须只由一个驱动程序提供服务。
目标是:尽可能少地使用驱动程序,为每个驱动程序提供作业分配以及他/她应该接收的顺序并提供最小化总交付时间的作业。
请注意,司机可以拿起作业1,然后是作业2,然后是作业3,然后下载作业2,然后取出作业4,然后下载作业1,4和3.所以没有订购需要提取或放弃工作。无论哪种序列最小化时间都是优选的。唯一明显的限制是必须首先获取作业才能将其删除。
此外,每个司机都可以从他们的家庭位置开始(因此没有一个固定的仓库),在他/她提供最后一份工作后,公司并不关心他/她去哪里(因此无需计算最后一次下车和司机回家之间的时间。)
我使用Watchmaker框架使用遗传算法解决了这个问题。但我希望使用Tabu搜索或模拟退火等其他元启发式算法。
我在这里阅读了许多讨论VRP的论坛主题,但我仍然在寻找答案。我的问题是如何构建CHAINING并使用SHADOW VARIABLES,以便您拥有一个有效的拾取位置和下落位置序列链。
任何指针都将非常感谢...
谢谢,
维卡斯