-
Notifications
You must be signed in to change notification settings - Fork 56
Expand file tree
/
Copy pathAbstractOptimizationProver.java
More file actions
71 lines (59 loc) · 2.45 KB
/
AbstractOptimizationProver.java
File metadata and controls
71 lines (59 loc) · 2.45 KB
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 org.sosy_lab.java_smt.basicimpl;
import org.sosy_lab.common.log.LogManager;
import org.sosy_lab.java_smt.api.BasicProverEnvironment;
import org.sosy_lab.java_smt.api.Formula;
import org.sosy_lab.java_smt.api.FormulaManager;
import org.sosy_lab.java_smt.api.OptimizationProverEnvironment;
import org.sosy_lab.java_smt.api.SolverException;
import org.sosy_lab.common.rationals.Rational;
import java.util.Collection;
import java.util.Optional;
public abstract class AbstractOptimizationProver extends AbstractProver implements OptimizationProverEnvironment {
protected final LogManager logger;
protected final FormulaManager formulaManager;
protected AbstractOptimizationProver(LogManager pLogger, FormulaManager pMgr) {
this.logger = pLogger;
this.formulaManager = pMgr;
}
@Override
public boolean isOptimizationSupported() {
return false; // Default implementation
}
@Override
public int maximize(Formula objective) {
if (!isOptimizationSupported()) {
throw new UnsupportedOperationException(
"Optimization not supported by " + getSolverName());
}
return maximizeInternal(objective);
}
@Override
public int minimize(Formula objective) {
if (!isOptimizationSupported()) {
throw new UnsupportedOperationException(
"Optimization not supported by " + getSolverName());
}
return minimizeInternal(objective);
}
protected abstract int maximizeInternal(Formula objective);
protected abstract int minimizeInternal(Formula objective);
protected abstract String getSolverName();
@Override
public Optional<Rational> upper(int handle, Rational epsilon) {
if (!isOptimizationSupported()) {
throw new UnsupportedOperationException(
"Optimization not supported by " + getSolverName());
}
return upperInternal(handle, epsilon);
}
@Override
public Optional<Rational> lower(int handle, Rational epsilon) {
if (!isOptimizationSupported()) {
throw new UnsupportedOperationException(
"Optimization not supported by " + getSolverName());
}
return lowerInternal(handle, epsilon);
}
protected abstract Optional<Rational> upperInternal(int handle, Rational epsilon);
protected abstract Optional<Rational> lowerInternal(int handle, Rational epsilon);
}