我正在尝试使用OptaPlanner解决VRP。我有多个具有不同时间窗口的客户。这是我的约束提供程序
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());
}
但是在解决方案中,我的到达时间是
过早到达通常有三种方法:
无论如何,请使用ConstraintVerifier
对约束进行单元测试!