mirror of
https://github.com/graphhopper/jsprit.git
synced 2020-01-24 07:45:05 +01:00
add LopezIbanezBlum instance reader to read tsptw
This commit is contained in:
parent
1907a66d2a
commit
07ac961048
1 changed files with 127 additions and 0 deletions
|
|
@ -0,0 +1,127 @@
|
|||
package jsprit.instance.reader;
|
||||
|
||||
import jsprit.core.problem.Location;
|
||||
import jsprit.core.problem.VehicleRoutingProblem;
|
||||
import jsprit.core.problem.job.Service;
|
||||
import jsprit.core.problem.solution.route.activity.TimeWindow;
|
||||
import jsprit.core.problem.vehicle.VehicleImpl;
|
||||
import jsprit.core.util.Coordinate;
|
||||
import jsprit.core.util.FastVehicleRoutingTransportCostsMatrix;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Created by schroeder on 18/02/15.
|
||||
*/
|
||||
public class LopezIbanezBlumReader {
|
||||
|
||||
private static Logger logger = LogManager.getLogger(LopezIbanezBlumReader.class);
|
||||
|
||||
private VehicleRoutingProblem.Builder builder;
|
||||
|
||||
public LopezIbanezBlumReader(VehicleRoutingProblem.Builder builder) {
|
||||
this.builder = builder;
|
||||
}
|
||||
|
||||
public void read(String instanceFile){
|
||||
builder.setFleetSize(VehicleRoutingProblem.FleetSize.FINITE);
|
||||
BufferedReader reader = getReader(instanceFile);
|
||||
String line;
|
||||
int noNodes = 0;
|
||||
int lineCount = 1;
|
||||
FastVehicleRoutingTransportCostsMatrix.Builder matrixBuilder = null;
|
||||
while((line = readLine(reader)) != null){
|
||||
if(line.startsWith("#")) continue;
|
||||
if(lineCount == 1){
|
||||
noNodes = Integer.parseInt(line);
|
||||
matrixBuilder = FastVehicleRoutingTransportCostsMatrix.Builder.newInstance(noNodes,false);
|
||||
lineCount++;
|
||||
continue;
|
||||
}
|
||||
else if(lineCount <= 1 + noNodes){
|
||||
String[] wimaTokens = line.split("\\s+");
|
||||
int nodeIndex = lineCount - 2;
|
||||
for(int toIndex=0;toIndex<wimaTokens.length;toIndex++){
|
||||
matrixBuilder.addTransportDistance(nodeIndex,toIndex, Double.parseDouble(wimaTokens[toIndex]));
|
||||
matrixBuilder.addTransportTime(nodeIndex, toIndex, Double.parseDouble(wimaTokens[toIndex]));
|
||||
}
|
||||
lineCount++;
|
||||
continue;
|
||||
}
|
||||
else{
|
||||
int nodeIndex = lineCount - 2 - noNodes;
|
||||
String[] twTokens = line.split("\\s+");
|
||||
if(nodeIndex == 0){
|
||||
VehicleImpl travelingSalesman = VehicleImpl.Builder.newInstance(""+nodeIndex).setStartLocation(Location.newInstance(nodeIndex))
|
||||
.setEarliestStart(Double.parseDouble(twTokens[0])).setLatestArrival(Double.parseDouble(twTokens[1])).build();
|
||||
builder.addVehicle(travelingSalesman);
|
||||
}
|
||||
else{
|
||||
Service s = Service.Builder.newInstance("" + nodeIndex).setLocation(Location.newInstance(nodeIndex))
|
||||
.setTimeWindow(TimeWindow.newInstance(Double.parseDouble(twTokens[0]), Double.parseDouble(twTokens[1]))).build();
|
||||
builder.addJob(s);
|
||||
}
|
||||
lineCount++;
|
||||
}
|
||||
}
|
||||
builder.setRoutingCost(matrixBuilder.build());
|
||||
close(reader);
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance();
|
||||
new LopezIbanezBlumReader(builder).read("input/Dumas/n20w20.001.txt");
|
||||
VehicleRoutingProblem vrp = builder.build();
|
||||
System.out.println("0->1: " + vrp.getTransportCosts().getTransportCost(Location.newInstance(0), Location.newInstance(1), 0, null, null));
|
||||
System.out.println("0->20: " + vrp.getTransportCosts().getTransportCost(Location.newInstance(0), Location.newInstance(20),0,null,null));
|
||||
System.out.println("4->18: " + vrp.getTransportCosts().getTransportCost(Location.newInstance(4), Location.newInstance(18),0,null,null));
|
||||
System.out.println("20->8: " + vrp.getTransportCosts().getTransportCost(Location.newInstance(20), Location.newInstance(8),0,null,null));
|
||||
System.out.println("18: " + ((Service)vrp.getJobs().get(""+18)).getTimeWindow().getStart() + " " + ((Service)vrp.getJobs().get(""+18)).getTimeWindow().getEnd());
|
||||
System.out.println("20: " + ((Service)vrp.getJobs().get(""+20)).getTimeWindow().getStart() + " " + ((Service)vrp.getJobs().get(""+20)).getTimeWindow().getEnd());
|
||||
System.out.println("1: " + ((Service)vrp.getJobs().get(""+1)).getTimeWindow().getStart() + " " + ((Service)vrp.getJobs().get(""+1)).getTimeWindow().getEnd());
|
||||
}
|
||||
|
||||
private void close(BufferedReader reader) {
|
||||
try {
|
||||
reader.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
logger.error(e);
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
private String readLine(BufferedReader reader) {
|
||||
try {
|
||||
return reader.readLine();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
logger.error(e);
|
||||
System.exit(1);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private Coordinate makeCoord(String xString, String yString) {
|
||||
double x = Double.parseDouble(xString);
|
||||
double y = Double.parseDouble(yString);
|
||||
return new Coordinate(x,y);
|
||||
}
|
||||
|
||||
private BufferedReader getReader(String solomonFile) {
|
||||
BufferedReader reader = null;
|
||||
try {
|
||||
reader = new BufferedReader(new FileReader(solomonFile));
|
||||
} catch (FileNotFoundException e1) {
|
||||
e1.printStackTrace();
|
||||
logger.error(e1);
|
||||
System.exit(1);
|
||||
}
|
||||
return reader;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue