/*******************************************************************************
* Copyright (C) 2014 Stefan Schroeder
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3.0 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
package jsprit.instance.reader;
import jsprit.core.util.VehicleRoutingTransportCostsMatrix;
import java.io.*;
public class TSPLIB95CostMatrixReader {
private VehicleRoutingTransportCostsMatrix.Builder costMatrixBuilder;
public TSPLIB95CostMatrixReader(VehicleRoutingTransportCostsMatrix.Builder costMatrixBuilder) {
this.costMatrixBuilder = costMatrixBuilder;
}
public void read(String matrixFile) {
BufferedReader reader = getBufferedReader(matrixFile);
String line;
boolean isEdgeWeights = false;
int fromIndex = 0;
while ((line = getLine(reader)) != null) {
if (line.startsWith("EDGE_WEIGHT_SECTION")) {
isEdgeWeights = true;
continue;
}
if (line.startsWith("DEMAND_SECTION")) {
isEdgeWeights = false;
continue;
}
if (isEdgeWeights) {
String[] tokens = line.split("\\s+");
String fromId = "" + (fromIndex + 1);
for (int i = 0; i < tokens.length; i++) {
double distance = Double.parseDouble(tokens[i]);
String toId = "" + (i + 1);
costMatrixBuilder.addTransportDistance(fromId, toId, distance);
costMatrixBuilder.addTransportTime(fromId, toId, distance);
}
fromIndex++;
}
}
close(reader);
}
private void close(BufferedReader reader) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private String getLine(BufferedReader reader) {
String s = null;
try {
s = reader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return s;
}
private BufferedReader getBufferedReader(String filename) {
BufferedReader bufferedReader = null;
try {
bufferedReader = new BufferedReader(new FileReader(new File(filename)));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return bufferedReader;
}
}