複数の VRP を解決するために jsprit を使用しようとしていますTimeWindows
。したがって、「TimeWindowsNotAvailable」クラスをサービスに関連付けるマップを含む新しい Constraint-Class を作成しました。
「TimeWindowsNotAvailable」クラスにはTimeWindows
、サービスを実行できない場所のリストが含まれています (たとえば、顧客が家にいないなど)。主な問題は、newAct.getArrTime()
が常に 0.0 であることですが、VRP の解では が 0.0 ではないことがわかりますarrTime
。
この問題を解決する方法を知っている人はいますか、それとも複数の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;
}
}