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();
71 private synchronized void createSolveWrapper() {
75 private synchronized void releaseSolveWrapper() {
81 if (solveWrapper !=
null) {
82 solveWrapper.stopSearch();
88 return solveResponse.getObjectiveValue();
96 return solveResponse.getBestObjectiveBound();
113 return solveResponse.getSolution(index) != 0;
115 return solveResponse.getSolution(-index - 1) == 0;
121 return solveResponse;
126 return solveResponse.getNumBranches();
131 return solveResponse.getNumConflicts();
136 return solveResponse.getWallTime();
141 return solveResponse.getUserTime();
145 return solveResponse.getSufficientAssumptionsForInfeasibilityList();
150 return solveParameters;
155 this.logCallback = cb;
160 this.logCallback =
null;
165 this.bestBoundCallback = cb;
170 this.bestBoundCallback =
null;
183 return solveResponse.getSolutionInfo();
188 return solveResponse.getSolutionInfo();
196 return solveResponse.getSolveLog();
201 private Consumer<String> logCallback;
202 private Consumer<Double> bestBoundCallback;