From f8f063773a4b5af37e9f6ede7f1fb1e944571068 Mon Sep 17 00:00:00 2001 From: oblonski Date: Thu, 12 Feb 2015 20:33:08 +0100 Subject: [PATCH] add factory methods to Location to simplify location building --- .../toolbox/ComputationalLaboratory.java | 60 +++++++++++++++---- .../java/jsprit/core/problem/Location.java | 31 ++++++++++ .../jsprit/core/problem/LocationTest.java | 23 +++++++ 3 files changed, 101 insertions(+), 13 deletions(-) diff --git a/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/ComputationalLaboratory.java b/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/ComputationalLaboratory.java index eb050838..0d3563a2 100644 --- a/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/ComputationalLaboratory.java +++ b/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/ComputationalLaboratory.java @@ -32,7 +32,11 @@ import java.util.concurrent.TimeUnit; public class ComputationalLaboratory { - + + public static interface LabListener { + + } + /** * Listener-interface to listen to calculation. * @@ -42,13 +46,20 @@ public class ComputationalLaboratory { * @author schroeder * */ - public static interface CalculationListener { + public static interface CalculationListener extends LabListener{ public void calculationStarts(final BenchmarkInstance p, final String algorithmName, final VehicleRoutingAlgorithm algorithm, final int run); public void calculationEnds(final BenchmarkInstance p, final String algorithmName, final VehicleRoutingAlgorithm algorithm, final int run, final Collection solutions); } + + public static interface LabStartsAndEndsListener extends LabListener { + + public void labStarts(List instances, int noAlgorithms, int runs); + + public void labEnds(); + } /** * Collects whatever indicators you require by algorithmName, instanceName, run and indicator. @@ -251,6 +262,8 @@ public class ComputationalLaboratory { private int runs = 1; private Collection listeners = new ArrayList(); + + private Collection startsAndEndslisteners = new ArrayList(); private List algorithms = new ArrayList(); @@ -258,7 +271,7 @@ public class ComputationalLaboratory { private Set instanceNames = new HashSet(); - private int threads = Runtime.getRuntime().availableProcessors()+1; + private int threads = 1; public ComputationalLaboratory() { @@ -335,11 +348,16 @@ public class ComputationalLaboratory { /** * Adds listener to listen computational experiments. - * + * * @param listener */ - public void addListener(CalculationListener listener){ - listeners.add(listener); + public void addListener(LabListener listener){ + if(listener instanceof CalculationListener) { + listeners.add((CalculationListener) listener); + } + if(listener instanceof LabStartsAndEndsListener){ + startsAndEndslisteners.add((LabStartsAndEndsListener) listener); + } } /** @@ -372,6 +390,7 @@ public class ComputationalLaboratory { if(benchmarkInstances.isEmpty()){ throw new IllegalStateException("no instance specified. at least one instance needs to be specified."); } + informStart(); System.out.println("start benchmarking [nuAlgorithms="+algorithms.size()+"][nuInstances=" + benchmarkInstances.size() + "][runsPerInstance=" + runs + "]"); double startTime = System.currentTimeMillis(); ExecutorService executor = Executors.newFixedThreadPool(threads); @@ -379,14 +398,16 @@ public class ComputationalLaboratory { for(final BenchmarkInstance p : benchmarkInstances){ for(int run=0;run