Droptaff之前的Optaplanner VRP与皮卡

时间:2016-06-23 02:33:28

标签: optaplanner drools-planner

我正在使用Optaplanner来解决以下一个有很多要求的复杂vrp问题。除了以下两个方面之外,我能够处理其中的大部分内容。

  1. 仅限DropOffs之前的提货
  2. 在获取客户的途中强制执行特定路径。
  3. 我们的目标是接送一群客户,这些客户将前往目的地,并将他们放在同一车辆中。

    提前致谢!我很感激帮助!

    问题与示例VRP TimeWindow示例非常相似,但有以下更改。

    • 客户将在固定地点(在赛道中)接听
    • 每个皮卡客户都有一个下车目的地(在 电路)
    • 车辆将前往下车然后再回到起飞位置 再次。 (一旦车辆离开电路,它所做的一切就是甩掉它 客户在设定地点)
    • 在赛道中移动的车辆必须在特定路径中移动 (想象一条单行道)

    规划使用每个取货到取件之间得分的道路距离。皮卡 - > Drop-Off未知(计划使用Air)。

    我很难执行这项工作,在将电路留给下线客户后,车辆可能无法回来接载更多客户,并且可以通过车辆在赛道中制作的固定路径进行此项工作。 / p>

    我的主要想法是做以下事情。

    • 为客户添加了TYPE属性,以区分取件和客户
    • 向客户类添加了一个变量监听器,用于跟踪当前车辆到达时的所有DropOffId,以便只有前往该位置的乘客才能进入dropOffLocation。当车辆到达dropOff时,它会从列表中删除该项目。 (基本上用作堆栈)。
    • 问题在理论上说,如果客户的位置相对接近,这并不是因为车辆捡起客户而是捡起另一辆客户,而是接近另一家客户。
    • 还有一个车辆必须接受电路的强制执行固定路线的困难,正在计划使用成本矩阵来使用软约束来强制执行路线隐含性(车辆不会倒退或跳过一个点作为成本会太高了,但不会按原样运作。

1 个答案:

答案 0 :(得分:0)

我可能会考虑这样的域名模型:

@PlanningEntity
class Pickup implements PickupOrVehicle {
    Customer customer;

    @PlanningVariable
    PickupOrVehicle previousPickup;

    @PlanningVariable
    int dropOffPriority;

}
@PlanningEntity // Shadow entity
class Vehicle implements PickupOrVehicle {
    ...

    @ShadowVariable(based on dropOffPriority and previousPickup)
    List<Customer> dropOffOrderList;

    // For consistency we might also add pickUpOrderList
}

dropOffPriority应该是全局唯一的(通过唯一地初始化它并且只为该变量配置SwapMoves。

或者,VariableListener应该只按其客户的ID订购具有相同dropOffPriority的2个分配(因为排序必须是确定性的!)。

不确定它是否会运作良好。如果您确实尝试过,请在此处告知我们是否运作良好。