diff options
author | 2020-06-28 20:33:48 +0200 | |
---|---|---|
committer | 2020-06-28 20:33:48 +0200 | |
commit | 07ae9155ce0ab9407566b075356f9b7220ee8380 (patch) | |
tree | 5c088de7741b575e6fb5b517bb694428f80c661c /Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/MultiplicityGoalConstraintCalculator.xtend | |
parent | Fix scope + numerical propagation WIP (diff) | |
download | VIATRA-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.xtend | 22 |
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 | |||
3 | import org.eclipse.emf.common.notify.Notifier | 3 | import org.eclipse.emf.common.notify.Notifier |
4 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification | 4 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification |
5 | import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine | 5 | import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine |
6 | import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher | ||
7 | import org.eclipse.viatra.query.runtime.emf.EMFScope | 6 | import org.eclipse.viatra.query.runtime.emf.EMFScope |
8 | 7 | ||
9 | class MultiplicityGoalConstraintCalculator { | 8 | class 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 |