在Optaplanner VRPTW中作为额外的计划变量开始游览 - 一个好主意?

时间:2016-01-07 09:19:08

标签: optaplanner

嗨,祝所有Optaplanner用户新年快乐,

我们需要计划旅行。这些旅行包含链式和时间窗口活动(交付),每周更换一次卡车。

单次旅行的开始时间可能会有所不同,并且取决于几个条件(即必须在旅行开始之前生产要交付的货物;只能在工厂大门处提供有限数量的卡车。同一时间;卡车必须在开始新的旅行之前回来)。意思是:游览的顺序也可能不同,卡车之间的时间差可能会发生。

我的设计方案是,在Optaplanners VRPTW示例中将TourStartTime注释为第二个计划变量,并将TourStartTime指定为2小时时间粒度(计划范围为1周,并且通常在夜间不开始游览;所以提到的时间粒度反映了可能的旅行开始的简化日历。

可用卡车(来自外部物流公司)的数量可能每周不同。关于这一点,我想计划一个“无限”的卡车数量。但是,每个物流公司的卡车数量,实际上可以分配给交付,应该通过约束来控制(即'trucks_to_be_used_in_parallel')。

任何人都能告诉我,这是否是一种可行的设计方法,或者我在哪里必须避免陷阱(每周约1000次交货,每天40-80辆卡车)?

谢谢 迈克尔

1 个答案:

答案 0 :(得分:1)

第二个计划变量是可能的(甚至可能是最好的设计,具体取决于您的要求),但它会炸毁搜索空间,甚至可能需要自定义的粗粒度移动来获得很好的结果。

相反,我首先要调查卡车的TourStartTime是否可以成为影子变量。例如,为所有卡车提供唯一的优先级编号。然后让卡车的TourStartTime成为影子变量:卡车可以离开的最快时间。如果只有3个车道和4辆卡车想要离开,那么具有最高优先级的3辆卡车将首先离开(因此获得原始的TourStartTime,第4辆卡车将获得更晚的卡车。)