aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/optimization/ObjectiveKind.java
blob: cbbaaafd4e39420d35391e160ff1d1b71122d478 (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
package hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization;

import java.util.Comparator;

import org.eclipse.viatra.dse.objectives.Comparators;

public enum ObjectiveKind {
	LOWER_IS_BETTER {

		@Override
		public Comparator<Double> getComparator() {
			return Comparators.LOWER_IS_BETTER;
		}

		@Override
		public double getInvalidValue() {
			return Double.POSITIVE_INFINITY;
		}

		@Override
		public double getSatisfiedValue() {
			return Double.NEGATIVE_INFINITY;
		}

	},
	HIGHER_IS_BETTER {

		@Override
		public Comparator<Double> getComparator() {
			return Comparators.HIGHER_IS_BETTER;
		}

		@Override
		public double getInvalidValue() {
			return Double.NEGATIVE_INFINITY;
		}

		@Override
		public double getSatisfiedValue() {
			return Double.POSITIVE_INFINITY;
		}

	};

	public abstract Comparator<Double> getComparator();

	public abstract double getInvalidValue();

	public abstract double getSatisfiedValue();

	public static ObjectiveKind fromComparator(Comparator<Double> comparator) {
		if (Comparators.LOWER_IS_BETTER.equals(comparator)) {
			return ObjectiveKind.LOWER_IS_BETTER;
		} else if (Comparators.HIGHER_IS_BETTER.equals(comparator)) {
			return ObjectiveKind.HIGHER_IS_BETTER;
		} else {
			throw new IllegalStateException("Only LOWER_IS_BETTER and HIGHER_IS_BETTER comparators are supported.");
		}
	}
}