我是optaplanner的新手,我试图调整VRP示例以解决“类似”问题......但有一些差异:
我们有一个中央仓库,n个客户和一个或多个车辆的车队。
每个客户都有一定的“最大容量”(所有客户都不一样)。
每辆车都一样。
问题的初始条件包括: 每个客户的“实际容量”和“所需容量”,以便:
实际容量> = 0且< =最大容量
期望的容量是> = 0并且< =最大容量
“实际仓库容量”是仓库中可用的物品数量
我们希望重新分配一些项目,以便每个客户获得“所需的容量”。
(大多数项目将从一个客户重新分配到另一个客户)
硬约束是“最大容量”不能超越 软约束是车辆距离(最小化)和与“期望容量”(最小化)的差异
我开始为负面客户需求(模拟所需容量<实际容量)生成VRP示例的数据文件,但很快发现drl中的约束总结了所有客户满足车辆容量限制的要求不是我们的需要在这里。
¿你认为这个问题“足够相似”值得修改VRP的例子吗?
答案 0 :(得分:0)
是的,绝对值得采用OptaPlanner VRP示例(带或不带示例GUI)并根据这些需求进行自定义。从OptaPlanner 6.0.0.CR1或更好的CR4开始,通常将在下周发布。不要使用CR3,因为它可能有与VRP中的阴影变量相关的错误。
A)我们假设customerDemand = customerDesired - customerActual
。这可能是积极的(需要更多的项目)和消极的(需要摆脱项目)。
问题:我们如何验证车辆容量?我们不能只是总结它,因为它从客户到客户之间波动。答:我们在客户上使用影子变量(让我们称之为freight
)来计算车辆从前一个客户到当前客户的运输项目数。这与arrivalTime
示例的freight
非常相似。然后使用分数约束规则验证每个客户的freight
是否低于车辆的最大容量。此外,每个客户>= 0
都是customerDesired
。
现在,如果有很多车辆,A)运作良好。即使没有足够的项目,检查软约束也是没有意义的,因为它是一个固定的常数(缺少的项目数)。你甚至可以决定在客户上公平地分配这种短缺,并在安排之前相应地调整他们的customerDemand
。
deliveryPickup
,使其更灵活(因此更复杂:)。在这种情况下,客户有2个真正的(=非阴影)计划变量(而不仅仅是1):previousStandstill(〜上一个客户)和<= demand * 2
({{1}})。