diff --git a/src/main/java/org/matsim/accessibillityDrtOptimizer/network_calibration/NetworkCalibrator.java b/src/main/java/org/matsim/accessibillityDrtOptimizer/network_calibration/NetworkCalibrator.java index 8ff4a2e..4b34515 100644 --- a/src/main/java/org/matsim/accessibillityDrtOptimizer/network_calibration/NetworkCalibrator.java +++ b/src/main/java/org/matsim/accessibillityDrtOptimizer/network_calibration/NetworkCalibrator.java @@ -90,21 +90,27 @@ private NetworkCalibrator(Builder builder) { this.departureTime = builder.departureTime; } - public void performCalibration(Path odPairsPath) throws IOException, InterruptedException { - readOdPairs(odPairsPath); + public void performCalibration(Path odPairsPath, int maxOdPairsUsed) throws IOException, InterruptedException { + readOdPairs(odPairsPath, maxOdPairsUsed); adjustNetworkAverageSpeed(); calibrate(); } - void readOdPairs(Path odPairsPath) throws IOException { + void readOdPairs(Path odPairsPath, int maxOdPairsUsed) throws IOException { try (CSVParser parser = CSVFormat.Builder.create(CSVFormat.DEFAULT) .setDelimiter(CsvUtils.detectDelimiter(odPairsPath.toString())) .setHeader().setSkipHeaderRecord(true) .build().parse(Files.newBufferedReader(odPairsPath))) { + + int counter = 0; for (CSVRecord record : parser.getRecords()) { + if (counter > maxOdPairsUsed) { + break; + } String fromNodeIdString = record.get(FROM_NODE); String toNodeIdString = record.get(TO_NODE); odPairs.add(new Tuple<>(Id.createNodeId(fromNodeIdString), Id.createNodeId(toNodeIdString))); + counter++; } } } diff --git a/src/main/java/org/matsim/accessibillityDrtOptimizer/network_calibration/RunNetworkCalibration.java b/src/main/java/org/matsim/accessibillityDrtOptimizer/network_calibration/RunNetworkCalibration.java index a26d765..3e78da8 100644 --- a/src/main/java/org/matsim/accessibillityDrtOptimizer/network_calibration/RunNetworkCalibration.java +++ b/src/main/java/org/matsim/accessibillityDrtOptimizer/network_calibration/RunNetworkCalibration.java @@ -32,6 +32,10 @@ public class RunNetworkCalibration implements MATSimAppCommand { @CommandLine.Option(names = "--od-pairs", description = "Path to OD pair file (can also be the data base)", required = true) private Path odPairsPath; + @CommandLine.Option(names = "--max-od-pairs-used", description = "At most top x of od pairs from the od pair files are" + + " used for calibration", defaultValue = "100000") + private int maxOdPairsUsed; + @CommandLine.Option(names = "--data-base", description = "Path to local data base (csv / tsv file)", required = true) private String dataBase; @@ -62,7 +66,7 @@ public Integer call() throws Exception { NetworkCalibrator calibrator = new NetworkCalibrator.Builder(network, validator) .setIterations(iterations).setCutOff(cutOff).setThreshold(threshold).setDepartureTime(departureTime) .build(); - calibrator.performCalibration(odPairsPath); + calibrator.performCalibration(odPairsPath, maxOdPairsUsed); Map scores = calibrator.getScores(); // write calibrated network and score records