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