OR-Tools  8.0
glop_interface.cc
Go to the documentation of this file.
1 // Copyright 2010-2018 Google LLC
2 // Licensed under the Apache License, Version 2.0 (the "License");
3 // you may not use this file except in compliance with the License.
4 // You may obtain a copy of the License at
5 //
6 // http://www.apache.org/licenses/LICENSE-2.0
7 //
8 // Unless required by applicable law or agreed to in writing, software
9 // distributed under the License is distributed on an "AS IS" BASIS,
10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 // See the License for the specific language governing permissions and
12 // limitations under the License.
13 
14 #include <atomic>
15 #include <string>
16 #include <vector>
17 
18 #include "ortools/base/hash.h"
20 #include "ortools/base/logging.h"
21 #include "ortools/glop/lp_solver.h"
29 
30 namespace operations_research {
31 
32 namespace {} // Anonymous namespace
33 
35  public:
36  explicit GLOPInterface(MPSolver* const solver);
37  ~GLOPInterface() override;
38 
39  // ----- Solve -----
40  MPSolver::ResultStatus Solve(const MPSolverParameters& param) override;
41  bool InterruptSolve() override;
42 
43  // ----- Model modifications and extraction -----
44  void Reset() override;
45  void SetOptimizationDirection(bool maximize) override;
46  void SetVariableBounds(int index, double lb, double ub) override;
47  void SetVariableInteger(int index, bool integer) override;
48  void SetConstraintBounds(int index, double lb, double ub) override;
49  void AddRowConstraint(MPConstraint* const ct) override;
50  void AddVariable(MPVariable* const var) override;
51  void SetCoefficient(MPConstraint* const constraint,
52  const MPVariable* const variable, double new_value,
53  double old_value) override;
54  void ClearConstraint(MPConstraint* const constraint) override;
55  void SetObjectiveCoefficient(const MPVariable* const variable,
56  double coefficient) override;
57  void SetObjectiveOffset(double value) override;
58  void ClearObjective() override;
59 
60  // ------ Query statistics on the solution and the solve ------
61  int64 iterations() const override;
62  int64 nodes() const override;
63  double best_objective_bound() const override;
64  MPSolver::BasisStatus row_status(int constraint_index) const override;
65  MPSolver::BasisStatus column_status(int variable_index) const override;
66 
67  // ----- Misc -----
68  bool IsContinuous() const override;
69  bool IsLP() const override;
70  bool IsMIP() const override;
71 
72  std::string SolverVersion() const override;
73  void* underlying_solver() override;
74 
75  void ExtractNewVariables() override;
76  void ExtractNewConstraints() override;
77  void ExtractObjective() override;
78 
79  void SetStartingLpBasis(
80  const std::vector<MPSolver::BasisStatus>& variable_statuses,
81  const std::vector<MPSolver::BasisStatus>& constraint_statuses) override;
82 
83  void SetParameters(const MPSolverParameters& param) override;
84  void SetRelativeMipGap(double value) override;
85  void SetPrimalTolerance(double value) override;
86  void SetDualTolerance(double value) override;
87  void SetPresolveMode(int value) override;
88  void SetScalingMode(int value) override;
89  void SetLpAlgorithm(int value) override;
91  const std::string& parameters) override;
92 
93  private:
94  void NonIncrementalChange();
95 
96  glop::LinearProgram linear_program_;
97  glop::LPSolver lp_solver_;
98  std::vector<MPSolver::BasisStatus> column_status_;
99  std::vector<MPSolver::BasisStatus> row_status_;
100  glop::GlopParameters parameters_;
101  std::atomic<bool> interrupt_solver_;
102 };
103 
105  : MPSolverInterface(solver),
106  linear_program_(),
107  lp_solver_(),
108  column_status_(),
109  row_status_(),
110  parameters_(),
111  interrupt_solver_(false) {}
112 
114 
116  // Re-extract the problem from scratch. We don't support modifying the
117  // LinearProgram in sync with changes done in the MPSolver.
119  linear_program_.Clear();
120  interrupt_solver_ = false;
121  ExtractModel();
122  SetParameters(param);
123 
124  linear_program_.SetMaximizationProblem(maximize_);
125  linear_program_.CleanUp();
126 
127  // Time limit.
128  if (solver_->time_limit()) {
129  VLOG(1) << "Setting time limit = " << solver_->time_limit() << " ms.";
130  parameters_.set_max_time_in_seconds(
131  static_cast<double>(solver_->time_limit()) / 1000.0);
132  }
133 
135  solver_->solver_specific_parameter_string_);
136  lp_solver_.SetParameters(parameters_);
137  std::unique_ptr<TimeLimit> time_limit =
138  TimeLimit::FromParameters(parameters_);
139  time_limit->RegisterExternalBooleanAsLimit(&interrupt_solver_);
140  const glop::ProblemStatus status =
141  lp_solver_.SolveWithTimeLimit(linear_program_, time_limit.get());
142 
143  // The solution must be marked as synchronized even when no solution exists.
146  objective_value_ = lp_solver_.GetObjectiveValue();
147 
148  const size_t num_vars = solver_->variables_.size();
149  column_status_.resize(num_vars, MPSolver::FREE);
150  for (int var_id = 0; var_id < num_vars; ++var_id) {
151  MPVariable* const var = solver_->variables_[var_id];
152  const glop::ColIndex lp_solver_var_id(var->index());
153 
154  const glop::Fractional solution_value =
155  lp_solver_.variable_values()[lp_solver_var_id];
156  var->set_solution_value(static_cast<double>(solution_value));
157 
158  const glop::Fractional reduced_cost =
159  lp_solver_.reduced_costs()[lp_solver_var_id];
160  var->set_reduced_cost(static_cast<double>(reduced_cost));
161 
162  const glop::VariableStatus variable_status =
163  lp_solver_.variable_statuses()[lp_solver_var_id];
164  column_status_.at(var_id) = GlopToMPSolverVariableStatus(variable_status);
165  }
166 
167  const size_t num_constraints = solver_->constraints_.size();
168  row_status_.resize(num_constraints, MPSolver::FREE);
169  for (int ct_id = 0; ct_id < num_constraints; ++ct_id) {
170  MPConstraint* const ct = solver_->constraints_[ct_id];
171  const glop::RowIndex lp_solver_ct_id(ct->index());
172 
173  const glop::Fractional dual_value =
174  lp_solver_.dual_values()[lp_solver_ct_id];
175  ct->set_dual_value(static_cast<double>(dual_value));
176 
177  const glop::ConstraintStatus constraint_status =
178  lp_solver_.constraint_statuses()[lp_solver_ct_id];
179  row_status_.at(ct_id) = GlopToMPSolverConstraintStatus(constraint_status);
180  }
181 
182  return result_status_;
183 }
184 
186  interrupt_solver_ = true;
187  return true;
188 }
189 
191  // Ignore any incremental info for the next solve. Note that the parameters
192  // will not be reset as we re-read them on each Solve().
193  lp_solver_.Clear();
194 }
195 
197  NonIncrementalChange();
198 }
199 
200 void GLOPInterface::SetVariableBounds(int index, double lb, double ub) {
201  NonIncrementalChange();
202 }
203 
204 void GLOPInterface::SetVariableInteger(int index, bool integer) {
205  LOG(WARNING) << "Glop doesn't deal with integer variables.";
206 }
207 
208 void GLOPInterface::SetConstraintBounds(int index, double lb, double ub) {
209  NonIncrementalChange();
210 }
211 
213  NonIncrementalChange();
214 }
215 
217  NonIncrementalChange();
218 }
219 
221  const MPVariable* const variable,
222  double new_value, double old_value) {
223  NonIncrementalChange();
224 }
225 
227  NonIncrementalChange();
228 }
229 
231  double coefficient) {
232  NonIncrementalChange();
233 }
234 
235 void GLOPInterface::SetObjectiveOffset(double value) { NonIncrementalChange(); }
236 
237 void GLOPInterface::ClearObjective() { NonIncrementalChange(); }
238 
240  return lp_solver_.GetNumberOfSimplexIterations();
241 }
242 
244  LOG(DFATAL) << "Number of nodes only available for discrete problems";
245  return kUnknownNumberOfNodes;
246 }
247 
249  // TODO(user): report a better bound when we can.
251 }
252 
254  return row_status_[constraint_index];
255 }
256 
258  return column_status_[variable_index];
259 }
260 
261 bool GLOPInterface::IsContinuous() const { return true; }
262 
263 bool GLOPInterface::IsLP() const { return true; }
264 
265 bool GLOPInterface::IsMIP() const { return false; }
266 
267 std::string GLOPInterface::SolverVersion() const {
268  // TODO(user): Decide how to version glop. Add a GetVersion() to LPSolver.
269  return "Glop-0.0";
270 }
271 
272 void* GLOPInterface::underlying_solver() { return &lp_solver_; }
273 
275  DCHECK_EQ(0, last_variable_index_);
276  DCHECK_EQ(0, last_constraint_index_);
277 
278  const glop::ColIndex num_cols(solver_->variables_.size());
279  for (glop::ColIndex col(last_variable_index_); col < num_cols; ++col) {
280  MPVariable* const var = solver_->variables_[col.value()];
281  const glop::ColIndex new_col = linear_program_.CreateNewVariable();
282  DCHECK_EQ(new_col, col);
283  set_variable_as_extracted(col.value(), true);
284  linear_program_.SetVariableBounds(col, var->lb(), var->ub());
285  }
286 }
287 
289  DCHECK_EQ(0, last_constraint_index_);
290 
291  const glop::RowIndex num_rows(solver_->constraints_.size());
292  for (glop::RowIndex row(0); row < num_rows; ++row) {
293  MPConstraint* const ct = solver_->constraints_[row.value()];
294  set_constraint_as_extracted(row.value(), true);
295 
296  const double lb = ct->lb();
297  const double ub = ct->ub();
298  const glop::RowIndex new_row = linear_program_.CreateNewConstraint();
299  DCHECK_EQ(new_row, row);
300  linear_program_.SetConstraintBounds(row, lb, ub);
301 
302  for (const auto& entry : ct->coefficients_) {
303  const int var_index = entry.first->index();
304  DCHECK(variable_is_extracted(var_index));
305  const glop::ColIndex col(var_index);
306  const double coeff = entry.second;
307  linear_program_.SetCoefficient(row, col, coeff);
308  }
309  }
310 }
311 
313  linear_program_.SetObjectiveOffset(solver_->Objective().offset());
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;
318  linear_program_.SetObjectiveCoefficient(col, coeff);
319  }
320 }
321 
323  const std::vector<MPSolver::BasisStatus>& variable_statuses,
324  const std::vector<MPSolver::BasisStatus>& constraint_statuses) {
325  glop::VariableStatusRow glop_variable_statuses;
326  glop::ConstraintStatusColumn glop_constraint_statuses;
327  for (const MPSolver::BasisStatus& status : variable_statuses) {
328  glop_variable_statuses.push_back(MPSolverToGlopVariableStatus(status));
329  }
330  for (const MPSolver::BasisStatus& status : constraint_statuses) {
331  glop_constraint_statuses.push_back(MPSolverToGlopConstraintStatus(status));
332  }
333  lp_solver_.SetInitialBasis(glop_variable_statuses, glop_constraint_statuses);
334 }
335 
337  parameters_.Clear();
338  SetCommonParameters(param);
340 }
341 
345  value);
346  }
347 }
348 
350  // TODO(user): Modify parameters_ with the correct value.
351  // The problem is that this is set by default by the wrapper to 1e-7 and for
352  // now we want to use higher default tolerances in Glop.
355  value);
356  }
357 }
358 
360  // TODO(user): Modify parameters_ with the correct value.
361  // The problem is that this is set by default by the wrapper to 1e-7 and for
362  // now we want to use higher default tolerances in Glop.
365  }
366 }
367 
369  switch (value) {
371  parameters_.set_use_preprocessing(false);
372  break;
374  parameters_.set_use_preprocessing(true);
375  break;
376  default:
379  }
380  }
381 }
382 
384  switch (value) {
386  parameters_.set_use_scaling(false);
387  break;
389  parameters_.set_use_scaling(true);
390  break;
391  default:
394  }
395  }
396 }
397 
399  switch (value) {
401  parameters_.set_use_dual_simplex(true);
402  break;
404  parameters_.set_use_dual_simplex(false);
405  break;
406  default:
409  value);
410  }
411  }
412 }
413 
415  const std::string& parameters) {
416  // NOTE(user): Android build uses protocol buffers in lite mode, and
417  // parsing data from text format is not supported there. To allow solver
418  // specific parameters from string on Android, we first need to switch to
419  // non-lite version of protocol buffers.
420  if (ProtobufTextFormatMergeFromString(parameters, &parameters_)) {
421  lp_solver_.SetParameters(parameters_);
422  return true;
423  }
424  return false;
425 }
426 
427 void GLOPInterface::NonIncrementalChange() {
428  // The current implementation is not incremental.
430 }
431 
432 // Register GLOP in the global linear solver factory.
434  return new GLOPInterface(solver);
435 }
436 
437 } // namespace operations_research
operations_research::GLOPInterface::ExtractNewVariables
void ExtractNewVariables() override
Definition: glop_interface.cc:274
glop_utils.h
operations_research::MPSolverInterface::variable_is_extracted
bool variable_is_extracted(int var_index) const
Definition: linear_solver.h:1658
var
IntVar * var
Definition: expr_array.cc:1858
operations_research::MPSolverParameters::GetIntegerParam
int GetIntegerParam(MPSolverParameters::IntegerParam param) const
Returns the value of an integer parameter.
Definition: linear_solver.cc:1973
operations_research::MPSolverParameters::LP_ALGORITHM
@ LP_ALGORITHM
Algorithm to solve linear programs.
Definition: linear_solver.h:1381
integral_types.h
operations_research::MPVariable
The class for variables of a Mathematical Programming (MP) model.
Definition: linear_solver.h:1050
operations_research::MPSolver
This mathematical programming (MP) solver class is the main class though which users build and solve ...
Definition: linear_solver.h:177
operations_research::MPSolverInterface::MUST_RELOAD
@ MUST_RELOAD
Definition: linear_solver.h:1519
operations_research::glop::LPSolver::variable_statuses
const VariableStatusRow & variable_statuses() const
Definition: lp_solver.h:102
operations_research::MPSolverParameters::PRESOLVE_OFF
@ PRESOLVE_OFF
Presolve is off.
Definition: linear_solver.h:1391
operations_research::MPSolverInterface::result_status_
MPSolver::ResultStatus result_status_
Definition: linear_solver.h:1723
operations_research::MPSolverParameters::DUAL_TOLERANCE
@ DUAL_TOLERANCE
Advanced usage: tolerance for dual feasibility of basic solutions.
Definition: linear_solver.h:1373
time_limit.h
operations_research::glop::LPSolver::SetParameters
void SetParameters(const GlopParameters &parameters)
Definition: lp_solver.cc:111
operations_research::GLOPInterface::row_status
MPSolver::BasisStatus row_status(int constraint_index) const override
Definition: glop_interface.cc:253
operations_research::GLOPInterface::SetObjectiveOffset
void SetObjectiveOffset(double value) override
Definition: glop_interface.cc:235
operations_research::glop::StrictITIVector< ColIndex, VariableStatus >
lp_data.h
operations_research::GLOPInterface::SetVariableBounds
void SetVariableBounds(int index, double lb, double ub) override
Definition: glop_interface.cc:200
operations_research::MPConstraint
The class for constraints of a Mathematical Programming (MP) model.
Definition: linear_solver.h:1175
operations_research::glop::LinearProgram::CreateNewConstraint
RowIndex CreateNewConstraint()
Definition: lp_data.cc:189
operations_research::GLOPInterface::underlying_solver
void * underlying_solver() override
Definition: glop_interface.cc:272
operations_research::glop::LPSolver::GetNumberOfSimplexIterations
int GetNumberOfSimplexIterations() const
Definition: lp_solver.cc:460
operations_research::glop::LinearProgram::CleanUp
void CleanUp()
Definition: lp_data.cc:345
operations_research::MPSolverInterface::objective_value_
double objective_value_
Definition: linear_solver.h:1733
proto_utils.h
operations_research::GLOPInterface::SetLpAlgorithm
void SetLpAlgorithm(int value) override
Definition: glop_interface.cc:398
operations_research::MPSolverParameters::SCALING_OFF
@ SCALING_OFF
Scaling is off.
Definition: linear_solver.h:1421
logging.h
operations_research::MPSolver::time_limit
int64 time_limit() const
Definition: linear_solver.h:777
operations_research::glop::LinearProgram::SetObjectiveCoefficient
void SetObjectiveCoefficient(ColIndex col, Fractional value)
Definition: lp_data.cc:324
operations_research::MPObjective::offset
double offset() const
Gets the constant term in the objective.
Definition: linear_solver.h:959
operations_research::GLOPInterface::SetOptimizationDirection
void SetOptimizationDirection(bool maximize) override
Definition: glop_interface.cc:196
value
int64 value
Definition: demon_profiler.cc:43
operations_research::MPSolverParameters::DUAL
@ DUAL
Dual simplex.
Definition: linear_solver.h:1399
operations_research::MPSolverInterface::set_variable_as_extracted
void set_variable_as_extracted(int var_index, bool extracted)
Definition: linear_solver.h:1661
operations_research::GLOPInterface::IsLP
bool IsLP() const override
Definition: glop_interface.cc:263
operations_research::GLOPInterface::ClearObjective
void ClearObjective() override
Definition: glop_interface.cc:237
operations_research
The vehicle routing library lets one model and solve generic vehicle routing problems ranging from th...
Definition: dense_doubly_linked_list.h:21
operations_research::MPSolverParameters::SCALING
@ SCALING
Advanced usage: enable or disable matrix scaling.
Definition: linear_solver.h:1385
operations_research::glop::ConstraintStatus
ConstraintStatus
Definition: lp_types.h:227
operations_research::GLOPInterface
Definition: glop_interface.cc:34
operations_research::glop::LinearProgram
Definition: lp_data.h:55
operations_research::MPSolverParameters::RELATIVE_MIP_GAP
@ RELATIVE_MIP_GAP
Limit for relative MIP gap.
Definition: linear_solver.h:1363
operations_research::MPSolverInterface::last_variable_index_
int last_variable_index_
Definition: linear_solver.h:1730
int64
int64_t int64
Definition: integral_types.h:34
operations_research::MPSolverParameters
This class stores parameter settings for LP and MIP solvers.
Definition: linear_solver.h:1358
operations_research::glop::LPSolver
Definition: lp_solver.h:29
operations_research::GLOPInterface::SetStartingLpBasis
void SetStartingLpBasis(const std::vector< MPSolver::BasisStatus > &variable_statuses, const std::vector< MPSolver::BasisStatus > &constraint_statuses) override
Definition: glop_interface.cc:322
operations_research::glop::LinearProgram::SetConstraintBounds
void SetConstraintBounds(RowIndex row, Fractional lower_bound, Fractional upper_bound)
Definition: lp_data.cc:307
operations_research::GLOPInterface::ClearConstraint
void ClearConstraint(MPConstraint *const constraint) override
Definition: glop_interface.cc:226
index
int index
Definition: pack.cc:508
operations_research::glop::LinearProgram::SetMaximizationProblem
void SetMaximizationProblem(bool maximize)
Definition: lp_data.cc:341
operations_research::GLOPInterface::InterruptSolve
bool InterruptSolve() override
Definition: glop_interface.cc:185
operations_research::glop::Fractional
double Fractional
Definition: lp_types.h:77
operations_research::MPSolverToGlopConstraintStatus
glop::ConstraintStatus MPSolverToGlopConstraintStatus(MPSolver::BasisStatus s)
Definition: glop_utils.cc:108
operations_research::MPSolverInterface::SetIntegerParamToUnsupportedValue
virtual void SetIntegerParamToUnsupportedValue(MPSolverParameters::IntegerParam param, int value)
Definition: linear_solver.cc:1748
operations_research::GLOPInterface::SetRelativeMipGap
void SetRelativeMipGap(double value) override
Definition: glop_interface.cc:342
operations_research::GLOPInterface::column_status
MPSolver::BasisStatus column_status(int variable_index) const override
Definition: glop_interface.cc:257
operations_research::MPSolverInterface::SetCommonParameters
void SetCommonParameters(const MPSolverParameters &param)
Definition: linear_solver.cc:1707
operations_research::glop::LPSolver::Clear
void Clear()
Definition: lp_solver.cc:211
operations_research::glop::LinearProgram::SetCoefficient
void SetCoefficient(RowIndex row, ColIndex col, Fractional value)
Definition: lp_data.cc:315
operations_research::GLOPInterface::SetPrimalTolerance
void SetPrimalTolerance(double value) override
Definition: glop_interface.cc:349
operations_research::MPSolverInterface::ExtractModel
void ExtractModel()
Definition: linear_solver.cc:1612
operations_research::GlopToMPSolverResultStatus
MPSolver::ResultStatus GlopToMPSolverResultStatus(glop::ProblemStatus s)
Definition: glop_utils.cc:18
operations_research::GLOPInterface::Reset
void Reset() override
Definition: glop_interface.cc:190
operations_research::GLOPInterface::SetParameters
void SetParameters(const MPSolverParameters &param) override
Definition: glop_interface.cc:336
time_limit
SharedTimeLimit * time_limit
Definition: cp_model_solver.cc:2025
operations_research::MPSolverParameters::PRIMAL
@ PRIMAL
Primal simplex.
Definition: linear_solver.h:1401
operations_research::MPSolverParameters::kDefaultIntegerParamValue
static const int kDefaultIntegerParamValue
Definition: linear_solver.h:1429
operations_research::GLOPInterface::AddRowConstraint
void AddRowConstraint(MPConstraint *const ct) override
Definition: glop_interface.cc:212
operations_research::MPSolverToGlopVariableStatus
glop::VariableStatus MPSolverToGlopVariableStatus(MPSolver::BasisStatus s)
Definition: glop_utils.cc:74
operations_research::MPSolverInterface::set_constraint_as_extracted
void set_constraint_as_extracted(int ct_index, bool extracted)
Definition: linear_solver.h:1667
operations_research::GLOPInterface::nodes
int64 nodes() const override
Definition: glop_interface.cc:243
operations_research::MPSolverInterface::ResetExtractionInformation
void ResetExtractionInformation()
Definition: linear_solver.cc:1640
operations_research::MPSolverInterface::kUnknownNumberOfNodes
static constexpr int64 kUnknownNumberOfNodes
Definition: linear_solver.h:1534
operations_research::GLOPInterface::~GLOPInterface
~GLOPInterface() override
Definition: glop_interface.cc:113
operations_research::MPSolverInterface::maximize_
bool maximize_
Definition: linear_solver.h:1725
operations_research::GLOPInterface::SetSolverSpecificParametersAsString
bool SetSolverSpecificParametersAsString(const std::string &parameters) override
Definition: glop_interface.cc:414
operations_research::glop::LinearProgram::SetVariableBounds
void SetVariableBounds(ColIndex col, Fractional lower_bound, Fractional upper_bound)
Definition: lp_data.cc:247
operations_research::GLOPInterface::SetVariableInteger
void SetVariableInteger(int index, bool integer) override
Definition: glop_interface.cc:204
ct
const Constraint * ct
Definition: demon_profiler.cc:42
operations_research::GLOPInterface::AddVariable
void AddVariable(MPVariable *const var) override
Definition: glop_interface.cc:216
operations_research::glop::LPSolver::constraint_statuses
const ConstraintStatusColumn & constraint_statuses() const
Definition: lp_solver.h:116
operations_research::MPSolverParameters::SCALING_ON
@ SCALING_ON
Scaling is on.
Definition: linear_solver.h:1423
operations_research::GLOPInterface::SetScalingMode
void SetScalingMode(int value) override
Definition: glop_interface.cc:383
operations_research::GLOPInterface::IsMIP
bool IsMIP() const override
Definition: glop_interface.cc:265
operations_research::MPSolverInterface
Definition: linear_solver.h:1514
operations_research::glop::LPSolver::SolveWithTimeLimit
ABSL_MUST_USE_RESULT ProblemStatus SolveWithTimeLimit(const LinearProgram &lp, TimeLimit *time_limit)
Definition: lp_solver.cc:125
operations_research::GLOPInterface::SetCoefficient
void SetCoefficient(MPConstraint *const constraint, const MPVariable *const variable, double new_value, double old_value) override
Definition: glop_interface.cc:220
operations_research::glop::LPSolver::reduced_costs
const DenseRow & reduced_costs() const
Definition: lp_solver.h:101
operations_research::MPSolverParameters::PRESOLVE
@ PRESOLVE
Advanced usage: presolve mode.
Definition: linear_solver.h:1379
operations_research::glop::LPSolver::SetInitialBasis
void SetInitialBasis(const VariableStatusRow &variable_statuses, const ConstraintStatusColumn &constraint_statuses)
Definition: lp_solver.cc:216
operations_research::GLOPInterface::iterations
int64 iterations() const override
Definition: glop_interface.cc:239
operations_research::MPSolver::SetSolverSpecificParametersAsString
bool SetSolverSpecificParametersAsString(const std::string &parameters)
Advanced usage: pass solver specific parameters in text format.
Definition: linear_solver.cc:345
operations_research::GlopToMPSolverVariableStatus
MPSolver::BasisStatus GlopToMPSolverVariableStatus(glop::VariableStatus s)
Definition: glop_utils.cc:57
operations_research::MPSolver::Objective
const MPObjective & Objective() const
Returns the objective object.
Definition: linear_solver.h:414
operations_research::MPSolverInterface::SetDoubleParamToUnsupportedValue
void SetDoubleParamToUnsupportedValue(MPSolverParameters::DoubleParam param, double value)
Definition: linear_solver.cc:1743
operations_research::MPSolver::ResultStatus
ResultStatus
The status of solving the problem.
Definition: linear_solver.h:425
coefficient
int64 coefficient
Definition: routing_search.cc:973
col
ColIndex col
Definition: markowitz.cc:176
operations_research::GlopToMPSolverConstraintStatus
MPSolver::BasisStatus GlopToMPSolverConstraintStatus(glop::ConstraintStatus s)
Definition: glop_utils.cc:91
operations_research::MPSolver::FREE
@ FREE
Definition: linear_solver.h:641
operations_research::glop::ProblemStatus
ProblemStatus
Definition: lp_types.h:101
row
RowIndex row
Definition: markowitz.cc:175
operations_research::glop::LPSolver::dual_values
const DenseColumn & dual_values() const
Definition: lp_solver.h:112
operations_research::GLOPInterface::SolverVersion
std::string SolverVersion() const override
Definition: glop_interface.cc:267
hash.h
linear_solver.h
operations_research::GLOPInterface::SetConstraintBounds
void SetConstraintBounds(int index, double lb, double ub) override
Definition: glop_interface.cc:208
operations_research::GLOPInterface::SetPresolveMode
void SetPresolveMode(int value) override
Definition: glop_interface.cc:368
operations_research::MPSolverParameters::PRIMAL_TOLERANCE
@ PRIMAL_TOLERANCE
Advanced usage: tolerance for primal feasibility of basic solutions.
Definition: linear_solver.h:1371
operations_research::GLOPInterface::SetObjectiveCoefficient
void SetObjectiveCoefficient(const MPVariable *const variable, double coefficient) override
Definition: glop_interface.cc:230
operations_research::BuildGLOPInterface
MPSolverInterface * BuildGLOPInterface(MPSolver *const solver)
Definition: glop_interface.cc:433
operations_research::GLOPInterface::GLOPInterface
GLOPInterface(MPSolver *const solver)
Definition: glop_interface.cc:104
operations_research::MPSolverInterface::solver_
MPSolver *const solver_
Definition: linear_solver.h:1718
operations_research::GLOPInterface::ExtractObjective
void ExtractObjective() override
Definition: glop_interface.cc:312
operations_research::GLOPInterface::IsContinuous
bool IsContinuous() const override
Definition: glop_interface.cc:261
operations_research::MPSolver::BasisStatus
BasisStatus
Advanced usage: possible basis status values for a variable and the slack variable of a linear constr...
Definition: linear_solver.h:640
operations_research::MPSolverParameters::kDefaultDoubleParamValue
static const double kDefaultDoubleParamValue
Definition: linear_solver.h:1428
operations_research::MPSolverInterface::SOLUTION_SYNCHRONIZED
@ SOLUTION_SYNCHRONIZED
Definition: linear_solver.h:1526
operations_research::glop::LinearProgram::SetObjectiveOffset
void SetObjectiveOffset(Fractional objective_offset)
Definition: lp_data.cc:329
gtl::ITIVector::push_back
void push_back(const value_type &x)
Definition: int_type_indexed_vector.h:157
operations_research::ProtobufTextFormatMergeFromString
bool ProtobufTextFormatMergeFromString(const std::string &proto_text_string, ProtoType *proto)
Definition: port/proto_utils.h:75
operations_research::glop::VariableStatus
VariableStatus
Definition: lp_types.h:196
operations_research::GLOPInterface::SetDualTolerance
void SetDualTolerance(double value) override
Definition: glop_interface.cc:359
operations_research::glop::LPSolver::variable_values
const DenseRow & variable_values() const
Definition: lp_solver.h:100
lp_types.h
operations_research::TimeLimit::FromParameters
static std::unique_ptr< TimeLimit > FromParameters(const Parameters &parameters)
Creates a time limit object initialized from an object that provides methods max_time_in_seconds() an...
Definition: time_limit.h:159
operations_research::GLOPInterface::ExtractNewConstraints
void ExtractNewConstraints() override
Definition: glop_interface.cc:288
operations_research::glop::LPSolver::GetObjectiveValue
Fractional GetObjectiveValue() const
Definition: lp_solver.cc:444
operations_research::GLOPInterface::best_objective_bound
double best_objective_bound() const override
Definition: glop_interface.cc:248
operations_research::glop::LinearProgram::CreateNewVariable
ColIndex CreateNewVariable()
Definition: lp_data.cc:160
operations_research::MPSolverInterface::last_constraint_index_
int last_constraint_index_
Definition: linear_solver.h:1728
operations_research::MPSolverParameters::PRESOLVE_ON
@ PRESOLVE_ON
Presolve is on.
Definition: linear_solver.h:1393
operations_research::MPSolverInterface::trivial_worst_objective_bound
double trivial_worst_objective_bound() const
Definition: linear_solver.cc:1682
parameters
SatParameters parameters
Definition: cp_model_fz_solver.cc:107
parameters.pb.h
operations_research::GLOPInterface::Solve
MPSolver::ResultStatus Solve(const MPSolverParameters &param) override
Definition: glop_interface.cc:115
lp_solver.h
operations_research::MPSolverInterface::sync_status_
SynchronizationStatus sync_status_
Definition: linear_solver.h:1720
operations_research::glop::LinearProgram::Clear
void Clear()
Definition: lp_data.cc:132