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.xtend54
1 files changed, 54 insertions, 0 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 8b5d7f2c..080c3b79 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
@@ -92,6 +92,34 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation<ModelRepresenta
92 92
93 return res; 93 return res;
94 } 94 }
95
96 /**
97 * Creates a neighbourhood representation with traces
98 * @param model The model to be represented.
99 * @param range The range of the neighbourhood.
100 * @param parallels The maximal number of parallel references to be differentiated.
101 * @param maxNumber The maximal number of elements in a equivalence class that can be differentiated.
102 * @param relevantTypes The set of types to include in the diversity calculations (when value is null, all types are considered)
103 * @param relevantRelations The set of relations to include in the diversity calculations (when value is null, all relations are considered)
104 * @param relevantPatterns The set of patterns to include in the diversity calculations
105 * (NOT the well-formedness constraints) - when value is null, NO patterns are considered
106 */
107 def public createRepresentation(PartialInterpretation model, int range, int parallels, int maxNumber,
108 Map<String,List<List<DefinedElement>>> relevantPatterns) {
109
110 val Map<DefinedElement, Set<String>> types = new HashMap
111 fillTypes(model, types, null)
112 val Map<DefinedElement, List<IncomingRelation<DefinedElement>>> IncomingRelations = new HashMap;
113 val Map<DefinedElement, List<OutgoingRelation<DefinedElement>>> OutgoingRelations = new HashMap;
114 fillReferences(model, IncomingRelations, OutgoingRelations, null);
115 val Map<DefinedElement, List<PatternRelation<DefinedElement>>> PatternRelations = createPatternRelations(model,
116 relevantPatterns);
117
118 val res = doRecursiveNeighbourCalculation(model, types, IncomingRelations, OutgoingRelations, PatternRelations,range, parallels,
119 maxNumber);
120
121 return res;
122 }
95 123
96 /** 124 /**
97 * Collects all pattern relations for shaping 125 * Collects all pattern relations for shaping
@@ -135,6 +163,32 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation<ModelRepresenta
135 return result; 163 return result;
136 164
137 } 165 }
166
167 def Map<DefinedElement, List<PatternRelation<DefinedElement>>> createPatternRelations(
168 PartialInterpretation model, Map<String,List<List<DefinedElement>>> relevantPatterns) {
169 val Map<DefinedElement, List<PatternRelation<DefinedElement>>> result=new HashMap;
170
171 for (element : model.elements) {
172 result.put(element,new LinkedList<PatternRelation<DefinedElement>>)
173 }
174 if (relevantPatterns===null) return result;
175 for (patternName : relevantPatterns.keySet) {
176 val allMatches=relevantPatterns.get(patternName)
177
178 for (match : allMatches) {
179 var id=0;
180 for (matchedElement:match) {
181 if (matchedElement!==null) {
182 result.get(matchedElement).add(new PatternRelation<DefinedElement>(patternName,id,match))
183 }
184 id++
185 }
186 }
187 }
188
189 return result;
190
191 }
138 192
139 def private isRelevant(TypeDeclaration t, Set<TypeDeclaration> relevantTypes) { 193 def private isRelevant(TypeDeclaration t, Set<TypeDeclaration> relevantTypes) {
140 if (relevantTypes === null) { 194 if (relevantTypes === null) {