Я пытаюсь использовать jsprit для решения VRP с несколькими 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;
}
}