19 #include "absl/base/attributes.h" 46 void Reset()
override;
54 const MPVariable*
const variable,
double new_value,
55 double old_value)
override;
64 int64_t
nodes()
const override;
70 bool IsLP()
const override;
71 bool IsMIP()
const override;
81 const std::vector<MPSolver::BasisStatus>& variable_statuses,
82 const std::vector<MPSolver::BasisStatus>& constraint_statuses)
override;
95 void NonIncrementalChange();
99 std::vector<MPSolver::BasisStatus> column_status_;
100 std::vector<MPSolver::BasisStatus> row_status_;
102 std::atomic<bool> interrupt_solver_;
112 interrupt_solver_(false) {}
120 linear_program_.
Clear();
121 interrupt_solver_ =
false;
136 solver_->solver_specific_parameter_string_);
140 time_limit->RegisterExternalBooleanAsLimit(&interrupt_solver_);
149 const size_t num_vars =
solver_->variables_.size();
151 for (
int var_id = 0; var_id < num_vars; ++var_id) {
153 const glop::ColIndex lp_solver_var_id(
var->index());
157 var->set_solution_value(static_cast<double>(solution_value));
161 var->set_reduced_cost(static_cast<double>(reduced_cost));
168 const size_t num_constraints =
solver_->constraints_.size();
170 for (
int ct_id = 0; ct_id < num_constraints; ++ct_id) {
172 const glop::RowIndex lp_solver_ct_id(
ct->index());
176 ct->set_dual_value(static_cast<double>(dual_value));
187 interrupt_solver_ =
true;
198 NonIncrementalChange();
202 NonIncrementalChange();
206 LOG(
WARNING) <<
"Glop doesn't deal with integer variables.";
210 NonIncrementalChange();
214 NonIncrementalChange();
218 NonIncrementalChange();
223 double new_value,
double old_value) {
224 NonIncrementalChange();
228 NonIncrementalChange();
233 NonIncrementalChange();
245 LOG(DFATAL) <<
"Number of nodes only available for discrete problems";
250 return row_status_[constraint_index];
254 return column_status_[variable_index];
274 const glop::ColIndex num_cols(
solver_->variables_.size());
287 const glop::RowIndex num_rows(
solver_->constraints_.size());
288 for (glop::RowIndex
row(0);
row < num_rows; ++
row) {
292 const double lb =
ct->lb();
293 const double ub =
ct->ub();
298 for (
const auto& entry :
ct->coefficients_) {
299 const int var_index = entry.first->index();
301 const glop::ColIndex
col(var_index);
302 const double coeff = entry.second;
310 for (
const auto& entry :
solver_->objective_->coefficients_) {
311 const int var_index = entry.first->index();
312 const glop::ColIndex
col(var_index);
313 const double coeff = entry.second;
319 const std::vector<MPSolver::BasisStatus>& variable_statuses,
320 const std::vector<MPSolver::BasisStatus>& constraint_statuses) {
329 lp_solver_.
SetInitialBasis(glop_variable_statuses, glop_constraint_statuses);
424 void GLOPInterface::NonIncrementalChange() {
MPSolver::ResultStatus GlopToMPSolverResultStatus(glop::ProblemStatus s)
MPSolver::BasisStatus column_status(int variable_index) const override
ResultStatus
The status of solving the problem.
void set_variable_as_extracted(int var_index, bool extracted)
void SetScalingMode(int value) override
bool IsContinuous() const override
const GlopParameters & GetParameters() const
int64_t nodes() const override
void SetObjectiveCoefficient(ColIndex col, Fractional value)
void SetInitialBasis(const VariableStatusRow &variable_statuses, const ConstraintStatusColumn &constraint_statuses)
MPSolver::ResultStatus Solve(const MPSolverParameters ¶m) override
ModelSharedTimeLimit * time_limit
void set_constraint_as_extracted(int ct_index, bool extracted)
SynchronizationStatus sync_status_
void ExtractNewVariables() override
#define VLOG(verboselevel)
const MPObjective & Objective() const
Returns the objective object.
void SetDoubleParamToUnsupportedValue(MPSolverParameters::DoubleParam param, double value)
Fractional GetObjectiveValue() const
A C++ wrapper that provides a simple and unified interface to several linear programming and mixed in...
MPSolver::BasisStatus row_status(int constraint_index) const override
void SetPrimalTolerance(double value) override
void SetConstraintBounds(RowIndex row, Fractional lower_bound, Fractional upper_bound)
ABSL_MUST_USE_RESULT ProblemStatus SolveWithTimeLimit(const LinearProgram &lp, TimeLimit *time_limit)
void SetRelativeMipGap(double value) override
Advanced usage: presolve mode.
void SetObjectiveOffset(Fractional objective_offset)
BasisStatus
Advanced usage: possible basis status values for a variable and the slack variable of a linear constr...
void SetVariableBounds(int index, double lb, double ub) override
bool ProtobufTextFormatMergeFromString(const std::string &proto_text_string, ProtoType *proto)
MPSolver::ResultStatus result_status_
std::string SolverVersion() const override
void AddVariable(MPVariable *const var) override
void SetVariableInteger(int index, bool integer) override
void SetObjectiveOffset(double value) override
int GetIntegerParam(MPSolverParameters::IntegerParam param) const
Returns the value of an integer parameter.
const DenseRow & variable_values() const
glop::ConstraintStatus MPSolverToGlopConstraintStatus(MPSolver::BasisStatus s)
void SetParameters(const GlopParameters ¶meters)
void SetObjectiveCoefficient(const MPVariable *const variable, double coefficient) override
void ClearObjective() override
void SetPresolveMode(int value) override
The class for variables of a Mathematical Programming (MP) model.
bool SetSolverSpecificParametersAsString(const std::string ¶meters)
Advanced usage: pass solver specific parameters in text format.
static std::unique_ptr< TimeLimit > FromParameters(const Parameters ¶meters)
Creates a time limit object initialized from an object that provides methods max_time_in_seconds() an...
Limit for relative MIP gap.
void ExtractNewConstraints() override
void set_use_dual_simplex(bool value)
void set_max_time_in_seconds(double value)
void set_use_scaling(bool value)
void SetCoefficient(MPConstraint *const constraint, const MPVariable *const variable, double new_value, double old_value) override
virtual void SetIntegerParamToUnsupportedValue(MPSolverParameters::IntegerParam param, int value)
void ClearConstraint(MPConstraint *const constraint) override
int GetNumberOfSimplexIterations() const
static const int kDefaultIntegerParamValue
PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final
ColIndex CreateNewVariable()
void ExtractObjective() override
void SetCommonParameters(const MPSolverParameters ¶m)
int64_t time_limit() const
bool IsMIP() const override
void push_back(const value_type &x)
RowIndex CreateNewConstraint()
The class for constraints of a Mathematical Programming (MP) model.
void set_use_preprocessing(bool value)
~GLOPInterface() override
Advanced usage: tolerance for primal feasibility of basic solutions.
static const double kDefaultDoubleParamValue
bool IsLP() const override
#define DCHECK(condition)
int last_constraint_index_
void SetLpAlgorithm(int value) override
Advanced usage: enable or disable matrix scaling.
static constexpr int64_t kUnknownNumberOfNodes
Advanced usage: tolerance for dual feasibility of basic solutions.
#define DCHECK_EQ(val1, val2)
void SetVariableBounds(ColIndex col, Fractional lower_bound, Fractional upper_bound)
glop::VariableStatus MPSolverToGlopVariableStatus(MPSolver::BasisStatus s)
const VariableStatusRow & variable_statuses() const
GLOPInterface(MPSolver *const solver)
void set_log_search_progress(bool value)
MPSolverInterface * BuildGLOPInterface(MPSolver *const solver)
const ConstraintStatusColumn & constraint_statuses() const
void * underlying_solver() override
void SetMaximizationProblem(bool maximize)
void SetStartingLpBasis(const std::vector< MPSolver::BasisStatus > &variable_statuses, const std::vector< MPSolver::BasisStatus > &constraint_statuses) override
int64_t iterations() const override
This mathematical programming (MP) solver class is the main class though which users build and solve ...
bool InterruptSolve() override
Collection of objects used to extend the Constraint Solver library.
MPSolver::BasisStatus GlopToMPSolverConstraintStatus(glop::ConstraintStatus s)
void AddRowConstraint(MPConstraint *const ct) override
This class stores parameter settings for LP and MIP solvers.
void SetParameters(const MPSolverParameters ¶m) override
Algorithm to solve linear programs.
MPSolver::BasisStatus GlopToMPSolverVariableStatus(glop::VariableStatus s)
void SetConstraintBounds(int index, double lb, double ub) override
const DenseColumn & dual_values() const
void ResetExtractionInformation()
void SetCoefficient(RowIndex row, ColIndex col, Fractional value)
void SetOptimizationDirection(bool maximize) override
bool SetSolverSpecificParametersAsString(const std::string ¶meters) override
double offset() const
Gets the constant term in the objective.
const DenseRow & reduced_costs() const
void SetDualTolerance(double value) override
bool variable_is_extracted(int var_index) const