20#include "absl/base/attributes.h"
21#include "absl/status/status.h"
48 std::atomic<bool>* interrupt)
override {
53 void Reset()
override;
61 double new_value,
double old_value)
override;
64 double coefficient)
override;
72 int64_t
nodes()
const override;
78 bool IsLP()
const override;
79 bool IsMIP()
const override;
96 const std::string& parameters)
override;
100 void NonIncrementalChange();
102 std::atomic<bool> interrupt_solve_;
104 int num_threads_ = 0;
113 interrupt_solve_ =
false;
120 solver_->SetSolverSpecificParametersAsString(
121 solver_->solver_specific_parameter_string_);
125 VLOG(1) <<
"Setting time limit = " <<
solver_->time_limit() <<
" ms.";
126 parameters_.set_max_time_in_seconds(
127 static_cast<double>(
solver_->time_limit()) / 1000.0);
131 for (
int i = 0; i <
solver_->variables_.size(); ++i) {
134 for (
int i = 0; i <
solver_->constraints_.size(); ++i) {
152 const absl::Status result =
solver_->LoadSolutionFromProto(response);
154 LOG(ERROR) <<
"LoadSolutionFromProto failed: " << result;
162 interrupt_solve_ =
true;
169 NonIncrementalChange();
173 NonIncrementalChange();
177 NonIncrementalChange();
181 NonIncrementalChange();
185 NonIncrementalChange();
189 NonIncrementalChange();
194 double new_value,
double old_value) {
195 NonIncrementalChange();
199 NonIncrementalChange();
203 double coefficient) {
204 NonIncrementalChange();
243 parameters_.set_num_workers(num_threads_);
248 num_threads_ = num_threads;
249 return absl::OkStatus();
263 const std::string& parameters) {
267void SatInterface::NonIncrementalChange() {
275const void*
const kRegisterSat ABSL_ATTRIBUTE_UNUSED = [] {
277 [](MPSolver*
const solver) {
return new SatInterface(solver); },
void set_enable_internal_solver_output(bool value)
void set_solver_specific_parameters(Arg_ &&arg, Args_... args)
::operations_research::MPModelProto *PROTOBUF_NONNULL mutable_model()
::operations_research::MPSolverResponseStatus status() const
static MPSolverInterfaceFactoryRepository * GetInstance()
void Register(MPSolverInterfaceFactory factory, MPSolver::OptimizationProblemType problem_type, std::function< bool()> is_runtime_ready={})
void set_variable_as_extracted(int var_index, bool extracted)
friend class MPConstraint
void set_constraint_as_extracted(int ct_index, bool extracted)
void ResetExtractionInformation()
MPSolverInterface(MPSolver *solver)
void SetCommonParameters(const MPSolverParameters ¶m)
MPSolver::ResultStatus result_status_
SynchronizationStatus sync_status_
@ SAT_INTEGER_PROGRAMMING
The class for variables of a Mathematical Programming (MP) model.
void SetRelativeMipGap(double value) override
void AddVariable(MPVariable *var) override
void SetObjectiveOffset(double value) override
void SetCoefficient(MPConstraint *constraint, const MPVariable *variable, double new_value, double old_value) override
void SetVariableBounds(int index, double lb, double ub) override
bool SupportsDirectlySolveProto(std::atomic< bool > *interrupt) const override
absl::Status SetNumThreads(int num_threads) override
void * underlying_solver() override
void ExtractObjective() override
void SetObjectiveCoefficient(const MPVariable *variable, double coefficient) override
void AddRowConstraint(MPConstraint *ct) override
MPSolver::ResultStatus Solve(const MPSolverParameters ¶m) override
void SetScalingMode(int value) override
void SetVariableInteger(int index, bool integer) override
void ClearConstraint(MPConstraint *constraint) override
int64_t nodes() const override
void ExtractNewConstraints() override
bool IsContinuous() const override
bool IsMIP() const override
bool InterruptSolve() override
void SetPresolveMode(int value) override
std::string SolverVersion() const override
void SetDualTolerance(double value) override
void SetOptimizationDirection(bool maximize) override
void ExtractNewVariables() override
bool IsLP() const override
int64_t iterations() const override
bool SetSolverSpecificParametersAsString(const std::string ¶meters) override
bool AddIndicatorConstraint(MPConstraint *const ct) override
MPSolutionResponse DirectlySolveProto(LazyMutableCopy< MPModelRequest > request, std::atomic< bool > *interrupt) override
void SetConstraintBounds(int index, double lb, double ub) override
void ClearObjective() override
MPSolver::BasisStatus column_status(int variable_index) const override
void SetPrimalTolerance(double value) override
MPSolver::BasisStatus row_status(int constraint_index) const override
void SetLpAlgorithm(int value) override
void SetParameters(const MPSolverParameters ¶m) override
SatInterface(MPSolver *solver)
std::string CpSatSolverVersion()
Returns a string that describes the version of the solver.
MPSolutionResponse SatSolveProto(LazyMutableCopy< MPModelRequest > request, std::atomic< bool > *interrupt_solve, std::function< void(const std::string &)> logging_callback, std::function< void(const MPSolution &)> solution_callback, std::function< void(const double)> best_bound_callback)
std::string EncodeParametersAsString(const P ¶meters)
bool ProtobufTextFormatMergeFromString(absl::string_view proto_text_string, ProtoType *proto)