diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/box/Jsprit.java b/jsprit-core/src/main/java/jsprit/core/algorithm/box/Jsprit.java index 3a13395b..cc4a58fa 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/box/Jsprit.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/box/Jsprit.java @@ -35,6 +35,8 @@ import java.util.concurrent.Executors; public class Jsprit { + private final ActivityInsertionCostsCalculator activityInsertion; + public enum Construction { BEST_INSERTION("best_insertion"), REGRET_INSERTION("regret_insertion"); @@ -132,6 +134,8 @@ public class Jsprit { private Random random = RandomNumberGeneration.newInstance(); + private ActivityInsertionCostsCalculator activityInsertionCalculator; + public static Builder newInstance(VehicleRoutingProblem vrp) { return new Builder(vrp); } @@ -225,6 +229,11 @@ public class Jsprit { return this; } + public Builder setActivityInsertionCalculator(ActivityInsertionCostsCalculator activityInsertionCalculator){ + this.activityInsertionCalculator = activityInsertionCalculator; + return this; + } + public VehicleRoutingAlgorithm buildAlgorithm() { return new Jsprit(this).create(vrp); } @@ -294,6 +303,7 @@ public class Jsprit { this.properties = builder.properties; this.objectiveFunction = builder.objectiveFunction; this.random = builder.random; + this.activityInsertion = builder.activityInsertionCalculator; } private VehicleRoutingAlgorithm create(final VehicleRoutingProblem vrp) { @@ -403,6 +413,7 @@ public class Jsprit { .setConcurrentMode(es, noThreads) .considerFixedCosts(toDouble(getProperty(Parameter.FIXED_COST_PARAM.toString()))) .setAllowVehicleSwitch(toBoolean(getProperty(Parameter.VEHICLE_SWITCH.toString()))) + .setActivityInsertionCostCalculator(activityInsertion) .build(); scorer = getRegretScorer(vrp); regretInsertion.setScoringFunction(scorer); @@ -412,6 +423,7 @@ public class Jsprit { .setInsertionStrategy(InsertionBuilder.Strategy.REGRET) .setAllowVehicleSwitch(toBoolean(getProperty(Parameter.VEHICLE_SWITCH.toString()))) .considerFixedCosts(toDouble(getProperty(Parameter.FIXED_COST_PARAM.toString()))) + .setActivityInsertionCostCalculator(activityInsertion) .build(); scorer = getRegretScorer(vrp); regretInsertion.setScoringFunction(scorer); @@ -425,6 +437,7 @@ public class Jsprit { .setInsertionStrategy(InsertionBuilder.Strategy.BEST) .considerFixedCosts(Double.valueOf(properties.getProperty(Parameter.FIXED_COST_PARAM.toString()))) .setAllowVehicleSwitch(toBoolean(getProperty(Parameter.VEHICLE_SWITCH.toString()))) + .setActivityInsertionCostCalculator(activityInsertion) .build(); best = bestInsertion; } else { @@ -433,6 +446,7 @@ public class Jsprit { .considerFixedCosts(Double.valueOf(properties.getProperty(Parameter.FIXED_COST_PARAM.toString()))) .setAllowVehicleSwitch(toBoolean(getProperty(Parameter.VEHICLE_SWITCH.toString()))) .setConcurrentMode(es, noThreads) + .setActivityInsertionCostCalculator(activityInsertion) .build(); best = bestInsertion; } diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/io/AlgorithmConfigXmlReader.java b/jsprit-core/src/main/java/jsprit/core/algorithm/io/AlgorithmConfigXmlReader.java index cebd43a7..47c536df 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/io/AlgorithmConfigXmlReader.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/io/AlgorithmConfigXmlReader.java @@ -77,9 +77,7 @@ public class AlgorithmConfigXmlReader { try { algorithmConfig.getXMLConfiguration().load(); } catch (ConfigurationException e) { - log.error(e); - e.printStackTrace(); - System.exit(1); + throw new RuntimeException(e); } } diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/io/VehicleRoutingAlgorithms.java b/jsprit-core/src/main/java/jsprit/core/algorithm/io/VehicleRoutingAlgorithms.java index d96b75c5..f0ea52a3 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/io/VehicleRoutingAlgorithms.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/io/VehicleRoutingAlgorithms.java @@ -519,7 +519,6 @@ public class VehicleRoutingAlgorithms { @Override public void uncaughtException(Thread arg0, Throwable arg1) { System.err.println(arg1.toString()); - System.exit(0); } }); Runtime.getRuntime().addShutdownHook(new Thread() { diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/BestInsertionConcurrent.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/BestInsertionConcurrent.java index fa9210d7..de43da1b 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/BestInsertionConcurrent.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/BestInsertionConcurrent.java @@ -130,9 +130,7 @@ public final class BestInsertionConcurrent extends AbstractInsertionStrategy { } catch (InterruptedException e) { Thread.currentThread().interrupt(); } catch (ExecutionException e) { - e.printStackTrace(); - logger.error("Exception", e); - System.exit(1); + throw new RuntimeException(e); } VehicleRoute newRoute = VehicleRoute.emptyRoute(); InsertionData newIData = bestInsertionCostCalculator.getInsertionData(newRoute, unassignedJob, NO_NEW_VEHICLE_YET, NO_NEW_DEPARTURE_TIME_YET, NO_NEW_DRIVER_YET, bestInsertionCost); diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/RegretInsertion.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/RegretInsertion.java index 51f06db0..2be97a88 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/RegretInsertion.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/RegretInsertion.java @@ -259,6 +259,11 @@ public class RegretInsertion extends AbstractInsertionStrategy { if(scoredJob.getScore() > bestScoredJob.getScore()){ bestScoredJob = scoredJob; } + else if (scoredJob.getScore() == bestScoredJob.getScore()){ + if(scoredJob.getJob().getId().compareTo(bestScoredJob.getJob().getId()) <= 0){ + bestScoredJob = scoredJob; + } + } } } return bestScoredJob; diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/RegretInsertionConcurrent.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/RegretInsertionConcurrent.java index 8e922728..c599226c 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/RegretInsertionConcurrent.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/RegretInsertionConcurrent.java @@ -136,6 +136,11 @@ public class RegretInsertionConcurrent extends AbstractInsertionStrategy { } else if (sJob.getScore() > bestScoredJob.getScore()) { bestScoredJob = sJob; } + else if (sJob.getScore() == bestScoredJob.getScore()){ + if(sJob.getJob().getId().compareTo(bestScoredJob.getJob().getId()) <= 0){ + bestScoredJob = sJob; + } + } } } catch (InterruptedException e) { Thread.currentThread().interrupt(); diff --git a/jsprit-core/src/main/java/jsprit/core/problem/Skills.java b/jsprit-core/src/main/java/jsprit/core/problem/Skills.java index 6905ba9f..ba5d255f 100644 --- a/jsprit-core/src/main/java/jsprit/core/problem/Skills.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/Skills.java @@ -47,7 +47,7 @@ public class Skills { * @return builder */ public Builder addSkill(String skill) { - skills.add(skill.toLowerCase()); + skills.add(skill.trim().toLowerCase()); return this; } diff --git a/jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLReader.java b/jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLReader.java index d1e9dc43..89104e09 100644 --- a/jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLReader.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLReader.java @@ -163,9 +163,7 @@ public class VrpXMLReader { try { xmlConfig.load(); } catch (ConfigurationException e) { - logger.error("Exception:", e); - e.printStackTrace(); - System.exit(1); + throw new RuntimeException(e); } readProblemType(xmlConfig); readVehiclesAndTheirTypes(xmlConfig); diff --git a/jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLWriter.java b/jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLWriter.java index d6a99a19..f06aa2a1 100644 --- a/jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLWriter.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLWriter.java @@ -117,9 +117,7 @@ public class VrpXMLWriter { element.setAttribute("xsi:schemaLocation", "http://www.w3schools.com vrp_xml_schema.xsd"); } catch (ConfigurationException e) { - logger.error("Exception:", e); - e.printStackTrace(); - System.exit(1); + throw new RuntimeException(e); } try { @@ -128,9 +126,7 @@ public class VrpXMLWriter { serializer.serialize(xmlConfig.getDocument()); out.close(); } catch (IOException e) { - logger.error("Exception:", e); - e.printStackTrace(); - System.exit(1); + throw new RuntimeException(e); } diff --git a/jsprit-core/src/main/java/jsprit/core/problem/vehicle/VehicleImpl.java b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/VehicleImpl.java index 3172faac..578800e1 100644 --- a/jsprit-core/src/main/java/jsprit/core/problem/vehicle/VehicleImpl.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/VehicleImpl.java @@ -187,6 +187,7 @@ public class VehicleImpl extends AbstractVehicle { * @return this builder */ public Builder setEarliestStart(double earliest_startTime) { + if(earliest_startTime < 0) throw new IllegalArgumentException("earliest start of vehicle " + id + " must not be negative"); this.earliestStart = earliest_startTime; return this; } @@ -198,6 +199,7 @@ public class VehicleImpl extends AbstractVehicle { * @return this builder */ public Builder setLatestArrival(double latest_arrTime) { + if(latest_arrTime < 0) throw new IllegalArgumentException("latest arrival time of vehicle " + id + " must not be negative"); this.latestArrival = latest_arrTime; return this; } @@ -224,6 +226,7 @@ public class VehicleImpl extends AbstractVehicle { * or (endLocationId!=null AND returnToDepot=false) */ public VehicleImpl build() { + if(latestArrival < earliestStart) throw new IllegalStateException("latest arrival of vehicle " + id + " must not be smaller than its start time"); if (startLocation != null && endLocation != null) { if (!startLocation.getId().equals(endLocation.getId()) && !returnToDepot) throw new IllegalStateException("this must not be. you specified both endLocationId and open-routes. this is contradictory.
" + diff --git a/jsprit-core/src/test/java/jsprit/core/algorithm/box/JspritTest.java b/jsprit-core/src/test/java/jsprit/core/algorithm/box/JspritTest.java index 6dd1fafd..3dbf420b 100644 --- a/jsprit-core/src/test/java/jsprit/core/algorithm/box/JspritTest.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/box/JspritTest.java @@ -3,6 +3,8 @@ package jsprit.core.algorithm.box; import jsprit.core.algorithm.SearchStrategy; import jsprit.core.algorithm.VehicleRoutingAlgorithm; import jsprit.core.algorithm.listener.StrategySelectedListener; +import jsprit.core.algorithm.recreate.InsertionData; +import jsprit.core.algorithm.recreate.listener.BeforeJobInsertionListener; import jsprit.core.algorithm.recreate.listener.JobInsertedListener; import jsprit.core.algorithm.ruin.listener.RuinListener; import jsprit.core.problem.Location; @@ -185,6 +187,51 @@ public class JspritTest { } + @Test + public void strategyDrawShouldBeReproducibleV2() { + Service s = Service.Builder.newInstance("s1").setLocation(Location.newInstance(1, 1)).build(); + Service s2 = Service.Builder.newInstance("s2").setLocation(Location.newInstance(1, 2)).build(); + Service s3 = Service.Builder.newInstance("s3").setLocation(Location.newInstance(1, 2)).build(); + Service s4 = Service.Builder.newInstance("s4").setLocation(Location.newInstance(1, 2)).build(); + + VehicleImpl v = VehicleImpl.Builder.newInstance("v").setStartLocation(Location.newInstance(0, 0)).build(); + VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addJob(s4).addJob(s3).addVehicle(v).addJob(s2).addJob(s).build(); + VehicleRoutingAlgorithm vra = Jsprit.Builder.newInstance(vrp).setProperty(Jsprit.Parameter.THREADS,"4").buildAlgorithm(); + vra.setMaxIterations(100); + final List firstRecord = new ArrayList(); + vra.addListener(new StrategySelectedListener() { + + @Override + public void informSelectedStrategy(SearchStrategy.DiscoveredSolution discoveredSolution, VehicleRoutingProblem vehicleRoutingProblem, Collection vehicleRoutingProblemSolutions) { + firstRecord.add(discoveredSolution.getStrategyId()); + } + + }); + vra.searchSolutions(); + + RandomNumberGeneration.reset(); + VehicleRoutingAlgorithm second = Jsprit.Builder.newInstance(vrp).setProperty(Jsprit.Parameter.THREADS,"2").buildAlgorithm(); + second.setMaxIterations(100); + final List secondRecord = new ArrayList(); + second.addListener(new StrategySelectedListener() { + + @Override + public void informSelectedStrategy(SearchStrategy.DiscoveredSolution discoveredSolution, VehicleRoutingProblem vehicleRoutingProblem, Collection vehicleRoutingProblemSolutions) { + secondRecord.add(discoveredSolution.getStrategyId()); + } + + }); + second.searchSolutions(); + + for (int i = 0; i < 100; i++) { + if (!firstRecord.get(i).equals(secondRecord.get(i))) { + org.junit.Assert.assertFalse(true); + } + } + org.junit.Assert.assertTrue(true); + + } + @Test public void ruinedJobsShouldBeReproducible() { Service s = Service.Builder.newInstance("s1").setLocation(Location.newInstance(1, 1)).build(); @@ -192,6 +239,72 @@ public class JspritTest { Service s3 = Service.Builder.newInstance("s3").setLocation(Location.newInstance(1, 2)).build(); Service s4 = Service.Builder.newInstance("s4").setLocation(Location.newInstance(1, 2)).build(); + VehicleImpl v = VehicleImpl.Builder.newInstance("v").setStartLocation(Location.newInstance(0, 0)).build(); + VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addJob(s4).addJob(s3).addVehicle(v).addJob(s2).addJob(s).build(); + VehicleRoutingAlgorithm vra = Jsprit.Builder.newInstance(vrp) + .setProperty(Jsprit.Strategy.WORST_REGRET,"0.") + .setProperty(Jsprit.Strategy.WORST_BEST, "0.") + .setProperty(Jsprit.Parameter.THREADS, "2").buildAlgorithm(); + vra.setMaxIterations(100); + final List firstRecord = new ArrayList(); + vra.addListener(new RuinListener() { + @Override + public void ruinStarts(Collection routes) { + + } + + @Override + public void ruinEnds(Collection routes, Collection unassignedJobs) { + + } + + @Override + public void removed(Job job, VehicleRoute fromRoute) { + firstRecord.add(job.getId()); + } + }); + vra.searchSolutions(); + + VehicleRoutingAlgorithm second = Jsprit.Builder.newInstance(vrp).setProperty(Jsprit.Parameter.THREADS, "4") + .setProperty(Jsprit.Strategy.WORST_REGRET, "0.") + .setProperty(Jsprit.Strategy.WORST_BEST, "0.") + .buildAlgorithm(); + second.setMaxIterations(100); + final List secondRecord = new ArrayList(); + second.addListener(new RuinListener() { + @Override + public void ruinStarts(Collection routes) { + + } + + @Override + public void ruinEnds(Collection routes, Collection unassignedJobs) { + + } + + @Override + public void removed(Job job, VehicleRoute fromRoute) { + secondRecord.add(job.getId()); + } + }); + second.searchSolutions(); + + Assert.assertEquals(secondRecord.size(), firstRecord.size()); + for (int i = 0; i < firstRecord.size(); i++) { + if (!firstRecord.get(i).equals(secondRecord.get(i))) { + Assert.assertFalse(true); + } + } + Assert.assertTrue(true); + } + + @Test + public void ruinedJobsShouldBeReproducibleV2() { + Service s = Service.Builder.newInstance("s1").setLocation(Location.newInstance(1, 1)).build(); + Service s2 = Service.Builder.newInstance("s2").setLocation(Location.newInstance(1, 2)).build(); + Service s3 = Service.Builder.newInstance("s3").setLocation(Location.newInstance(1, 2)).build(); + Service s4 = Service.Builder.newInstance("s4").setLocation(Location.newInstance(1, 2)).build(); + VehicleImpl v = VehicleImpl.Builder.newInstance("v").setStartLocation(Location.newInstance(0, 0)).build(); VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addJob(s4).addJob(s3).addVehicle(v).addJob(s2).addJob(s).build(); VehicleRoutingAlgorithm vra = Jsprit.createAlgorithm(vrp); @@ -286,5 +399,73 @@ public class JspritTest { Assert.assertTrue(true); } + @Test + public void insertionShouldBeReproducibleV2() { + Service s = Service.Builder.newInstance("s1").setLocation(Location.newInstance(1, 1)).build(); + Service s2 = Service.Builder.newInstance("s2").setLocation(Location.newInstance(1, 1)).build(); + Service s3 = Service.Builder.newInstance("s3").setLocation(Location.newInstance(1, 3)).build(); + Service s4 = Service.Builder.newInstance("s4").setLocation(Location.newInstance(1, 4)).build(); + + VehicleImpl v = VehicleImpl.Builder.newInstance("v").setStartLocation(Location.newInstance(0, 0)).build(); + VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().setFleetSize(VehicleRoutingProblem.FleetSize.FINITE).addJob(s4).addJob(s3).addVehicle(v).addJob(s2).addJob(s).build(); + + VehicleRoutingAlgorithm vra = Jsprit.Builder.newInstance(vrp) + .setProperty(Jsprit.Strategy.WORST_REGRET,"0.") + .setProperty(Jsprit.Strategy.WORST_BEST, "0.") + .setProperty(Jsprit.Parameter.THREADS, "4").buildAlgorithm(); + vra.setMaxIterations(100); + final List firstRecord = new ArrayList(); + final List firstRecordCosts = new ArrayList(); + vra.addListener(new BeforeJobInsertionListener() { + @Override + public void informBeforeJobInsertion(Job job, InsertionData data, VehicleRoute route) { + String id = job.getId(); + firstRecordCosts.add(data.getInsertionCost()); + firstRecord.add(id); + } + }); + vra.searchSolutions(); + + VehicleRoutingAlgorithm second = Jsprit.Builder.newInstance(vrp) + .setProperty(Jsprit.Strategy.WORST_REGRET,"0.") + .setProperty(Jsprit.Strategy.WORST_BEST, "0.") + .setProperty(Jsprit.Parameter.THREADS, "5").buildAlgorithm(); + second.setMaxIterations(100); + final List secondRecord = new ArrayList(); + final List secondRecordCosts = new ArrayList(); + second.addListener(new BeforeJobInsertionListener() { + @Override + public void informBeforeJobInsertion(Job job, InsertionData data, VehicleRoute route) { + secondRecord.add(job.getId()); + secondRecordCosts.add(data.getInsertionCost()); + } + }); + second.searchSolutions(); + +// for(int i=0;i skillSet = new HashSet(); + skillSet.add(" skill1"); + skillSet.add("Skill2"); + Skills skills = Skills.Builder.newInstance().addAllSkills(skillSet).build(); + assertTrue(skills.containsSkill("skill1")); + assertTrue(skills.containsSkill("skill2")); + } + + @Test + public void whenSkillsAddedTrailingWhitespaceShouldNotMatter() { + Set skillSet = new HashSet(); + skillSet.add("skill1 "); + skillSet.add("Skill2"); + Skills skills = Skills.Builder.newInstance().addAllSkills(skillSet).build(); + assertTrue(skills.containsSkill("skill1")); + assertTrue(skills.containsSkill("skill2")); + } + + @Test + public void whenSkillsAddedTrailingWhitespaceShouldNotMatter2() { + Skills skills = Skills.Builder.newInstance().addSkill("skill1 ").build(); + assertTrue(skills.containsSkill("skill1")); + } + } diff --git a/jsprit-instances/src/main/java/jsprit/instance/reader/ChristofidesReader.java b/jsprit-instances/src/main/java/jsprit/instance/reader/ChristofidesReader.java index a46795d0..f532f14e 100644 --- a/jsprit-instances/src/main/java/jsprit/instance/reader/ChristofidesReader.java +++ b/jsprit-instances/src/main/java/jsprit/instance/reader/ChristofidesReader.java @@ -107,9 +107,7 @@ public class ChristofidesReader { try { reader.close(); } catch (IOException e) { - e.printStackTrace(); - logger.error("Exception:", e); - System.exit(1); + throw new RuntimeException(e); } } @@ -117,10 +115,7 @@ public class ChristofidesReader { try { return reader.readLine(); } catch (IOException e) { - e.printStackTrace(); - logger.error("Exception:", e); - System.exit(1); - return null; + throw new RuntimeException(e); } } @@ -135,9 +130,7 @@ public class ChristofidesReader { try { reader = new BufferedReader(new FileReader(solomonFile)); } catch (FileNotFoundException e1) { - e1.printStackTrace(); - logger.error("Exception:", e1); - System.exit(1); + throw new RuntimeException(e1); } return reader; } diff --git a/jsprit-instances/src/main/java/jsprit/instance/reader/CordeauReader.java b/jsprit-instances/src/main/java/jsprit/instance/reader/CordeauReader.java index 95943ca9..2b5fd9ad 100644 --- a/jsprit-instances/src/main/java/jsprit/instance/reader/CordeauReader.java +++ b/jsprit-instances/src/main/java/jsprit/instance/reader/CordeauReader.java @@ -136,9 +136,7 @@ public class CordeauReader { try { reader.close(); } catch (IOException e) { - e.printStackTrace(); - logger.error("Exception:", e); - System.exit(1); + throw new RuntimeException(e); } } @@ -146,10 +144,7 @@ public class CordeauReader { try { return reader.readLine(); } catch (IOException e) { - e.printStackTrace(); - logger.error("Exception:", e); - System.exit(1); - return null; + throw new RuntimeException(e); } } @@ -164,9 +159,7 @@ public class CordeauReader { try { reader = new BufferedReader(new FileReader(solomonFile)); } catch (FileNotFoundException e1) { - e1.printStackTrace(); - logger.error("Exception:", e1); - System.exit(1); + throw new RuntimeException(e1); } return reader; } diff --git a/jsprit-instances/src/main/java/jsprit/instance/reader/LiLimReader.java b/jsprit-instances/src/main/java/jsprit/instance/reader/LiLimReader.java index aae46cee..092c5dfd 100644 --- a/jsprit-instances/src/main/java/jsprit/instance/reader/LiLimReader.java +++ b/jsprit-instances/src/main/java/jsprit/instance/reader/LiLimReader.java @@ -142,9 +142,7 @@ public class LiLimReader { try { reader = new BufferedReader(new FileReader(file)); } catch (FileNotFoundException e1) { - e1.printStackTrace(); - logger.error("Exception:", e1); - System.exit(1); + throw new RuntimeException(e1); } return reader; } diff --git a/jsprit-instances/src/main/java/jsprit/instance/reader/LopezIbanezBlumReader.java b/jsprit-instances/src/main/java/jsprit/instance/reader/LopezIbanezBlumReader.java index f0ac80f9..e84a1034 100644 --- a/jsprit-instances/src/main/java/jsprit/instance/reader/LopezIbanezBlumReader.java +++ b/jsprit-instances/src/main/java/jsprit/instance/reader/LopezIbanezBlumReader.java @@ -86,9 +86,7 @@ public class LopezIbanezBlumReader { try { reader.close(); } catch (IOException e) { - e.printStackTrace(); - logger.error("Exception:", e); - System.exit(1); + throw new RuntimeException(e); } } @@ -96,10 +94,7 @@ public class LopezIbanezBlumReader { try { return reader.readLine(); } catch (IOException e) { - e.printStackTrace(); - logger.error("Exception:", e); - System.exit(1); - return null; + throw new RuntimeException(e); } } @@ -108,9 +103,7 @@ public class LopezIbanezBlumReader { try { reader = new BufferedReader(new FileReader(solomonFile)); } catch (FileNotFoundException e1) { - e1.printStackTrace(); - logger.error("Exception:", e1); - System.exit(1); + throw new RuntimeException(e1); } return reader; } diff --git a/jsprit-instances/src/main/java/jsprit/instance/reader/LuiShenReader.java b/jsprit-instances/src/main/java/jsprit/instance/reader/LuiShenReader.java index 90856af6..a22526d7 100644 --- a/jsprit-instances/src/main/java/jsprit/instance/reader/LuiShenReader.java +++ b/jsprit-instances/src/main/java/jsprit/instance/reader/LuiShenReader.java @@ -149,9 +149,7 @@ public class LuiShenReader { try { reader.close(); } catch (IOException e) { - e.printStackTrace(); - logger.error("Exception:", e); - System.exit(1); + throw new RuntimeException(e); } } @@ -159,10 +157,7 @@ public class LuiShenReader { try { return reader.readLine(); } catch (IOException e) { - e.printStackTrace(); - logger.error("Exception:", e); - System.exit(1); - return null; + throw new RuntimeException(e); } } @@ -177,9 +172,7 @@ public class LuiShenReader { try { reader = new BufferedReader(new FileReader(solomonFile)); } catch (FileNotFoundException e1) { - e1.printStackTrace(); - logger.error("Exception:", e1); - System.exit(1); + throw new RuntimeException(e1); } return reader; } diff --git a/jsprit-instances/src/main/java/jsprit/instance/reader/SolomonReader.java b/jsprit-instances/src/main/java/jsprit/instance/reader/SolomonReader.java index 74154788..07cf7140 100644 --- a/jsprit-instances/src/main/java/jsprit/instance/reader/SolomonReader.java +++ b/jsprit-instances/src/main/java/jsprit/instance/reader/SolomonReader.java @@ -127,9 +127,7 @@ public class SolomonReader { try { reader.close(); } catch (IOException e) { - e.printStackTrace(); - logger.error("Exception:", e); - System.exit(1); + throw new RuntimeException(e); } } @@ -137,10 +135,7 @@ public class SolomonReader { try { return reader.readLine(); } catch (IOException e) { - e.printStackTrace(); - logger.error("Exception:", e); - System.exit(1); - return null; + throw new RuntimeException(e); } } @@ -155,9 +150,7 @@ public class SolomonReader { try { reader = new BufferedReader(new FileReader(solomonFile)); } catch (FileNotFoundException e1) { - e1.printStackTrace(); - logger.error("Exception:", e1); - System.exit(1); + throw new RuntimeException(e1); } return reader; } diff --git a/jsprit-instances/src/main/java/jsprit/instance/reader/VrphGoldenReader.java b/jsprit-instances/src/main/java/jsprit/instance/reader/VrphGoldenReader.java index 829da23a..707de375 100644 --- a/jsprit-instances/src/main/java/jsprit/instance/reader/VrphGoldenReader.java +++ b/jsprit-instances/src/main/java/jsprit/instance/reader/VrphGoldenReader.java @@ -138,8 +138,7 @@ public class VrphGoldenReader { try { reader.close(); } catch (IOException e) { - e.printStackTrace(); - System.exit(1); + throw new RuntimeException(e); } } @@ -148,8 +147,7 @@ public class VrphGoldenReader { try { readLine = reader.readLine(); } catch (IOException e) { - e.printStackTrace(); - System.exit(1); + throw new RuntimeException(e); } return readLine; } @@ -160,10 +158,8 @@ public class VrphGoldenReader { bufferedReader = new BufferedReader(new FileReader(new File(filename))); return bufferedReader; } catch (FileNotFoundException e) { - e.printStackTrace(); - System.exit(1); + throw new RuntimeException(e); } - return bufferedReader; } public static void main(String[] args) {