 |
OR-Tools
8.0
|
Go to the documentation of this file.
44 void Reset()
override;
52 const MPVariable*
const variable,
double new_value,
53 double old_value)
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";
254 return row_status_[constraint_index];
258 return column_status_[variable_index];
278 const glop::ColIndex num_cols(
solver_->variables_.size());
282 DCHECK_EQ(new_col,
col);
291 const glop::RowIndex num_rows(
solver_->constraints_.size());
292 for (glop::RowIndex
row(0);
row < num_rows; ++
row) {
296 const double lb =
ct->lb();
297 const double ub =
ct->ub();
299 DCHECK_EQ(new_row,
row);
302 for (
const auto& entry :
ct->coefficients_) {
303 const int var_index = entry.first->index();
305 const glop::ColIndex
col(var_index);
306 const double coeff = entry.second;
314 for (
const auto& entry :
solver_->objective_->coefficients_) {
315 const int var_index = entry.first->index();
316 const glop::ColIndex
col(var_index);
317 const double coeff = entry.second;
323 const std::vector<MPSolver::BasisStatus>& variable_statuses,
324 const std::vector<MPSolver::BasisStatus>& constraint_statuses) {
333 lp_solver_.
SetInitialBasis(glop_variable_statuses, glop_constraint_statuses);
371 parameters_.set_use_preprocessing(
false);
374 parameters_.set_use_preprocessing(
true);
386 parameters_.set_use_scaling(
false);
389 parameters_.set_use_scaling(
true);
401 parameters_.set_use_dual_simplex(
true);
404 parameters_.set_use_dual_simplex(
false);
427 void GLOPInterface::NonIncrementalChange() {
void SetParameters(const MPSolverParameters ¶m) override
void SetDoubleParamToUnsupportedValue(MPSolverParameters::DoubleParam param, double value)
static const int kDefaultIntegerParamValue
void SetRelativeMipGap(double value) override
void AddVariable(MPVariable *const var) override
Fractional GetObjectiveValue() const
~GLOPInterface() override
@ DUAL_TOLERANCE
Advanced usage: tolerance for dual feasibility of basic solutions.
double trivial_worst_objective_bound() const
MPSolver::BasisStatus column_status(int variable_index) const override
@ LP_ALGORITHM
Algorithm to solve linear programs.
int64 nodes() const override
const MPObjective & Objective() const
Returns the objective object.
void SetOptimizationDirection(bool maximize) override
bool InterruptSolve() override
void push_back(const value_type &x)
int last_constraint_index_
This mathematical programming (MP) solver class is the main class though which users build and solve ...
void SetConstraintBounds(RowIndex row, Fractional lower_bound, Fractional upper_bound)
void SetPrimalTolerance(double value) override
bool SetSolverSpecificParametersAsString(const std::string ¶meters) override
const DenseColumn & dual_values() const
The vehicle routing library lets one model and solve generic vehicle routing problems ranging from th...
double offset() const
Gets the constant term in the objective.
void SetScalingMode(int value) override
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 VariableStatusRow & variable_statuses() const
@ SCALING_OFF
Scaling is off.
void SetObjectiveOffset(double value) override
void * underlying_solver() override
void SetMaximizationProblem(bool maximize)
void ClearObjective() override
This class stores parameter settings for LP and MIP solvers.
The class for constraints of a Mathematical Programming (MP) model.
const ConstraintStatusColumn & constraint_statuses() const
int64 iterations() const override
ColIndex CreateNewVariable()
RowIndex CreateNewConstraint()
glop::ConstraintStatus MPSolverToGlopConstraintStatus(MPSolver::BasisStatus s)
@ PRESOLVE_ON
Presolve is on.
int GetIntegerParam(MPSolverParameters::IntegerParam param) const
Returns the value of an integer parameter.
@ SCALING_ON
Scaling is on.
void ResetExtractionInformation()
MPSolver::ResultStatus GlopToMPSolverResultStatus(glop::ProblemStatus s)
SharedTimeLimit * time_limit
void SetVariableBounds(ColIndex col, Fractional lower_bound, Fractional upper_bound)
bool IsLP() const override
const DenseRow & reduced_costs() const
static constexpr int64 kUnknownNumberOfNodes
bool SetSolverSpecificParametersAsString(const std::string ¶meters)
Advanced usage: pass solver specific parameters in text format.
@ PRESOLVE
Advanced usage: presolve mode.
glop::VariableStatus MPSolverToGlopVariableStatus(MPSolver::BasisStatus s)
void SetVariableBounds(int index, double lb, double ub) override
MPSolver::ResultStatus Solve(const MPSolverParameters ¶m) override
void SetPresolveMode(int value) override
static const double kDefaultDoubleParamValue
void ExtractObjective() override
virtual void SetIntegerParamToUnsupportedValue(MPSolverParameters::IntegerParam param, int value)
void SetVariableInteger(int index, bool integer) override
BasisStatus
Advanced usage: possible basis status values for a variable and the slack variable of a linear constr...
GLOPInterface(MPSolver *const solver)
bool IsContinuous() const override
MPSolver::BasisStatus row_status(int constraint_index) const override
void SetDualTolerance(double value) override
void SetCoefficient(RowIndex row, ColIndex col, Fractional value)
double best_objective_bound() const override
void ClearConstraint(MPConstraint *const constraint) override
SynchronizationStatus sync_status_
@ PRIMAL_TOLERANCE
Advanced usage: tolerance for primal feasibility of basic solutions.
ResultStatus
The status of solving the problem.
bool variable_is_extracted(int var_index) const
void SetInitialBasis(const VariableStatusRow &variable_statuses, const ConstraintStatusColumn &constraint_statuses)
void SetLpAlgorithm(int value) override
void SetObjectiveOffset(Fractional objective_offset)
const DenseRow & variable_values() const
MPSolver::BasisStatus GlopToMPSolverVariableStatus(glop::VariableStatus s)
void set_variable_as_extracted(int var_index, bool extracted)
@ SCALING
Advanced usage: enable or disable matrix scaling.
ABSL_MUST_USE_RESULT ProblemStatus SolveWithTimeLimit(const LinearProgram &lp, TimeLimit *time_limit)
MPSolver::BasisStatus GlopToMPSolverConstraintStatus(glop::ConstraintStatus s)
bool IsMIP() const override
void SetObjectiveCoefficient(ColIndex col, Fractional value)
@ RELATIVE_MIP_GAP
Limit for relative MIP gap.
The class for variables of a Mathematical Programming (MP) model.
void SetStartingLpBasis(const std::vector< MPSolver::BasisStatus > &variable_statuses, const std::vector< MPSolver::BasisStatus > &constraint_statuses) override
A C++ wrapper that provides a simple and unified interface to several linear programming and mixed in...
void ExtractNewConstraints() override
MPSolverInterface * BuildGLOPInterface(MPSolver *const solver)
void SetCommonParameters(const MPSolverParameters ¶m)
int GetNumberOfSimplexIterations() const
bool ProtobufTextFormatMergeFromString(const std::string &proto_text_string, ProtoType *proto)
void SetParameters(const GlopParameters ¶meters)
@ PRESOLVE_OFF
Presolve is off.
void ExtractNewVariables() override
MPSolver::ResultStatus result_status_
std::string SolverVersion() const override
void set_constraint_as_extracted(int ct_index, bool extracted)
void SetConstraintBounds(int index, double lb, double ub) override
void AddRowConstraint(MPConstraint *const ct) override
void SetCoefficient(MPConstraint *const constraint, const MPVariable *const variable, double new_value, double old_value) override
void SetObjectiveCoefficient(const MPVariable *const variable, double coefficient) override