diff options
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/PolyhedronSolver.xtend')
-rw-r--r-- | Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/PolyhedronSolver.xtend | 72 |
1 files changed, 64 insertions, 8 deletions
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/PolyhedronSolver.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/PolyhedronSolver.xtend index 9c6cb82e..4e046190 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/PolyhedronSolver.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/PolyhedronSolver.xtend | |||
@@ -3,6 +3,7 @@ package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality | |||
3 | import java.util.List | 3 | import java.util.List |
4 | import java.util.Map | 4 | import java.util.Map |
5 | import org.eclipse.xtend.lib.annotations.Accessors | 5 | import org.eclipse.xtend.lib.annotations.Accessors |
6 | import org.eclipse.xtend.lib.annotations.Data | ||
6 | import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor | 7 | import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor |
7 | 8 | ||
8 | interface PolyhedronSolver { | 9 | interface PolyhedronSolver { |
@@ -52,16 +53,66 @@ class Polyhedron { | |||
52 | val List<LinearBoundedExpression> expressionsToSaturate | 53 | val List<LinearBoundedExpression> expressionsToSaturate |
53 | 54 | ||
54 | override toString() ''' | 55 | override toString() ''' |
55 | Dimensions: | 56 | Dimensions: |
56 | «FOR dimension : dimensions» | 57 | «FOR dimension : dimensions» |
57 | «dimension» | 58 | «dimension» |
58 | «ENDFOR» | 59 | «ENDFOR» |
59 | Constraints: | 60 | Constraints: |
60 | «FOR constraint : constraints» | 61 | «FOR constraint : constraints» |
61 | «constraint» | 62 | «constraint» |
62 | «ENDFOR» | 63 | «ENDFOR» |
63 | ''' | 64 | ''' |
64 | 65 | ||
66 | def createSignature() { | ||
67 | val size = dimensions.size + constraints.size | ||
68 | val lowerBounds = newArrayOfSize(size) | ||
69 | val upperBounds = newArrayOfSize(size) | ||
70 | var int i = 0 | ||
71 | for (dimension : dimensions) { | ||
72 | lowerBounds.set(i, dimension.lowerBound) | ||
73 | upperBounds.set(i, dimension.upperBound) | ||
74 | i++ | ||
75 | } | ||
76 | for (constraint : constraints) { | ||
77 | lowerBounds.set(i, constraint.lowerBound) | ||
78 | upperBounds.set(i, constraint.upperBound) | ||
79 | i++ | ||
80 | } | ||
81 | new PolyhedronSignature.Bounds(lowerBounds, upperBounds) | ||
82 | } | ||
83 | |||
84 | def applySignature(PolyhedronSignature.Bounds signature) { | ||
85 | val lowerBounds = signature.lowerBounds | ||
86 | val upperBounds = signature.upperBounds | ||
87 | var int i = 0 | ||
88 | for (dimension : dimensions) { | ||
89 | dimension.lowerBound = lowerBounds.get(i) | ||
90 | dimension.upperBound = upperBounds.get(i) | ||
91 | i++ | ||
92 | } | ||
93 | for (constraint : constraints) { | ||
94 | constraint.lowerBound = lowerBounds.get(i) | ||
95 | constraint.upperBound = upperBounds.get(i) | ||
96 | i++ | ||
97 | } | ||
98 | } | ||
99 | } | ||
100 | |||
101 | abstract class PolyhedronSignature { | ||
102 | public static val EMPTY = new PolyhedronSignature { | ||
103 | override toString() { | ||
104 | "PolyhedronSignature.EMPTY" | ||
105 | } | ||
106 | } | ||
107 | |||
108 | private new() { | ||
109 | } | ||
110 | |||
111 | @Data | ||
112 | static class Bounds extends PolyhedronSignature { | ||
113 | val Integer[] lowerBounds | ||
114 | val Integer[] upperBounds | ||
115 | } | ||
65 | } | 116 | } |
66 | 117 | ||
67 | @Accessors | 118 | @Accessors |
@@ -80,6 +131,11 @@ abstract class LinearBoundedExpression { | |||
80 | upperBound = tighterBound | 131 | upperBound = tighterBound |
81 | } | 132 | } |
82 | } | 133 | } |
134 | |||
135 | def void assertEqualsTo(int bound) { | ||
136 | tightenLowerBound(bound) | ||
137 | tightenUpperBound(bound) | ||
138 | } | ||
83 | } | 139 | } |
84 | 140 | ||
85 | @Accessors | 141 | @Accessors |