Java Reference

Java Reference

CpSolver.java
Go to the documentation of this file.
1 // Copyright 2010-2021 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 
14 package com.google.ortools.sat;
15 
16 import com.google.ortools.sat.CpSolverResponse;
17 import com.google.ortools.sat.CpSolverStatus;
18 import com.google.ortools.sat.SatParameters;
19 import java.util.List;
20 import java.util.function.Consumer;
21 
28 public final class CpSolver {
30  public CpSolver() {
31  this.solveParameters = SatParameters.newBuilder();
32  this.logCallback = null;
33  this.solveWrapper = null;
34  }
35 
37  public CpSolverStatus solve(CpModel model) {
38  return solveWithSolutionCallback(model, null);
39  }
40 
43  // Setup search.
44  createSolveWrapper(); // Synchronized.
45  solveWrapper.setParameters(solveParameters.build());
46  if (cb != null) {
47  solveWrapper.addSolutionCallback(cb);
48  }
49  if (logCallback != null) {
50  solveWrapper.addLogCallback(logCallback);
51  }
52 
53  solveResponse = solveWrapper.solve(model.model());
54 
55  // Cleanup search.
56  if (cb != null) {
57  solveWrapper.clearSolutionCallback(cb);
58  }
59  releaseSolveWrapper(); // Synchronized.
60 
61  return solveResponse.getStatus();
62  }
63 
77  boolean oldValue = solveParameters.getEnumerateAllSolutions();
78  solveParameters.setEnumerateAllSolutions(true);
79  solveWithSolutionCallback(model, cb);
80  solveParameters.setEnumerateAllSolutions(oldValue);
81  return solveResponse.getStatus();
82  }
83 
84  private synchronized void createSolveWrapper() {
85  solveWrapper = new SolveWrapper();
86  }
87 
88  private synchronized void releaseSolveWrapper() {
89  solveWrapper = null;
90  }
91 
93  public synchronized void stopSearch() {
94  if (solveWrapper != null) {
95  solveWrapper.stopSearch();
96  }
97  }
98 
100  public double objectiveValue() {
101  return solveResponse.getObjectiveValue();
102  }
103 
108  public double bestObjectiveBound() {
109  return solveResponse.getBestObjectiveBound();
110  }
111 
113  public long value(IntVar var) {
114  return solveResponse.getSolution(var.getIndex());
115  }
116 
118  public Boolean booleanValue(Literal var) {
119  int index = var.getIndex();
120  if (index >= 0) {
121  return solveResponse.getSolution(index) != 0;
122  } else {
123  return solveResponse.getSolution(-index - 1) == 0;
124  }
125  }
126 
129  return solveResponse;
130  }
131 
133  public long numBranches() {
134  return solveResponse.getNumBranches();
135  }
136 
138  public long numConflicts() {
139  return solveResponse.getNumConflicts();
140  }
141 
143  public double wallTime() {
144  return solveResponse.getWallTime();
145  }
146 
148  public double userTime() {
149  return solveResponse.getUserTime();
150  }
151 
152  public List<Integer> sufficientAssumptionsForInfeasibility() {
153  return solveResponse.getSufficientAssumptionsForInfeasibilityList();
154  }
155 
158  return solveParameters;
159  }
160 
162  public void setLogCallback(Consumer<String> cb) {
163  this.logCallback = cb;
164  }
165 
167  public String responseStats() {
168  return CpSatHelper.solverResponseStats(solveResponse);
169  }
170 
171  private CpSolverResponse solveResponse;
172  private final SatParameters.Builder solveParameters;
173  private Consumer<String> logCallback;
174  private SolveWrapper solveWrapper;
175 }
Main modeling class.
Definition: CpModel.java:41
static String solverResponseStats(com.google.ortools.sat.CpSolverResponse response)
.lang.Override java.util.List< java.lang.Integer > getSufficientAssumptionsForInfeasibilityList()
.lang.Override double getUserTime()
double user_time = 16;
.lang.Override com.google.ortools.sat.CpSolverStatus getStatus()
.lang.Override long getNumConflicts()
int64 num_conflicts = 11;
.lang.Override double getWallTime()
double wall_time = 15;
.lang.Override long getNumBranches()
int64 num_branches = 12;
Parent class to create a callback called at each solution.
Wrapper around the SAT solver.
Definition: CpSolver.java:28
CpSolver()
Main construction of the CpSolver class.
Definition: CpSolver.java:30
double objectiveValue()
Returns the best objective value found during search.
Definition: CpSolver.java:100
double userTime()
Returns the user time of the search.
Definition: CpSolver.java:148
double wallTime()
Returns the wall time of the search.
Definition: CpSolver.java:143
double bestObjectiveBound()
Returns the best lower bound found when minimizing, of the best upper bound found when maximizing.
Definition: CpSolver.java:108
CpSolverResponse response()
Returns the internal response protobuf that is returned internally by the SAT solver.
Definition: CpSolver.java:128
CpSolverStatus solveWithSolutionCallback(CpModel model, CpSolverSolutionCallback cb)
Solves a problem and passes each solution found to the callback.
Definition: CpSolver.java:42
long value(IntVar var)
Returns the value of a variable in the last solution found.
Definition: CpSolver.java:113
long numBranches()
Returns the number of branches explored during search.
Definition: CpSolver.java:133
List< Integer > sufficientAssumptionsForInfeasibility()
Definition: CpSolver.java:152
CpSolverStatus searchAllSolutions(CpModel model, CpSolverSolutionCallback cb)
Searches for all solutions of a satisfiability problem.
Definition: CpSolver.java:76
CpSolverStatus solve(CpModel model)
Solves the given module, and returns the solve status.
Definition: CpSolver.java:37
long numConflicts()
Returns the number of conflicts created during search.
Definition: CpSolver.java:138
SatParameters.Builder getParameters()
Returns the builder of the parameters of the SAT solver for modification.
Definition: CpSolver.java:157
void setLogCallback(Consumer< String > cb)
Sets the log callback for the solver.
Definition: CpSolver.java:162
synchronized void stopSearch()
Stops the search asynchronously.
Definition: CpSolver.java:93
Boolean booleanValue(Literal var)
Returns the Boolean value of a literal in the last solution found.
Definition: CpSolver.java:118
String responseStats()
Returns some statistics on the solution found as a string.
Definition: CpSolver.java:167
int getIndex()
Internal, returns the index of the variable in the underlying CpModelProto.
.lang.Override boolean getEnumerateAllSolutions()
void addSolutionCallback(SolutionCallback callback)
void setParameters(com.google.ortools.sat.SatParameters parameters)
void addLogCallback(java.util.function.Consumer< String > log_callback)
void clearSolutionCallback(SolutionCallback callback)
com.google.ortools.sat.CpSolverResponse solve(com.google.ortools.sat.CpModelProto model_proto)
Interface to describe a boolean variable or its negation.
Definition: Literal.java:17