aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2NeighbourhoodRepresentation.xtend
diff options
context:
space:
mode:
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2NeighbourhoodRepresentation.xtend')
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2NeighbourhoodRepresentation.xtend63
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
8import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation 8import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
9import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialPrimitiveInterpretation 9import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialPrimitiveInterpretation
10import java.util.ArrayList 10import java.util.ArrayList
11import java.util.HashMap
12import java.util.HashSet
13import java.util.List 11import java.util.List
14import java.util.Map 12import java.util.Map
15import java.util.Set 13import java.util.Set
14import org.eclipse.collections.api.factory.Maps
15import org.eclipse.collections.impl.factory.Sets
16 16
17import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* 17import 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 }