aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/Z3PolyhedronSolver.xtend
diff options
context:
space:
mode:
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/Z3PolyhedronSolver.xtend')
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/Z3PolyhedronSolver.xtend32
1 files changed, 28 insertions, 4 deletions
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/Z3PolyhedronSolver.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/Z3PolyhedronSolver.xtend
index 23444956..3b831433 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/Z3PolyhedronSolver.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/Z3PolyhedronSolver.xtend
@@ -13,6 +13,7 @@ import java.math.BigDecimal
13import java.math.MathContext 13import java.math.MathContext
14import java.math.RoundingMode 14import java.math.RoundingMode
15import java.util.Map 15import java.util.Map
16import org.eclipse.xtend.lib.annotations.Accessors
16import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor 17import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor
17 18
18class Z3PolyhedronSolver implements PolyhedronSolver { 19class Z3PolyhedronSolver implements PolyhedronSolver {
@@ -28,10 +29,33 @@ class Z3PolyhedronSolver implements PolyhedronSolver {
28 } 29 }
29 30
30 override createSaturationOperator(Polyhedron polyhedron) { 31 override createSaturationOperator(Polyhedron polyhedron) {
32 new DisposingZ3SaturationOperator(this, polyhedron)
33 }
34
35 def createPersistentSaturationOperator(Polyhedron polyhedron) {
31 new Z3SaturationOperator(polyhedron, lpRelaxation, timeoutSeconds) 36 new Z3SaturationOperator(polyhedron, lpRelaxation, timeoutSeconds)
32 } 37 }
33} 38}
34 39
40@FinalFieldsConstructor
41class DisposingZ3SaturationOperator implements PolyhedronSaturationOperator {
42 val Z3PolyhedronSolver solver
43 @Accessors val Polyhedron polyhedron
44
45 override saturate() {
46 val persistentOperator = solver.createPersistentSaturationOperator(polyhedron)
47 try {
48 persistentOperator.saturate
49 } finally {
50 persistentOperator.close
51 }
52 }
53
54 override close() throws Exception {
55 // Nothing to close.
56 }
57}
58
35class Z3SaturationOperator extends AbstractPolyhedronSaturationOperator { 59class Z3SaturationOperator extends AbstractPolyhedronSaturationOperator {
36 static val INFINITY_SYMBOL_NAME = "oo" 60 static val INFINITY_SYMBOL_NAME = "oo"
37 static val MULT_SYMBOL_NAME = "*" 61 static val MULT_SYMBOL_NAME = "*"
@@ -106,9 +130,9 @@ class Z3SaturationOperator extends AbstractPolyhedronSaturationOperator {
106 IntNum: 130 IntNum:
107 resultExpr.getInt() 131 resultExpr.getInt()
108 RatNum: 132 RatNum:
109 floor(resultExpr) 133 ceil(resultExpr)
110 AlgebraicNum: 134 AlgebraicNum:
111 floor(resultExpr.toLower(ALGEBRAIC_NUMBER_ROUNDING)) 135 ceil(resultExpr.toUpper(ALGEBRAIC_NUMBER_ROUNDING))
112 default: 136 default:
113 if (isNegativeInfinity(resultExpr)) { 137 if (isNegativeInfinity(resultExpr)) {
114 null 138 null
@@ -136,9 +160,9 @@ class Z3SaturationOperator extends AbstractPolyhedronSaturationOperator {
136 IntNum: 160 IntNum:
137 resultExpr.getInt() 161 resultExpr.getInt()
138 RatNum: 162 RatNum:
139 ceil(resultExpr) 163 floor(resultExpr)
140 AlgebraicNum: 164 AlgebraicNum:
141 ceil(resultExpr.toUpper(ALGEBRAIC_NUMBER_ROUNDING)) 165 floor(resultExpr.toLower(ALGEBRAIC_NUMBER_ROUNDING))
142 default: 166 default:
143 if (isPositiveInfinity(resultExpr)) { 167 if (isPositiveInfinity(resultExpr)) {
144 null 168 null