diff options
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2NeighbourhoodRepresentation.xtend')
1 files changed, 31 insertions, 32 deletions
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 | |||
8 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation | 8 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation |
9 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialPrimitiveInterpretation | 9 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialPrimitiveInterpretation |
10 | import java.util.ArrayList | 10 | import java.util.ArrayList |
11 | import java.util.HashMap | ||
12 | import java.util.HashSet | ||
13 | import java.util.List | 11 | import java.util.List |
14 | import java.util.Map | 12 | import java.util.Map |
15 | import java.util.Set | 13 | import java.util.Set |
14 | import org.eclipse.collections.api.factory.Maps | ||
15 | import org.eclipse.collections.impl.factory.Sets | ||
16 | 16 | ||
17 | import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* | 17 | import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* |
18 | 18 | ||
@@ -68,10 +68,11 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation<ModelRepresenta | |||
68 | 68 | ||
69 | def createRepresentationWithFocus(PartialInterpretation model, int range, int parallels, int maxNumber, | 69 | def createRepresentationWithFocus(PartialInterpretation model, int range, int parallels, int maxNumber, |
70 | Set<TypeDeclaration> relevantTypes, Set<RelationDeclaration> relevantRelations, DefinedElement focusedElement) { | 70 | Set<TypeDeclaration> relevantTypes, Set<RelationDeclaration> relevantRelations, DefinedElement focusedElement) { |
71 | val Map<DefinedElement, Set<String>> types = new HashMap | 71 | val initialSize = model.elements.size |
72 | val Map<DefinedElement, Set<String>> types = Maps.mutable.ofInitialCapacity(initialSize) | ||
72 | fillTypes(model, types, relevantTypes) | 73 | fillTypes(model, types, relevantTypes) |
73 | val Map<DefinedElement, List<IncomingRelation<DefinedElement>>> IncomingRelations = new HashMap; | 74 | val Map<DefinedElement, List<IncomingRelation<DefinedElement>>> IncomingRelations = Maps.mutable.ofInitialCapacity(initialSize); |
74 | val Map<DefinedElement, List<OutgoingRelation<DefinedElement>>> OutgoingRelations = new HashMap; | 75 | val Map<DefinedElement, List<OutgoingRelation<DefinedElement>>> OutgoingRelations = Maps.mutable.ofInitialCapacity(initialSize); |
75 | fillReferences(model, IncomingRelations, OutgoingRelations, relevantRelations) | 76 | fillReferences(model, IncomingRelations, OutgoingRelations, relevantRelations) |
76 | 77 | ||
77 | val res = doRecursiveNeighbourCalculation(model, types, IncomingRelations, OutgoingRelations, range, parallels, | 78 | val res = doRecursiveNeighbourCalculation(model, types, IncomingRelations, OutgoingRelations, range, parallels, |
@@ -103,12 +104,12 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation<ModelRepresenta | |||
103 | Map<DefinedElement, List<IncomingRelation<DefinedElement>>> IncomingRelations, | 104 | Map<DefinedElement, List<IncomingRelation<DefinedElement>>> IncomingRelations, |
104 | Map<DefinedElement, List<OutgoingRelation<DefinedElement>>> OutgoingRelations) { | 105 | Map<DefinedElement, List<OutgoingRelation<DefinedElement>>> OutgoingRelations) { |
105 | val elements = types.keySet | 106 | val elements = types.keySet |
106 | var Map<DefinedElement, Set<DefinedElement>> reachable = new HashMap | 107 | var Map<DefinedElement, Set<DefinedElement>> reachable = Maps.mutable.ofInitialCapacity(elements.size) |
107 | var Map<DefinedElement, Set<DefinedElement>> newReachable = new HashMap | 108 | var Map<DefinedElement, Set<DefinedElement>> newReachable = Maps.mutable.ofInitialCapacity(elements.size) |
108 | for (element : elements) { | 109 | for (element : elements) { |
109 | val set = new HashSet | 110 | val set = Sets.mutable.of |
110 | set.add(element) | 111 | set.add(element) |
111 | reachable.put(element, new HashSet) | 112 | reachable.put(element, Sets.mutable.of) |
112 | newReachable.put(element, set) | 113 | newReachable.put(element, set) |
113 | } | 114 | } |
114 | 115 | ||
@@ -201,8 +202,8 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation<ModelRepresenta | |||
201 | val nextRepresentation = createFurtherRepresentation(next.key, next.value, lastRepresentation, | 202 | val nextRepresentation = createFurtherRepresentation(next.key, next.value, lastRepresentation, |
202 | deepRepresentation) | 203 | deepRepresentation) |
203 | 204 | ||
204 | val previousNumberOfTypes = lastRepresentation.nodeRepresentations.values.toSet.size | 205 | val previousNumberOfTypes = Sets.immutable.withAll(lastRepresentation.nodeRepresentations.values).size |
205 | val nextNumberOfTypes = nextRepresentation.nodeRepresentations.values.toSet.size | 206 | val nextNumberOfTypes = Sets.immutable.withAll(nextRepresentation.nodeRepresentations.values).size |
206 | hasRefined = nextNumberOfTypes > previousNumberOfTypes | 207 | hasRefined = nextNumberOfTypes > previousNumberOfTypes |
207 | 208 | ||
208 | lastRange = nextRange | 209 | lastRange = nextRange |
@@ -224,7 +225,7 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation<ModelRepresenta | |||
224 | def private fillTypes(PartialInterpretation model, Map<DefinedElement, Set<String>> node2Type, | 225 | def private fillTypes(PartialInterpretation model, Map<DefinedElement, Set<String>> node2Type, |
225 | Set<TypeDeclaration> relevantTypes) { | 226 | Set<TypeDeclaration> relevantTypes) { |
226 | for (element : model.elements) { | 227 | for (element : model.elements) { |
227 | node2Type.put(element, new HashSet) | 228 | node2Type.put(element, Sets.mutable.of) |
228 | } | 229 | } |
229 | 230 | ||
230 | // for(typeDefinition : model.problem.types.filter(TypeDefinition)) { | 231 | // for(typeDefinition : model.problem.types.filter(TypeDefinition)) { |
@@ -286,7 +287,11 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation<ModelRepresenta | |||
286 | boolean deepRepresentation | 287 | boolean deepRepresentation |
287 | ) | 288 | ) |
288 | 289 | ||
289 | def private addOne(int original, int max) { | 290 | def private addOne(Integer originalObj, int max) { |
291 | if (originalObj === null) { | ||
292 | return 1 | ||
293 | } | ||
294 | val original = originalObj.intValue | ||
290 | if(original == Integer.MAX_VALUE) return Integer.MAX_VALUE | 295 | if(original == Integer.MAX_VALUE) return Integer.MAX_VALUE |
291 | if(original + 1 > max) return Integer.MAX_VALUE else return original + 1 | 296 | if(original + 1 > max) return Integer.MAX_VALUE else return original + 1 |
292 | } | 297 | } |
@@ -294,15 +299,11 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation<ModelRepresenta | |||
294 | private def calculateIncomingEdges(Map<DefinedElement, List<IncomingRelation<DefinedElement>>> IncomingRelations, | 299 | private def calculateIncomingEdges(Map<DefinedElement, List<IncomingRelation<DefinedElement>>> IncomingRelations, |
295 | DefinedElement object, Map<DefinedElement, ? extends NodeRepresentation> previousNodeRepresentations, | 300 | DefinedElement object, Map<DefinedElement, ? extends NodeRepresentation> previousNodeRepresentations, |
296 | int parallel) { | 301 | int parallel) { |
297 | val Map<IncomingRelation<NodeRepresentation>, Integer> res = new HashMap | 302 | val Map<IncomingRelation<NodeRepresentation>, Integer> res = Maps.mutable.of |
298 | for (incomingConcreteEdge : IncomingRelations.get(object)) { | 303 | for (incomingConcreteEdge : IncomingRelations.get(object)) { |
299 | val IncomingRelation<NodeRepresentation> e = new IncomingRelation( | 304 | val IncomingRelation<NodeRepresentation> e = new IncomingRelation( |
300 | previousNodeRepresentations.get(incomingConcreteEdge.from), incomingConcreteEdge.type) | 305 | previousNodeRepresentations.get(incomingConcreteEdge.from), incomingConcreteEdge.type) |
301 | if (res.containsKey(e)) { | 306 | res.compute(e, [key, value | addOne(value, parallel)]) |
302 | res.put(e, addOne(res.get(e), parallel)) | ||
303 | } else { | ||
304 | res.put(e, 1) | ||
305 | } | ||
306 | } | 307 | } |
307 | return res | 308 | return res |
308 | } | 309 | } |
@@ -310,17 +311,13 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation<ModelRepresenta | |||
310 | private def calcuateOutgoingEdges(Map<DefinedElement, List<OutgoingRelation<DefinedElement>>> OutgoingRelations, | 311 | private def calcuateOutgoingEdges(Map<DefinedElement, List<OutgoingRelation<DefinedElement>>> OutgoingRelations, |
311 | DefinedElement object, Map<DefinedElement, ? extends NodeRepresentation> previousNodeRepresentations, | 312 | DefinedElement object, Map<DefinedElement, ? extends NodeRepresentation> previousNodeRepresentations, |
312 | int parallel) { | 313 | int parallel) { |
313 | val Map<OutgoingRelation<NodeRepresentation>, Integer> res = new HashMap | 314 | val Map<OutgoingRelation<NodeRepresentation>, Integer> res = Maps.mutable.of |
314 | for (outgoingConcreteEdge : OutgoingRelations.get(object)) { | 315 | for (outgoingConcreteEdge : OutgoingRelations.get(object)) { |
315 | val OutgoingRelation<NodeRepresentation> e = new OutgoingRelation( | 316 | val OutgoingRelation<NodeRepresentation> e = new OutgoingRelation( |
316 | previousNodeRepresentations.get(outgoingConcreteEdge.to), outgoingConcreteEdge.type) | 317 | previousNodeRepresentations.get(outgoingConcreteEdge.to), outgoingConcreteEdge.type) |
317 | if (res.containsKey(e)) { | 318 | res.compute(e, [key, value | addOne(value, parallel)]) |
318 | res.put(e, addOne(res.get(e), parallel)) | ||
319 | } else { | ||
320 | res.put(e, 1) | ||
321 | } | ||
322 | } | 319 | } |
323 | return res; | 320 | return res |
324 | } | 321 | } |
325 | 322 | ||
326 | /*def private <KEY,VALUE> void addOrCreate_Set(Map<KEY,Set<VALUE>> map, KEY key, VALUE value) { | 323 | /*def private <KEY,VALUE> void addOrCreate_Set(Map<KEY,Set<VALUE>> map, KEY key, VALUE value) { |
@@ -338,16 +335,17 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation<ModelRepresenta | |||
338 | Map<DefinedElement, List<IncomingRelation<DefinedElement>>> IncomingRelations, | 335 | Map<DefinedElement, List<IncomingRelation<DefinedElement>>> IncomingRelations, |
339 | Map<DefinedElement, List<OutgoingRelation<DefinedElement>>> OutgoingRelations, int parallels, int maxNumber) { | 336 | Map<DefinedElement, List<OutgoingRelation<DefinedElement>>> OutgoingRelations, int parallels, int maxNumber) { |
340 | val previousNodeRepresentations = previous.nodeRepresentations | 337 | val previousNodeRepresentations = previous.nodeRepresentations |
341 | val node2Representation = new HashMap<DefinedElement, FurtherNodeDescriptor<NodeRepresentation>> | 338 | val size = previousNodeRepresentations.size |
339 | val node2Representation = Maps.mutable.<DefinedElement, FurtherNodeDescriptor<NodeRepresentation>>ofInitialCapacity(size) | ||
342 | val Map<FurtherNodeDescriptor<NodeRepresentation>, Integer> descriptor2Number = if (this. | 340 | val Map<FurtherNodeDescriptor<NodeRepresentation>, Integer> descriptor2Number = if (this. |
343 | mergeSimilarNeighbourhood) { | 341 | mergeSimilarNeighbourhood) { |
344 | new HashMap | 342 | Maps.mutable.ofInitialCapacity(size) |
345 | } else { | 343 | } else { |
346 | null | 344 | null |
347 | } | 345 | } |
348 | val Map<FurtherNodeDescriptor<NodeRepresentation>, FurtherNodeDescriptor<NodeRepresentation>> uniqueDescription = if (this. | 346 | val Map<FurtherNodeDescriptor<NodeRepresentation>, FurtherNodeDescriptor<NodeRepresentation>> uniqueDescription = if (this. |
349 | mergeSimilarNeighbourhood) { | 347 | mergeSimilarNeighbourhood) { |
350 | new HashMap | 348 | Maps.mutable.ofInitialCapacity(size) |
351 | } else { | 349 | } else { |
352 | null | 350 | null |
353 | } | 351 | } |
@@ -392,14 +390,15 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation<ModelRepresenta | |||
392 | 390 | ||
393 | private def calculateLocalNodeDescriptors(PartialInterpretation model, Map<DefinedElement, Set<String>> types, | 391 | private def calculateLocalNodeDescriptors(PartialInterpretation model, Map<DefinedElement, Set<String>> types, |
394 | int maxNumber, DefinedElement focusedElement) { | 392 | int maxNumber, DefinedElement focusedElement) { |
395 | val Map<DefinedElement, LocalNodeDescriptor> node2Representation = new HashMap | 393 | val size = types.size |
394 | val Map<DefinedElement, LocalNodeDescriptor> node2Representation = Maps.mutable.ofInitialCapacity(size) | ||
396 | val Map<LocalNodeDescriptor, Integer> representation2Amount = if (mergeSimilarNeighbourhood) { | 395 | val Map<LocalNodeDescriptor, Integer> representation2Amount = if (mergeSimilarNeighbourhood) { |
397 | new HashMap | 396 | Maps.mutable.ofInitialCapacity(size) |
398 | } else { | 397 | } else { |
399 | null | 398 | null |
400 | } | 399 | } |
401 | val Map<LocalNodeDescriptor, LocalNodeDescriptor> uniqueRepresentation = if (this.mergeSimilarNeighbourhood) { | 400 | val Map<LocalNodeDescriptor, LocalNodeDescriptor> uniqueRepresentation = if (this.mergeSimilarNeighbourhood) { |
402 | new HashMap | 401 | Maps.mutable.ofInitialCapacity(size) |
403 | } else { | 402 | } else { |
404 | null | 403 | null |
405 | } | 404 | } |