Google OR-Tools v9.9
a fast and portable software suite for combinatorial optimization
Loading...
Searching...
No Matches
CpSolver.java
Go to the documentation of this file.
1// Copyright 2010-2024 Google LLC
2// Licensed under the Apache License, Version 2.0 (the "License");
3// you may not use this file except in compliance with the License.
4// You may obtain a copy of the License at
5//
6// http://www.apache.org/licenses/LICENSE-2.0
7//
8// Unless required by applicable law or agreed to in writing, software
9// distributed under the License is distributed on an "AS IS" BASIS,
10// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11// See the License for the specific language governing permissions and
12// limitations under the License.
13
14package com.google.ortools.sat;
15
16import com.google.ortools.sat.CpSolverResponse;
17import com.google.ortools.sat.CpSolverStatus;
18import com.google.ortools.sat.SatParameters;
19import java.util.List;
20import java.util.function.Consumer;
21
28public final class CpSolver {
30 public CpSolver() {
31 this.solveParameters = SatParameters.newBuilder();
32 this.logCallback = null;
33 this.solveWrapper = null;
34 }
35
38 return solveWithSolutionCallback(model, null);
39 }
40
46 // Setup search.
47 createSolveWrapper(); // Synchronized.
48 solveWrapper.setParameters(solveParameters.build());
49 if (cb != null) {
50 solveWrapper.addSolutionCallback(cb);
51 }
52 if (logCallback != null) {
53 solveWrapper.addLogCallback(logCallback);
54 }
55
56 solveResponse = solveWrapper.solve(model.model());
57
58 // Cleanup search.
59 if (cb != null) {
60 solveWrapper.clearSolutionCallback(cb);
61 }
62 releaseSolveWrapper(); // Synchronized.
63
64 return solveResponse.getStatus();
65 }
66
73 @Deprecated
75 return solve(model, cb);
76 }
77
92 @Deprecated
94 boolean oldValue = solveParameters.getEnumerateAllSolutions();
95 solveParameters.setEnumerateAllSolutions(true);
96 solve(model, cb);
97 solveParameters.setEnumerateAllSolutions(oldValue);
98 return solveResponse.getStatus();
99 }
100
101 private synchronized void createSolveWrapper() {
102 solveWrapper = new SolveWrapper();
103 }
104
105 private synchronized void releaseSolveWrapper() {
106 solveWrapper = null;
107 }
108
110 public synchronized void stopSearch() {
111 if (solveWrapper != null) {
112 solveWrapper.stopSearch();
113 }
114 }
115
117 public double objectiveValue() {
118 return solveResponse.getObjectiveValue();
119 }
120
125 public double bestObjectiveBound() {
126 return solveResponse.getBestObjectiveBound();
127 }
128
130 public long value(LinearArgument expr) {
131 final LinearExpr e = expr.build();
132 long result = e.getOffset();
133 for (int i = 0; i < e.numElements(); ++i) {
134 result += solveResponse.getSolution(e.getVariableIndex(i)) * e.getCoefficient(i);
135 }
136 return result;
137 }
138
140 public Boolean booleanValue(Literal var) {
141 int index = var.getIndex();
142 if (index >= 0) {
143 return solveResponse.getSolution(index) != 0;
144 } else {
145 return solveResponse.getSolution(-index - 1) == 0;
146 }
147 }
148
151 return solveResponse;
152 }
153
155 public long numBranches() {
156 return solveResponse.getNumBranches();
157 }
158
160 public long numConflicts() {
161 return solveResponse.getNumConflicts();
162 }
163
165 public double wallTime() {
166 return solveResponse.getWallTime();
167 }
168
170 public double userTime() {
171 return solveResponse.getUserTime();
172 }
173
176 }
177
179 public SatParameters.Builder getParameters() {
180 return solveParameters;
181 }
182
184 public void setLogCallback(Consumer<String> cb) {
185 this.logCallback = cb;
186 }
187
189 public String responseStats() {
190 return CpSatHelper.solverResponseStats(solveResponse);
191 }
192
197 public String getSolutionInfo() {
198 return solveResponse.getSolutionInfo();
199 }
200
201 private CpSolverResponse solveResponse;
202 private final SatParameters.Builder solveParameters;
203 private Consumer<String> logCallback;
204 private SolveWrapper solveWrapper;
205}
CpModelProto model()
Getters.
static String solverResponseStats(com.google.ortools.sat.CpSolverResponse response)
java.util.List< java.lang.Integer > getSufficientAssumptionsForInfeasibilityList()
com.google.ortools.sat.CpSolverStatus getStatus()
synchronized void stopSearch()
SatParameters.Builder getParameters()
long value(LinearArgument expr)
void setLogCallback(Consumer< String > cb)
CpSolverResponse response()
Boolean booleanValue(Literal var)
CpSolverStatus solve(CpModel model, CpSolverSolutionCallback cb)
Definition CpSolver.java:45
CpSolverStatus solveWithSolutionCallback(CpModel model, CpSolverSolutionCallback cb)
Definition CpSolver.java:74
CpSolverStatus solve(CpModel model)
Definition CpSolver.java:37
List< Integer > sufficientAssumptionsForInfeasibility()
CpSolverStatus searchAllSolutions(CpModel model, CpSolverSolutionCallback cb)
Definition CpSolver.java:93
void addSolutionCallback(SolutionCallback callback)
void addLogCallback(java.util.function.Consumer< String > log_callback)
void clearSolutionCallback(SolutionCallback callback)
void setParameters(com.google.ortools.sat.SatParameters parameters)
com.google.ortools.sat.CpSolverResponse solve(com.google.ortools.sat.CpModelProto model_proto)