From 329ac27dfa84e9a07760bea75b36476dddcf29a7 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Tue, 14 Jul 2020 10:45:03 +0200 Subject: Optimizations --- ...nterpretation2NeighbourhoodRepresentation.xtend | 63 +++++++++++----------- 1 file changed, 31 insertions(+), 32 deletions(-) (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2NeighbourhoodRepresentation.xtend') diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2NeighbourhoodRepresentation.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2NeighbourhoodRepresentation.xtend index 3048167e..93eab816 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2NeighbourhoodRepresentation.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2NeighbourhoodRepresentation.xtend @@ -8,11 +8,11 @@ import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.par import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialPrimitiveInterpretation import java.util.ArrayList -import java.util.HashMap -import java.util.HashSet import java.util.List import java.util.Map import java.util.Set +import org.eclipse.collections.api.factory.Maps +import org.eclipse.collections.impl.factory.Sets import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* @@ -68,10 +68,11 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation relevantTypes, Set relevantRelations, DefinedElement focusedElement) { - val Map> types = new HashMap + val initialSize = model.elements.size + val Map> types = Maps.mutable.ofInitialCapacity(initialSize) fillTypes(model, types, relevantTypes) - val Map>> IncomingRelations = new HashMap; - val Map>> OutgoingRelations = new HashMap; + val Map>> IncomingRelations = Maps.mutable.ofInitialCapacity(initialSize); + val Map>> OutgoingRelations = Maps.mutable.ofInitialCapacity(initialSize); fillReferences(model, IncomingRelations, OutgoingRelations, relevantRelations) val res = doRecursiveNeighbourCalculation(model, types, IncomingRelations, OutgoingRelations, range, parallels, @@ -103,12 +104,12 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation>> IncomingRelations, Map>> OutgoingRelations) { val elements = types.keySet - var Map> reachable = new HashMap - var Map> newReachable = new HashMap + var Map> reachable = Maps.mutable.ofInitialCapacity(elements.size) + var Map> newReachable = Maps.mutable.ofInitialCapacity(elements.size) for (element : elements) { - val set = new HashSet + val set = Sets.mutable.of set.add(element) - reachable.put(element, new HashSet) + reachable.put(element, Sets.mutable.of) newReachable.put(element, set) } @@ -201,8 +202,8 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation previousNumberOfTypes lastRange = nextRange @@ -224,7 +225,7 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation> node2Type, Set relevantTypes) { for (element : model.elements) { - node2Type.put(element, new HashSet) + node2Type.put(element, Sets.mutable.of) } // for(typeDefinition : model.problem.types.filter(TypeDefinition)) { @@ -286,7 +287,11 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation max) return Integer.MAX_VALUE else return original + 1 } @@ -294,15 +299,11 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation>> IncomingRelations, DefinedElement object, Map previousNodeRepresentations, int parallel) { - val Map, Integer> res = new HashMap + val Map, Integer> res = Maps.mutable.of for (incomingConcreteEdge : IncomingRelations.get(object)) { val IncomingRelation e = new IncomingRelation( previousNodeRepresentations.get(incomingConcreteEdge.from), incomingConcreteEdge.type) - if (res.containsKey(e)) { - res.put(e, addOne(res.get(e), parallel)) - } else { - res.put(e, 1) - } + res.compute(e, [key, value | addOne(value, parallel)]) } return res } @@ -310,17 +311,13 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation>> OutgoingRelations, DefinedElement object, Map previousNodeRepresentations, int parallel) { - val Map, Integer> res = new HashMap + val Map, Integer> res = Maps.mutable.of for (outgoingConcreteEdge : OutgoingRelations.get(object)) { val OutgoingRelation e = new OutgoingRelation( previousNodeRepresentations.get(outgoingConcreteEdge.to), outgoingConcreteEdge.type) - if (res.containsKey(e)) { - res.put(e, addOne(res.get(e), parallel)) - } else { - res.put(e, 1) - } + res.compute(e, [key, value | addOne(value, parallel)]) } - return res; + return res } /*def private void addOrCreate_Set(Map> map, KEY key, VALUE value) { @@ -338,16 +335,17 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation>> IncomingRelations, Map>> OutgoingRelations, int parallels, int maxNumber) { val previousNodeRepresentations = previous.nodeRepresentations - val node2Representation = new HashMap> + val size = previousNodeRepresentations.size + val node2Representation = Maps.mutable.>ofInitialCapacity(size) val Map, Integer> descriptor2Number = if (this. mergeSimilarNeighbourhood) { - new HashMap + Maps.mutable.ofInitialCapacity(size) } else { null } val Map, FurtherNodeDescriptor> uniqueDescription = if (this. mergeSimilarNeighbourhood) { - new HashMap + Maps.mutable.ofInitialCapacity(size) } else { null } @@ -392,14 +390,15 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation> types, int maxNumber, DefinedElement focusedElement) { - val Map node2Representation = new HashMap + val size = types.size + val Map node2Representation = Maps.mutable.ofInitialCapacity(size) val Map representation2Amount = if (mergeSimilarNeighbourhood) { - new HashMap + Maps.mutable.ofInitialCapacity(size) } else { null } val Map uniqueRepresentation = if (this.mergeSimilarNeighbourhood) { - new HashMap + Maps.mutable.ofInitialCapacity(size) } else { null } -- cgit v1.2.3-70-g09d2