Google OR-Tools v9.15
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-2025 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.bestBoundCallback = null;
34 this.solveWrapper = null;
35 }
36
39 return solve(model, null);
40 }
41
47 // Setup search.
48 createSolveWrapper(); // Synchronized.
49 solveWrapper.setParameters(solveParameters.build());
50 if (cb != null) {
51 solveWrapper.addSolutionCallback(cb);
52 }
53 if (logCallback != null) {
54 solveWrapper.addLogCallback(logCallback);
55 }
56 if (bestBoundCallback != null) {
57 solveWrapper.addBestBoundCallback(bestBoundCallback);
58 }
59
60 solveResponse = solveWrapper.solve(model.model());
61
62 // Cleanup search.
63 if (cb != null) {
64 solveWrapper.clearSolutionCallback(cb);
65 }
66 releaseSolveWrapper(); // Synchronized.
67
68 return solveResponse.getStatus();
69 }
70
71 private synchronized void createSolveWrapper() {
72 solveWrapper = new SolveWrapper();
73 }
74
75 private synchronized void releaseSolveWrapper() {
76 solveWrapper = null;
77 }
78
80 public synchronized void stopSearch() {
81 if (solveWrapper != null) {
82 solveWrapper.stopSearch();
83 }
84 }
85
87 public double objectiveValue() {
88 return solveResponse.getObjectiveValue();
89 }
90
95 public double bestObjectiveBound() {
96 return solveResponse.getBestObjectiveBound();
97 }
98
100 public long value(LinearArgument expr) {
101 final LinearExpr e = expr.build();
102 long result = e.getOffset();
103 for (int i = 0; i < e.numElements(); ++i) {
104 result += solveResponse.getSolution(e.getVariableIndex(i)) * e.getCoefficient(i);
105 }
106 return result;
107 }
108
110 public Boolean booleanValue(Literal var) {
111 int index = var.getIndex();
112 if (index >= 0) {
113 return solveResponse.getSolution(index) != 0;
114 } else {
115 return solveResponse.getSolution(-index - 1) == 0;
116 }
117 }
118
121 return solveResponse;
122 }
123
125 public long numBranches() {
126 return solveResponse.getNumBranches();
127 }
128
130 public long numConflicts() {
131 return solveResponse.getNumConflicts();
132 }
133
135 public double wallTime() {
136 return solveResponse.getWallTime();
137 }
138
140 public double userTime() {
141 return solveResponse.getUserTime();
142 }
143
145 return solveResponse.getSufficientAssumptionsForInfeasibilityList();
146 }
147
150 return solveParameters;
151 }
152
154 public void setLogCallback(Consumer<String> cb) {
155 this.logCallback = cb;
156 }
157
159 public void clearLogCallback() {
160 this.logCallback = null;
161 }
162
164 public void setBestBoundCallback(Consumer<Double> cb) {
165 this.bestBoundCallback = cb;
166 }
167
170 this.bestBoundCallback = null;
171 }
172
174 public String responseStats() {
175 return CpSatHelper.solverResponseStats(solveResponse);
176 }
177
182 public String solutionInfo() {
183 return solveResponse.getSolutionInfo();
184 }
185
187 public String getSolutionInfo() {
188 return solveResponse.getSolutionInfo();
189 }
190
195 public String solveLog() {
196 return solveResponse.getSolveLog();
197 }
198
199 private CpSolverResponse solveResponse;
200 private final SatParameters.Builder solveParameters;
201 private Consumer<String> logCallback;
202 private Consumer<Double> bestBoundCallback;
203 private SolveWrapper solveWrapper;
204}
static String solverResponseStats(com.google.ortools.sat.CpSolverResponse response)
synchronized void stopSearch()
Definition CpSolver.java:80
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:46
void setBestBoundCallback(Consumer< Double > cb)
CpSolverStatus solve(CpModel model)
Definition CpSolver.java:38
List< Integer > sufficientAssumptionsForInfeasibility()