aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/MultiplicityGoalConstraintCalculator.xtend
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <marussy@mit.bme.hu>2020-06-28 20:33:48 +0200
committerLibravatar Kristóf Marussy <marussy@mit.bme.hu>2020-06-28 20:33:48 +0200
commit07ae9155ce0ab9407566b075356f9b7220ee8380 (patch)
tree5c088de7741b575e6fb5b517bb694428f80c661c /Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/MultiplicityGoalConstraintCalculator.xtend
parentFix scope + numerical propagation WIP (diff)
downloadVIATRA-Generator-07ae9155ce0ab9407566b075356f9b7220ee8380.tar.gz
VIATRA-Generator-07ae9155ce0ab9407566b075356f9b7220ee8380.tar.zst
VIATRA-Generator-07ae9155ce0ab9407566b075356f9b7220ee8380.zip
Fix scope + numerical solver interaction
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/MultiplicityGoalConstraintCalculator.xtend')
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/MultiplicityGoalConstraintCalculator.xtend22
1 files changed, 10 insertions, 12 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 b28cd584..392ab3ee 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
@@ -3,29 +3,31 @@ package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality
3import org.eclipse.emf.common.notify.Notifier 3import org.eclipse.emf.common.notify.Notifier
4import org.eclipse.viatra.query.runtime.api.IQuerySpecification 4import org.eclipse.viatra.query.runtime.api.IQuerySpecification
5import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine 5import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine
6import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher
7import org.eclipse.viatra.query.runtime.emf.EMFScope 6import org.eclipse.viatra.query.runtime.emf.EMFScope
8 7
9class MultiplicityGoalConstraintCalculator { 8class MultiplicityGoalConstraintCalculator {
10 val String targetRelationName 9 val String targetRelationName
11 val IQuerySpecification<?> querySpecification 10 val IQuerySpecification<?> querySpecification
12 var ViatraQueryMatcher<?> matcher 11 var MultiplicityCalculator<?> calculator
13 val boolean containment 12 val boolean containment
13 val int lowerBound
14 val int cost 14 val int cost
15 15
16 public new(String targetRelationName, IQuerySpecification<?> querySpecification, boolean containment, int cost) { 16 new(String targetRelationName, IQuerySpecification<?> querySpecification, boolean containment, int lowerBound, int cost) {
17 this.targetRelationName = targetRelationName 17 this.targetRelationName = targetRelationName
18 this.querySpecification = querySpecification 18 this.querySpecification = querySpecification
19 this.matcher = null 19 this.calculator = null
20 this.containment = containment 20 this.containment = containment
21 this.lowerBound = lowerBound
21 this.cost = cost 22 this.cost = cost
22 } 23 }
23 24
24 new(MultiplicityGoalConstraintCalculator other) { 25 new(MultiplicityGoalConstraintCalculator other) {
25 this.targetRelationName = other.targetRelationName 26 this.targetRelationName = other.targetRelationName
26 this.querySpecification = other.querySpecification 27 this.querySpecification = other.querySpecification
27 this.matcher = null 28 this.calculator = null
28 this.containment = other.containment 29 this.containment = other.containment
30 this.lowerBound = other.lowerBound
29 this.cost = other.cost 31 this.cost = other.cost
30 } 32 }
31 33
@@ -39,16 +41,12 @@ class MultiplicityGoalConstraintCalculator {
39 41
40 def init(Notifier notifier) { 42 def init(Notifier notifier) {
41 val engine = ViatraQueryEngine.on(new EMFScope(notifier)) 43 val engine = ViatraQueryEngine.on(new EMFScope(notifier))
42 matcher = querySpecification.getMatcher(engine) 44 val matcher = querySpecification.getMatcher(engine)
45 calculator = RemainingMultiplicityCalculator.of(matcher, lowerBound)
43 } 46 }
44 47
45 def calculateValue() { 48 def calculateValue() {
46 var res = 0 49 val res = calculator.multiplicity
47 val allMatches = this.matcher.allMatches
48 for(match : allMatches) {
49 val missingMultiplicity = match.get(2) as Integer
50 res += missingMultiplicity
51 }
52// if(res>0) 50// if(res>0)
53// println(targetRelationName+ " all missing multiplicities: "+res + "*"+cost+"="+res*cost) 51// println(targetRelationName+ " all missing multiplicities: "+res + "*"+cost+"="+res*cost)
54 return res*cost 52 return res*cost