diff options
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality')
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 | } |