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:
parent
4c57e6d3bf
commit
b125c22619
1 changed files with 94 additions and 0 deletions
94
jsprit-core/src/main/java/jsprit/core/util/RouteUtils.java
Normal file
94
jsprit-core/src/main/java/jsprit/core/util/RouteUtils.java
Normal 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue