aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/NumericSolver.xtend
diff options
context:
space:
mode:
authorLibravatar Oszkar Semerath <semerath@mit.bme.hu>2020-05-11 02:22:15 +0200
committerLibravatar Oszkar Semerath <semerath@mit.bme.hu>2020-05-11 02:22:15 +0200
commit91b772506f00ce2e317027dd384b82dc7a1295fd (patch)
tree19fd1b945cae52a4b32357f48ee2da3aa7ca1d5b /Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/NumericSolver.xtend
parentautomated containment and attribute addition for subclasses (diff)
downloadVIATRA-Generator-91b772506f00ce2e317027dd384b82dc7a1295fd.tar.gz
VIATRA-Generator-91b772506f00ce2e317027dd384b82dc7a1295fd.tar.zst
VIATRA-Generator-91b772506f00ce2e317027dd384b82dc7a1295fd.zip
separated must and current UP rules to support non-prop neg finds
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/NumericSolver.xtend')
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/NumericSolver.xtend58
1 files changed, 35 insertions, 23 deletions
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/NumericSolver.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/NumericSolver.xtend
index 71793aa6..fe378bd3 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/NumericSolver.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/NumericSolver.xtend
@@ -1,30 +1,29 @@
1package hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse 1package hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse
2 2
3import hu.bme.mit.inf.dslreasoner.viatra2logic.NumericProblemSolver
4import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationMethod
5import java.util.HashMap
6import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine
7import org.eclipse.viatra.query.runtime.api.IPatternMatch
8import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher
9import org.eclipse.viatra.query.runtime.matchers.psystem.PConstraint
10import hu.bme.mit.inf.dslreasoner.viatra2logic.NumericTranslator 3import hu.bme.mit.inf.dslreasoner.viatra2logic.NumericTranslator
11import org.eclipse.viatra.dse.base.ThreadContext 4import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationMethod
12import org.eclipse.emf.ecore.EObject
13import java.util.Map
14import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
15import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PrimitiveElement
16import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.BooleanElement 5import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.BooleanElement
17import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.IntegerElement 6import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.IntegerElement
18import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.StringElement 7import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
8import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PrimitiveElement
19import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.RealElement 9import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.RealElement
20import java.util.List 10import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.StringElement
21import java.math.BigDecimal 11import java.math.BigDecimal
22import java.util.LinkedHashSet 12import java.util.HashMap
23import java.util.LinkedHashMap 13import java.util.LinkedHashMap
14import java.util.LinkedHashSet
15import java.util.List
16import java.util.Map
17import org.eclipse.emf.ecore.EObject
18import org.eclipse.viatra.dse.base.ThreadContext
19import org.eclipse.viatra.query.runtime.api.IPatternMatch
20import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher
21import org.eclipse.viatra.query.runtime.matchers.psystem.PConstraint
24 22
25class NumericSolver { 23class NumericSolver {
26 val ThreadContext threadContext; 24 val ThreadContext threadContext;
27 val constraint2UnitPropagationPrecondition = new HashMap<PConstraint,ViatraQueryMatcher<? extends IPatternMatch>> 25 val constraint2MustUnitPropagationPrecondition = new HashMap<PConstraint,ViatraQueryMatcher<? extends IPatternMatch>>
26 val constraint2CurrentUnitPropagationPrecondition = new HashMap<PConstraint,ViatraQueryMatcher<? extends IPatternMatch>>
28 NumericTranslator t = new NumericTranslator 27 NumericTranslator t = new NumericTranslator
29 28
30 val boolean caching; 29 val boolean caching;
@@ -38,11 +37,17 @@ class NumericSolver {
38 new(ThreadContext threadContext, ModelGenerationMethod method, boolean caching) { 37 new(ThreadContext threadContext, ModelGenerationMethod method, boolean caching) {
39 this.threadContext = threadContext 38 this.threadContext = threadContext
40 val engine = threadContext.queryEngine 39 val engine = threadContext.queryEngine
41 for(entry : method.unitPropagationPreconditions.entrySet) { 40 for(entry : method.mustUnitPropagationPreconditions.entrySet) {
41 val constraint = entry.key
42 val querySpec = entry.value
43 val matcher = querySpec.getMatcher(engine);
44 constraint2MustUnitPropagationPrecondition.put(constraint,matcher)
45 }
46 for(entry : method.currentUnitPropagationPreconditions.entrySet) {
42 val constraint = entry.key 47 val constraint = entry.key
43 val querySpec = entry.value 48 val querySpec = entry.value
44 val matcher = querySpec.getMatcher(engine); 49 val matcher = querySpec.getMatcher(engine);
45 constraint2UnitPropagationPrecondition.put(constraint,matcher) 50 constraint2CurrentUnitPropagationPrecondition.put(constraint,matcher)
46 } 51 }
47 this.caching = caching 52 this.caching = caching
48 } 53 }
@@ -52,14 +57,21 @@ class NumericSolver {
52 def getNumberOfSolverCalls(){numberOfSolverCalls} 57 def getNumberOfSolverCalls(){numberOfSolverCalls}
53 def getNumberOfCachedSolverCalls(){numberOfCachedSolverCalls} 58 def getNumberOfCachedSolverCalls(){numberOfCachedSolverCalls}
54 59
55 def boolean isSatisfiable() { 60 def boolean maySatisfiable() {
61 isSatisfiable(this.constraint2MustUnitPropagationPrecondition)
62 }
63 def boolean currentSatisfiable() {
64 isSatisfiable(this.constraint2CurrentUnitPropagationPrecondition)
65 }
66
67 private def boolean isSatisfiable(Map<PConstraint,ViatraQueryMatcher<? extends IPatternMatch>> matches) {
56 val start = System.nanoTime 68 val start = System.nanoTime
57 var boolean finalResult 69 var boolean finalResult
58 if(constraint2UnitPropagationPrecondition.empty){ 70 if(matches.empty){
59 finalResult=true 71 finalResult=true
60 } else { 72 } else {
61 val propagatedConstraints = new HashMap 73 val propagatedConstraints = new HashMap
62 for(entry : constraint2UnitPropagationPrecondition.entrySet) { 74 for(entry : matches.entrySet) {
63 val constraint = entry.key 75 val constraint = entry.key
64 //println(constraint) 76 //println(constraint)
65 val allMatches = entry.value.allMatches.map[it.toArray] 77 val allMatches = entry.value.allMatches.map[it.toArray]
@@ -108,11 +120,11 @@ class NumericSolver {
108 def fillSolutionCopy(Map<EObject, EObject> trace) { 120 def fillSolutionCopy(Map<EObject, EObject> trace) {
109 val model = threadContext.getModel as PartialInterpretation 121 val model = threadContext.getModel as PartialInterpretation
110 val dataObjects = model.newElements.filter(PrimitiveElement).filter[!model.openWorldElements.contains(it)].toList 122 val dataObjects = model.newElements.filter(PrimitiveElement).filter[!model.openWorldElements.contains(it)].toList
111 if(constraint2UnitPropagationPrecondition.empty) { 123 if(constraint2CurrentUnitPropagationPrecondition.empty) {
112 fillWithDefaultValues(dataObjects,trace) 124 fillWithDefaultValues(dataObjects,trace)
113 } else { 125 } else {
114 val propagatedConstraints = new HashMap 126 val propagatedConstraints = new HashMap
115 for(entry : constraint2UnitPropagationPrecondition.entrySet) { 127 for(entry : constraint2CurrentUnitPropagationPrecondition.entrySet) {
116 val constraint = entry.key 128 val constraint = entry.key
117 val allMatches = entry.value.allMatches.map[it.toArray] 129 val allMatches = entry.value.allMatches.map[it.toArray]
118 propagatedConstraints.put(constraint,allMatches) 130 propagatedConstraints.put(constraint,allMatches)