1

我是 optaplanner 的新手,我正在尝试调整 VRP 示例以解决“类似”问题......但有一些不同之处:

我们有一个中央仓库、n 个客户和一个由一辆或多辆汽车组成的车队。

每个客户都有一定的“最大容量”(并非所有客户都相同)。

每辆车都一样。

问题的初始条件包括:每个客户的“实际容量”和“期望容量”,因此:

实际容量 >=0 且 <= 最大容量
所需容量 >=0 且 <= 最大容量

“实际仓库容量”是仓库可用的物品数量

我们希望重新分配一些项目,以便每个客户都能获得他的“所需容量”。

(通常大多数物品会从一个客户重新分配给另一个客户)

硬约束是不能超过“最大容量”软约束是车辆距离(最小化)和与“所需容量”的差异(最小化)

我首先为具有负客户需求的 VRP 示例生成数据文件(以模拟期望容量 < 实际容量),但很快发现 drl 中总结所有客户需求以满足车辆容量限制的约束并不是我们这里需要的。

¿ 你认为这个问题“足够相似”到值得修改 VRP 示例吗?

4

1 回答 1

0

是的,绝对值得采用 OptaPlanner VRP 示例(带有或不带有示例 GUI)并根据这些需求对其进行自定义。从 OptaPlanner 6.0.0.CR1 或更好的 CR4 开始,下周正常发布。不要使用 CR3,因为它可能存在与 VRP 中的影子变量相关的错误。

A)让我们假设customerDemand = customerDesired - customerActual。这可以是积极的(需要更多项目)和消极的(需要摆脱项目)。

问题:我们如何验证车辆容量?我们不能只是总结它,因为它因客户而异。答:我们在 Customer 上使用影子变量(我们称之为freight)来计算车辆从前一个客户运输到当前客户的物品数量。这与TimewindowedCustomer示例arrivalTime的工作方式非常相似。然后使用分数约束规则来验证每个客户是否低于车辆的最大容量。这也适用于每个客户。freightfreight>= 0

现在,如果有很多车辆,A) 效果很好。即使没有足够的项目,检查软约束也是没有意义的,因为它是一个固定的常数(缺少项目的数量)。您甚至可以决定customerDesired在安排之前将这种短缺公平地分配给客户并相应地调整他们。

B) 但是,如果车辆数量相对于客户数量而言不够多,那么 A) 可能不够。我们希望允许交付/取货少于customerDemand,使其更灵活(因此复杂:)。在这种情况下,客户有 2 个真正的(=非影子)计划变量(而不仅仅是 1 个):previousStandstill(~ 以前的客户)和deliveryPickup( <= demand * 2)。

于 2013-09-14T12:06:18.857 回答