14package com.google.ortools.sat;
16import com.google.ortools.sat.CpSolverResponse;
17import com.google.ortools.sat.CpSolverStatus;
18import com.google.ortools.sat.SatParameters;
20import java.util.function.Consumer;
32 this.logCallback =
null;
33 this.bestBoundCallback =
null;
34 this.solveWrapper =
null;
39 return solve(model,
null);
49 solveWrapper.setParameters(solveParameters.build());
51 solveWrapper.addSolutionCallback(cb);
53 if (logCallback !=
null) {
54 solveWrapper.addLogCallback(logCallback);
56 if (bestBoundCallback !=
null) {
57 solveWrapper.addBestBoundCallback(bestBoundCallback);
60 solveResponse = solveWrapper.solve(model.
model());
64 solveWrapper.clearSolutionCallback(cb);
66 releaseSolveWrapper();
68 return solveResponse.getStatus();
79 return solve(model, cb);
98 boolean oldValue = solveParameters.getEnumerateAllSolutions();
99 solveParameters.setEnumerateAllSolutions(
true);
101 solveParameters.setEnumerateAllSolutions(oldValue);
105 private synchronized void createSolveWrapper() {
109 private synchronized void releaseSolveWrapper() {
115 if (solveWrapper !=
null) {
116 solveWrapper.stopSearch();
122 return solveResponse.getObjectiveValue();
130 return solveResponse.getBestObjectiveBound();
147 return solveResponse.getSolution(index) != 0;
149 return solveResponse.getSolution(-index - 1) == 0;
155 return solveResponse;
160 return solveResponse.getNumBranches();
165 return solveResponse.getNumConflicts();
170 return solveResponse.getWallTime();
175 return solveResponse.getUserTime();
179 return solveResponse.getSufficientAssumptionsForInfeasibilityList();
184 return solveParameters;
189 this.logCallback = cb;
194 this.logCallback =
null;
199 this.bestBoundCallback = cb;
204 this.bestBoundCallback =
null;
217 return solveResponse.getSolutionInfo();
222 private Consumer<String> logCallback;
223 private Consumer<Double> bestBoundCallback;