1
0
Fork 0
mirror of https://github.com/graphhopper/jsprit.git synced 2020-01-24 07:45:05 +01:00

added RouteUtils to retrieve important information from routes

This commit is contained in:
oblonski 2014-06-02 12:16:19 +02:00
parent 4c57e6d3bf
commit b125c22619

View file

@ -0,0 +1,94 @@
package jsprit.core.util;
import java.util.Collection;
import jsprit.core.algorithm.state.UpdateActivityTimes;
import jsprit.core.problem.cost.TransportTime;
import jsprit.core.problem.driver.DriverImpl;
import jsprit.core.problem.job.Job;
import jsprit.core.problem.job.Service;
import jsprit.core.problem.solution.route.RouteActivityVisitor;
import jsprit.core.problem.solution.route.VehicleRoute;
import jsprit.core.problem.solution.route.activity.TourActivity;
public class RouteUtils {
/**
* Returns total service time, i.e. sum of service time of each job.
*
* @param routes
* @return
*/
public static double calculateServiceTime(Collection<VehicleRoute> routes) {
double serviceTime = 0.;
for(VehicleRoute r : routes){
for(Job j : r.getTourActivities().getJobs()){
serviceTime += ((Service)j).getServiceDuration();
}
}
return serviceTime;
}
/**
* Returns total transport time.
*
* @param routes
* @param transportTimes
* @return
*/
public static double calculateTransportTime(Collection<VehicleRoute> routes, TransportTime transportTimes) {
double tpTime = 0.;
for(VehicleRoute r : routes){
TourActivity lastact = r.getStart();
double lastActDepTime = r.getDepartureTime();
for(TourActivity act : r.getActivities()){
tpTime += transportTimes.getTransportTime(lastact.getLocationId(), act.getLocationId(), lastActDepTime, DriverImpl.noDriver(), r.getVehicle());
lastact=act;
lastActDepTime=act.getEndTime();
}
tpTime+=transportTimes.getTransportTime(lastact.getLocationId(), r.getEnd().getLocationId(), lastActDepTime, DriverImpl.noDriver(), r.getVehicle());
}
return tpTime;
}
/**
* Returns total waiting time.
*
* @param routes
* @return
*/
public static double calculateWaitingTime(Collection<VehicleRoute> routes) {
double waitingTime = 0.;
for(VehicleRoute r : routes){
for(TourActivity act : r.getActivities()){
waitingTime += Math.max(0., act.getTheoreticalEarliestOperationStartTime() - act.getArrTime());
}
}
return waitingTime;
}
/**
* Returns total operation time.
*
* @param routes
* @return
*/
public static double calulateOperationTime(Collection<VehicleRoute> routes) {
double opTime = 0.;
for(VehicleRoute r : routes){
opTime += r.getEnd().getArrTime() - r.getDepartureTime();
}
return opTime;
}
/**
* Updates activity arrival/end-times of activities in specified route.
*
* @param route
* @param transportTimes
*/
public static void updateActivityTimes(VehicleRoute route, TransportTime transportTimes){
new RouteActivityVisitor().addActivityVisitor(new UpdateActivityTimes(transportTimes)).visit(route);
}
}