45 void Reset()
override;
53 const MPVariable*
const variable,
double new_value,
54 double old_value)
override;
63 int64_t
nodes()
const override;
69 bool IsLP()
const override;
70 bool IsMIP()
const override;
80 const std::vector<MPSolver::BasisStatus>& variable_statuses,
81 const std::vector<MPSolver::BasisStatus>& constraint_statuses)
override;
94 void NonIncrementalChange();
98 std::vector<MPSolver::BasisStatus> column_status_;
99 std::vector<MPSolver::BasisStatus> row_status_;
100 glop::GlopParameters parameters_;
101 std::atomic<bool> interrupt_solver_;
111 interrupt_solver_(false) {}
119 linear_program_.
Clear();
120 interrupt_solver_ =
false;
130 parameters_.set_max_time_in_seconds(
135 solver_->solver_specific_parameter_string_);
139 time_limit->RegisterExternalBooleanAsLimit(&interrupt_solver_);
148 const size_t num_vars =
solver_->variables_.size();
150 for (
int var_id = 0; var_id < num_vars; ++var_id) {
152 const glop::ColIndex lp_solver_var_id(
var->index());
156 var->set_solution_value(
static_cast<double>(solution_value));
160 var->set_reduced_cost(
static_cast<double>(reduced_cost));
167 const size_t num_constraints =
solver_->constraints_.size();
169 for (
int ct_id = 0; ct_id < num_constraints; ++ct_id) {
171 const glop::RowIndex lp_solver_ct_id(
ct->index());
175 ct->set_dual_value(
static_cast<double>(dual_value));
186 interrupt_solver_ =
true;
197 NonIncrementalChange();
201 NonIncrementalChange();
205 LOG(
WARNING) <<
"Glop doesn't deal with integer variables.";
209 NonIncrementalChange();
213 NonIncrementalChange();
217 NonIncrementalChange();
222 double new_value,
double old_value) {
223 NonIncrementalChange();
227 NonIncrementalChange();
232 NonIncrementalChange();
244 LOG(DFATAL) <<
"Number of nodes only available for discrete problems";
249 return row_status_[constraint_index];
253 return column_status_[variable_index];
273 const glop::ColIndex num_cols(
solver_->variables_.size());
286 const glop::RowIndex num_rows(
solver_->constraints_.size());
287 for (glop::RowIndex
row(0);
row < num_rows; ++
row) {
291 const double lb =
ct->lb();
292 const double ub =
ct->ub();
297 for (
const auto& entry :
ct->coefficients_) {
298 const int var_index = entry.first->index();
300 const glop::ColIndex
col(var_index);
301 const double coeff = entry.second;
309 for (
const auto& entry :
solver_->objective_->coefficients_) {
310 const int var_index = entry.first->index();
311 const glop::ColIndex
col(var_index);
312 const double coeff = entry.second;
318 const std::vector<MPSolver::BasisStatus>& variable_statuses,
319 const std::vector<MPSolver::BasisStatus>& constraint_statuses) {
328 lp_solver_.
SetInitialBasis(glop_variable_statuses, glop_constraint_statuses);
333 parameters_.set_log_search_progress(!
quiet_);
367 parameters_.set_use_preprocessing(
false);
370 parameters_.set_use_preprocessing(
true);
382 parameters_.set_use_scaling(
false);
385 parameters_.set_use_scaling(
true);
397 parameters_.set_use_dual_simplex(
true);
400 parameters_.set_use_dual_simplex(
false);
423 void GLOPInterface::NonIncrementalChange() {
#define DCHECK(condition)
#define DCHECK_EQ(val1, val2)
#define VLOG(verboselevel)
void push_back(const value_type &x)
void SetScalingMode(int value) override
void SetDualTolerance(double value) override
void AddRowConstraint(MPConstraint *const ct) override
void SetLpAlgorithm(int value) override
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
~GLOPInterface() override
void SetObjectiveOffset(double value) override
void SetVariableInteger(int index, bool integer) override
void SetParameters(const MPSolverParameters ¶m) override
void ExtractNewConstraints() override
std::string SolverVersion() const override
void SetRelativeMipGap(double value) override
void SetConstraintBounds(int index, double lb, double ub) 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
GLOPInterface(MPSolver *const solver)
void SetOptimizationDirection(bool maximize) override
MPSolver::BasisStatus column_status(int variable_index) const override
void ClearObjective() override
void SetStartingLpBasis(const std::vector< MPSolver::BasisStatus > &variable_statuses, const std::vector< MPSolver::BasisStatus > &constraint_statuses) override
The class for constraints of a Mathematical Programming (MP) model.
double offset() const
Gets the constant term in the objective.
This mathematical programming (MP) solver class is the main class though which users build and solve ...
const MPObjective & Objective() const
Returns the objective object.
ResultStatus
The status of solving the problem.
bool SetSolverSpecificParametersAsString(const std::string ¶meters)
Advanced usage: pass solver specific parameters in text format.
int64_t time_limit() const
BasisStatus
Advanced usage: possible basis status values for a variable and the slack variable of a linear constr...
virtual void SetIntegerParamToUnsupportedValue(MPSolverParameters::IntegerParam param, int value)
void set_constraint_as_extracted(int ct_index, bool extracted)
MPSolver::ResultStatus result_status_
int last_constraint_index_
static constexpr int64_t kUnknownNumberOfNodes
void ResetExtractionInformation()
bool variable_is_extracted(int var_index) const
void SetDoubleParamToUnsupportedValue(MPSolverParameters::DoubleParam param, double value)
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.
@ SCALING_ON
Scaling is on.
@ SCALING_OFF
Scaling is off.
@ DUAL_TOLERANCE
Advanced usage: tolerance for dual feasibility of basic solutions.
@ PRIMAL_TOLERANCE
Advanced usage: tolerance for primal feasibility of basic solutions.
@ RELATIVE_MIP_GAP
Limit for relative MIP gap.
@ LP_ALGORITHM
Algorithm to solve linear programs.
@ SCALING
Advanced usage: enable or disable matrix scaling.
@ PRESOLVE
Advanced usage: presolve mode.
@ PRESOLVE_ON
Presolve is on.
@ PRESOLVE_OFF
Presolve is off.
static const int kDefaultIntegerParamValue
static const double kDefaultDoubleParamValue
int GetIntegerParam(MPSolverParameters::IntegerParam param) const
Returns the value of an integer parameter.
The class for variables of a Mathematical Programming (MP) model.
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...
const GlopParameters & GetParameters() const
void SetInitialBasis(const VariableStatusRow &variable_statuses, const ConstraintStatusColumn &constraint_statuses)
const ConstraintStatusColumn & constraint_statuses() const
const VariableStatusRow & variable_statuses() const
const DenseColumn & dual_values() const
const DenseRow & variable_values() const
Fractional GetObjectiveValue() const
const DenseRow & reduced_costs() const
ABSL_MUST_USE_RESULT ProblemStatus SolveWithTimeLimit(const LinearProgram &lp, TimeLimit *time_limit)
void SetParameters(const GlopParameters ¶meters)
int GetNumberOfSimplexIterations() const
void SetVariableBounds(ColIndex col, Fractional lower_bound, Fractional upper_bound)
void SetObjectiveOffset(Fractional objective_offset)
void SetCoefficient(RowIndex row, ColIndex col, Fractional value)
void SetConstraintBounds(RowIndex row, Fractional lower_bound, Fractional upper_bound)
ColIndex CreateNewVariable()
void SetObjectiveCoefficient(ColIndex col, Fractional value)
RowIndex CreateNewConstraint()
void SetMaximizationProblem(bool maximize)
SharedTimeLimit * time_limit
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.
MPSolver::BasisStatus GlopToMPSolverVariableStatus(glop::VariableStatus s)
bool ProtobufTextFormatMergeFromString(const std::string &proto_text_string, ProtoType *proto)
MPSolver::BasisStatus GlopToMPSolverConstraintStatus(glop::ConstraintStatus s)
MPSolver::ResultStatus GlopToMPSolverResultStatus(glop::ProblemStatus s)
glop::VariableStatus MPSolverToGlopVariableStatus(MPSolver::BasisStatus s)
MPSolverInterface * BuildGLOPInterface(MPSolver *const solver)
glop::ConstraintStatus MPSolverToGlopConstraintStatus(MPSolver::BasisStatus s)