Skip to content
Snippets Groups Projects
Commit b64e3b84 authored by User expired's avatar User expired
Browse files

introducing AlgorithmConfiguration class

 -> used for caching (speeds up ComparisonTests)
parent 0c6e342f
No related branches found
No related tags found
No related merge requests found
package it.unibz.inf.isochrone.network;
import it.unibz.inf.isochrone.algorithm.Isochrone;
public class AlgorithmConfiguration {
private final Class<? extends Isochrone> algorithmClass;
private final TestParameters params;
private final boolean expireNodes;
public AlgorithmConfiguration(final Class<? extends Isochrone> algorithmClass, final TestParameters params, final boolean expireNodes) {
this.algorithmClass = algorithmClass;
this.params = params;
this.expireNodes = expireNodes;
}
public AlgorithmConfiguration(final Class<? extends Isochrone> algorithmClass, final TestParameters params) {
this(algorithmClass, params, true);
}
// Getters
public Class<? extends Isochrone> getAlgorithmClass() {
return algorithmClass;
}
public TestParameters getTestParameter() {
return params;
}
public boolean isExpireNodes() {
return expireNodes;
}
// Public methods
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
// CHECKSTYLE:OFF MagicNumber
result = prime * result + ((algorithmClass == null) ? 0 : algorithmClass.hashCode());
result = prime * result + (expireNodes ? 1231 : 1237);
result = prime * result + ((params == null) ? 0 : params.hashCode());
// CHECKSTYLE:ON MagicNumber
return result;
}
@Override
public boolean equals(final Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final AlgorithmConfiguration other = (AlgorithmConfiguration) obj;
if (algorithmClass == null) {
if (other.algorithmClass != null) {
return false;
}
} else if (!algorithmClass.equals(other.algorithmClass)) {
return false;
}
if (expireNodes != other.expireNodes) {
return false;
}
if (params == null) {
if (other.params != null) {
return false;
}
} else if (!params.equals(other.params)) {
return false;
}
return true;
}
@Override
public String toString() {
return "CachingKey [class=" + algorithmClass.getSimpleName() + ", duration=" + params.getDuration() + ", expireNodes=" + expireNodes + "]";
}
}
......@@ -49,22 +49,19 @@ final class AlgorithmHelper {
return i1;
}
public static AlgorithmResult run(final Class<? extends Isochrone> algorithmClass, final TestParameters params) {
return run(algorithmClass, params, true);
}
public static AlgorithmResult run(final Class<? extends Isochrone> algorithmClass, final TestParameters params, final boolean expireNodes) {
public static AlgorithmResult run(final AlgorithmConfiguration config) {
final TestParameters params = config.getTestParameter();
final ConfigDataset c = ConfigDataset.getInstance(params.getDataset());
if (c == null) {
Assert.fail("Could not create dataset from configuration");
}
final Query query = new Query(params.getDirection(), params.getWalkingSpeed(), params.getDuration(), params.getDate(), expireNodes, params.getMode());
final Query query = new Query(params.getDirection(), params.getWalkingSpeed(), params.getDuration(), params.getDate(), config.isExpireNodes(), params.getMode());
query.setStartNodeIds(params.getStartNodeId());
Isochrone algorithm = null;
try {
algorithm = algorithmClass.getConstructor(ConfigDataset.class, Query.class).newInstance(c, query);
algorithm = config.getAlgorithmClass().getConstructor(ConfigDataset.class, Query.class).newInstance(c, query);
} catch (final InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) {
Assert.fail(e.getMessage());
}
......
......@@ -203,7 +203,7 @@ public final class AlgorithmRuntimeTest {
for (final TestParameters params : dsParams) {
LOGGER.debug(" - executing for isochrone duration: " + params.getDuration());
final long startTime = Calendar.getInstance().getTimeInMillis();
AlgorithmHelper.run(clazz, params);
AlgorithmHelper.run(new AlgorithmConfiguration(clazz, params));
final long runTime = Calendar.getInstance().getTimeInMillis() - startTime;
LOGGER.debug(" - runtime \"" + params.getDuration() + "\": " + runTime + "msec");
......
......@@ -92,7 +92,7 @@ public class AlgorithmTest {
private static void run(final Class<? extends Isochrone> algorithmClass, final TestParameters params, final boolean expireNodes) {
LOGGER.info("Executing \"" + algorithmClass.getSimpleName() + "\"" + ((expireNodes) ? " (with node expiration)" : ""));
final long startTime = Calendar.getInstance().getTimeInMillis();
AlgorithmHelper.run(algorithmClass, params, expireNodes);
AlgorithmHelper.run(new AlgorithmConfiguration(algorithmClass, params, expireNodes));
final long runTime = Calendar.getInstance().getTimeInMillis() - startTime;
LOGGER.info(" - runtime: \"" + params.getDuration() + "\": " + runTime + "msec");
LOGGER.info("-----------------------------");
......
......@@ -42,6 +42,7 @@ public final class ComparisonTest {
2, // every 2 hours
1 // every day
};
private static Map<AlgorithmConfiguration, Collection<Integer>> cache = new HashMap<>();
private static Map<String, List<TestParameters>> datasets = new HashMap<>();
private static Map<String, InitParams> datasetParams;
private static Set<Integer> times;
......@@ -118,6 +119,18 @@ public final class ComparisonTest {
datasets.put(datasetName, dsParams);
}
private static Collection<Integer> getResult(final AlgorithmConfiguration key) {
Collection<Integer> result = cache.get(key);
if (result == null) {
final MemoryOutput o1 = AlgorithmHelper.run(key).getOutput();
result = AlgorithmHelper.getDistinctIds(o1.getLinks());
cache.put(key, result);
}
return result;
}
private static synchronized void initDatasets() {
if (datasetParams != null) {
return;
......@@ -171,11 +184,9 @@ public final class ComparisonTest {
final Collection<TestParameters> dsParams = datasets.get(dsName);
for (final TestParameters params : dsParams) {
LOGGER.debug(" - comparing for isochrone duration: " + params.getDuration());
final MemoryOutput o1 = AlgorithmHelper.run(clazz1, params, expireNodes).getOutput();
final MemoryOutput o2 = AlgorithmHelper.run(clazz2, params, expireNodes).getOutput();
final Collection<Integer> l1 = AlgorithmHelper.getDistinctIds(o1.getLinks());
final Collection<Integer> l2 = AlgorithmHelper.getDistinctIds(o2.getLinks());
Assert.assertEquals(l1, l2, "Links for class \"" + n1 + "\"" + " != links for class \"" + n2 + "\"");
final Collection<Integer> l1 = getResult(new AlgorithmConfiguration(clazz1, params, expireNodes));
final Collection<Integer> l2 = getResult(new AlgorithmConfiguration(clazz2, params, expireNodes));
Assert.assertEquals(l1, l2, "Links from algorithm \"" + n1 + "\"" + " are not equal to links from algorithm \"" + n2 + "\"");
}
LOGGER.info("-----------------------------");
}
......
......@@ -59,7 +59,7 @@ public class ExpirationTest {
private static int run(final Class<? extends Isochrone> algorithmClass, final boolean expireNodes) {
LOGGER.info("Executing \"" + algorithmClass.getSimpleName() + "\"" + ((expireNodes) ? " (with node expiration)" : ""));
final long startTime = Calendar.getInstance().getTimeInMillis();
final AlgorithmResult result = AlgorithmHelper.run(algorithmClass, TEST_PARAMETER, expireNodes);
final AlgorithmResult result = AlgorithmHelper.run(new AlgorithmConfiguration(algorithmClass, TEST_PARAMETER, expireNodes));
final long runTime = Calendar.getInstance().getTimeInMillis() - startTime;
final int nrNodesMemory = result.getAlgorithm().getNodes().size();
......
......@@ -46,7 +46,7 @@ public class ReachabilityTest {
final int nodeIdToCheck = 5117; // bus station id = 5117; Defregger Str./Fagenstraße (reachable by bus route 1)
LOGGER.info("Checking nodes from FUB (15min isncoming isochrone)");
final AlgorithmResult result = AlgorithmHelper.run(MineX.class, PARAM_LOCAL, true);
final AlgorithmResult result = AlgorithmHelper.run(new AlgorithmConfiguration(MineX.class, PARAM_LOCAL, true));
final Collection<Node> resultNodes = result.getOutput().getNodes();
LOGGER.info(" - found " + resultNodes.size() + " reachable nodes");
......@@ -66,7 +66,7 @@ public class ReachabilityTest {
final int nodeIdToCheck = 5117; // bus station id = 5117; Defregger Str./Fagenstraße (reachable by bus route 1)
LOGGER.info("Checking nodes from FUB (15min isncoming isochrone)");
final AlgorithmResult result = AlgorithmHelper.run(MineX.class, PARAM_LOCAL, true);
final AlgorithmResult result = AlgorithmHelper.run(new AlgorithmConfiguration(MineX.class, PARAM_LOCAL, true));
final Collection<Link> resultLinks = result.getOutput().getLinks();
LOGGER.info(" - found " + resultLinks.size() + " links");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment