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