aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/ScopePropagatorStrategy.xtend
blob: 3165917a5e0cfa306f28455eca6e8779bf09537b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality

import org.eclipse.xtend.lib.annotations.Data
import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor

enum PolyhedralScopePropagatorConstraints {
	TypeHierarchy,
	Relational
}

enum PolyhedralScopePropagatorSolver {
	Z3Real,
	Z3Integer,
	Cbc,
	Clp
}

abstract class ScopePropagatorStrategy {
	public static val None = new Simple("None")
	
	public static val Basic = new Simple("Basic")

	public static val BasicTypeHierarchy = new Simple("BasicTypeHierarchy")

	private new() {
	}

	def boolean requiresUpperBoundIndexing()

	static class Simple extends ScopePropagatorStrategy {
		val String name

		@FinalFieldsConstructor
		private new() {
		}

		override requiresUpperBoundIndexing() {
			false
		}

		override toString() {
			name
		}
	}

	@Data
	static class Polyhedral extends ScopePropagatorStrategy {
		public static val UNLIMITED_TIME = -1

		val PolyhedralScopePropagatorConstraints constraints
		val PolyhedralScopePropagatorSolver solver
		val boolean updateHeuristic
		val double timeoutSeconds

		@FinalFieldsConstructor
		new() {
		}

		new(PolyhedralScopePropagatorConstraints constraints, PolyhedralScopePropagatorSolver solver, boolean updateHeuristic) {
			this(constraints, solver, updateHeuristic, UNLIMITED_TIME)
		}
		
		new(PolyhedralScopePropagatorConstraints constraints, PolyhedralScopePropagatorSolver solver) {
			this(constraints, solver, true)
		}

		override requiresUpperBoundIndexing() {
			constraints == PolyhedralScopePropagatorConstraints.Relational
		}
	}
}