aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <marussy@mit.bme.hu>2020-07-14 10:45:03 +0200
committerLibravatar Kristóf Marussy <marussy@mit.bme.hu>2020-07-14 10:45:03 +0200
commit329ac27dfa84e9a07760bea75b36476dddcf29a7 (patch)
tree67ffc01b3ff1da6b196e5a9e52eac0d5c22b5ddb
parentFix event storm on EMF transaction finish (diff)
downloadVIATRA-Generator-329ac27dfa84e9a07760bea75b36476dddcf29a7.tar.gz
VIATRA-Generator-329ac27dfa84e9a07760bea75b36476dddcf29a7.tar.zst
VIATRA-Generator-329ac27dfa84e9a07760bea75b36476dddcf29a7.zip
Optimizations
-rw-r--r--Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeModule.xtendbinbin1701 -> 1701 bytes
-rw-r--r--Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeSetup.xtendbinbin2526 -> 2526 bytes
-rw-r--r--Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticHighlightCalculator.xtendbinbin5334 -> 5334 bytes
-rw-r--r--Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticTextAttributeProvider.xtendbinbin4902 -> 4902 bytes
-rw-r--r--Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/validation/.SolverLanguageValidator.xtendbinbin1717 -> 1717 bytes
-rw-r--r--Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/parser/antlr/.SolverLanguageTokenDefInjectingParser.xtendbinbin2742 -> 2742 bytes
-rw-r--r--Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/serializer/.SolverLanguageSyntheticTokenSyntacticSequencer.xtendbinbin2758 -> 2758 bytes
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend22
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/PolyhedronScopePropagator.xtend4
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/ScopePropagator.xtend4
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternProvider.xtend12
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/RefinementRuleProvider.xtend12
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/META-INF/MANIFEST.MF3
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/Descriptor.xtend106
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2Hash.xtend14
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2NeighbourhoodRepresentation.xtend63
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/statecoder/NeighbourhoodBasedStateCoderFactory.xtend21
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.run/config/genericSatellite.vsconfig6
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.run/config/genericTaxation.vsconfig6
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.run/inputs/Resource50hh.xmi59
21 files changed, 196 insertions, 138 deletions
diff --git a/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeModule.xtendbin b/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeModule.xtendbin
index bd1eabaf..35e3fe34 100644
--- a/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeModule.xtendbin
+++ b/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeModule.xtendbin
Binary files differ
diff --git a/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeSetup.xtendbin b/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeSetup.xtendbin
index f4956ec0..b597e715 100644
--- a/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeSetup.xtendbin
+++ b/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeSetup.xtendbin
Binary files differ
diff --git a/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticHighlightCalculator.xtendbin b/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticHighlightCalculator.xtendbin
index 0ee6ab93..5d90d470 100644
--- a/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticHighlightCalculator.xtendbin
+++ b/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticHighlightCalculator.xtendbin
Binary files differ
diff --git a/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticTextAttributeProvider.xtendbin b/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticTextAttributeProvider.xtendbin
index 1fbc1b5a..f054d52c 100644
--- a/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticTextAttributeProvider.xtendbin
+++ b/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticTextAttributeProvider.xtendbin
Binary files differ
diff --git a/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/validation/.SolverLanguageValidator.xtendbin b/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/validation/.SolverLanguageValidator.xtendbin
index 6dfd9bdd..faaea19c 100644
--- a/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/validation/.SolverLanguageValidator.xtendbin
+++ b/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/validation/.SolverLanguageValidator.xtendbin
Binary files differ
diff --git a/Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/parser/antlr/.SolverLanguageTokenDefInjectingParser.xtendbin b/Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/parser/antlr/.SolverLanguageTokenDefInjectingParser.xtendbin
index 9e4a0e33..704006b4 100644
--- a/Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/parser/antlr/.SolverLanguageTokenDefInjectingParser.xtendbin
+++ b/Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/parser/antlr/.SolverLanguageTokenDefInjectingParser.xtendbin
Binary files differ
diff --git a/Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/serializer/.SolverLanguageSyntheticTokenSyntacticSequencer.xtendbin b/Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/serializer/.SolverLanguageSyntheticTokenSyntacticSequencer.xtendbin
index 2a1c8746..76be2b25 100644
--- a/Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/serializer/.SolverLanguageSyntheticTokenSyntacticSequencer.xtendbin
+++ b/Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/serializer/.SolverLanguageSyntheticTokenSyntacticSequencer.xtendbin
Binary files differ
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend
index b79039cb..56beacfa 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend
@@ -1,6 +1,7 @@
1package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra 1package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra
2 2
3import com.google.common.collect.ImmutableMap 3import com.google.common.collect.ImmutableMap
4import com.google.common.collect.ImmutableSet
4import hu.bme.mit.inf.dslreasoner.logic.model.builder.DocumentationLevel 5import hu.bme.mit.inf.dslreasoner.logic.model.builder.DocumentationLevel
5import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem 6import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem
6import hu.bme.mit.inf.dslreasoner.viatra2logic.viatra2logicannotations.TransfomedViatraQuery 7import hu.bme.mit.inf.dslreasoner.viatra2logic.viatra2logicannotations.TransfomedViatraQuery
@@ -57,7 +58,7 @@ class ModelGenerationStatistics {
57 } 58 }
58 59
59 public var int transformationInvocations 60 public var int transformationInvocations
60 61
61 synchronized def incrementTransformationCount() { 62 synchronized def incrementTransformationCount() {
62 transformationInvocations++ 63 transformationInvocations++
63 } 64 }
@@ -67,7 +68,7 @@ class ModelGenerationStatistics {
67 synchronized def incrementScopePropagationCount() { 68 synchronized def incrementScopePropagationCount() {
68 scopePropagatorInvocations++ 69 scopePropagatorInvocations++
69 } 70 }
70 71
71 public var int scopePropagatorSolverInvocations 72 public var int scopePropagatorSolverInvocations
72 73
73 synchronized def incrementScopePropagationSolverCount() { 74 synchronized def incrementScopePropagationSolverCount() {
@@ -126,9 +127,7 @@ class ModelGenerationMethodProvider {
126 val relationConstraints = relationConstraintCalculator.calculateRelationConstraints(logicProblem) 127 val relationConstraints = relationConstraintCalculator.calculateRelationConstraints(logicProblem)
127 val queries = patternProvider.generateQueries(logicProblem, emptySolution, statistics, existingQueries, 128 val queries = patternProvider.generateQueries(logicProblem, emptySolution, statistics, existingQueries,
128 workspace, typeInferenceMethod, scopePropagatorStrategy, relationConstraints, hints, writeFiles) 129 workspace, typeInferenceMethod, scopePropagatorStrategy, relationConstraints, hints, writeFiles)
129 val queryEngine = ViatraQueryEngine.on(new EMFScope(emptySolution)) 130
130 GenericQueryGroup.of(queries.allQueries).prepare(queryEngine)
131
132 val scopePropagator = createScopePropagator(scopePropagatorStrategy, emptySolution, hints, queries, statistics) 131 val scopePropagator = createScopePropagator(scopePropagatorStrategy, emptySolution, hints, queries, statistics)
133 scopePropagator.propagateAllScopeConstraints 132 scopePropagator.propagateAllScopeConstraints
134 val objectRefinementRules = refinementRuleProvider.createObjectRefinementRules(logicProblem, emptySolution, 133 val objectRefinementRules = refinementRuleProvider.createObjectRefinementRules(logicProblem, emptySolution,
@@ -136,7 +135,8 @@ class ModelGenerationMethodProvider {
136 val relationRefinementRules = refinementRuleProvider.createRelationRefinementRules(queries, scopePropagator, 135 val relationRefinementRules = refinementRuleProvider.createRelationRefinementRules(queries, scopePropagator,
137 statistics) 136 statistics)
138 137
139 val unfinishedMultiplicities = goalConstraintProvider.getUnfinishedMultiplicityQueries(logicProblem,queries,calculateObjectCreationCosts) 138 val unfinishedMultiplicities = goalConstraintProvider.getUnfinishedMultiplicityQueries(logicProblem, queries,
139 calculateObjectCreationCosts)
140 140
141 val unfinishedWF = queries.getUnfinishedWFQueries.values 141 val unfinishedWF = queries.getUnfinishedWFQueries.values
142 142
@@ -150,10 +150,18 @@ class ModelGenerationMethodProvider {
150 val modalRelationQueries = modalRelationQueriesBuilder.build 150 val modalRelationQueries = modalRelationQueriesBuilder.build
151 151
152 val invalidWF = queries.getInvalidWFQueries.values 152 val invalidWF = queries.getInvalidWFQueries.values
153 153
154 val mustUnitPropagationPreconditions = queries.getMustUnitPropagationPreconditionPatterns 154 val mustUnitPropagationPreconditions = queries.getMustUnitPropagationPreconditionPatterns
155 val currentUnitPropagationPreconditions = queries.getCurrentUnitPropagationPreconditionPatterns 155 val currentUnitPropagationPreconditions = queries.getCurrentUnitPropagationPreconditionPatterns
156 156
157 val queriesToPrepare = ImmutableSet.builder.addAll(queries.refineObjectQueries.values).addAll(
158 queries.refineTypeQueries.values).addAll(queries.refinerelationQueries.values).addAll(queries.
159 multiplicityConstraintQueries.values.flatMap[allQueries]).addAll(queries.unfinishedWFQueries.values).addAll(
160 queries.invalidWFQueries.values).addAll(queries.mustUnitPropagationPreconditionPatterns.values).addAll(
161 queries.currentUnitPropagationPreconditionPatterns.values).add(queries.hasElementInContainmentQuery).build
162 val queryEngine = ViatraQueryEngine.on(new EMFScope(emptySolution))
163 GenericQueryGroup.of(queriesToPrepare).prepare(queryEngine)
164
157 return new ModelGenerationMethod( 165 return new ModelGenerationMethod(
158 statistics, 166 statistics,
159 objectRefinementRules.values, 167 objectRefinementRules.values,
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/PolyhedronScopePropagator.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/PolyhedronScopePropagator.xtend
index db22b95c..c28d4caa 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/PolyhedronScopePropagator.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/PolyhedronScopePropagator.xtend
@@ -114,6 +114,10 @@ class PolyhedronScopePropagator extends TypeHierarchyScopePropagator {
114 override isPropagationNeededAfterAdditionToRelation(Relation r) { 114 override isPropagationNeededAfterAdditionToRelation(Relation r) {
115 relevantRelations.contains(r) || super.isPropagationNeededAfterAdditionToRelation(r) 115 relevantRelations.contains(r) || super.isPropagationNeededAfterAdditionToRelation(r)
116 } 116 }
117
118 override isQueryEngineFlushRequiredBeforePropagation() {
119 true
120 }
117 121
118 def resetBounds() { 122 def resetBounds() {
119 for (dimension : polyhedron.dimensions) { 123 for (dimension : polyhedron.dimensions) {
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/ScopePropagator.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/ScopePropagator.xtend
index 3e95b2cc..93b83577 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/ScopePropagator.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/ScopePropagator.xtend
@@ -130,6 +130,10 @@ class ScopePropagator {
130 def isPropagationNeededAfterAdditionToRelation(Relation r) { 130 def isPropagationNeededAfterAdditionToRelation(Relation r) {
131 false 131 false
132 } 132 }
133
134 def isQueryEngineFlushRequiredBeforePropagation() {
135 false
136 }
133 137
134 private def removeOne(Scope scope) { 138 private def removeOne(Scope scope) {
135 if (scope.minNewElements > 0) { 139 if (scope.minNewElements > 0) {
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternProvider.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternProvider.xtend
index 2f7c9e2d..d57705ce 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternProvider.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternProvider.xtend
@@ -1,5 +1,6 @@
1package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns 1package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns
2 2
3import com.google.common.collect.ImmutableSet
3import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Relation 4import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Relation
4import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDeclaration 5import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDeclaration
5import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDefinition 6import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDefinition
@@ -55,6 +56,17 @@ class ModalPatternQueries {
55class UnifinishedMultiplicityQueries { 56class UnifinishedMultiplicityQueries {
56 val IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> existingMultiplicityQuery 57 val IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> existingMultiplicityQuery
57 val IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> existingInverseMultiplicityQuery 58 val IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> existingInverseMultiplicityQuery
59
60 def Set<IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> getAllQueries() {
61 val builder = ImmutableSet.builder
62 if (existingMultiplicityQuery !== null) {
63 builder.add(existingMultiplicityQuery)
64 }
65 if (existingInverseMultiplicityQuery !== null) {
66 builder.add(existingInverseMultiplicityQuery)
67 }
68 builder.build
69 }
58} 70}
59 71
60class PatternProvider { 72class PatternProvider {
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/RefinementRuleProvider.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/RefinementRuleProvider.xtend
index 1d976e14..f7fe97a3 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/RefinementRuleProvider.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/RefinementRuleProvider.xtend
@@ -114,7 +114,7 @@ class RefinementRuleProvider {
114 ) 114 )
115 statistics.addExecutionTime(System.nanoTime - startTime) 115 statistics.addExecutionTime(System.nanoTime - startTime)
116 116
117 flushQueryEngine 117 flushQueryEngine(scopePropagator)
118 118
119 // Scope propagation 119 // Scope propagation
120 val propagatorStartTime = System.nanoTime 120 val propagatorStartTime = System.nanoTime
@@ -144,7 +144,7 @@ class RefinementRuleProvider {
144 ) 144 )
145 statistics.addExecutionTime(System.nanoTime - startTime) 145 statistics.addExecutionTime(System.nanoTime - startTime)
146 146
147 flushQueryEngine 147 flushQueryEngine(scopePropagator)
148 148
149 // Scope propagation 149 // Scope propagation
150 val propagatorStartTime = System.nanoTime 150 val propagatorStartTime = System.nanoTime
@@ -171,7 +171,7 @@ class RefinementRuleProvider {
171 ) 171 )
172 statistics.addExecutionTime(System.nanoTime - startTime) 172 statistics.addExecutionTime(System.nanoTime - startTime)
173 173
174 flushQueryEngine 174 flushQueryEngine(scopePropagator)
175 175
176 // Scope propagation 176 // Scope propagation
177 val propagatorStartTime = System.nanoTime 177 val propagatorStartTime = System.nanoTime
@@ -404,7 +404,7 @@ class RefinementRuleProvider {
404 404
405 // Scope propagation 405 // Scope propagation
406 if (scopePropagator.isPropagationNeededAfterAdditionToRelation(declaration)) { 406 if (scopePropagator.isPropagationNeededAfterAdditionToRelation(declaration)) {
407 flushQueryEngine 407 flushQueryEngine(scopePropagator)
408 408
409 val propagatorStartTime = System.nanoTime 409 val propagatorStartTime = System.nanoTime
410 scopePropagator.propagateAllScopeConstraints() 410 scopePropagator.propagateAllScopeConstraints()
@@ -581,8 +581,8 @@ class RefinementRuleProvider {
581 inverseInterpretation.relationlinks += inverseLink 581 inverseInterpretation.relationlinks += inverseLink
582 } 582 }
583 583
584 protected def flushQueryEngine() { 584 protected def flushQueryEngine(ScopePropagator scopePropagator) {
585 if (queryEngine.updatePropagationDelayed) { 585 if (scopePropagator.queryEngineFlushRequiredBeforePropagation && queryEngine.updatePropagationDelayed) {
586 delayMessageDelivery.setBoolean(queryEngine, false) 586 delayMessageDelivery.setBoolean(queryEngine, false)
587 queryEngine.getQueryBackend(ReteBackendFactory.INSTANCE).flushUpdates 587 queryEngine.getQueryBackend(ReteBackendFactory.INSTANCE).flushUpdates
588 delayMessageDelivery.setBoolean(queryEngine, true) 588 delayMessageDelivery.setBoolean(queryEngine, true)
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/META-INF/MANIFEST.MF b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/META-INF/MANIFEST.MF
index 83c90829..639a8a9c 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/META-INF/MANIFEST.MF
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/META-INF/MANIFEST.MF
@@ -28,7 +28,8 @@ Require-Bundle: org.eclipse.core.runtime,
28 org.eclipse.xtend.lib.macro, 28 org.eclipse.xtend.lib.macro,
29 org.eclipse.viatra.query.runtime;bundle-version="1.5.0", 29 org.eclipse.viatra.query.runtime;bundle-version="1.5.0",
30 org.eclipse.viatra.dse;bundle-version="0.15.0", 30 org.eclipse.viatra.dse;bundle-version="0.15.0",
31 hu.bme.mit.inf.dslreasoner.ecore2logic;bundle-version="1.0.0" 31 hu.bme.mit.inf.dslreasoner.ecore2logic;bundle-version="1.0.0",
32 org.eclipse.collections;bundle-version="10.1.0"
32Bundle-ActivationPolicy: lazy 33Bundle-ActivationPolicy: lazy
33Automatic-Module-Name: hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage 34Automatic-Module-Name: hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage
34 35
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/Descriptor.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/Descriptor.xtend
index e4bdb086..685a1f5a 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/Descriptor.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/Descriptor.xtend
@@ -7,7 +7,7 @@ import org.eclipse.xtend.lib.annotations.Data
7import org.eclipse.xtend2.lib.StringConcatenationClient 7import org.eclipse.xtend2.lib.StringConcatenationClient
8 8
9@Data abstract class AbstractNodeDescriptor { 9@Data abstract class AbstractNodeDescriptor {
10 long dataHash 10 int dataHash
11 11
12 protected def StringConcatenationClient prettyPrint() { 12 protected def StringConcatenationClient prettyPrint() {
13 '''(«dataHash»)[«class.simpleName»]''' 13 '''(«dataHash»)[«class.simpleName»]'''
@@ -57,7 +57,7 @@ import org.eclipse.xtend2.lib.StringConcatenationClient
57 } 57 }
58 58
59 override hashCode() { 59 override hashCode() {
60 return this.dataHash.hashCode 60 return this.dataHash
61 } 61 }
62 62
63 override equals(Object other) { 63 override equals(Object other) {
@@ -119,7 +119,6 @@ import org.eclipse.xtend2.lib.StringConcatenationClient
119} 119}
120 120
121@Data class FurtherNodeDescriptor<NodeRep> extends AbstractNodeDescriptor { 121@Data class FurtherNodeDescriptor<NodeRep> extends AbstractNodeDescriptor {
122
123 NodeRep previousRepresentation 122 NodeRep previousRepresentation
124 Map<IncomingRelation<NodeRep>, Integer> incomingEdges 123 Map<IncomingRelation<NodeRep>, Integer> incomingEdges
125 Map<OutgoingRelation<NodeRep>, Integer> outgoingEdges 124 Map<OutgoingRelation<NodeRep>, Integer> outgoingEdges
@@ -128,8 +127,8 @@ import org.eclipse.xtend2.lib.StringConcatenationClient
128 Map<OutgoingRelation<NodeRep>, Integer> outgoingEdges) { 127 Map<OutgoingRelation<NodeRep>, Integer> outgoingEdges) {
129 super(calculateDataHash(previousRepresentation, incomingEdges, outgoingEdges)) 128 super(calculateDataHash(previousRepresentation, incomingEdges, outgoingEdges))
130 this.previousRepresentation = previousRepresentation 129 this.previousRepresentation = previousRepresentation
131 this.incomingEdges = new HashMap(incomingEdges) 130 this.incomingEdges = incomingEdges
132 this.outgoingEdges = new HashMap(outgoingEdges) 131 this.outgoingEdges = outgoingEdges
133 } 132 }
134 133
135 static def private <NodeRep> int calculateDataHash(NodeRep previousRepresentation, 134 static def private <NodeRep> int calculateDataHash(NodeRep previousRepresentation,
@@ -137,14 +136,14 @@ import org.eclipse.xtend2.lib.StringConcatenationClient
137 val int prime = 31; 136 val int prime = 31;
138 var int result = previousRepresentation.hashCode; 137 var int result = previousRepresentation.hashCode;
139 if (incomingEdges !== null) 138 if (incomingEdges !== null)
140 result = prime * result + incomingEdges.hashCode(); 139 result = prime * result + hashIncomingNeighborhood(incomingEdges)
141 if (outgoingEdges !== null) 140 if (outgoingEdges !== null)
142 result = prime * result + outgoingEdges.hashCode(); 141 result = prime * result + hashOutgoingNeighborhood(outgoingEdges)
143 return result; 142 return result;
144 } 143 }
145 144
146 override hashCode() { 145 override hashCode() {
147 return this.dataHash.hashCode 146 return this.dataHash
148 } 147 }
149 148
150 override equals(Object other) { 149 override equals(Object other) {
@@ -179,80 +178,31 @@ import org.eclipse.xtend2.lib.StringConcatenationClient
179 '''«rep»''' 178 '''«rep»'''
180 } 179 }
181 } 180 }
181
182 private static def <NodeRep> hashIncomingNeighborhood(Map<IncomingRelation<NodeRep>, Integer> neighborhood) {
183 val int prime = 31
184 var int hash = 0
185 for (entry : neighborhood.entrySet) {
186 val relation = entry.key
187 hash += (prime * relation.from.hashCode + relation.type.hashCode).bitwiseXor(entry.value.hashCode)
188 }
189 hash
190 }
191
192 private static def <NodeRep> hashOutgoingNeighborhood(Map<OutgoingRelation<NodeRep>, Integer> neighborhood) {
193 val int prime = 31
194 var int hash = 0
195 for (entry : neighborhood.entrySet) {
196 val relation = entry.key
197 hash += (prime * relation.to.hashCode + relation.type.hashCode).bitwiseXor(entry.value.hashCode)
198 }
199 hash
200 }
182 201
183 override toString() { 202 override toString() {
184 ''' 203 '''
185 «prettyPrint» 204 «prettyPrint»
186 ''' 205 '''
187 } 206 }
188
189// @Pure
190// @Override
191// override public boolean equals(Object obj) {
192// if (this === obj)
193// return true;
194// if (obj === null)
195// return false;
196// if (getClass() != obj.getClass())
197// return false;
198// val AbstractNodeDescriptor other = obj as AbstractNodeDescriptor;
199// if (other.dataHash != this.dataHash)
200// return false;
201// return true;
202// }
203// @Pure
204// override public boolean equals(Object obj) {
205// if (this === obj)
206// return true;
207// if (obj === null)
208// return false;
209// if (getClass() != obj.getClass())
210// return false;
211// if (!super.equals(obj))
212// return false;
213// val FurtherNodeDescriptor<?> other = obj as FurtherNodeDescriptor<?>;
214// if (this.previousRepresentation === null) {
215// if (other.previousRepresentation != null)
216// return false;
217//
218// }
219//// } else if (!this.previousRepresentation.equals(other.previousRepresentation))
220//// return false;
221// if (this.incomingEdges === null) {
222// if (other.incomingEdges != null)
223// return false;
224// } else if (!this.incomingEdges.equals(other.incomingEdges))
225// return false;
226// if (this.outgoingEdges === null) {
227// if (other.outgoingEdges != null)
228// return false;
229// } else if (!this.outgoingEdges.equals(other.outgoingEdges))
230// return false;
231// if (this.attributeValues === null) {
232// if (other.attributeValues != null)
233// return false;
234// } else if (!this.attributeValues.equals(other.attributeValues))
235// return false;
236// return true;
237// }
238} 207}
239/* 208
240 * @Data
241 * class ModelDescriptor {
242 * int dataHash
243 * int unknownElements
244 * Map<? extends AbstractNodeDescriptor,Integer> knownElements
245 *
246 * public new(Map<? extends AbstractNodeDescriptor,Integer> knownElements, int unknownElements) {
247 * this.dataHash = calculateDataHash(knownElements,unknownElements)
248 * this.unknownElements = unknownElements
249 * this.knownElements = knownElements
250 * }
251 *
252 * def private static calculateDataHash(Map<? extends AbstractNodeDescriptor,Integer> knownElements, int unknownElements)
253 * {
254 * val int prime = 31;
255 * return knownElements.hashCode * prime + unknownElements.hashCode
256 * }
257 * }
258 */
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2Hash.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2Hash.xtend
index ddf7d712..5da202eb 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2Hash.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2Hash.xtend
@@ -1,7 +1,8 @@
1package hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.neighbourhood 1package hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.neighbourhood
2 2
3import java.util.Map
4import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.DefinedElement 3import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.DefinedElement
4import java.util.Map
5import org.eclipse.collections.api.factory.Maps
5 6
6class PartialInterpretation2Hash extends PartialInterpretation2NeighbourhoodRepresentation<Integer, Integer>{ 7class PartialInterpretation2Hash extends PartialInterpretation2NeighbourhoodRepresentation<Integer, Integer>{
7 8
@@ -11,15 +12,22 @@ class PartialInterpretation2Hash extends PartialInterpretation2NeighbourhoodRepr
11 12
12 override protected createLocalRepresentation(Map<DefinedElement, LocalNodeDescriptor> node2Representation, Map<LocalNodeDescriptor, Integer> representation2Amount) { 13 override protected createLocalRepresentation(Map<DefinedElement, LocalNodeDescriptor> node2Representation, Map<LocalNodeDescriptor, Integer> representation2Amount) {
13 return new NeighbourhoodWithTraces( 14 return new NeighbourhoodWithTraces(
14 representation2Amount.hashCode,node2Representation.mapValues[it.hashCode], 15 representation2Amount.hashCode,node2Representation.hashValues,
15 null) 16 null)
16 } 17 }
17 18
18 override protected createFurtherRepresentation(Map<FurtherNodeDescriptor<Integer>, Integer> nodeDescriptors, Map<DefinedElement, FurtherNodeDescriptor<Integer>> node2Representation, NeighbourhoodWithTraces<Integer, Integer> previous, boolean deepRepresentation) { 19 override protected createFurtherRepresentation(Map<FurtherNodeDescriptor<Integer>, Integer> nodeDescriptors, Map<DefinedElement, FurtherNodeDescriptor<Integer>> node2Representation, NeighbourhoodWithTraces<Integer, Integer> previous, boolean deepRepresentation) {
19 return new NeighbourhoodWithTraces( 20 return new NeighbourhoodWithTraces(
20 nodeDescriptors.hashCode, 21 nodeDescriptors.hashCode,
21 node2Representation.mapValues[it.hashCode], 22 node2Representation.hashValues,
22 if(deepRepresentation) {previous} else {null}) 23 if(deepRepresentation) {previous} else {null})
23 } 24 }
24 25
26 private def <T> hashValues(Map<DefinedElement, T> map) {
27 val hashedMap = Maps.mutable.ofInitialCapacity(map.size)
28 for (entry : map.entrySet) {
29 hashedMap.put(entry.key, entry.value.hashCode)
30 }
31 hashedMap
32 }
25} 33}
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 }
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/statecoder/NeighbourhoodBasedStateCoderFactory.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/statecoder/NeighbourhoodBasedStateCoderFactory.xtend
index f19ac30f..04c49506 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/statecoder/NeighbourhoodBasedStateCoderFactory.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/statecoder/NeighbourhoodBasedStateCoderFactory.xtend
@@ -9,6 +9,7 @@ import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.par
9import java.util.ArrayList 9import java.util.ArrayList
10import java.util.Map 10import java.util.Map
11import org.eclipse.viatra.query.runtime.api.IPatternMatch 11import org.eclipse.viatra.query.runtime.api.IPatternMatch
12import org.eclipse.viatra.query.runtime.api.IQuerySpecification
12 13
13class NeighbourhoodBasedStateCoderFactory extends AbstractNeighbourhoodBasedStateCoderFactory { 14class NeighbourhoodBasedStateCoderFactory extends AbstractNeighbourhoodBasedStateCoderFactory {
14 new() { 15 new() {
@@ -38,6 +39,7 @@ class NeighbourhoodBasedHashStateCoderFactory extends AbstractNeighbourhoodBased
38 39
39class NeighbourhoodBasedPartialInterpretationStateCoder<ModelRep, NodeRep> extends AbstractNeighbourhoodBasedPartialInterpretationStateCoder { 40class NeighbourhoodBasedPartialInterpretationStateCoder<ModelRep, NodeRep> extends AbstractNeighbourhoodBasedPartialInterpretationStateCoder {
40 val PartialInterpretation2NeighbourhoodRepresentation<ModelRep, NodeRep> calculator 41 val PartialInterpretation2NeighbourhoodRepresentation<ModelRep, NodeRep> calculator
42 val Map<IQuerySpecification<?>, String> fullyQualifiedNames = newHashMap
41 var Map<DefinedElement, ? extends NodeRep> nodeRepresentations = null 43 var Map<DefinedElement, ? extends NodeRep> nodeRepresentations = null
42 var ModelRep modelRepresentation = null 44 var ModelRep modelRepresentation = null
43 45
@@ -55,27 +57,36 @@ class NeighbourhoodBasedPartialInterpretationStateCoder<ModelRep, NodeRep> exten
55 modelRepresentation = code.modelRepresentation 57 modelRepresentation = code.modelRepresentation
56 nodeRepresentations = code.nodeRepresentations 58 nodeRepresentations = code.nodeRepresentations
57 } 59 }
60
61 private def getFullyQualifiedNameCached(IQuerySpecification<?> specification) {
62 fullyQualifiedNames.computeIfAbsent(specification, [fullyQualifiedName])
63 }
58 64
59 override doCreateActivationCode(IPatternMatch match) { 65 override doCreateActivationCode(IPatternMatch match) {
60 val size = match.specification.parameters.size 66 val size = match.specification.parameters.size
61 val res = new ArrayList(size) 67 var int hash = 0
62 var int equivalenceHash = 0
63 val prime = 31 68 val prime = 31
64 69
65 for (var int index = 0; index < size; index++) { 70 for (var int index = 0; index < size; index++) {
66 val matchArgument = match.get(index) 71 val matchArgument = match.get(index)
67 res.add(getCode(matchArgument)) 72 val code = getCode(matchArgument)
73 val codeNumber = if (code === null) {
74 0
75 } else {
76 code.hashCode
77 }
78 hash = prime * hash + codeNumber
68 for (var i = 0; i < index; i++) { 79 for (var i = 0; i < index; i++) {
69 val number = if (matchArgument === match.get(i)) { 80 val number = if (matchArgument === match.get(i)) {
70 1 81 1
71 } else { 82 } else {
72 0 83 0
73 } 84 }
74 equivalenceHash = prime * equivalenceHash + number 85 hash = prime * hash + number
75 } 86 }
76 } 87 }
77 88
78 match.specification.fullyQualifiedName -> (res -> equivalenceHash).hashCode 89 match.specification.fullyQualifiedNameCached -> hash
79 } 90 }
80 91
81 def private getCode(Object o) { 92 def private getCode(Object o) {
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend
index fd871615..c333feca 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend
@@ -206,7 +206,7 @@ class ViatraReasoner extends LogicReasoner {
206 it.transformationTime = (transformationTime / 1000000) as int 206 it.transformationTime = (transformationTime / 1000000) as int
207 for (pair : solutionCopier.getAllCopierRuntimes(true).indexed) { 207 for (pair : solutionCopier.getAllCopierRuntimes(true).indexed) {
208 it.entries += createIntStatisticEntry => [ 208 it.entries += createIntStatisticEntry => [
209 it.name = '''_Solution«pair.key»FoundAt''' 209 it.name = '''Solution«pair.key»FoundAt'''
210 it.value = (pair.value / 1000000) as int 210 it.value = (pair.value / 1000000) as int
211 ] 211 ]
212 } 212 }
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/config/genericSatellite.vsconfig b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/config/genericSatellite.vsconfig
index 57eaf326..192dac7b 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/config/genericSatellite.vsconfig
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/config/genericSatellite.vsconfig
@@ -33,10 +33,8 @@ generate {
33 runtime = 10000, 33 runtime = 10000,
34 log-level = normal, 34 log-level = normal,
35 "fitness-scope" = "3", 35 "fitness-scope" = "3",
36 "fitness-punishSize" = "inverse", 36 "fitness-punishSize" = "true",
37 "fitness-objectCreationCosts" = "true", 37 "scopePropagator" = "polyhedral"
38 "scopePropagator" = "typeHierarchy",
39 "fitness-missing-containment" = "2"
40 } 38 }
41 39
42 runs = 1 40 runs = 1
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/config/genericTaxation.vsconfig b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/config/genericTaxation.vsconfig
index 7d742202..ee3c3631 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/config/genericTaxation.vsconfig
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/config/genericTaxation.vsconfig
@@ -35,7 +35,11 @@ generate {
35 config = { 35 config = {
36 runtime = 10000, 36 runtime = 10000,
37 log-level = normal, 37 log-level = normal,
38 "fitness-objectCreationCosts" = "true" 38 "fitness-scope" = "1",
39 "fitness-punishSize" = "inverse",
40 "fitness-objectCreationCosts" = "true",
41 "scopePropagator" = "typeHierarchy",
42 "fitness-missing-containment" = "2"
39 } 43 }
40 44
41 runs = 1 45 runs = 1
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/inputs/Resource50hh.xmi b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/inputs/Resource50hh.xmi
new file mode 100644
index 00000000..5b110b76
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/inputs/Resource50hh.xmi
@@ -0,0 +1,59 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<TaxCardWithRoot:Resource
3 xmi:version="2.0"
4 xmlns:xmi="http://www.omg.org/XMI"
5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
6 xmlns:TaxCardWithRoot="http:///TaxCardWithRoot.ecore"
7 xsi:schemaLocation="http:///TaxCardWithRoot.ecore ../../case.study.pledge.model/model/TaxationWithRoot.ecore">
8 <contains/>
9 <contains/>
10 <contains/>
11 <contains/>
12 <contains/>
13 <contains/>
14 <contains/>
15 <contains/>
16 <contains/>
17 <contains/>
18 <contains/>
19 <contains/>
20 <contains/>
21 <contains/>
22 <contains/>
23 <contains/>
24 <contains/>
25 <contains/>
26 <contains/>
27 <contains/>
28 <contains/>
29 <contains/>
30 <contains/>
31 <contains/>
32 <contains/>
33 <contains/>
34 <contains/>
35 <contains/>
36 <contains/>
37 <contains/>
38 <contains/>
39 <contains/>
40 <contains/>
41 <contains/>
42 <contains/>
43 <contains/>
44 <contains/>
45 <contains/>
46 <contains/>
47 <contains/>
48 <contains/>
49 <contains/>
50 <contains/>
51 <contains/>
52 <contains/>
53 <contains/>
54 <contains/>
55 <contains/>
56 <contains/>
57 <contains/>
58</TaxCardWithRoot:Resource>
59