diff options
author | 20001LastOrder <boqi.chen@mail.mcgill.ca> | 2020-11-04 01:16:22 -0500 |
---|---|---|
committer | 20001LastOrder <boqi.chen@mail.mcgill.ca> | 2020-11-04 01:16:22 -0500 |
commit | 93243cb3faf1ccd733081fcf380559ac03c9ad35 (patch) | |
tree | 421f9f174eb77c387b5acaa05f01e64a62cab3a7 /Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/MultiplicityGoalConstraintCalculator.xtend | |
parent | add realistic solver (diff) | |
parent | Optimizing generator with linear objective functions (diff) | |
download | VIATRA-Generator-93243cb3faf1ccd733081fcf380559ac03c9ad35.tar.gz VIATRA-Generator-93243cb3faf1ccd733081fcf380559ac03c9ad35.tar.zst VIATRA-Generator-93243cb3faf1ccd733081fcf380559ac03c9ad35.zip |
merge with current master, comment numerical solver related logging
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 | 57 |
1 files changed, 57 insertions, 0 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 new file mode 100644 index 00000000..273e0ac3 --- /dev/null +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/MultiplicityGoalConstraintCalculator.xtend | |||
@@ -0,0 +1,57 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality | ||
2 | |||
3 | import org.eclipse.emf.common.notify.Notifier | ||
4 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification | ||
5 | import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine | ||
6 | import org.eclipse.viatra.query.runtime.emf.EMFScope | ||
7 | |||
8 | class MultiplicityGoalConstraintCalculator { | ||
9 | val String targetRelationName | ||
10 | val IQuerySpecification<?> querySpecification | ||
11 | var MultiplicityCalculator<?> calculator | ||
12 | val boolean containment | ||
13 | val int lowerBound | ||
14 | val int cost | ||
15 | |||
16 | new(String targetRelationName, IQuerySpecification<?> querySpecification, boolean containment, int lowerBound, int cost) { | ||
17 | if (lowerBound <= 0) { | ||
18 | throw new IllegalArgumentException("Invalid lower bound: " + lowerBound) | ||
19 | } | ||
20 | this.targetRelationName = targetRelationName | ||
21 | this.querySpecification = querySpecification | ||
22 | this.calculator = null | ||
23 | this.containment = containment | ||
24 | this.lowerBound = lowerBound | ||
25 | this.cost = cost | ||
26 | } | ||
27 | |||
28 | new(MultiplicityGoalConstraintCalculator other) { | ||
29 | this.targetRelationName = other.targetRelationName | ||
30 | this.querySpecification = other.querySpecification | ||
31 | this.calculator = null | ||
32 | this.containment = other.containment | ||
33 | this.lowerBound = other.lowerBound | ||
34 | this.cost = other.cost | ||
35 | } | ||
36 | |||
37 | def getName() { | ||
38 | targetRelationName | ||
39 | } | ||
40 | |||
41 | def isContainment() { | ||
42 | return containment | ||
43 | } | ||
44 | |||
45 | def init(Notifier notifier) { | ||
46 | val engine = ViatraQueryEngine.on(new EMFScope(notifier)) | ||
47 | val matcher = querySpecification.getMatcher(engine) | ||
48 | calculator = RemainingMultiplicityCalculator.of(matcher, lowerBound) | ||
49 | } | ||
50 | |||
51 | def calculateValue() { | ||
52 | val res = calculator.multiplicity | ||
53 | // if(res>0) | ||
54 | // println(targetRelationName+ " all missing multiplicities: "+res + "*"+cost+"="+res*cost) | ||
55 | return res*cost | ||
56 | } | ||
57 | } | ||