Optaplanner 时间限制 windows
Optaplanner constraints for time windows
我正在尝试用 OptaPlanner 解决 VRP。我有多个客户有不同的时间 windows。这是我的约束提供者
protected Constraint arrivalAfterDueTime(ConstraintFactory factory) {
return factory.from(TimeWindowedCustomer.class)
.filter(customer -> customer.getArrivalTime() >= customer.getDueTime())
.penalizeLong("arrivalAfterDueTime",
HardSoftLongScore.ONE_HARD,
customer -> customer.getArrivalTime() - customer.getDueTime());
}
protected Constraint arrivalBeforeReadyTime(ConstraintFactory factory) {
return factory.from(TimeWindowedCustomer.class)
.filter(customer -> customer.getArrivalTime() > customer.getReadyTime()
&& customer.getArrivalTime() < customer.getDueTime() )
.penalizeLong("arrivalBeforeReadyTime",
HardSoftLongScore.ONE_HARD,
customer -> customer.getReadyTime() - customer.getArrivalTime());
}
但在解决方案中,我得到的到达时间小于准备时间。我怎样才能解决这个问题?提前谢谢你。
过早到达一般有以下三种做法:
- A) 等到时间 windows 打开,失去那个时间但没有额外的惩罚。因此,当它到达 9:30,服务时间为 0:10,准备时间为 10:00,车辆在 10:10 离开(不是 9:40!) .如果您有减少车辆总 activity 时间的一般约束(或每辆车最大 activity 时间与每天任务太多的组合),这将自动避免。
- B) 与 A) 相同,但有额外的软惩罚。如果您没有全局约束来减少车辆的总 activity 时间,这会很有用。
- C) 与 A) 相同,但有额外的严厉处罚。这很危险,因为给定 2 个任务,一个从 9:00 到 10:00 的时间 window,另一个从 11:00 到 12:00,开车 10 分钟介于两者之间,并且没有其他任务,您不允许一辆车同时执行这两项任务。
无论如何,请使用ConstraintVerifier
对您的约束进行单元测试!
我正在尝试用 OptaPlanner 解决 VRP。我有多个客户有不同的时间 windows。这是我的约束提供者
protected Constraint arrivalAfterDueTime(ConstraintFactory factory) {
return factory.from(TimeWindowedCustomer.class)
.filter(customer -> customer.getArrivalTime() >= customer.getDueTime())
.penalizeLong("arrivalAfterDueTime",
HardSoftLongScore.ONE_HARD,
customer -> customer.getArrivalTime() - customer.getDueTime());
}
protected Constraint arrivalBeforeReadyTime(ConstraintFactory factory) {
return factory.from(TimeWindowedCustomer.class)
.filter(customer -> customer.getArrivalTime() > customer.getReadyTime()
&& customer.getArrivalTime() < customer.getDueTime() )
.penalizeLong("arrivalBeforeReadyTime",
HardSoftLongScore.ONE_HARD,
customer -> customer.getReadyTime() - customer.getArrivalTime());
}
但在解决方案中,我得到的到达时间小于准备时间。我怎样才能解决这个问题?提前谢谢你。
过早到达一般有以下三种做法:
- A) 等到时间 windows 打开,失去那个时间但没有额外的惩罚。因此,当它到达 9:30,服务时间为 0:10,准备时间为 10:00,车辆在 10:10 离开(不是 9:40!) .如果您有减少车辆总 activity 时间的一般约束(或每辆车最大 activity 时间与每天任务太多的组合),这将自动避免。
- B) 与 A) 相同,但有额外的软惩罚。如果您没有全局约束来减少车辆的总 activity 时间,这会很有用。
- C) 与 A) 相同,但有额外的严厉处罚。这很危险,因为给定 2 个任务,一个从 9:00 到 10:00 的时间 window,另一个从 11:00 到 12:00,开车 10 分钟介于两者之间,并且没有其他任务,您不允许一辆车同时执行这两项任务。
无论如何,请使用ConstraintVerifier
对您的约束进行单元测试!