diff options
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.xtend | 32 |
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 | |||
13 | import java.math.MathContext | 13 | import java.math.MathContext |
14 | import java.math.RoundingMode | 14 | import java.math.RoundingMode |
15 | import java.util.Map | 15 | import java.util.Map |
16 | import org.eclipse.xtend.lib.annotations.Accessors | ||
16 | import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor | 17 | import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor |
17 | 18 | ||
18 | class Z3PolyhedronSolver implements PolyhedronSolver { | 19 | class 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 | ||
41 | class 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 | |||
35 | class Z3SaturationOperator extends AbstractPolyhedronSaturationOperator { | 59 | class 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 |