【问题标题】:tour start as an additional planning variable in Optaplanner VRPTW - a good idea?巡回演出作为 Optaplanner VRPTW 中的一个附加计划变量开始 - 一个好主意吗?
【发布时间】:2016-04-11 14:48:45
【问题描述】:

祝所有 Optaplanner 用户新年快乐,

我们需要计划旅行。这些旅行包含由每周变化的卡车数量执行的链式和时间窗活动(交付)。

单次旅行的开始时间可能会有所不同,并取决于几个条件(即必须在旅行开始之前生产要交付的货物;在工厂门口只能提供有限数量的卡车)同时;卡车必须在开始新的旅行之前返回)。意味着:旅行的顺序可能会有所不同,并且卡车旅行之间可能会出现时间间隔。

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

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

谁能告诉我,如果这是一种可行的设计方法,或者我必须在哪里避免陷阱(大约每周 1000 次交付,每天 40-80 辆卡车)?

谢谢 迈克尔

【问题讨论】:

    标签: optaplanner


    【解决方案1】:

    第二个计划变量是可能的(根据您的要求,甚至可能是最好的设计),但它会扩大搜索空间,甚至可能需要自定义课程粒度移动来获得出色的结果。

    相反,我首先会调查是否可以将卡车的 TourStartTime 设为 阴影变量。例如,给所有卡车一个唯一的优先级编号。然后将卡车的 TourStartTime 设为影子变量:卡车可以离开的最快时间。如果只有 3 条车道,4 辆卡车要离开,则优先级最高的 3 辆卡车先离开(因此获取原始的 TourStartTime,第 4 辆卡车获得后一个)。

    【讨论】:

    • 我们也考虑过使用影子变量,但为卡车找到正确的优先级并不容易。他们以不同的成本驾驶并具有不同的负载能力。因此,我想避免将“车辆”分配给“客户”的任何预先确定,因为还有与时间相关的约束(客户时间窗口)需要满足。为了降低复杂性,我们现在将使用独特且较晚的 tour_start(即下午 6 点)来计划旅行,并在第二步中将 tour_starts 分发到全天。
    • 还有一个小问题:Optaplanner V6.3 仍然存在之前的限制,即链式planning_enities 不可为空?
    • 查看(并投票支持)PLANNER-226。检查该问题的状态(和修复版本)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    相关资源
    最近更新 更多