diff options
Diffstat (limited to 'Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/NumericTranslator.xtend')
-rw-r--r-- | Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/NumericTranslator.xtend | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/NumericTranslator.xtend b/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/NumericTranslator.xtend new file mode 100644 index 00000000..89719b91 --- /dev/null +++ b/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/NumericTranslator.xtend | |||
@@ -0,0 +1,64 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.viatra2logic | ||
2 | |||
3 | import org.eclipse.xtext.xbase.XExpression | ||
4 | import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExpressionEvaluation | ||
5 | import org.eclipse.xtext.common.types.JvmIdentifiableElement | ||
6 | import java.util.Set | ||
7 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PrimitiveElement | ||
8 | import java.util.Map | ||
9 | import com.microsoft.z3.BoolExpr | ||
10 | import org.eclipse.viatra.query.runtime.matchers.psystem.PConstraint | ||
11 | import java.util.Map.Entry | ||
12 | import org.eclipse.xtext.xbase.XFeatureCall | ||
13 | import java.util.Comparator | ||
14 | import java.util.ArrayList | ||
15 | import java.util.HashMap | ||
16 | import java.util.List | ||
17 | |||
18 | class NumericTranslator { | ||
19 | |||
20 | private XExpressionExtractor extractor = new XExpressionExtractor(); | ||
21 | |||
22 | val comparator = new Comparator<JvmIdentifiableElement>(){ | ||
23 | override compare(JvmIdentifiableElement o1, JvmIdentifiableElement o2) { | ||
24 | //println('''«o1.simpleName» - «o2.simpleName»''') | ||
25 | o1.simpleName.compareTo(o2.simpleName) | ||
26 | } | ||
27 | } | ||
28 | def Map<JvmIdentifiableElement, PrimitiveElement> arrayToMap(Object[] tuple, ArrayList<JvmIdentifiableElement> variablesInOrder) { | ||
29 | val res = new HashMap | ||
30 | for(var i=0; i<tuple.length; i++) { | ||
31 | res.put(variablesInOrder.get(i),tuple.get(i) as PrimitiveElement) | ||
32 | } | ||
33 | return res | ||
34 | } | ||
35 | def formNumericProblemInstance(Map<PConstraint, Iterable<Object[]>> matches) throws Exception { | ||
36 | val res = new HashMap | ||
37 | for (Entry<PConstraint, Iterable<Object[]>> entry: matches.entrySet()) { | ||
38 | val ExpressionEvaluation constraint = entry.getKey() as ExpressionEvaluation; | ||
39 | val XExpression expression = extractor.extractExpression(constraint.getEvaluator()); | ||
40 | val Iterable<Object[]> tuples = entry.getValue(); | ||
41 | val features = expression.eAllContents.filter(XFeatureCall).map[it.feature].toSet | ||
42 | val variablesInOrder = new ArrayList(features) | ||
43 | variablesInOrder.toList.sort(comparator) | ||
44 | //println(variablesInOrder) | ||
45 | val map = tuples.map[it.arrayToMap(variablesInOrder)] | ||
46 | res.put(expression,map) | ||
47 | } | ||
48 | return res | ||
49 | } | ||
50 | |||
51 | def delegateIsSatisfiable(Map<PConstraint, Iterable<Object[]>> matches) { | ||
52 | val input = formNumericProblemInstance(matches) | ||
53 | val solver = new NumericProblemSolver | ||
54 | val satisfiability = solver.isSatisfiable(input) | ||
55 | return satisfiability | ||
56 | } | ||
57 | |||
58 | def delegateGetSolution(List<PrimitiveElement> primitiveElements, Map<PConstraint, Iterable<Object[]>> matches) { | ||
59 | val input = formNumericProblemInstance(matches) | ||
60 | val solver = new NumericProblemSolver | ||
61 | val solution = solver.getOneSolution(primitiveElements,input) | ||
62 | return solution | ||
63 | } | ||
64 | } \ No newline at end of file | ||