我尝试使用 jsprit 来解决具有多个TimeWindows
. 因此,我创建了一个新的约束类,其中包含一个将“TimeWindowsNotAvailable”类与服务相关联的映射。
“TimeWindowsNotAvailable”类包含TimeWindows
无法完成服务的列表(例如,客户不在家等)。主要问题是newAct.getArrTime()
始终为 0.0,尽管您可以在 VRP 的解决方案中看到arrTime
不是 0.0。
有没有人知道我如何解决这个问题或者TimeWindows
更难实现?
public class TimeConstraint implements HardActivityStateLevelConstraint {
private Map<Service, TimeWindowsNotAvailable> notAvailableMap;
private RouteAndActivityStateGetter states;
private VehicleRoutingTransportCosts routingCosts;
public TimeConstraint() {
super();
}
public boolean checkDepTime(Service service, Double depTime){
TimeWindowsNotAvailable timeWindowsNotAvailable = notAvailableMap.get(service);
if(timeWindowsNotAvailable == null) return true;
System.out.println(depTime);
return timeWindowsNotAvailable.isAvailable(depTime);
}
public void setNotAvailableMap(Map<Service, TimeWindowsNotAvailable> notAvailableMap){
this.notAvailableMap = notAvailableMap;
}
@Override
public ConstraintsStatus fulfilled(JobInsertionContext iFacts, TourActivity prevAct, TourActivity newAct, TourActivity nextAct, double prevActDepTime) {
Service currentService = (Service)iFacts.getJob();
if(checkDepTime(currentService, **newAct.getArrTime()**)) return ConstraintsStatus.FULFILLED;
return ConstraintsStatus.NOT_FULFILLED;
}
}