 |
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 ExtractNewVariables() override
bool variable_is_extracted(int var_index) const
int GetIntegerParam(MPSolverParameters::IntegerParam param) const
Returns the value of an integer parameter.
@ LP_ALGORITHM
Algorithm to solve linear programs.
The class for variables of a Mathematical Programming (MP) model.
This mathematical programming (MP) solver class is the main class though which users build and solve ...
const VariableStatusRow & variable_statuses() const
@ PRESOLVE_OFF
Presolve is off.
MPSolver::ResultStatus result_status_
@ DUAL_TOLERANCE
Advanced usage: tolerance for dual feasibility of basic solutions.
void SetParameters(const GlopParameters ¶meters)
MPSolver::BasisStatus row_status(int constraint_index) const override
void SetObjectiveOffset(double value) override
void SetVariableBounds(int index, double lb, double ub) override
The class for constraints of a Mathematical Programming (MP) model.
RowIndex CreateNewConstraint()
void * underlying_solver() override
int GetNumberOfSimplexIterations() const
void SetLpAlgorithm(int value) override
@ SCALING_OFF
Scaling is off.
void SetObjectiveCoefficient(ColIndex col, Fractional value)
double offset() const
Gets the constant term in the objective.
void SetOptimizationDirection(bool maximize) override
void set_variable_as_extracted(int var_index, bool extracted)
bool IsLP() const override
void ClearObjective() override
The vehicle routing library lets one model and solve generic vehicle routing problems ranging from th...
@ SCALING
Advanced usage: enable or disable matrix scaling.
@ RELATIVE_MIP_GAP
Limit for relative MIP gap.
This class stores parameter settings for LP and MIP solvers.
void SetStartingLpBasis(const std::vector< MPSolver::BasisStatus > &variable_statuses, const std::vector< MPSolver::BasisStatus > &constraint_statuses) override
void SetConstraintBounds(RowIndex row, Fractional lower_bound, Fractional upper_bound)
void ClearConstraint(MPConstraint *const constraint) override
void SetMaximizationProblem(bool maximize)
bool InterruptSolve() override
glop::ConstraintStatus MPSolverToGlopConstraintStatus(MPSolver::BasisStatus s)
virtual void SetIntegerParamToUnsupportedValue(MPSolverParameters::IntegerParam param, int value)
void SetRelativeMipGap(double value) override
MPSolver::BasisStatus column_status(int variable_index) const override
void SetCommonParameters(const MPSolverParameters ¶m)
void SetCoefficient(RowIndex row, ColIndex col, Fractional value)
void SetPrimalTolerance(double value) override
MPSolver::ResultStatus GlopToMPSolverResultStatus(glop::ProblemStatus s)
void SetParameters(const MPSolverParameters ¶m) override
SharedTimeLimit * time_limit
static const int kDefaultIntegerParamValue
void AddRowConstraint(MPConstraint *const ct) override
glop::VariableStatus MPSolverToGlopVariableStatus(MPSolver::BasisStatus s)
void set_constraint_as_extracted(int ct_index, bool extracted)
int64 nodes() const override
void ResetExtractionInformation()
static constexpr int64 kUnknownNumberOfNodes
~GLOPInterface() override
bool SetSolverSpecificParametersAsString(const std::string ¶meters) override
void SetVariableBounds(ColIndex col, Fractional lower_bound, Fractional upper_bound)
void SetVariableInteger(int index, bool integer) override
void AddVariable(MPVariable *const var) override
const ConstraintStatusColumn & constraint_statuses() const
@ SCALING_ON
Scaling is on.
void SetScalingMode(int value) override
bool IsMIP() const override
ABSL_MUST_USE_RESULT ProblemStatus SolveWithTimeLimit(const LinearProgram &lp, TimeLimit *time_limit)
void SetCoefficient(MPConstraint *const constraint, const MPVariable *const variable, double new_value, double old_value) override
const DenseRow & reduced_costs() const
@ PRESOLVE
Advanced usage: presolve mode.
void SetInitialBasis(const VariableStatusRow &variable_statuses, const ConstraintStatusColumn &constraint_statuses)
int64 iterations() const override
bool SetSolverSpecificParametersAsString(const std::string ¶meters)
Advanced usage: pass solver specific parameters in text format.
MPSolver::BasisStatus GlopToMPSolverVariableStatus(glop::VariableStatus s)
const MPObjective & Objective() const
Returns the objective object.
void SetDoubleParamToUnsupportedValue(MPSolverParameters::DoubleParam param, double value)
ResultStatus
The status of solving the problem.
MPSolver::BasisStatus GlopToMPSolverConstraintStatus(glop::ConstraintStatus s)
const DenseColumn & dual_values() const
std::string SolverVersion() const override
void SetConstraintBounds(int index, double lb, double ub) override
void SetPresolveMode(int value) override
@ PRIMAL_TOLERANCE
Advanced usage: tolerance for primal feasibility of basic solutions.
void SetObjectiveCoefficient(const MPVariable *const variable, double coefficient) override
MPSolverInterface * BuildGLOPInterface(MPSolver *const solver)
GLOPInterface(MPSolver *const solver)
void ExtractObjective() override
bool IsContinuous() const override
BasisStatus
Advanced usage: possible basis status values for a variable and the slack variable of a linear constr...
static const double kDefaultDoubleParamValue
void SetObjectiveOffset(Fractional objective_offset)
void push_back(const value_type &x)
bool ProtobufTextFormatMergeFromString(const std::string &proto_text_string, ProtoType *proto)
void SetDualTolerance(double value) override
const DenseRow & variable_values() const
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...
void ExtractNewConstraints() override
Fractional GetObjectiveValue() const
double best_objective_bound() const override
ColIndex CreateNewVariable()
int last_constraint_index_
@ PRESOLVE_ON
Presolve is on.
double trivial_worst_objective_bound() const
MPSolver::ResultStatus Solve(const MPSolverParameters ¶m) override
SynchronizationStatus sync_status_