19#include "absl/status/status.h"
20#include "absl/status/statusor.h"
36#if defined(PROTOBUF_INTERNAL_IMPL)
37using google::protobuf::Message;
39using google::protobuf::Message;
50 const MPModelRequest& request, std::atomic<bool>* interrupt)
override;
54 void Reset()
override;
62 const MPVariable*
const variable,
double new_value,
63 double old_value)
override;
74 int64_t
nodes()
const override;
80 bool IsLP()
const override;
81 bool IsMIP()
const override;
102 void NonIncrementalChange();
104 std::atomic<bool> interrupt_solve_;
106 int num_threads_ = 0;
115 interrupt_solve_ =
false;
123 solver_->solver_specific_parameter_string_);
133 for (
int i = 0; i <
solver_->variables_.size(); ++i) {
136 for (
int i = 0; i <
solver_->constraints_.size(); ++i) {
145 const absl::StatusOr<MPSolutionResponse> status_or =
177 const size_t num_vars =
solver_->variables_.size();
178 for (
int var_id = 0; var_id < num_vars; ++var_id) {
180 var->set_solution_value(
response.variable_value(var_id));
189 absl::StatusOr<MPSolutionResponse> status_or =
191 if (status_or.ok())
return std::move(status_or).value();
193 LOG(
INFO) <<
"Failed SAT solve: " << status_or.status();
200 response.set_status(absl::IsInvalidArgument(status_or.status())
203 response.set_status_str(status_or.status().ToString());
208 interrupt_solve_ =
true;
215 NonIncrementalChange();
219 NonIncrementalChange();
223 NonIncrementalChange();
227 NonIncrementalChange();
231 NonIncrementalChange();
235 NonIncrementalChange();
240 double new_value,
double old_value) {
241 NonIncrementalChange();
245 NonIncrementalChange();
250 NonIncrementalChange();
264 return MPSolver::BasisStatus::FREE;
268 return MPSolver::BasisStatus::FREE;
276 return "SAT Based MIP Solver";
295 num_threads_ = num_threads;
296 return absl::OkStatus();
314void SatInterface::NonIncrementalChange() {
#define VLOG(verboselevel)
The class for constraints of a Mathematical Programming (MP) model.
::operations_research::MPModelProto * mutable_model()
bool enable_internal_solver_output() const
void set_solver_specific_parameters(ArgT0 &&arg0, ArgT... args)
void set_enable_internal_solver_output(bool value)
This mathematical programming (MP) solver class is the main class though which users build and solve ...
ResultStatus
The status of solving the problem.
@ FEASIBLE
feasible, or stopped by limit.
@ NOT_SOLVED
not been solved yet.
@ INFEASIBLE
proven infeasible.
@ ABNORMAL
abnormal, i.e., error of some kind.
@ MODEL_INVALID
the model is trivially invalid (NaN coefficients, etc).
bool SetSolverSpecificParametersAsString(const std::string ¶meters)
Advanced usage: pass solver specific parameters in text format.
void ExportModelToProto(MPModelProto *output_model) const
Exports model to protocol buffer.
int64_t time_limit() const
BasisStatus
Advanced usage: possible basis status values for a variable and the slack variable of a linear constr...
void set_constraint_as_extracted(int ct_index, bool extracted)
MPSolver::ResultStatus result_status_
double best_objective_bound_
void ResetExtractionInformation()
void set_variable_as_extracted(int var_index, bool extracted)
void SetCommonParameters(const MPSolverParameters ¶m)
SynchronizationStatus sync_status_
This class stores parameter settings for LP and MIP solvers.
The class for variables of a Mathematical Programming (MP) model.
void SetScalingMode(int value) override
void SetDualTolerance(double value) override
void AddRowConstraint(MPConstraint *const ct) override
void SetLpAlgorithm(int value) override
SatInterface(MPSolver *const solver)
void ExtractObjective() override
void * underlying_solver() override
bool IsContinuous() const override
bool InterruptSolve() override
MPSolver::ResultStatus Solve(const MPSolverParameters ¶m) override
void SetPrimalTolerance(double value) override
void ClearConstraint(MPConstraint *const constraint) override
bool SetSolverSpecificParametersAsString(const std::string ¶meters) override
void SetObjectiveCoefficient(const MPVariable *const variable, double coefficient) override
void SetCoefficient(MPConstraint *const constraint, const MPVariable *const variable, double new_value, double old_value) override
MPSolver::BasisStatus row_status(int constraint_index) const override
void SetObjectiveOffset(double value) override
void SetVariableInteger(int index, bool integer) override
void SetParameters(const MPSolverParameters ¶m) override
void ExtractNewConstraints() override
absl::optional< MPSolutionResponse > DirectlySolveProto(const MPModelRequest &request, std::atomic< bool > *interrupt) override
std::string SolverVersion() const override
void SetRelativeMipGap(double value) override
void SetConstraintBounds(int index, double lb, double ub) override
absl::Status SetNumThreads(int num_threads) override
void SetPresolveMode(int value) override
void SetVariableBounds(int index, double lb, double ub) override
void AddVariable(MPVariable *const var) override
void ExtractNewVariables() override
int64_t nodes() const override
bool IsLP() const override
bool IsMIP() const override
int64_t iterations() const override
bool AddIndicatorConstraint(MPConstraint *const ct) override
void SetOptimizationDirection(bool maximize) override
MPSolver::BasisStatus column_status(int variable_index) const override
void ClearObjective() override
void set_linearization_level(::PROTOBUF_NAMESPACE_ID::int32 value)
void set_log_search_progress(bool value)
void set_max_time_in_seconds(double value)
void set_num_search_workers(::PROTOBUF_NAMESPACE_ID::int32 value)
SharedResponseManager * response
A C++ wrapper that provides a simple and unified interface to several linear programming and mixed in...
Collection of objects used to extend the Constraint Solver library.
bool ProtobufTextFormatMergeFromString(const std::string &proto_text_string, ProtoType *proto)
absl::StatusOr< MPSolutionResponse > SatSolveProto(MPModelRequest request, std::atomic< bool > *interrupt_solve, std::function< void(const std::string &)> logging_callback, std::function< void(const MPSolution &)> solution_callback)
std::string EncodeSatParametersAsString(const sat::SatParameters ¶meters)
MPSolverInterface * BuildSatInterface(MPSolver *const solver)
@ MPSOLVER_MODEL_INVALID_SOLVER_PARAMETERS