aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <marussy@mit.bme.hu>2020-06-27 17:56:46 +0200
committerLibravatar Kristóf Marussy <marussy@mit.bme.hu>2020-06-27 17:56:46 +0200
commit957082776dbb7efed53a783c5e5be6b443a9bb86 (patch)
tree6b88701d4b1b3928b7d3e7de49d177ca8c93ffad /Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality
parentMerge branch 'kris' (diff)
downloadVIATRA-Generator-957082776dbb7efed53a783c5e5be6b443a9bb86.tar.gz
VIATRA-Generator-957082776dbb7efed53a783c5e5be6b443a9bb86.tar.zst
VIATRA-Generator-957082776dbb7efed53a783c5e5be6b443a9bb86.zip
Fix scope + numerical propagation WIP
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality')
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/MultiplicityGoalConstraintCalculator.xtend15
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/PolyhedronScopePropagator.xtend8
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/ScopePropagator.xtend14
3 files changed, 13 insertions, 24 deletions
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/MultiplicityGoalConstraintCalculator.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/MultiplicityGoalConstraintCalculator.xtend
index 034420d6..b28cd584 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/MultiplicityGoalConstraintCalculator.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/MultiplicityGoalConstraintCalculator.xtend
@@ -10,15 +10,13 @@ class MultiplicityGoalConstraintCalculator {
10 val String targetRelationName 10 val String targetRelationName
11 val IQuerySpecification<?> querySpecification 11 val IQuerySpecification<?> querySpecification
12 var ViatraQueryMatcher<?> matcher 12 var ViatraQueryMatcher<?> matcher
13 val int minValue
14 val boolean containment 13 val boolean containment
15 val int cost 14 val int cost
16 15
17 public new(String targetRelationName, IQuerySpecification<?> querySpecification, int minValue, boolean containment, int cost) { 16 public new(String targetRelationName, IQuerySpecification<?> querySpecification, boolean containment, int cost) {
18 this.targetRelationName = targetRelationName 17 this.targetRelationName = targetRelationName
19 this.querySpecification = querySpecification 18 this.querySpecification = querySpecification
20 this.matcher = null 19 this.matcher = null
21 this.minValue = minValue
22 this.containment = containment 20 this.containment = containment
23 this.cost = cost 21 this.cost = cost
24 } 22 }
@@ -27,7 +25,6 @@ class MultiplicityGoalConstraintCalculator {
27 this.targetRelationName = other.targetRelationName 25 this.targetRelationName = other.targetRelationName
28 this.querySpecification = other.querySpecification 26 this.querySpecification = other.querySpecification
29 this.matcher = null 27 this.matcher = null
30 this.minValue = other.minValue
31 this.containment = other.containment 28 this.containment = other.containment
32 this.cost = other.cost 29 this.cost = other.cost
33 } 30 }
@@ -49,14 +46,8 @@ class MultiplicityGoalConstraintCalculator {
49 var res = 0 46 var res = 0
50 val allMatches = this.matcher.allMatches 47 val allMatches = this.matcher.allMatches
51 for(match : allMatches) { 48 for(match : allMatches) {
52 val existingMultiplicity = match.get(4) as Integer 49 val missingMultiplicity = match.get(2) as Integer
53 if(existingMultiplicity < this.minValue) { 50 res += missingMultiplicity
54 val missingMultiplicity = this.minValue-existingMultiplicity
55 res += missingMultiplicity
56 }
57// if(missingMultiplicity!=0) {
58// println(targetRelationName+ " missing multiplicity: "+missingMultiplicity)
59// }
60 } 51 }
61// if(res>0) 52// if(res>0)
62// println(targetRelationName+ " all missing multiplicities: "+res + "*"+cost+"="+res*cost) 53// println(targetRelationName+ " all missing multiplicities: "+res + "*"+cost+"="+res*cost)
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 120fb18a..9b4dff0f 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
@@ -88,6 +88,7 @@ class PolyhedronScopePropagator extends TypeHierarchyScopePropagator {
88 val result = operator.saturate() 88 val result = operator.saturate()
89 if (result == PolyhedronSaturationResult.EMPTY) { 89 if (result == PolyhedronSaturationResult.EMPTY) {
90 cache.put(signature, PolyhedronSignature.EMPTY) 90 cache.put(signature, PolyhedronSignature.EMPTY)
91// println("INVALID")
91 setScopesInvalid() 92 setScopesInvalid()
92 } else { 93 } else {
93 val resultSignature = polyhedron.createSignature 94 val resultSignature = polyhedron.createSignature
@@ -110,11 +111,8 @@ class PolyhedronScopePropagator extends TypeHierarchyScopePropagator {
110 } 111 }
111 } 112 }
112 113
113 override propagateAdditionToRelation(Relation r) { 114 override isPropagationNeededAfterAdditionToRelation(Relation r) {
114 super.propagateAdditionToRelation(r) 115 relevantRelations.contains(r) || super.isPropagationNeededAfterAdditionToRelation(r)
115 if (relevantRelations.contains(r)) {
116 propagateAllScopeConstraints()
117 }
118 } 116 }
119 117
120 def resetBounds() { 118 def resetBounds() {
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 8f3a5bb0..8350c7f4 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
@@ -114,21 +114,21 @@ class ScopePropagator {
114 } 114 }
115 } 115 }
116 116
117 def void propagateAdditionToRelation(Relation r) { 117 def isPropagationNeededAfterAdditionToRelation(Relation r) {
118 // Nothing to propagate. 118 false
119 } 119 }
120 120
121 private def removeOne(Scope scope) { 121 private def removeOne(Scope scope) {
122 if (scope.maxNewElements === 0) {
123 throw new IllegalArgumentException('''Inconsistent object creation: «scope.targetTypeInterpretation»''')
124 } else if (scope.maxNewElements > 0) {
125 scope.maxNewElements = scope.maxNewElements - 1
126 }
127 if (scope.minNewElements > 0) { 122 if (scope.minNewElements > 0) {
128 scope.minNewElements = scope.minNewElements - 1 123 scope.minNewElements = scope.minNewElements - 1
129 } 124 }
130 if (scope.minNewElementsHeuristic > 0) { 125 if (scope.minNewElementsHeuristic > 0) {
131 scope.minNewElementsHeuristic = scope.minNewElementsHeuristic - 1 126 scope.minNewElementsHeuristic = scope.minNewElementsHeuristic - 1
132 } 127 }
128 if (scope.maxNewElements > 0) {
129 scope.maxNewElements = scope.maxNewElements - 1
130 } else if (scope.maxNewElements === 0) {
131 setScopesInvalid()
132 }
133 } 133 }
134} 134}