【问题标题】:OptaPlanner CVRPTW - solution with capacity issueOptaPlanner CVRPTW - 容量问题的解决方案
【发布时间】:2013-10-08 15:11:53
【问题描述】:

我有以下 CVRPTW 问题,我正在尝试使用 OptaPlanner 找到一个好的解决方案。时间采用 hh:mm:ss 格式。

我的 DRL 文件类似于 this。此外,我还定义了相对于在准备时间之前到达的硬约束。 我的求解器配置类似this,不同的是终止标签:

<termination>
    <terminationCompositionStyle>OR</terminationCompositionStyle>
    <maximumSecondsSpend>10</maximumSecondsSpend>
    <scoreAttained>0hard/-750000soft</scoreAttained>
</termination>

这是问题陈述:

PROBLEM STATEMENT:
CustID  ReadyTIME   DueTIME     ServiceDUR  DEMAND
1       20:38:18    20:44:18    00:05:00    2   
2       20:20:53    20:26:53    00:05:00    4   
3       20:51:39    20:57:39    00:05:00    3   
4       20:20:18    20:26:18    00:05:00    6   
5       20:34:15    20:40:15    00:05:00    5   
6       20:21:40    20:27:40    00:05:00    10  

我有 2 辆车,可容纳 10 件物品和 1 个仓库。

这是解决方案(客户按车辆分组并按到达时间排序):

Vehicle 1   Capacity 10 - from Depot [1]
[6]     D: 10   Ar.T: 20:21:40  Prev.D: 00:02:21    Next.D: --:--:--

Vehicle 2   Capacity 10 - from Depot [1]
[4]     D: 6    Ar.T: 20:20:18  Prev.D: 00:01:08    Next.D: 00:02:21
[2]     D: 4    Ar.T: 20:27:42  Prev.D: 00:02:24    Next.D: 00:03:38
[5]     D: 5    Ar.T: 20:36:03  Prev.D: 00:03:21    Next.D: 00:02:09
[1]     D: 2    Ar.T: 20:43:26  Prev.D: 00:02:23    Next.D: 00:07:23
[3]     D: 3    Ar.T: 20:55:40  Prev.D: 00:07:14    Next.D: --:--:--

(D = 需求,Ar.T = 到达时间,Prev.D = 到前一个位置的距离,Next.D 到下一个位置的距离)

如您所见,车辆 2 必须运输 6+4+5+2+3=20 件物品,这超出了容量。 我不明白如果配置中的容量存在硬约束,为什么求解器会建议我这个解决方案。

考虑到我的规则,这不是一个可接受的解决方案。我错过了什么吗? 是否存在求解器不提供解决方案的情况?是否考虑“求解器失败”终止?

【问题讨论】:

    标签: drools drools-planner optaplanner


    【解决方案1】:

    如果我错了,请纠正,但你有:

    • 总需求30(6+4+5+2+3+10)

    • 总容量20(2辆,每辆10辆)

    当您的卡车只能运输 20 件物品时,不可能运输 30 件物品。 没有可行的解决方案(因此 OptaPlanner 提供了它找到的最佳不可行解决方案)。

    注意:如果同一辆车可以多次使用,请添加额外的 Vehicle 实例并添加约束以惩罚使用多个具有相同牌照的 Vehicle 实例。

    【讨论】:

    • 有趣的是,有时证明不可行很容易(例如在这个数据集中)。但通常情况并非如此(并且证明不可行性也是 np-complete )。例如,假设 3 个需求(每个需求 6 个)有 2 个车辆(容量均为 10 个)。即使3 * 6 &lt; 2 * 10,这也不可行:没有车辆可以容纳超过 1 件物品,但这里比车辆多 1 件物品。
    • 我假设 OptaPlanner 允许多次使用同一辆车,所以这是一个错误的假设。您建议添加车辆实例,但新实例具有不同的 ID,对吗?那么,为了考虑多用途,我是否应该将问题建模为好像我有超过 2 辆车?
    • 是的,干净的方法是将Vehicle重命名为VehicleTrip,然后再次添加Vehicle(并将每个VehicleTrip链接到1个`Vehicle。然后添加一个软约束以最小化每辆车的出行次数(将出行次数平方有助于此)。
    • 您的建议很有帮助,但不是那么容易理解。有一个例子会很有趣,也许在下一个版本中:)
    • 无论如何我很困惑,因为将Vehicle 替换为VehicleTrip 并不能保证单个车辆的不同行程计划在不同的时间段(不重叠)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2020-08-11
    • 2022-07-22
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    相关资源
    最近更新 更多