<ahref="linear__solver_8h.html">Go to the documentation of this file.</a><divclass="fragment"><divclass="line"><aid="l00001"name="l00001"></a><spanclass="lineno"> 1</span><spanclass="comment">// Copyright 2010-2021 Google LLC</span></div>
<divclass="line"><aid="l00002"name="l00002"></a><spanclass="lineno"> 2</span><spanclass="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></div>
<divclass="line"><aid="l00003"name="l00003"></a><spanclass="lineno"> 3</span><spanclass="comment">// you may not use this file except in compliance with the License.</span></div>
<divclass="line"><aid="l00004"name="l00004"></a><spanclass="lineno"> 4</span><spanclass="comment">// You may obtain a copy of the License at</span></div>
<divclass="line"><aid="l00008"name="l00008"></a><spanclass="lineno"> 8</span><spanclass="comment">// Unless required by applicable law or agreed to in writing, software</span></div>
<divclass="line"><aid="l00009"name="l00009"></a><spanclass="lineno"> 9</span><spanclass="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></div>
<divclass="line"><aid="l00010"name="l00010"></a><spanclass="lineno"> 10</span><spanclass="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div>
<divclass="line"><aid="l00011"name="l00011"></a><spanclass="lineno"> 11</span><spanclass="comment">// See the License for the specific language governing permissions and</span></div>
<divclass="line"><aid="l00012"name="l00012"></a><spanclass="lineno"> 12</span><spanclass="comment">// limitations under the License.</span></div>
<divclass="line"><aid="l00175"name="l00175"></a><spanclass="lineno"> 175</span><spanclass="comment">// There is a homonymous version taking a MPSolver::OptimizationProblemType.</span></div>
<divclass="line"><aid="l00196"name="l00196"></a><spanclass="lineno"> 196</span><spanclass="comment">// In-house linear programming solver based on the primal-dual hybrid</span></div>
<divclass="line"><aid="l00197"name="l00197"></a><spanclass="lineno"> 197</span><spanclass="comment">// gradient method. Sometimes faster than Glop for medium-size problems and</span></div>
<divclass="line"><aid="l00198"name="l00198"></a><spanclass="lineno"> 198</span><spanclass="comment">// scales to much larger problems than Glop.</span></div>
<divclass="line"><aid="l00215"name="l00215"></a><spanclass="lineno"> 215</span><spanclass="comment">// Boolean optimization problem (requires only integer variables and works</span></div>
<divclass="line"><aid="l00216"name="l00216"></a><spanclass="lineno"> 216</span><spanclass="comment">// best with only Boolean variables).</span></div>
<divclass="line"><aid="l00219"name="l00219"></a><spanclass="lineno"> 219</span><spanclass="comment">// SAT based solver (requires only integer and Boolean variables).</span></div>
<divclass="line"><aid="l00220"name="l00220"></a><spanclass="lineno"> 220</span><spanclass="comment">// If you pass it mixed integer problems, it will scale coefficients to</span></div>
<divclass="line"><aid="l00221"name="l00221"></a><spanclass="lineno"> 221</span><spanclass="comment">// integer values, and solver continuous variables as integral variables.</span></div>
<divclass="line"><aid="l00287"name="l00287"></a><spanclass="lineno"> 287</span><spanclass="keywordflow">return</span> name_; <spanclass="comment">// Set at construction.</span></div>
<divclass="line"><aid="l00292"name="l00292"></a><spanclass="lineno"> 292</span><spanclass="keywordflow">return</span> problem_type_; <spanclass="comment">// Set at construction.</span></div>
<divclass="line"><aid="l00559"name="l00559"></a><spanclass="lineno"> 559</span><spanclass="comment">// `interrupt` is non-const because the internal</span></div>
<divclass="line"><aid="l00560"name="l00560"></a><spanclass="lineno"> 560</span><spanclass="comment">// solver may set it to true itself, in some cases.</span></div>
<divclass="line"><aid="l00565"name="l00565"></a><spanclass="lineno"> 565</span><spanclass="comment">// Interruption requires that MPSolver::InterruptSolve is supported for the</span></div>
<divclass="line"><aid="l00566"name="l00566"></a><spanclass="lineno"> 566</span><spanclass="comment">// underlying solver. Interrupting requests using SCIP is also not supported</span></div>
<divclass="line"><aid="l00567"name="l00567"></a><spanclass="lineno"> 567</span><spanclass="comment">// as of 2021/08/23, since InterruptSolve is not go/thread-safe</span></div>
<divclass="line"><aid="l00568"name="l00568"></a><spanclass="lineno"> 568</span><spanclass="comment">// for SCIP (see e.g. cl/350545631 for details).</span></div>
<divclass="line"><aid="l00802"name="l00802"></a><spanclass="lineno"> 802</span><spanclass="comment">// Does not take ownership of "mp_callback".</span></div>
<divclass="line"><aid="l00804"name="l00804"></a><spanclass="lineno"> 804</span><spanclass="comment">// As of 2019-10-22, only SCIP and Gurobi support Callbacks.</span></div>
<divclass="line"><aid="l00805"name="l00805"></a><spanclass="lineno"> 805</span><spanclass="comment">// SCIP does not support suggesting a heuristic solution in the callback.</span></div>
<divclass="line"><aid="l00807"name="l00807"></a><spanclass="lineno"> 807</span><spanclass="comment">// See go/mpsolver-callbacks for additional documentation.</span></div>
<divclass="line"><aid="l00811"name="l00811"></a><spanclass="lineno"> 811</span><spanclass="comment">// Global counters of variables and constraints ever created across all</span></div>
<divclass="line"><aid="l00812"name="l00812"></a><spanclass="lineno"> 812</span><spanclass="comment">// MPSolver instances. Those are only updated after the destruction</span></div>
<divclass="line"><aid="l00813"name="l00813"></a><spanclass="lineno"> 813</span><spanclass="comment">// (or Clear()) of each MPSolver instance.</span></div>
<divclass="line"><aid="l00817"name="l00817"></a><spanclass="lineno"> 817</span><spanclass="comment">// DEPRECATED: Use TimeLimit() and SetTimeLimit(absl::Duration) instead.</span></div>
<divclass="line"><aid="l00818"name="l00818"></a><spanclass="lineno"> 818</span><spanclass="comment">// NOTE: These deprecated functions used the convention time_limit = 0 to mean</span></div>
<divclass="line"><aid="l00819"name="l00819"></a><spanclass="lineno"> 819</span><spanclass="comment">// "no limit", which now corresponds to time_limit_ = InfiniteDuration().</span></div>
<divclass="line"><aid="l00854"name="l00854"></a><spanclass="lineno"> 854</span><spanclass="comment">// Debugging: verify that the given MPVariable* belongs to this solver.</span></div>
<divclass="line"><aid="l00858"name="l00858"></a><spanclass="lineno"> 858</span><spanclass="comment">// Computes the size of the constraint with the largest number of</span></div>
<divclass="line"><aid="l00859"name="l00859"></a><spanclass="lineno"> 859</span><spanclass="comment">// coefficients with index in [min_constraint_index,</span></div>
<divclass="line"><aid="l00864"name="l00864"></a><spanclass="lineno"> 864</span><spanclass="comment">// Returns true if the model has constraints with lower bound > upper bound.</span></div>
<divclass="line"><aid="l00867"name="l00867"></a><spanclass="lineno"> 867</span><spanclass="comment">// Returns true if the model has at least 1 integer variable.</span></div>
<divclass="line"><aid="l00870"name="l00870"></a><spanclass="lineno"> 870</span><spanclass="comment">// Generates the map from variable names to their indices.</span></div>
<divclass="line"><aid="l00873"name="l00873"></a><spanclass="lineno"> 873</span><spanclass="comment">// Generates the map from constraint names to their indices.</span></div>
<divclass="line"><aid="l00876"name="l00876"></a><spanclass="lineno"> 876</span><spanclass="comment">// The name of the linear programming problem.</span></div>
<divclass="line"><aid="l00879"name="l00879"></a><spanclass="lineno"> 879</span><spanclass="comment">// The type of the linear programming problem.</span></div>
<divclass="line"><aid="l00885"name="l00885"></a><spanclass="lineno"> 885</span><spanclass="comment">// The vector of variables in the problem.</span></div>
<divclass="line"><aid="l00887"name="l00887"></a><spanclass="lineno"> 887</span><spanclass="comment">// A map from a variable's name to its index in variables_.</span></div>
<divclass="line"><aid="l00890"name="l00890"></a><spanclass="lineno"> 890</span><spanclass="comment">// Whether variables have been extracted to the underlying interface.</span></div>
<divclass="line"><aid="l00893"name="l00893"></a><spanclass="lineno"> 893</span><spanclass="comment">// The vector of constraints in the problem.</span></div>
<divclass="line"><aid="l00895"name="l00895"></a><spanclass="lineno"> 895</span><spanclass="comment">// A map from a constraint's name to its index in constraints_.</span></div>
<divclass="line"><aid="l00898"name="l00898"></a><spanclass="lineno"> 898</span><spanclass="comment">// Whether constraints have been extracted to the underlying interface.</span></div>
<divclass="line"><aid="l00904"name="l00904"></a><spanclass="lineno"> 904</span><spanclass="comment">// Initial values for all or some of the problem variables that can be</span></div>
<divclass="line"><aid="l00905"name="l00905"></a><spanclass="lineno"> 905</span><spanclass="comment">// exploited as a starting hint by a solver.</span></div>
<divclass="line"><aid="l00907"name="l00907"></a><spanclass="lineno"> 907</span><spanclass="comment">// Note(user): as of 05/05/2015, we can't use >> because of some SWIG errors.</span></div>
<divclass="line"><aid="l00909"name="l00909"></a><spanclass="lineno"> 909</span><spanclass="comment">// TODO(user): replace by two vectors, a std::vector<bool> to indicate if a</span></div>
<divclass="line"><aid="l00910"name="l00910"></a><spanclass="lineno"> 910</span><spanclass="comment">// hint is provided and a std::vector<double> for the hint value.</span></div>
<divclass="line"><aid="l00917"name="l00917"></a><spanclass="lineno"> 917</span><spanclass="comment">// Permanent storage for the number of threads.</span></div>
<divclass="line"><aid="l00946"name="l00946"></a><spanclass="lineno"> 946</span><spanclass="keywordflow">return</span> os <<<aclass="code hl_function"href="namespaceoperations__research.html#afc3e3b80841b587c6fbfd9e9f3ec9c59">ToString</a>(optimization_problem_type);</div>
<divclass="line"><aid="l00951"name="l00951"></a><spanclass="lineno"> 951</span><spanclass="keywordflow">return</span> os << ProtoEnumToString<MPSolverResponseStatus>(</div>
<divclass="line"><aid="l01074"name="l01074"></a><spanclass="lineno"> 1074</span><spanclass="comment">// Constructor. An objective points to a single MPSolverInterface</span></div>
<divclass="line"><aid="l01075"name="l01075"></a><spanclass="lineno"> 1075</span><spanclass="comment">// that is specified in the constructor. An objective cannot belong</span></div>
<divclass="line"><aid="l01076"name="l01076"></a><spanclass="lineno"> 1076</span><spanclass="comment">// to several models.</span></div>
<divclass="line"><aid="l01077"name="l01077"></a><spanclass="lineno"> 1077</span><spanclass="comment">// At construction, an MPObjective has no terms (which is equivalent</span></div>
<divclass="line"><aid="l01078"name="l01078"></a><spanclass="lineno"> 1078</span><spanclass="comment">// on having a coefficient of 0 for all variables), and an offset of 0.</span></div>
<divclass="line"><aid="l01184"name="l01184"></a><spanclass="lineno"> 1184</span><spanclass="comment">// Constructor. A variable points to a single MPSolverInterface that</span></div>
<divclass="line"><aid="l01185"name="l01185"></a><spanclass="lineno"> 1185</span><spanclass="comment">// is specified in the constructor. A variable cannot belong to</span></div>
<divclass="line"><aid="l01186"name="l01186"></a><spanclass="lineno"> 1186</span><spanclass="comment">// several models.</span></div>
<divclass="line"><aid="l01326"name="l01326"></a><spanclass="lineno"> 1326</span><spanclass="comment">// Constructor. A constraint points to a single MPSolverInterface</span></div>
<divclass="line"><aid="l01327"name="l01327"></a><spanclass="lineno"> 1327</span><spanclass="comment">// that is specified in the constructor. A constraint cannot belong</span></div>
<divclass="line"><aid="l01328"name="l01328"></a><spanclass="lineno"> 1328</span><spanclass="comment">// to several models.</span></div>
<divclass="line"><aid="l01344"name="l01344"></a><spanclass="lineno"> 1344</span><spanclass="comment">// Returns true if the constraint contains variables that have not</span></div>
<divclass="line"><aid="l01345"name="l01345"></a><spanclass="lineno"> 1345</span><spanclass="comment">// been extracted yet.</span></div>
<divclass="line"><aid="l01353"name="l01353"></a><spanclass="lineno"> 1353</span><spanclass="comment">// The lower bound for the linear constraint.</span></div>
<divclass="line"><aid="l01356"name="l01356"></a><spanclass="lineno"> 1356</span><spanclass="comment">// The upper bound for the linear constraint.</span></div>
<divclass="line"><aid="l01362"name="l01362"></a><spanclass="lineno"> 1362</span><spanclass="comment">// True if the constraint is "lazy", i.e. the constraint is added to the</span></div>
<divclass="line"><aid="l01363"name="l01363"></a><spanclass="lineno"> 1363</span><spanclass="comment">// underlying Linear Programming solver only if it is violated.</span></div>
<divclass="line"><aid="l01364"name="l01364"></a><spanclass="lineno"> 1364</span><spanclass="comment">// By default this parameter is 'false'.</span></div>
<divclass="line"><aid="l01367"name="l01367"></a><spanclass="lineno"> 1367</span><spanclass="comment">// If given, this constraint is only active if `indicator_variable_`'s value</span></div>
<divclass="line"><aid="l01368"name="l01368"></a><spanclass="lineno"> 1368</span><spanclass="comment">// is equal to `indicator_value_`.</span></div>
<divclass="line"><aid="l01471"name="l01471"></a><spanclass="lineno"> 1471</span><spanclass="comment">// Placeholder value to indicate that a parameter is set to</span></div>
<divclass="line"><aid="l01472"name="l01472"></a><spanclass="lineno"> 1472</span><spanclass="comment">// the default value defined in the wrapper.</span></div>
<divclass="line"><aid="l01476"name="l01476"></a><spanclass="lineno"> 1476</span><spanclass="comment">// Placeholder value to indicate that a parameter is unknown.</span></div>
<divclass="line"><aid="l01480"name="l01480"></a><spanclass="lineno"> 1480</span><spanclass="comment">// Default values for parameters. Only parameters that define the</span></div>
<divclass="line"><aid="l01481"name="l01481"></a><spanclass="lineno"> 1481</span><spanclass="comment">// properties of the solution returned need to have a default value</span></div>
<divclass="line"><aid="l01482"name="l01482"></a><spanclass="lineno"> 1482</span><spanclass="comment">// (that is the same for all solvers). You can also define a default</span></div>
<divclass="line"><aid="l01483"name="l01483"></a><spanclass="lineno"> 1483</span><spanclass="comment">// value for performance parameters when you are confident it is a</span></div>
<divclass="line"><aid="l01484"name="l01484"></a><spanclass="lineno"> 1484</span><spanclass="comment">// good choice (example: always turn presolve on).</span></div>
<divclass="line"><aid="l01524"name="l01524"></a><spanclass="lineno"> 1524</span><spanclass="comment">// Parameter value for each parameter.</span></div>
<divclass="line"><aid="l01535"name="l01535"></a><spanclass="lineno"> 1535</span><spanclass="comment">// Boolean value indicating whether each parameter is set to the</span></div>
<divclass="line"><aid="l01536"name="l01536"></a><spanclass="lineno"> 1536</span><spanclass="comment">// solver's default value. Only parameters for which the wrapper</span></div>
<divclass="line"><aid="l01537"name="l01537"></a><spanclass="lineno"> 1537</span><spanclass="comment">// does not define a default value need such an indicator.</span></div>
<divclass="line"><aid="l01543"name="l01543"></a><spanclass="lineno"> 1543</span><spanclass="comment">// Whether the given MPSolverResponseStatus (of a solve) would yield an RPC</span></div>
<divclass="line"><aid="l01544"name="l01544"></a><spanclass="lineno"> 1544</span><spanclass="comment">// error when happening on the linear solver stubby server, see</span></div>
<divclass="line"><aid="l01546"name="l01546"></a><spanclass="lineno"> 1546</span><spanclass="comment">// Note that RPC errors forbid to carry a response to the client, who can only</span></div>
<divclass="line"><aid="l01547"name="l01547"></a><spanclass="lineno"> 1547</span><spanclass="comment">// see the RPC error itself (error code + error message).</span></div>
<divclass="line"><aid="l01550"name="l01550"></a><spanclass="lineno"> 1550</span><spanclass="comment">// This class wraps the actual mathematical programming solvers. Each</span></div>
<divclass="line"><aid="l01551"name="l01551"></a><spanclass="lineno"> 1551</span><spanclass="comment">// solver (GLOP, CLP, CBC, GLPK, SCIP) has its own interface class that</span></div>
<divclass="line"><aid="l01552"name="l01552"></a><spanclass="lineno"> 1552</span><spanclass="comment">// derives from this abstract class. This class is never directly</span></div>
<divclass="line"><aid="l01553"name="l01553"></a><spanclass="lineno"> 1553</span><spanclass="comment">// accessed by the user.</span></div>
<divclass="line"><aid="l01562"name="l01562"></a><spanclass="lineno"> 1562</span><spanclass="comment">// The underlying solver (CLP, GLPK, ...) and MPSolver are not in</span></div>
<divclass="line"><aid="l01563"name="l01563"></a><spanclass="lineno"> 1563</span><spanclass="comment">// sync for the model nor for the solution.</span></div>
<divclass="line"><aid="l01565"name="l01565"></a><spanclass="lineno"> 1565</span><spanclass="comment">// The underlying solver and MPSolver are in sync for the model</span></div>
<divclass="line"><aid="l01566"name="l01566"></a><spanclass="lineno"> 1566</span><spanclass="comment">// but not for the solution: the model has changed since the</span></div>
<divclass="line"><aid="l01567"name="l01567"></a><spanclass="lineno"> 1567</span><spanclass="comment">// solution was computed last.</span></div>
<divclass="line"><aid="l01569"name="l01569"></a><spanclass="lineno"> 1569</span><spanclass="comment">// The underlying solver and MPSolver are in sync for the model and</span></div>
<divclass="line"><aid="l01570"name="l01570"></a><spanclass="lineno"> 1570</span><spanclass="comment">// the solution.</span></div>
<divclass="line"><aid="l01574"name="l01574"></a><spanclass="lineno"> 1574</span><spanclass="comment">// When the underlying solver does not provide the number of simplex</span></div>
<divclass="line"><aid="l01577"name="l01577"></a><spanclass="lineno"> 1577</span><spanclass="comment">// When the underlying solver does not provide the number of</span></div>
<divclass="line"><aid="l01581"name="l01581"></a><spanclass="lineno"> 1581</span><spanclass="comment">// Constructor. The user will access the MPSolverInterface through the</span></div>
<divclass="line"><aid="l01582"name="l01582"></a><spanclass="lineno"> 1582</span><spanclass="comment">// MPSolver passed as argument.</span></div>
<divclass="line"><aid="l01587"name="l01587"></a><spanclass="lineno"> 1587</span><spanclass="comment">// Solves problem with specified parameter values. Returns true if the</span></div>
<divclass="line"><aid="l01588"name="l01588"></a><spanclass="lineno"> 1588</span><spanclass="comment">// solution is optimal.</span></div>
<divclass="line"><aid="l01591"name="l01591"></a><spanclass="lineno"> 1591</span><spanclass="comment">// Attempts to directly solve a MPModelRequest, bypassing the MPSolver data</span></div>
<divclass="line"><aid="l01592"name="l01592"></a><spanclass="lineno"> 1592</span><spanclass="comment">// structures entirely. Like MPSolver::SolveWithProto(), optionally takes in</span></div>
<divclass="line"><aid="l01593"name="l01593"></a><spanclass="lineno"> 1593</span><spanclass="comment">// an 'interrupt' boolean.</span></div>
<divclass="line"><aid="l01594"name="l01594"></a><spanclass="lineno"> 1594</span><spanclass="comment">// Returns {} (eg. absl::nullopt) if direct-solve is not supported by the</span></div>
<divclass="line"><aid="l01595"name="l01595"></a><spanclass="lineno"> 1595</span><spanclass="comment">// underlying solver (possibly because interrupt != nullptr), in which case</span></div>
<divclass="line"><aid="l01596"name="l01596"></a><spanclass="lineno"> 1596</span><spanclass="comment">// the user should fall back to using MPSolver.</span></div>
<divclass="line"><aid="l01599"name="l01599"></a><spanclass="lineno"> 1599</span><spanclass="comment">// `interrupt` is non-const because the internal</span></div>
<divclass="line"><aid="l01600"name="l01600"></a><spanclass="lineno"> 1600</span><spanclass="comment">// solver may set it to true itself, in some cases.</span></div>
<divclass="line"><aid="l01605"name="l01605"></a><spanclass="lineno"> 1605</span><spanclass="comment">// Writes the model using the solver internal write function. Currently only</span></div>
<divclass="line"><aid="l01606"name="l01606"></a><spanclass="lineno"> 1606</span><spanclass="comment">// available for GurobiInterface.</span></div>
<divclass="line"><aid="l01609"name="l01609"></a><spanclass="lineno"> 1609</span><spanclass="comment">// ----- Model modifications and extraction -----</span></div>
<divclass="line"><aid="l01613"name="l01613"></a><spanclass="lineno"> 1613</span><spanclass="comment">// Sets the optimization direction (min/max).</span></div>
<divclass="line"><aid="l01616"name="l01616"></a><spanclass="lineno"> 1616</span><spanclass="comment">// Modifies bounds of an extracted variable.</span></div>
<divclass="line"><aid="l01619"name="l01619"></a><spanclass="lineno"> 1619</span><spanclass="comment">// Modifies integrality of an extracted variable.</span></div>
<divclass="line"><aid="l01622"name="l01622"></a><spanclass="lineno"> 1622</span><spanclass="comment">// Modify bounds of an extracted variable.</span></div>
<divclass="line"><aid="l01628"name="l01628"></a><spanclass="lineno"> 1628</span><spanclass="comment">// Adds an indicator constraint. Returns true if the feature is supported by</span></div>
<divclass="line"><aid="l01629"name="l01629"></a><spanclass="lineno"> 1629</span><spanclass="comment">// the underlying solver.</span></div>
<divclass="line"><aid="l01638"name="l01638"></a><spanclass="lineno"> 1638</span><spanclass="comment">// Changes a coefficient in a constraint.</span></div>
<divclass="line"><aid="l01643"name="l01643"></a><spanclass="lineno"> 1643</span><spanclass="comment">// Clears a constraint from all its terms.</span></div>
<divclass="line"><aid="l01646"name="l01646"></a><spanclass="lineno"> 1646</span><spanclass="comment">// Changes a coefficient in the linear objective.</span></div>
<divclass="line"><aid="l01650"name="l01650"></a><spanclass="lineno"> 1650</span><spanclass="comment">// Changes the constant term in the linear objective.</span></div>
<divclass="line"><aid="l01653"name="l01653"></a><spanclass="lineno"> 1653</span><spanclass="comment">// Clears the objective from all its terms.</span></div>
<divclass="line"><aid="l01657"name="l01657"></a><spanclass="lineno"> 1657</span><spanclass="comment">// ------ Query statistics on the solution and the solve ------</span></div>
<divclass="line"><aid="l01658"name="l01658"></a><spanclass="lineno"> 1658</span><spanclass="comment">// Returns the number of simplex iterations. The problem must be discrete,</span></div>
<divclass="line"><aid="l01659"name="l01659"></a><spanclass="lineno"> 1659</span><spanclass="comment">// otherwise it crashes, or returns kUnknownNumberOfIterations in NDEBUG mode.</span></div>
<divclass="line"><aid="l01661"name="l01661"></a><spanclass="lineno"> 1661</span><spanclass="comment">// Returns the number of branch-and-bound nodes. The problem must be discrete,</span></div>
<divclass="line"><aid="l01662"name="l01662"></a><spanclass="lineno"> 1662</span><spanclass="comment">// otherwise it crashes, or returns kUnknownNumberOfNodes in NDEBUG mode.</span></div>
<divclass="line"><aid="l01664"name="l01664"></a><spanclass="lineno"> 1664</span><spanclass="comment">// Returns the best objective bound. The problem must be discrete, otherwise</span></div>
<divclass="line"><aid="l01665"name="l01665"></a><spanclass="lineno"> 1665</span><spanclass="comment">// it crashes, or returns trivial bound (+/- inf) in NDEBUG mode.</span></div>
<divclass="line"><aid="l01667"name="l01667"></a><spanclass="lineno"> 1667</span><spanclass="comment">// Returns the objective value of the best solution found so far.</span></div>
<divclass="line"><aid="l01670"name="l01670"></a><spanclass="lineno"> 1670</span><spanclass="comment">// Returns the basis status of a row.</span></div>
<divclass="line"><aid="l01672"name="l01672"></a><spanclass="lineno"> 1672</span><spanclass="comment">// Returns the basis status of a constraint.</span></div>
<divclass="line"><aid="l01675"name="l01675"></a><spanclass="lineno"> 1675</span><spanclass="comment">// Checks whether the solution is synchronized with the model, i.e. whether</span></div>
<divclass="line"><aid="l01676"name="l01676"></a><spanclass="lineno"> 1676</span><spanclass="comment">// the model has changed since the solution was computed last.</span></div>
<divclass="line"><aid="l01677"name="l01677"></a><spanclass="lineno"> 1677</span><spanclass="comment">// If it isn't, it crashes in NDEBUG, and returns false othwerwise.</span></div>
<divclass="line"><aid="l01679"name="l01679"></a><spanclass="lineno"> 1679</span><spanclass="comment">// Checks whether a feasible solution exists. The behavior is similar to</span></div>
<divclass="line"><aid="l01682"name="l01682"></a><spanclass="lineno"> 1682</span><spanclass="comment">// Handy shortcut to do both checks above (it is often used).</span></div>
<divclass="line"><aid="l01688"name="l01688"></a><spanclass="lineno"> 1688</span><spanclass="comment">// Queries problem type. For simplicity, the distinction between</span></div>
<divclass="line"><aid="l01689"name="l01689"></a><spanclass="lineno"> 1689</span><spanclass="comment">// continuous and discrete is based on the declaration of the user</span></div>
<divclass="line"><aid="l01690"name="l01690"></a><spanclass="lineno"> 1690</span><spanclass="comment">// when the solver is created (example: GLPK_LINEAR_PROGRAMMING</span></div>
<divclass="line"><aid="l01691"name="l01691"></a><spanclass="lineno"> 1691</span><spanclass="comment">// vs. GLPK_MIXED_INTEGER_PROGRAMMING), not on the actual content of</span></div>
<divclass="line"><aid="l01692"name="l01692"></a><spanclass="lineno"> 1692</span><spanclass="comment">// the model.</span></div>
<divclass="line"><aid="l01693"name="l01693"></a><spanclass="lineno"> 1693</span><spanclass="comment">// Returns true if the problem is continuous.</span></div>
<divclass="line"><aid="l01695"name="l01695"></a><spanclass="lineno"> 1695</span><spanclass="comment">// Returns true if the problem is continuous and linear.</span></div>
<divclass="line"><aid="l01697"name="l01697"></a><spanclass="lineno"> 1697</span><spanclass="comment">// Returns true if the problem is discrete and linear.</span></div>
<divclass="line"><aid="l01700"name="l01700"></a><spanclass="lineno"> 1700</span><spanclass="comment">// Returns the index of the last variable extracted.</span></div>
<divclass="line"><aid="l01716"name="l01716"></a><spanclass="lineno"> 1716</span><spanclass="comment">// Returns the boolean indicating the verbosity of the solver output.</span></div>
<divclass="line"><aid="l01718"name="l01718"></a><spanclass="lineno"> 1718</span><spanclass="comment">// Sets the boolean indicating the verbosity of the solver output.</span></div>
<divclass="line"><aid="l01721"name="l01721"></a><spanclass="lineno"> 1721</span><spanclass="comment">// Returns the result status of the last solve.</span></div>
<divclass="line"><aid="l01727"name="l01727"></a><spanclass="lineno"> 1727</span><spanclass="comment">// Returns a string describing the underlying solver and its version.</span></div>
<divclass="line"><aid="l01733"name="l01733"></a><spanclass="lineno"> 1733</span><spanclass="comment">// Computes exact condition number. Only available for continuous</span></div>
<divclass="line"><aid="l01734"name="l01734"></a><spanclass="lineno"> 1734</span><spanclass="comment">// problems and only implemented in GLPK.</span></div>
<divclass="line"><aid="l01737"name="l01737"></a><spanclass="lineno"> 1737</span><spanclass="comment">// See MPSolver::SetStartingLpBasis().</span></div>
<divclass="line"><aid="l01741"name="l01741"></a><spanclass="lineno"> 1741</span> LOG(FATAL) <<<spanclass="stringliteral">"Not supported by this solver."</span>;</div>
<divclass="line"><aid="l01746"name="l01746"></a><spanclass="lineno"> 1746</span><spanclass="comment">// See MPSolver::NextSolution() for contract.</span></div>
<divclass="line"><aid="l01749"name="l01749"></a><spanclass="lineno"> 1749</span><spanclass="comment">// See MPSolver::SetCallback() for details.</span></div>
<divclass="line"><aid="l01751"name="l01751"></a><spanclass="lineno"> 1751</span> LOG(FATAL) <<<spanclass="stringliteral">"Callbacks not supported for this solver."</span>;</div>
<divclass="line"><aid="l01758"name="l01758"></a><spanclass="lineno"> 1758</span><spanclass="comment">// To access the maximize_ bool and the MPSolver.</span></div>
<divclass="line"><aid="l01764"name="l01764"></a><spanclass="lineno"> 1764</span><spanclass="comment">// Indicates whether the model and the solution are synchronized.</span></div>
<divclass="line"><aid="l01766"name="l01766"></a><spanclass="lineno"> 1766</span><spanclass="comment">// Indicates whether the solve has reached optimality,</span></div>
<divclass="line"><aid="l01767"name="l01767"></a><spanclass="lineno"> 1767</span><spanclass="comment">// infeasibility, a limit, etc.</span></div>
<divclass="line"><aid="l01772"name="l01772"></a><spanclass="lineno"> 1772</span><spanclass="comment">// Index in MPSolver::variables_ of last constraint extracted.</span></div>
<divclass="line"><aid="l01774"name="l01774"></a><spanclass="lineno"> 1774</span><spanclass="comment">// Index in MPSolver::constraints_ of last variable extracted.</span></div>
<divclass="line"><aid="l01777"name="l01777"></a><spanclass="lineno"> 1777</span><spanclass="comment">// The value of the objective function.</span></div>
<divclass="line"><aid="l01780"name="l01780"></a><spanclass="lineno"> 1780</span><spanclass="comment">// The value of the best objective bound. Used only for MIP solvers.</span></div>
<divclass="line"><aid="l01783"name="l01783"></a><spanclass="lineno"> 1783</span><spanclass="comment">// Boolean indicator for the verbosity of the solver output.</span></div>
<divclass="line"><aid="l01786"name="l01786"></a><spanclass="lineno"> 1786</span><spanclass="comment">// Index of dummy variable created for empty constraints or the</span></div>
<divclass="line"><aid="l01790"name="l01790"></a><spanclass="lineno"> 1790</span><spanclass="comment">// Extracts model stored in MPSolver.</span></div>
<divclass="line"><aid="l01792"name="l01792"></a><spanclass="lineno"> 1792</span><spanclass="comment">// Extracts the variables that have not been extracted yet.</span></div>
<divclass="line"><aid="l01794"name="l01794"></a><spanclass="lineno"> 1794</span><spanclass="comment">// Extracts the constraints that have not been extracted yet.</span></div>
<divclass="line"><aid="l01800"name="l01800"></a><spanclass="lineno"> 1800</span><spanclass="comment">// Change synchronization status from SOLUTION_SYNCHRONIZED to</span></div>
<divclass="line"><aid="l01801"name="l01801"></a><spanclass="lineno"> 1801</span><spanclass="comment">// MODEL_SYNCHRONIZED. To be used for model changes.</span></div>
<divclass="line"><aid="l01804"name="l01804"></a><spanclass="lineno"> 1804</span><spanclass="comment">// Sets parameters common to LP and MIP in the underlying solver.</span></div>
<divclass="line"><aid="l01806"name="l01806"></a><spanclass="lineno"> 1806</span><spanclass="comment">// Sets MIP specific parameters in the underlying solver.</span></div>
<divclass="line"><aid="l01808"name="l01808"></a><spanclass="lineno"> 1808</span><spanclass="comment">// Sets all parameters in the underlying solver.</span></div>
<divclass="line"><aid="l01815"name="l01815"></a><spanclass="lineno"> 1815</span><spanclass="comment">// Sets a supported double parameter to an unsupported value.</span></div>
<divclass="line"><aid="l01818"name="l01818"></a><spanclass="lineno"> 1818</span><spanclass="comment">// Sets a supported integer parameter to an unsupported value.</span></div>
<divclass="line"><aid="l01821"name="l01821"></a><spanclass="lineno"> 1821</span><spanclass="comment">// Sets each parameter in the underlying solver.</span></div>
<divclass="line"><aid="l01827"name="l01827"></a><spanclass="lineno"> 1827</span><spanclass="comment">// Sets the number of threads to be used by the solver.</span></div>
<divclass="line"><aid="l01830"name="l01830"></a><spanclass="lineno"> 1830</span><spanclass="comment">// Pass solver specific parameters in text format. The format is</span></div>
<divclass="line"><aid="l01831"name="l01831"></a><spanclass="lineno"> 1831</span><spanclass="comment">// solver-specific and is the same as the corresponding solver configuration</span></div>
<divclass="line"><aid="l01832"name="l01832"></a><spanclass="lineno"> 1832</span><spanclass="comment">// file format. Returns true if the operation was successful.</span></div>
<divclass="line"><aid="l01834"name="l01834"></a><spanclass="lineno"> 1834</span><spanclass="comment">// Default implementation returns true if the input is empty. It returns false</span></div>
<divclass="line"><aid="l01835"name="l01835"></a><spanclass="lineno"> 1835</span><spanclass="comment">// and logs a WARNING if the input is not empty.</span></div>
<divclass="ttc"id="aclassoperations__research_1_1_linear_expr_html"><divclass="ttname"><ahref="classoperations__research_1_1_linear_expr.html">operations_research::LinearExpr</a></div><divclass="ttdoc">LinearExpr models a quantity that is linear in the decision variables (MPVariable) of an optimization...</div><divclass="ttdef"><b>Definition:</b><ahref="linear__expr_8h_source.html#l00114">linear_expr.h:114</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_linear_range_html"><divclass="ttname"><ahref="classoperations__research_1_1_linear_range.html">operations_research::LinearRange</a></div><divclass="ttdoc">An expression of the form:</div><divclass="ttdef"><b>Definition:</b><ahref="linear__expr_8h_source.html#l00192">linear_expr.h:192</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_constraint_html"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_constraint.html">operations_research::MPConstraint</a></div><divclass="ttdoc">The class for constraints of a Mathematical Programming (MP) model.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01219">linear_solver.h:1219</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_constraint_html_a02bfb5cd5deeb2d5149f6976ee0456d6"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_constraint.html#a02bfb5cd5deeb2d5149f6976ee0456d6">operations_research::MPConstraint::SetBounds</a></div><divclass="ttdeci">void SetBounds(double lb, double ub)</div><divclass="ttdoc">Sets both the lower and upper bounds.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_constraint_html_a236f9752f4df4c5134617330a040ec8a"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_constraint.html#a236f9752f4df4c5134617330a040ec8a">operations_research::MPConstraint::SCIPInterface</a></div><divclass="ttdeci">friend class SCIPInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01315">linear_solver.h:1315</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_constraint_html_a24dcbf29c0d6cd766009a182a6484e3b"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_constraint.html#a24dcbf29c0d6cd766009a182a6484e3b">operations_research::MPConstraint::name</a></div><divclass="ttdeci">const std::string & name() const</div><divclass="ttdoc">Returns the name of the constraint.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01222">linear_solver.h:1222</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_constraint_html_a2def997791a2a5119c3502aa68c34181"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_constraint.html#a2def997791a2a5119c3502aa68c34181">operations_research::MPConstraint::SetCoefficient</a></div><divclass="ttdeci">void SetCoefficient(const MPVariable *const var, double coeff)</div><divclass="ttdoc">Sets the coefficient of the variable on the constraint.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_constraint_html_a356d08f701ec7c64a00c19818bb72886"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_constraint.html#a356d08f701ec7c64a00c19818bb72886">operations_research::MPConstraint::GetCoefficient</a></div><divclass="ttdeci">double GetCoefficient(const MPVariable *const var) const</div><divclass="ttdoc">Gets the coefficient of a given variable on the constraint (which is 0 if the variable does not appea...</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_constraint_html_a4584733ca3a135bb0e29e7b29988901d"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_constraint.html#a4584733ca3a135bb0e29e7b29988901d">operations_research::MPConstraint::SetUB</a></div><divclass="ttdeci">void SetUB(double ub)</div><divclass="ttdoc">Sets the upper bound.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01260">linear_solver.h:1260</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_constraint_html_a570e7e2c973cc96bedb0db08f5e062e3"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_constraint.html#a570e7e2c973cc96bedb0db08f5e062e3">operations_research::MPConstraint::ub</a></div><divclass="ttdeci">double ub() const</div><divclass="ttdoc">Returns the upper bound.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01254">linear_solver.h:1254</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_constraint_html_a5c083b37243075a00bf909840dc7c933"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_constraint.html#a5c083b37243075a00bf909840dc7c933">operations_research::MPConstraint::SLMInterface</a></div><divclass="ttdeci">friend class SLMInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01316">linear_solver.h:1316</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_constraint_html_a60944ecdcad88cfb4d4d32feea70c9b5"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_constraint.html#a60944ecdcad88cfb4d4d32feea70c9b5">operations_research::MPConstraint::CLPInterface</a></div><divclass="ttdeci">friend class CLPInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01313">linear_solver.h:1313</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_constraint_html_a6c754b527a347994b06eeb49a09ac222"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_constraint.html#a6c754b527a347994b06eeb49a09ac222">operations_research::MPConstraint::GLOPInterface</a></div><divclass="ttdeci">friend class GLOPInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01320">linear_solver.h:1320</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_constraint_html_a7383308e6b9b63b18196798db342ce8a"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_constraint.html#a7383308e6b9b63b18196798db342ce8a">operations_research::MPConstraint::BopInterface</a></div><divclass="ttdeci">friend class BopInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01321">linear_solver.h:1321</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_constraint_html_a98e8a2eb8ace754f3db6823a8d06d2ec"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_constraint.html#a98e8a2eb8ace754f3db6823a8d06d2ec">operations_research::MPConstraint::PdlpInterface</a></div><divclass="ttdeci">friend class PdlpInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01323">linear_solver.h:1323</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_constraint_html_aa71d36872f416feaa853788a7a7a7ef8"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_constraint.html#aa71d36872f416feaa853788a7a7a7ef8">operations_research::MPConstraint::Clear</a></div><divclass="ttdeci">void Clear()</div><divclass="ttdoc">Clears all variables and coefficients. Does not clear the bounds.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_constraint_html_ab0c809243bacbba99e083bddd16ebcaa"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_constraint.html#ab0c809243bacbba99e083bddd16ebcaa">operations_research::MPConstraint::is_lazy</a></div><divclass="ttdeci">bool is_lazy() const</div><divclass="ttdoc">Advanced usage: returns true if the constraint is "lazy" (see below).</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01266">linear_solver.h:1266</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_constraint_html_abc935c6e0cb353e2c61d38ad8af1ed5c"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_constraint.html#abc935c6e0cb353e2c61d38ad8af1ed5c">operations_research::MPConstraint::XpressInterface</a></div><divclass="ttdeci">friend class XpressInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01319">linear_solver.h:1319</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_constraint_html_ac28a56eeedb62d070578a9231f1875ea"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_constraint.html#ac28a56eeedb62d070578a9231f1875ea">operations_research::MPConstraint::GurobiInterface</a></div><divclass="ttdeci">friend class GurobiInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01317">linear_solver.h:1317</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_constraint_html_ac7502afa7413b2969adcfe572accefde"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_constraint.html#ac7502afa7413b2969adcfe572accefde">operations_research::MPConstraint::set_is_lazy</a></div><divclass="ttdeci">void set_is_lazy(bool laziness)</div><divclass="ttdoc">Advanced usage: sets the constraint "laziness".</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01281">linear_solver.h:1281</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_constraint_html_acbd4413b1370baca9c45aecb0cb8ebd2"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_constraint.html#acbd4413b1370baca9c45aecb0cb8ebd2">operations_research::MPConstraint::SatInterface</a></div><divclass="ttdeci">friend class SatInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01322">linear_solver.h:1322</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_constraint_html_acca41811e8aaab0112b987749c0ecb93"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_constraint.html#acca41811e8aaab0112b987749c0ecb93">operations_research::MPConstraint::index</a></div><divclass="ttdeci">int index() const</div><divclass="ttdoc">Returns the index of the constraint in the MPSolver::constraints_.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01287">linear_solver.h:1287</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_constraint_html_accc4f1882f13ad57ef6bbe8fbe5d365d"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_constraint.html#accc4f1882f13ad57ef6bbe8fbe5d365d">operations_research::MPConstraint::lb</a></div><divclass="ttdeci">double lb() const</div><divclass="ttdoc">Returns the lower bound.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01251">linear_solver.h:1251</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_constraint_html_ad90797a6c268fa29b515bdb5972c7bfb"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_constraint.html#ad90797a6c268fa29b515bdb5972c7bfb">operations_research::MPConstraint::SetLB</a></div><divclass="ttdeci">void SetLB(double lb)</div><divclass="ttdoc">Sets the lower bound.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01257">linear_solver.h:1257</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_constraint_html_ae1a3e0a695903c8e6effd524a7f92784"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_constraint.html#ae1a3e0a695903c8e6effd524a7f92784">operations_research::MPConstraint::GLPKInterface</a></div><divclass="ttdeci">friend class GLPKInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01314">linear_solver.h:1314</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_constraint_html_ae7cbd08108e1636184f28c1a71c42393"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_constraint.html#ae7cbd08108e1636184f28c1a71c42393">operations_research::MPConstraint::CplexInterface</a></div><divclass="ttdeci">friend class CplexInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01318">linear_solver.h:1318</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_constraint_html_aecd5fee61b6013b1207c2ea622c849b5"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_constraint.html#aecd5fee61b6013b1207c2ea622c849b5">operations_research::MPConstraint::basis_status</a></div><divclass="ttdeci">MPSolver::BasisStatus basis_status() const</div><divclass="ttdoc">Advanced usage: returns the basis status of the constraint.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_constraint_html_aee1ddf25e86286c16face31551751bda"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_constraint.html#aee1ddf25e86286c16face31551751bda">operations_research::MPConstraint::KnapsackInterface</a></div><divclass="ttdeci">friend class KnapsackInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01324">linear_solver.h:1324</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_constraint_html_aeec48f5c4d2d1cc79926734f9b586ad5"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_constraint.html#aeec48f5c4d2d1cc79926734f9b586ad5">operations_research::MPConstraint::dual_value</a></div><divclass="ttdeci">double dual_value() const</div><divclass="ttdoc">Advanced usage: returns the dual value of the constraint in the current solution (only available for ...</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_constraint_html_af5a7cf0c655f37c0b388a2ddcf32ac3e"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_constraint.html#af5a7cf0c655f37c0b388a2ddcf32ac3e">operations_research::MPConstraint::CBCInterface</a></div><divclass="ttdeci">friend class CBCInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01312">linear_solver.h:1312</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_constraint_html_afb42f5cebaf659f1a302d5062a576af0"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_constraint.html#afb42f5cebaf659f1a302d5062a576af0">operations_research::MPConstraint::terms</a></div><divclass="ttdeci">const absl::flat_hash_map< const MPVariable *, double >& terms() const</div><divclass="ttdoc">Returns a map from variables to their coefficients in the constraint.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01246">linear_solver.h:1246</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html">operations_research::MPObjective</a></div><divclass="ttdoc">A class to express a linear objective.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00965">linear_solver.h:965</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_a0ae674872034b9d61b389da66cb9503a"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#a0ae674872034b9d61b389da66cb9503a">operations_research::MPObjective::SetMaximization</a></div><divclass="ttdeci">void SetMaximization()</div><divclass="ttdoc">Sets the optimization direction to maximize.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01028">linear_solver.h:1028</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_a236f9752f4df4c5134617330a040ec8a"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#a236f9752f4df4c5134617330a040ec8a">operations_research::MPObjective::SCIPInterface</a></div><divclass="ttdeci">friend class SCIPInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01063">linear_solver.h:1063</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_a2def997791a2a5119c3502aa68c34181"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#a2def997791a2a5119c3502aa68c34181">operations_research::MPObjective::SetCoefficient</a></div><divclass="ttdeci">void SetCoefficient(const MPVariable *const var, double coeff)</div><divclass="ttdoc">Sets the coefficient of the variable in the objective.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_a356d08f701ec7c64a00c19818bb72886"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#a356d08f701ec7c64a00c19818bb72886">operations_research::MPObjective::GetCoefficient</a></div><divclass="ttdeci">double GetCoefficient(const MPVariable *const var) const</div><divclass="ttdoc">Gets the coefficient of a given variable in the objective.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_a3d269786b0c64ba034e7e8a8a09213fc"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#a3d269786b0c64ba034e7e8a8a09213fc">operations_research::MPObjective::SetOffset</a></div><divclass="ttdeci">void SetOffset(double value)</div><divclass="ttdoc">Sets the constant term in the objective.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_a3df780d69d67985929c76e750f913e21"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#a3df780d69d67985929c76e750f913e21">operations_research::MPObjective::maximization</a></div><divclass="ttdeci">bool maximization() const</div><divclass="ttdoc">Is the optimization direction set to maximize?</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_a3eee00e1029a4006afbd791f78d91657"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#a3eee00e1029a4006afbd791f78d91657">operations_research::MPObjective::OptimizeLinearExpr</a></div><divclass="ttdeci">void OptimizeLinearExpr(const LinearExpr &linear_expr, bool is_maximization)</div><divclass="ttdoc">Resets the current objective to take the value of linear_expr, and sets the objective direction to ma...</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_a5c083b37243075a00bf909840dc7c933"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#a5c083b37243075a00bf909840dc7c933">operations_research::MPObjective::SLMInterface</a></div><divclass="ttdeci">friend class SLMInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01064">linear_solver.h:1064</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_a60944ecdcad88cfb4d4d32feea70c9b5"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#a60944ecdcad88cfb4d4d32feea70c9b5">operations_research::MPObjective::CLPInterface</a></div><divclass="ttdeci">friend class CLPInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01061">linear_solver.h:1061</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_a615d9bd9c0c88aa56d31fdf95fbb5749"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#a615d9bd9c0c88aa56d31fdf95fbb5749">operations_research::MPObjective::AddLinearExpr</a></div><divclass="ttdeci">void AddLinearExpr(const LinearExpr &linear_expr)</div><divclass="ttdoc">Adds linear_expr to the current objective, does not change the direction.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_a68da85394a0aa65bda40355466afba93"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#a68da85394a0aa65bda40355466afba93">operations_research::MPObjective::MinimizeLinearExpr</a></div><divclass="ttdeci">void MinimizeLinearExpr(const LinearExpr &linear_expr)</div><divclass="ttdoc">Resets the current objective to minimize linear_expr.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01014">linear_solver.h:1014</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_a6c754b527a347994b06eeb49a09ac222"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#a6c754b527a347994b06eeb49a09ac222">operations_research::MPObjective::GLOPInterface</a></div><divclass="ttdeci">friend class GLOPInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01068">linear_solver.h:1068</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_a7383308e6b9b63b18196798db342ce8a"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#a7383308e6b9b63b18196798db342ce8a">operations_research::MPObjective::BopInterface</a></div><divclass="ttdeci">friend class BopInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01069">linear_solver.h:1069</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_a8554e97d98d05016f16300cedf2be9f6"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#a8554e97d98d05016f16300cedf2be9f6">operations_research::MPObjective::Value</a></div><divclass="ttdeci">double Value() const</div><divclass="ttdoc">Returns the objective value of the best solution found so far.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_a96ffc785b7b2135c7980c985883ffdd3"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#a96ffc785b7b2135c7980c985883ffdd3">operations_research::MPObjective::offset</a></div><divclass="ttdeci">double offset() const</div><divclass="ttdoc">Gets the constant term in the objective.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01001">linear_solver.h:1001</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_a98e8a2eb8ace754f3db6823a8d06d2ec"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#a98e8a2eb8ace754f3db6823a8d06d2ec">operations_research::MPObjective::PdlpInterface</a></div><divclass="ttdeci">friend class PdlpInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01071">linear_solver.h:1071</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_a9ec8e5b1017d35c4ce048c67330b0a10"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#a9ec8e5b1017d35c4ce048c67330b0a10">operations_research::MPObjective::BestBound</a></div><divclass="ttdeci">double BestBound() const</div><divclass="ttdoc">Returns the best objective bound.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_aa3d71b1d66352ee439fdcdf8f3b93067"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#aa3d71b1d66352ee439fdcdf8f3b93067">operations_research::MPObjective::minimization</a></div><divclass="ttdeci">bool minimization() const</div><divclass="ttdoc">Is the optimization direction set to minimize?</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_aa71d36872f416feaa853788a7a7a7ef8"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#aa71d36872f416feaa853788a7a7a7ef8">operations_research::MPObjective::Clear</a></div><divclass="ttdeci">void Clear()</div><divclass="ttdoc">Clears the offset, all variables and coefficients, and the optimization direction.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_abc935c6e0cb353e2c61d38ad8af1ed5c"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#abc935c6e0cb353e2c61d38ad8af1ed5c">operations_research::MPObjective::XpressInterface</a></div><divclass="ttdeci">friend class XpressInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01067">linear_solver.h:1067</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_ac187b2ba08422f3a06b8d1e1502ceea6"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#ac187b2ba08422f3a06b8d1e1502ceea6">operations_research::MPObjective::SetMinimization</a></div><divclass="ttdeci">void SetMinimization()</div><divclass="ttdoc">Sets the optimization direction to minimize.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01025">linear_solver.h:1025</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_ac195da617c5cdd546ab7ecc67a2e7235"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#ac195da617c5cdd546ab7ecc67a2e7235">operations_research::MPObjective::MaximizeLinearExpr</a></div><divclass="ttdeci">void MaximizeLinearExpr(const LinearExpr &linear_expr)</div><divclass="ttdoc">Resets the current objective to maximize linear_expr.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01010">linear_solver.h:1010</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_ac28a56eeedb62d070578a9231f1875ea"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#ac28a56eeedb62d070578a9231f1875ea">operations_research::MPObjective::GurobiInterface</a></div><divclass="ttdeci">friend class GurobiInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01065">linear_solver.h:1065</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_acbd4413b1370baca9c45aecb0cb8ebd2"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#acbd4413b1370baca9c45aecb0cb8ebd2">operations_research::MPObjective::SatInterface</a></div><divclass="ttdeci">friend class SatInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01070">linear_solver.h:1070</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_addbc1b5c5e43ec84e2ffc8ec3ab9d830"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#addbc1b5c5e43ec84e2ffc8ec3ab9d830">operations_research::MPObjective::SetOptimizationDirection</a></div><divclass="ttdeci">void SetOptimizationDirection(bool maximize)</div><divclass="ttdoc">Sets the optimization direction (maximize: true or minimize: false).</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_ae1a3e0a695903c8e6effd524a7f92784"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#ae1a3e0a695903c8e6effd524a7f92784">operations_research::MPObjective::GLPKInterface</a></div><divclass="ttdeci">friend class GLPKInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01062">linear_solver.h:1062</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_ae7cbd08108e1636184f28c1a71c42393"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#ae7cbd08108e1636184f28c1a71c42393">operations_research::MPObjective::CplexInterface</a></div><divclass="ttdeci">friend class CplexInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01066">linear_solver.h:1066</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_aee1ddf25e86286c16face31551751bda"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#aee1ddf25e86286c16face31551751bda">operations_research::MPObjective::KnapsackInterface</a></div><divclass="ttdeci">friend class KnapsackInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01072">linear_solver.h:1072</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_af5a7cf0c655f37c0b388a2ddcf32ac3e"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#af5a7cf0c655f37c0b388a2ddcf32ac3e">operations_research::MPObjective::CBCInterface</a></div><divclass="ttdeci">friend class CBCInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01060">linear_solver.h:1060</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_objective_html_afb42f5cebaf659f1a302d5062a576af0"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_objective.html#afb42f5cebaf659f1a302d5062a576af0">operations_research::MPObjective::terms</a></div><divclass="ttdeci">const absl::flat_hash_map< const MPVariable *, double >& terms() const</div><divclass="ttdoc">Returns a map from variables to their coefficients in the objective.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00993">linear_solver.h:993</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html">operations_research::MPSolver</a></div><divclass="ttdoc">This mathematical programming (MP) solver class is the main class though which users build and solve ...</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00182">linear_solver.h:182</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a018794097e44ee8189380eef2b0f267f"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a018794097e44ee8189380eef2b0f267f">operations_research::MPSolver::FillSolutionResponseProto</a></div><divclass="ttdeci">void FillSolutionResponseProto(MPSolutionResponse *response) const</div><divclass="ttdoc">Encodes the current solution in a solution response protocol buffer.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a03666f2e70e42a9560aa9ce7416d2644"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a03666f2e70e42a9560aa9ce7416d2644">operations_research::MPSolver::NumConstraints</a></div><divclass="ttdeci">int NumConstraints() const</div><divclass="ttdoc">Returns the number of constraints.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00373">linear_solver.h:373</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a18daa488abaa904f23c8f74158290883"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a18daa488abaa904f23c8f74158290883">operations_research::MPSolver::NextSolution</a></div><divclass="ttdeci">ABSL_MUST_USE_RESULT bool NextSolution()</div><divclass="ttdoc">Some solvers (MIP only, not LP) can produce multiple solutions to the problem.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a1d4be44ee6b8e0297f6ab3e92d6d4e9b"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a1d4be44ee6b8e0297f6ab3e92d6d4e9b">operations_research::MPSolver::MakeRowConstraint</a></div><divclass="ttdeci">MPConstraint * MakeRowConstraint(double lb, double ub, const std::string &name)</div><divclass="ttdoc">Creates a named constraint with given bounds.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a200ccd114eb5057856c05501c2d4abe5"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a200ccd114eb5057856c05501c2d4abe5">operations_research::MPSolver::MakeBoolVarArray</a></div><divclass="ttdeci">void MakeBoolVarArray(int nb, const std::string &name, std::vector< MPVariable * > *vars)</div><divclass="ttdoc">Creates an array of boolean variables.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a236f9752f4df4c5134617330a040ec8a"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a236f9752f4df4c5134617330a040ec8a">operations_research::MPSolver::SCIPInterface</a></div><divclass="ttdeci">friend class SCIPInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00842">linear_solver.h:842</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a2c50b77c283c82d632f0dc605ceca3c3"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a2c50b77c283c82d632f0dc605ceca3c3">operations_research::MPSolver::VerifySolution</a></div><divclass="ttdeci">bool VerifySolution(double tolerance, bool log_errors) const</div><divclass="ttdoc">Advanced usage: Verifies the correctness of the solution.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a2f50af9b63567ce95f1364aad174cc0d"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a2f50af9b63567ce95f1364aad174cc0d">operations_research::MPSolver::MakeRowConstraint</a></div><divclass="ttdeci">MPConstraint * MakeRowConstraint(const LinearRange &range, const std::string &name)</div><divclass="ttdoc">As above, but also names the constraint.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a372de693ad40b3f42839c8ec6ac845f4"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a372de693ad40b3f42839c8ec6ac845f4">operations_research::MPSolver::Reset</a></div><divclass="ttdeci">void Reset()</div><divclass="ttdoc">Advanced usage: resets extracted model to solve from scratch.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a39c01cd8df47062593ad5529bf4d40de"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a39c01cd8df47062593ad5529bf4d40de">operations_research::MPSolver::constraint</a></div><divclass="ttdeci">MPConstraint * constraint(int index) const</div><divclass="ttdoc">Returns the constraint at the given index.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00383">linear_solver.h:383</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a39f8d704429d775e3e73a53898c99712"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a39f8d704429d775e3e73a53898c99712">operations_research::MPSolver::LookupVariableOrNull</a></div><divclass="ttdeci">MPVariable * LookupVariableOrNull(const std::string &var_name) const</div><divclass="ttdoc">Looks up a variable by name, and returns nullptr if it does not exist.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a3e8b0f4b22e58bfd3ec683807e9b97b4"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a3e8b0f4b22e58bfd3ec683807e9b97b4">operations_research::MPSolver::ParseSolverType</a></div><divclass="ttdeci">static bool ParseSolverType(absl::string_view solver_id, OptimizationProblemType *type)</div><divclass="ttdoc">Parses the name of the solver.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a40ac97031cb9dfac6b4810f4d7dad835"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a40ac97031cb9dfac6b4810f4d7dad835">operations_research::MPSolver::ParseSolverTypeOrDie</a></div><divclass="ttdeci">static OptimizationProblemType ParseSolverTypeOrDie(const std::string &solver_id)</div><divclass="ttdoc">Parses the name of the solver and returns the correct optimization type or dies.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a4198b9880783bbbea8b517cc8ce868b3"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a4198b9880783bbbea8b517cc8ce868b3">operations_research::MPSolver::iterations</a></div><divclass="ttdeci">int64_t iterations() const</div><divclass="ttdoc">Returns the number of simplex iterations.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a43d6ca2f978ca6f622a16117166ff69a"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a43d6ca2f978ca6f622a16117166ff69a">operations_research::MPSolver::MakeRowConstraint</a></div><divclass="ttdeci">MPConstraint * MakeRowConstraint(double lb, double ub)</div><divclass="ttdoc">Creates a linear constraint with given bounds.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a4a790b8c94fdaa097e7ad19bb5acaf45"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a4a790b8c94fdaa097e7ad19bb5acaf45">operations_research::MPSolver::MakeBoolVar</a></div><divclass="ttdeci">MPVariable * MakeBoolVar(const std::string &name)</div><divclass="ttdoc">Creates a boolean variable.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a4acb8abdcaff1a29f0e59ae6eccdbfd7"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a4acb8abdcaff1a29f0e59ae6eccdbfd7">operations_research::MPSolver::constraints</a></div><divclass="ttdeci">const std::vector< MPConstraint * >& constraints() const</div><divclass="ttdoc">Returns the array of constraints handled by the MPSolver.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00380">linear_solver.h:380</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a4bf4b01cb836a567c90aeeea374ca2a2"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a4bf4b01cb836a567c90aeeea374ca2a2">operations_research::MPSolver::SetHint</a></div><divclass="ttdeci">void SetHint(std::vector< std::pair< const MPVariable *, double >> hint)</div><divclass="ttdoc">Sets a hint for solution.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a4eef77bb51bde41e69bed87ea44b86e1"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a4eef77bb51bde41e69bed87ea44b86e1">operations_research::MPSolver::ComputeExactConditionNumber</a></div><divclass="ttdeci">double ComputeExactConditionNumber() const</div><divclass="ttdoc">Advanced usage: computes the exact condition number of the current scaled basis: L1norm(B) * L1norm(i...</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a573d479910e373f5d771d303e440587d"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a573d479910e373f5d771d303e440587d">operations_research::MPSolver::ResultStatus</a></div><divclass="ttdeci">ResultStatus</div><divclass="ttdoc">The status of solving the problem.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00442">linear_solver.h:442</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a573d479910e373f5d771d303e440587da03f919221217f95d21a593a7120165e1"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a573d479910e373f5d771d303e440587da03f919221217f95d21a593a7120165e1">operations_research::MPSolver::FEASIBLE</a></div><divclass="ttdeci">@ FEASIBLE</div><divclass="ttdoc">feasible, or stopped by limit.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00446">linear_solver.h:446</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a573d479910e373f5d771d303e440587da0e6873a155f86a4695f463bf8601d05f"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a573d479910e373f5d771d303e440587da0e6873a155f86a4695f463bf8601d05f">operations_research::MPSolver::NOT_SOLVED</a></div><divclass="ttdeci">@ NOT_SOLVED</div><divclass="ttdoc">not been solved yet.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00457">linear_solver.h:456</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a573d479910e373f5d771d303e440587dadd7ccc352d727224d39519584ed37cd7"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a573d479910e373f5d771d303e440587dadd7ccc352d727224d39519584ed37cd7">operations_research::MPSolver::ABNORMAL</a></div><divclass="ttdeci">@ ABNORMAL</div><divclass="ttdoc">abnormal, i.e., error of some kind.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00452">linear_solver.h:452</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a573d479910e373f5d771d303e440587dae071e79c23f061c9dd00ee09519a0031"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a573d479910e373f5d771d303e440587dae071e79c23f061c9dd00ee09519a0031">operations_research::MPSolver::MODEL_INVALID</a></div><divclass="ttdeci">@ MODEL_INVALID</div><divclass="ttdoc">the model is trivially invalid (NaN coefficients, etc).</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00454">linear_solver.h:454</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a5c083b37243075a00bf909840dc7c933"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a5c083b37243075a00bf909840dc7c933">operations_research::MPSolver::SLMInterface</a></div><divclass="ttdeci">friend class SLMInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00846">linear_solver.h:846</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a5eaab1182fadee8d07466e4f7d401870"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a5eaab1182fadee8d07466e4f7d401870">operations_research::MPSolver::variables</a></div><divclass="ttdeci">const std::vector< MPVariable * >& variables() const</div><divclass="ttdoc">Returns the array of variables handled by the MPSolver.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00309">linear_solver.h:309</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a60944ecdcad88cfb4d4d32feea70c9b5"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a60944ecdcad88cfb4d4d32feea70c9b5">operations_research::MPSolver::CLPInterface</a></div><divclass="ttdeci">friend class CLPInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00840">linear_solver.h:840</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a6c754b527a347994b06eeb49a09ac222"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a6c754b527a347994b06eeb49a09ac222">operations_research::MPSolver::GLOPInterface</a></div><divclass="ttdeci">friend class GLOPInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00848">linear_solver.h:848</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a6d15ef2bce88ffcd8ec93cad9f3bf5bd"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a6d15ef2bce88ffcd8ec93cad9f3bf5bd">operations_research::MPSolver::SolveWithProto</a></div><divclass="ttdeci">static void SolveWithProto(const MPModelRequest &model_request, MPSolutionResponse *response, std::atomic< bool > *interrupt=nullptr)</div><divclass="ttdoc">Solves the model encoded by a MPModelRequest protocol buffer and fills the solution encoded as a MPSo...</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a6fc269e212d7128b9c36540b234708be"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a6fc269e212d7128b9c36540b234708be">operations_research::MPSolver::underlying_solver</a></div><divclass="ttdeci">void * underlying_solver()</div><divclass="ttdoc">Advanced usage: returns the underlying solver.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a7383308e6b9b63b18196798db342ce8a"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a7383308e6b9b63b18196798db342ce8a">operations_research::MPSolver::BopInterface</a></div><divclass="ttdeci">friend class BopInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00849">linear_solver.h:849</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a76c87990aabadd148304b95332a60ff8"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a76c87990aabadd148304b95332a60ff8">operations_research::MPSolver::OptimizationProblemType</a></div><divclass="ttdeci">OptimizationProblemType</div><divclass="ttdoc">The type of problems (LP or MIP) that will be solved and the underlying solver (GLOP,...</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00190">linear_solver.h:190</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a77083241e8bdb93b619c7b9feaf82dec"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a77083241e8bdb93b619c7b9feaf82dec">operations_research::MPSolver::SetSolverSpecificParametersAsString</a></div><divclass="ttdeci">bool SetSolverSpecificParametersAsString(const std::string &parameters)</div><divclass="ttdoc">Advanced usage: pass solver specific parameters in text format.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a77ad9d38d3dfbc7580cd810761dc1df4"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a77ad9d38d3dfbc7580cd810761dc1df4">operations_research::MPSolver::LoadSolutionFromProto</a></div><divclass="ttdeci">absl::Status LoadSolutionFromProto(const MPSolutionResponse &response, double tolerance=std::numeric_limits< double >::infinity())</div><divclass="ttdoc">Load a solution encoded in a protocol buffer onto this solver for easy access via the MPSolver interf...</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a81708139cae5d8116c5cb157db22f099"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a81708139cae5d8116c5cb157db22f099">operations_research::MPSolver::CreateSolver</a></div><divclass="ttdeci">static MPSolver * CreateSolver(const std::string &solver_id)</div><divclass="ttdoc">Recommended factory method to create a MPSolver instance, especially in non C++ languages.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a849bf49baad56df58c018e8ab09456fb"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a849bf49baad56df58c018e8ab09456fb">operations_research::MPSolver::SetNumThreads</a></div><divclass="ttdeci">absl::Status SetNumThreads(int num_threads)</div><divclass="ttdoc">Sets the number of threads to use by the underlying solver.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a8546382b04c2126bd39cc17d72d0b5a2"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a8546382b04c2126bd39cc17d72d0b5a2">operations_research::MPSolver::Name</a></div><divclass="ttdeci">const std::string & Name() const</div><divclass="ttdoc">Returns the name of the model set at construction.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00286">linear_solver.h:286</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a858f72e8c0c03339c8d797d41a6fd4b8"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a858f72e8c0c03339c8d797d41a6fd4b8">operations_research::MPSolver::SolverVersion</a></div><divclass="ttdeci">std::string SolverVersion() const</div><divclass="ttdoc">Returns a string describing the underlying solver and its version.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a880227c1bbe5a1a2a21796a947804615"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a880227c1bbe5a1a2a21796a947804615">operations_research::MPSolver::ExportModelToProto</a></div><divclass="ttdeci">void ExportModelToProto(MPModelProto *output_model) const</div><divclass="ttdoc">Exports model to protocol buffer.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a8eb213aafa3773dfb6a05d184e61bb8a"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a8eb213aafa3773dfb6a05d184e61bb8a">operations_research::MPSolver::GetNumThreads</a></div><divclass="ttdeci">int GetNumThreads() const</div><divclass="ttdoc">Returns the number of threads to be used during solve.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00645">linear_solver.h:645</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a9333144b7d28f68a7537b2ba19a1ba9b"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a9333144b7d28f68a7537b2ba19a1ba9b">operations_research::MPSolver::MakeIntVarArray</a></div><divclass="ttdeci">void MakeIntVarArray(int nb, double lb, double ub, const std::string &name, std::vector< MPVariable * > *vars)</div><divclass="ttdoc">Creates an array of integer variables.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a942431e14468f0267cd417fabc48f829"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a942431e14468f0267cd417fabc48f829">operations_research::MPSolver::ComputeConstraintActivities</a></div><divclass="ttdeci">std::vector< double > ComputeConstraintActivities() const</div><divclass="ttdoc">Advanced usage: compute the "activities" of all constraints, which are the sums of their linear terms...</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a98e8a2eb8ace754f3db6823a8d06d2ec"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a98e8a2eb8ace754f3db6823a8d06d2ec">operations_research::MPSolver::PdlpInterface</a></div><divclass="ttdeci">friend class PdlpInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00851">linear_solver.h:851</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a9d3beb2afe4ae647674b054bf29290e2"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a9d3beb2afe4ae647674b054bf29290e2">operations_research::MPSolver::NumVariables</a></div><divclass="ttdeci">int NumVariables() const</div><divclass="ttdoc">Returns the number of variables.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00303">linear_solver.h:303</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a9df947ed3bb70075e234f8f0f78bc8ee"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a9df947ed3bb70075e234f8f0f78bc8ee">operations_research::MPSolver::ClampSolutionWithinBounds</a></div><divclass="ttdeci">absl::Status ClampSolutionWithinBounds()</div><divclass="ttdoc">Resets values of out of bound variables to the corresponding bound and returns an error if any of the...</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_a9f55f5e7a62b45961982063ebc1e9945"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#a9f55f5e7a62b45961982063ebc1e9945">operations_research::MPSolver::Solve</a></div><divclass="ttdeci">ResultStatus Solve()</div><divclass="ttdoc">Solves the problem using the default parameter values.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_aa38b5851203ddc9f64f01b87ad346ea1"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#aa38b5851203ddc9f64f01b87ad346ea1">operations_research::MPSolver::nodes</a></div><divclass="ttdeci">int64_t nodes() const</div><divclass="ttdoc">Returns the number of branch-and-bound nodes evaluated during the solve.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_aa71d36872f416feaa853788a7a7a7ef8"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#aa71d36872f416feaa853788a7a7a7ef8">operations_research::MPSolver::Clear</a></div><divclass="ttdeci">void Clear()</div><divclass="ttdoc">Clears the objective (including the optimization direction), all variables and constraints.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_aa97b3fc2ccb51a5e35208ba77113f008"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#aa97b3fc2ccb51a5e35208ba77113f008">operations_research::MPSolver::variable</a></div><divclass="ttdeci">MPVariable * variable(int index) const</div><divclass="ttdoc">Returns the variable at position index.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00314">linear_solver.h:314</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_aa9a00625dd56e64b32c97b95445a1b9c"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#aa9a00625dd56e64b32c97b95445a1b9c">operations_research::MPSolver::ExportModelAsLpFormat</a></div><divclass="ttdeci">bool ExportModelAsLpFormat(bool obfuscate, std::string *model_str) const</div><divclass="ttdoc">Shortcuts to the homonymous MPModelProtoExporter methods, via exporting to a MPModelProto with Export...</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_aaa2bb34f1712b9d7c36d75b1ec704563"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#aaa2bb34f1712b9d7c36d75b1ec704563">operations_research::MPSolver::Solve</a></div><divclass="ttdeci">ResultStatus Solve(const MPSolverParameters &param)</div><divclass="ttdoc">Solves the problem using the specified parameter values.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_aaa766a9aa802903bf7a6e5b8fb82c70c"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#aaa766a9aa802903bf7a6e5b8fb82c70c">operations_research::MPSolver::Write</a></div><divclass="ttdeci">void Write(const std::string &file_name)</div><divclass="ttdoc">Writes the model using the solver internal write function.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_aad257297b986c0a1e1500e2377b48f1d"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#aad257297b986c0a1e1500e2377b48f1d">operations_research::MPSolver::MakeRowConstraint</a></div><divclass="ttdeci">MPConstraint * MakeRowConstraint(const LinearRange &range)</div><divclass="ttdoc">Creates a constraint owned by MPSolver enforcing: range.lower_bound() <= range.linear_expr() <= range...</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_aadcc43314d8f7efc8021b3946a792735"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#aadcc43314d8f7efc8021b3946a792735">operations_research::MPSolver::MakeRowConstraint</a></div><divclass="ttdeci">MPConstraint * MakeRowConstraint()</div><divclass="ttdoc">Creates a constraint with -infinity and +infinity bounds.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_ab0f83070e72cee887e874382ee6d6958"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#ab0f83070e72cee887e874382ee6d6958">operations_research::MPSolver::LoadModelFromProto</a></div><divclass="ttdeci">MPSolverResponseStatus LoadModelFromProto(const MPModelProto &input_model, std::string *error_message)</div><divclass="ttdoc">Loads model from protocol buffer.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_ab32654406932f9a6afcf44c4d5a143d2"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#ab32654406932f9a6afcf44c4d5a143d2">operations_research::MPSolver::OutputIsEnabled</a></div><divclass="ttdeci">bool OutputIsEnabled() const</div><divclass="ttdoc">Controls (or queries) the amount of output produced by the underlying solver.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_abc0dba97ca1c7e5cabcbe0e13adabca7"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#abc0dba97ca1c7e5cabcbe0e13adabca7">operations_research::MPSolver::MakeVar</a></div><divclass="ttdeci">MPVariable * MakeVar(double lb, double ub, bool integer, const std::string &name)</div><divclass="ttdoc">Creates a variable with the given bounds, integrality requirement and name.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_abc935c6e0cb353e2c61d38ad8af1ed5c"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#abc935c6e0cb353e2c61d38ad8af1ed5c">operations_research::MPSolver::XpressInterface</a></div><divclass="ttdeci">friend class XpressInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00845">linear_solver.h:845</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_abdb0854fa090b30b7bdad88bc610d18a"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#abdb0854fa090b30b7bdad88bc610d18a">operations_research::MPSolver::LookupConstraintOrNull</a></div><divclass="ttdeci">MPConstraint * LookupConstraintOrNull(const std::string &constraint_name) const</div><divclass="ttdoc">Looks up a constraint by name, and returns nullptr if it does not exist.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_ac28a56eeedb62d070578a9231f1875ea"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#ac28a56eeedb62d070578a9231f1875ea">operations_research::MPSolver::GurobiInterface</a></div><divclass="ttdeci">friend class GurobiInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00843">linear_solver.h:843</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_ac75b700ead5ff5d0944b5161e6dac9e8"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#ac75b700ead5ff5d0944b5161e6dac9e8">operations_research::MPSolver::InterruptSolve</a></div><divclass="ttdeci">bool InterruptSolve()</div><divclass="ttdoc">Interrupts the Solve() execution to terminate processing if possible.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_acbd4413b1370baca9c45aecb0cb8ebd2"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#acbd4413b1370baca9c45aecb0cb8ebd2">operations_research::MPSolver::SatInterface</a></div><divclass="ttdeci">friend class SatInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00850">linear_solver.h:850</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_acbf17d4e66eead8e65304bbd2a64664d"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#acbf17d4e66eead8e65304bbd2a64664d">operations_research::MPSolver::Objective</a></div><divclass="ttdeci">const MPObjective & Objective() const</div><divclass="ttdoc">Returns the objective object.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00431">linear_solver.h:431</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_acdb0e5753d20e4d3ece49a0451d24c4f"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#acdb0e5753d20e4d3ece49a0451d24c4f">operations_research::MPSolver::MPSolver</a></div><divclass="ttdeci">MPSolver(const std::string &name, OptimizationProblemType problem_type)</div><divclass="ttdoc">Create a solver with the given name and underlying solver backend.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_ae1a3e0a695903c8e6effd524a7f92784"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#ae1a3e0a695903c8e6effd524a7f92784">operations_research::MPSolver::GLPKInterface</a></div><divclass="ttdeci">friend class GLPKInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00839">linear_solver.h:839</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_ae6abc3fd3b26c8780ae59d8f111199f3"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#ae6abc3fd3b26c8780ae59d8f111199f3">operations_research::MPSolver::MakeRowConstraint</a></div><divclass="ttdeci">MPConstraint * MakeRowConstraint(const std::string &name)</div><divclass="ttdoc">Creates a named constraint with -infinity and +infinity bounds.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_ae74ce5ecb0dd3b4bcddb31bd59da7089"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#ae74ce5ecb0dd3b4bcddb31bd59da7089">operations_research::MPSolver::LoadModelFromProtoWithUniqueNamesOrDie</a></div><divclass="ttdeci">MPSolverResponseStatus LoadModelFromProtoWithUniqueNamesOrDie(const MPModelProto &input_model, std::string *error_message)</div><divclass="ttdoc">Loads model from protocol buffer.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_ae7cbd08108e1636184f28c1a71c42393"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#ae7cbd08108e1636184f28c1a71c42393">operations_research::MPSolver::CplexInterface</a></div><divclass="ttdeci">friend class CplexInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00844">linear_solver.h:844</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_aede63007883156c3cd3cc336096f0305"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#aede63007883156c3cd3cc336096f0305">operations_research::MPSolver::MutableObjective</a></div><divclass="ttdeci">MPObjective * MutableObjective()</div><divclass="ttdoc">Returns the mutable objective object.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00434">linear_solver.h:434</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_aee1ddf25e86286c16face31551751bda"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#aee1ddf25e86286c16face31551751bda">operations_research::MPSolver::KnapsackInterface</a></div><divclass="ttdeci">friend class KnapsackInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00852">linear_solver.h:852</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_aee8250cf90d66d569534338248924469"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#aee8250cf90d66d569534338248924469">operations_research::MPSolver::ProblemType</a></div><divclass="ttdeci">virtual OptimizationProblemType ProblemType() const</div><divclass="ttdoc">Returns the optimization problem type set at construction.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00291">linear_solver.h:291</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_af5a7cf0c655f37c0b388a2ddcf32ac3e"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#af5a7cf0c655f37c0b388a2ddcf32ac3e">operations_research::MPSolver::CBCInterface</a></div><divclass="ttdeci">friend class CBCInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00841">linear_solver.h:841</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_af63f7de45a05eb7439a7a1c9ca594fd8"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#af63f7de45a05eb7439a7a1c9ca594fd8">operations_research::MPSolver::SupportsProblemType</a></div><divclass="ttdeci">static bool SupportsProblemType(OptimizationProblemType problem_type)</div><divclass="ttdoc">Whether the given problem type is supported (this will depend on the targets that you linked).</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_html_afd922eb2bef96597c426557a8056f76d"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver.html#afd922eb2bef96597c426557a8056f76d">operations_research::MPSolver::BasisStatus</a></div><divclass="ttdeci">BasisStatus</div><divclass="ttdoc">Advanced usage: possible basis status values for a variable and the slack variable of a linear constr...</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l00677">linear_solver.h:677</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_interface_html_a2cb8082675772ca81d04e87b6f4b1c8b"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver_interface.html#a2cb8082675772ca81d04e87b6f4b1c8b">operations_research::MPSolverInterface::kDummyVariableIndex</a></div><divclass="ttdeci">static const int kDummyVariableIndex</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01788">linear_solver.h:1788</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_parameters_html"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver_parameters.html">operations_research::MPSolverParameters</a></div><divclass="ttdoc">This class stores parameter settings for LP and MIP solvers.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01403">linear_solver.h:1403</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_parameters_html_a0623b9007b18f0e4bb078fb6eb4dadaa"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver_parameters.html#a0623b9007b18f0e4bb078fb6eb4dadaa">operations_research::MPSolverParameters::kUnknownIntegerParamValue</a></div><divclass="ttdeci">static const int kUnknownIntegerParamValue</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01478">linear_solver.h:1478</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_parameters_html_a09343ed6dde3059443fe6f4caa16e986"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver_parameters.html#a09343ed6dde3059443fe6f4caa16e986">operations_research::MPSolverParameters::ResetIntegerParam</a></div><divclass="ttdeci">void ResetIntegerParam(MPSolverParameters::IntegerParam param)</div><divclass="ttdoc">Sets an integer parameter to its default value (default value defined in MPSolverParameters if it exi...</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_parameters_html_a1816929ef3ed29e5884291472b1b8739"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver_parameters.html#a1816929ef3ed29e5884291472b1b8739">operations_research::MPSolverParameters::SetDoubleParam</a></div><divclass="ttdeci">void SetDoubleParam(MPSolverParameters::DoubleParam param, double value)</div><divclass="ttdoc">Sets a double parameter to a specific value.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_parameters_html_a215b66c2ff063ffbf5b538ee402304cba01f385fe2acfe85efe038aa62b31edfb"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver_parameters.html#a215b66c2ff063ffbf5b538ee402304cba01f385fe2acfe85efe038aa62b31edfb">operations_research::MPSolverParameters::INCREMENTALITY_OFF</a></div><divclass="ttdeci">@ INCREMENTALITY_OFF</div><divclass="ttdoc">Start solve from scratch.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01454">linear_solver.h:1454</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_parameters_html_a215b66c2ff063ffbf5b538ee402304cba34d17de87fc7339e07256ca5319dfa67"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver_parameters.html#a215b66c2ff063ffbf5b538ee402304cba34d17de87fc7339e07256ca5319dfa67">operations_research::MPSolverParameters::INCREMENTALITY_ON</a></div><divclass="ttdeci">@ INCREMENTALITY_ON</div><divclass="ttdoc">Reuse results from previous solve as much as the underlying solver allows.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01461">linear_solver.h:1460</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_parameters_html_a25a1112e410b183f49ef4ce8da1bdc74a62fd26c37f80b6aabec3b463c55a1c85"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver_parameters.html#a25a1112e410b183f49ef4ce8da1bdc74a62fd26c37f80b6aabec3b463c55a1c85">operations_research::MPSolverParameters::SCALING_ON</a></div><divclass="ttdeci">@ SCALING_ON</div><divclass="ttdoc">Scaling is on.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01469">linear_solver.h:1468</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_parameters_html_a25a1112e410b183f49ef4ce8da1bdc74ab3f9de74d2d20c2eebcec60b7273d485"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver_parameters.html#a25a1112e410b183f49ef4ce8da1bdc74ab3f9de74d2d20c2eebcec60b7273d485">operations_research::MPSolverParameters::SCALING_OFF</a></div><divclass="ttdeci">@ SCALING_OFF</div><divclass="ttdoc">Scaling is off.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01466">linear_solver.h:1466</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_parameters_html_a372de693ad40b3f42839c8ec6ac845f4"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver_parameters.html#a372de693ad40b3f42839c8ec6ac845f4">operations_research::MPSolverParameters::Reset</a></div><divclass="ttdeci">void Reset()</div><divclass="ttdoc">Sets all parameters to their default value.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_parameters_html_a397e8c8da87415d5408e2dd5ec3e9932"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver_parameters.html#a397e8c8da87415d5408e2dd5ec3e9932">operations_research::MPSolverParameters::DoubleParam</a></div><divclass="ttdeci">DoubleParam</div><divclass="ttdoc">Enumeration of parameters that take continuous values.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01406">linear_solver.h:1406</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_parameters_html_a397e8c8da87415d5408e2dd5ec3e9932a184546f243ecb7d9be48659f8be82992"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver_parameters.html#a397e8c8da87415d5408e2dd5ec3e9932a184546f243ecb7d9be48659f8be82992">operations_research::MPSolverParameters::DUAL_TOLERANCE</a></div><divclass="ttdeci">@ DUAL_TOLERANCE</div><divclass="ttdoc">Advanced usage: tolerance for dual feasibility of basic solutions.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01419">linear_solver.h:1418</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_parameters_html_a397e8c8da87415d5408e2dd5ec3e9932a8c7c9aed0dcd36fc9a9af2fab295caf3"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver_parameters.html#a397e8c8da87415d5408e2dd5ec3e9932a8c7c9aed0dcd36fc9a9af2fab295caf3">operations_research::MPSolverParameters::PRIMAL_TOLERANCE</a></div><divclass="ttdeci">@ PRIMAL_TOLERANCE</div><divclass="ttdoc">Advanced usage: tolerance for primal feasibility of basic solutions.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01416">linear_solver.h:1416</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_parameters_html_a397e8c8da87415d5408e2dd5ec3e9932af5546ac8a26f50d8798bf634598a7eba"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver_parameters.html#a397e8c8da87415d5408e2dd5ec3e9932af5546ac8a26f50d8798bf634598a7eba">operations_research::MPSolverParameters::RELATIVE_MIP_GAP</a></div><divclass="ttdeci">@ RELATIVE_MIP_GAP</div><divclass="ttdoc">Limit for relative MIP gap.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01408">linear_solver.h:1408</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_parameters_html_a692014f815d7927760762b046675f658"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver_parameters.html#a692014f815d7927760762b046675f658">operations_research::MPSolverParameters::GetDoubleParam</a></div><divclass="ttdeci">double GetDoubleParam(MPSolverParameters::DoubleParam param) const</div><divclass="ttdoc">Returns the value of a double parameter.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_parameters_html_a7319655592ea63d50ef2a6645e309784"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver_parameters.html#a7319655592ea63d50ef2a6645e309784">operations_research::MPSolverParameters::IntegerParam</a></div><divclass="ttdeci">IntegerParam</div><divclass="ttdoc">Enumeration of parameters that take integer or categorical values.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01422">linear_solver.h:1422</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_parameters_html_a7319655592ea63d50ef2a6645e309784a420e8170e7ec327dd847b9610fc4565b"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver_parameters.html#a7319655592ea63d50ef2a6645e309784a420e8170e7ec327dd847b9610fc4565b">operations_research::MPSolverParameters::LP_ALGORITHM</a></div><divclass="ttdeci">@ LP_ALGORITHM</div><divclass="ttdoc">Algorithm to solve linear programs.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01426">linear_solver.h:1426</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_parameters_html_a7319655592ea63d50ef2a6645e309784a4d52eb956c0c02b9cbc37720f27abbb0"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver_parameters.html#a7319655592ea63d50ef2a6645e309784a4d52eb956c0c02b9cbc37720f27abbb0">operations_research::MPSolverParameters::SCALING</a></div><divclass="ttdeci">@ SCALING</div><divclass="ttdoc">Advanced usage: enable or disable matrix scaling.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01431">linear_solver.h:1430</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_parameters_html_a7319655592ea63d50ef2a6645e309784adabd0cf2fcb5726b7fc2aa3d54d5f3ff"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver_parameters.html#a7319655592ea63d50ef2a6645e309784adabd0cf2fcb5726b7fc2aa3d54d5f3ff">operations_research::MPSolverParameters::INCREMENTALITY</a></div><divclass="ttdeci">@ INCREMENTALITY</div><divclass="ttdoc">Advanced usage: incrementality from one solve to the next.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01428">linear_solver.h:1428</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_parameters_html_a79b59c0c868544afdaa05d89c8f8541f"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver_parameters.html#a79b59c0c868544afdaa05d89c8f8541f">operations_research::MPSolverParameters::LpAlgorithmValues</a></div><divclass="ttdeci">LpAlgorithmValues</div><divclass="ttdoc">LP algorithm to use.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01442">linear_solver.h:1442</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_parameters_html_ad01b184e1c49d8aabd15a268ff976ac8"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver_parameters.html#ad01b184e1c49d8aabd15a268ff976ac8">operations_research::MPSolverParameters::PresolveValues</a></div><divclass="ttdeci">PresolveValues</div><divclass="ttdoc">For each categorical parameter, enumeration of possible values.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01434">linear_solver.h:1434</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_parameters_html_ad01b184e1c49d8aabd15a268ff976ac8a3b48e7f264e3228b1494312657fd611a"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver_parameters.html#ad01b184e1c49d8aabd15a268ff976ac8a3b48e7f264e3228b1494312657fd611a">operations_research::MPSolverParameters::PRESOLVE_ON</a></div><divclass="ttdeci">@ PRESOLVE_ON</div><divclass="ttdoc">Presolve is on.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01439">linear_solver.h:1438</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_parameters_html_ad01b184e1c49d8aabd15a268ff976ac8a9d70aea1ff48f145644d82953fd4322a"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver_parameters.html#ad01b184e1c49d8aabd15a268ff976ac8a9d70aea1ff48f145644d82953fd4322a">operations_research::MPSolverParameters::PRESOLVE_OFF</a></div><divclass="ttdeci">@ PRESOLVE_OFF</div><divclass="ttdoc">Presolve is off.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01436">linear_solver.h:1436</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_parameters_html_ad7c866ce738bfb6ac5fcee91fed998ed"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver_parameters.html#ad7c866ce738bfb6ac5fcee91fed998ed">operations_research::MPSolverParameters::kDefaultIntegerParamValue</a></div><divclass="ttdeci">static const int kDefaultIntegerParamValue</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01474">linear_solver.h:1474</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_parameters_html_ae189b253817210ee7e605b089ccf47e4"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver_parameters.html#ae189b253817210ee7e605b089ccf47e4">operations_research::MPSolverParameters::SetIntegerParam</a></div><divclass="ttdeci">void SetIntegerParam(MPSolverParameters::IntegerParam param, int value)</div><divclass="ttdoc">Sets a integer parameter to a specific value.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_parameters_html_aeae0a6e1e84d015690573b08d62b1395"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver_parameters.html#aeae0a6e1e84d015690573b08d62b1395">operations_research::MPSolverParameters::GetIntegerParam</a></div><divclass="ttdeci">int GetIntegerParam(MPSolverParameters::IntegerParam param) const</div><divclass="ttdoc">Returns the value of an integer parameter.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_parameters_html_aeeef6511f130ba8a9db2c308dbeada5c"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver_parameters.html#aeeef6511f130ba8a9db2c308dbeada5c">operations_research::MPSolverParameters::MPSolverParameters</a></div><divclass="ttdeci">MPSolverParameters()</div><divclass="ttdoc">The constructor sets all parameters to their default value.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_solver_parameters_html_af89ed33216d227599a7752bc0dc97ce3"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_solver_parameters.html#af89ed33216d227599a7752bc0dc97ce3">operations_research::MPSolverParameters::ResetDoubleParam</a></div><divclass="ttdeci">void ResetDoubleParam(MPSolverParameters::DoubleParam param)</div><divclass="ttdoc">Sets a double parameter to its default value (default value defined in MPSolverParameters if it exist...</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_variable_html"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_variable.html">operations_research::MPVariable</a></div><divclass="ttdoc">The class for variables of a Mathematical Programming (MP) model.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01093">linear_solver.h:1093</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_variable_html_a02bfb5cd5deeb2d5149f6976ee0456d6"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_variable.html#a02bfb5cd5deeb2d5149f6976ee0456d6">operations_research::MPVariable::SetBounds</a></div><divclass="ttdeci">void SetBounds(double lb, double ub)</div><divclass="ttdoc">Sets both the lower and upper bounds.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_variable_html_a236f9752f4df4c5134617330a040ec8a"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_variable.html#a236f9752f4df4c5134617330a040ec8a">operations_research::MPVariable::SCIPInterface</a></div><divclass="ttdeci">friend class SCIPInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01172">linear_solver.h:1172</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_variable_html_a24dcbf29c0d6cd766009a182a6484e3b"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_variable.html#a24dcbf29c0d6cd766009a182a6484e3b">operations_research::MPVariable::name</a></div><divclass="ttdeci">const std::string & name() const</div><divclass="ttdoc">Returns the name of the variable.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01096">linear_solver.h:1096</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_variable_html_a2bf24627eb5f1b609cd2704bddc3750d"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_variable.html#a2bf24627eb5f1b609cd2704bddc3750d">operations_research::MPVariable::branching_priority</a></div><divclass="ttdeci">int branching_priority() const</div><divclass="ttdoc">Advanced usage: Certain MIP solvers (e.g.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01163">linear_solver.h:1163</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_variable_html_a4584733ca3a135bb0e29e7b29988901d"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_variable.html#a4584733ca3a135bb0e29e7b29988901d">operations_research::MPVariable::SetUB</a></div><divclass="ttdeci">void SetUB(double ub)</div><divclass="ttdoc">Sets the upper bound.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01126">linear_solver.h:1126</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_variable_html_a570e7e2c973cc96bedb0db08f5e062e3"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_variable.html#a570e7e2c973cc96bedb0db08f5e062e3">operations_research::MPVariable::ub</a></div><divclass="ttdeci">double ub() const</div><divclass="ttdoc">Returns the upper bound.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01120">linear_solver.h:1120</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_variable_html_a5c083b37243075a00bf909840dc7c933"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_variable.html#a5c083b37243075a00bf909840dc7c933">operations_research::MPVariable::SLMInterface</a></div><divclass="ttdeci">friend class SLMInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01173">linear_solver.h:1173</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_variable_html_a60944ecdcad88cfb4d4d32feea70c9b5"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_variable.html#a60944ecdcad88cfb4d4d32feea70c9b5">operations_research::MPVariable::CLPInterface</a></div><divclass="ttdeci">friend class CLPInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01170">linear_solver.h:1170</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_variable_html_a6c754b527a347994b06eeb49a09ac222"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_variable.html#a6c754b527a347994b06eeb49a09ac222">operations_research::MPVariable::GLOPInterface</a></div><divclass="ttdeci">friend class GLOPInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01177">linear_solver.h:1177</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_variable_html_a7383308e6b9b63b18196798db342ce8a"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_variable.html#a7383308e6b9b63b18196798db342ce8a">operations_research::MPVariable::BopInterface</a></div><divclass="ttdeci">friend class BopInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01179">linear_solver.h:1179</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_variable_html_a7a302239fbb1f938a513636a6c7a3e2d"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_variable.html#a7a302239fbb1f938a513636a6c7a3e2d">operations_research::MPVariable::reduced_cost</a></div><divclass="ttdeci">double reduced_cost() const</div><divclass="ttdoc">Advanced usage: returns the reduced cost of the variable in the current solution (only available for ...</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_variable_html_a8844020cc1376123531cd53c831acdef"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_variable.html#a8844020cc1376123531cd53c831acdef">operations_research::MPVariable::MPVariableSolutionValueTest</a></div><divclass="ttdeci">friend class MPVariableSolutionValueTest</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01178">linear_solver.h:1178</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_variable_html_a94743823a7ad3c565902fcf7956d4ae2"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_variable.html#a94743823a7ad3c565902fcf7956d4ae2">operations_research::MPVariable::SetInteger</a></div><divclass="ttdeci">void SetInteger(bool integer)</div><divclass="ttdoc">Sets the integrality requirement of the variable.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_variable_html_a98e8a2eb8ace754f3db6823a8d06d2ec"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_variable.html#a98e8a2eb8ace754f3db6823a8d06d2ec">operations_research::MPVariable::PdlpInterface</a></div><divclass="ttdeci">friend class PdlpInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01181">linear_solver.h:1181</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_variable_html_abc6bcaac179c603ad3386fa7449c86a7"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_variable.html#abc6bcaac179c603ad3386fa7449c86a7">operations_research::MPVariable::integer</a></div><divclass="ttdeci">bool integer() const</div><divclass="ttdoc">Returns the integrality requirement of the variable.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01102">linear_solver.h:1102</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_variable_html_abc935c6e0cb353e2c61d38ad8af1ed5c"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_variable.html#abc935c6e0cb353e2c61d38ad8af1ed5c">operations_research::MPVariable::XpressInterface</a></div><divclass="ttdeci">friend class XpressInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01176">linear_solver.h:1176</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_variable_html_ac28a56eeedb62d070578a9231f1875ea"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_variable.html#ac28a56eeedb62d070578a9231f1875ea">operations_research::MPVariable::GurobiInterface</a></div><divclass="ttdeci">friend class GurobiInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01174">linear_solver.h:1174</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_variable_html_acbd4413b1370baca9c45aecb0cb8ebd2"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_variable.html#acbd4413b1370baca9c45aecb0cb8ebd2">operations_research::MPVariable::SatInterface</a></div><divclass="ttdeci">friend class SatInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01180">linear_solver.h:1180</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_variable_html_acca41811e8aaab0112b987749c0ecb93"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_variable.html#acca41811e8aaab0112b987749c0ecb93">operations_research::MPVariable::index</a></div><divclass="ttdeci">int index() const</div><divclass="ttdoc">Returns the index of the variable in the MPSolver::variables_.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01114">linear_solver.h:1114</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_variable_html_accc4f1882f13ad57ef6bbe8fbe5d365d"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_variable.html#accc4f1882f13ad57ef6bbe8fbe5d365d">operations_research::MPVariable::lb</a></div><divclass="ttdeci">double lb() const</div><divclass="ttdoc">Returns the lower bound.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01117">linear_solver.h:1117</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_variable_html_ad90797a6c268fa29b515bdb5972c7bfb"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_variable.html#ad90797a6c268fa29b515bdb5972c7bfb">operations_research::MPVariable::SetLB</a></div><divclass="ttdeci">void SetLB(double lb)</div><divclass="ttdoc">Sets the lower bound.</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01123">linear_solver.h:1123</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_variable_html_adf1a0cc6a3736f3db9880392efe02f0e"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_variable.html#adf1a0cc6a3736f3db9880392efe02f0e">operations_research::MPVariable::solution_value</a></div><divclass="ttdeci">double solution_value() const</div><divclass="ttdoc">Returns the value of the variable in the current solution.</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_variable_html_ae1a3e0a695903c8e6effd524a7f92784"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_variable.html#ae1a3e0a695903c8e6effd524a7f92784">operations_research::MPVariable::GLPKInterface</a></div><divclass="ttdeci">friend class GLPKInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01171">linear_solver.h:1171</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_variable_html_ae7cbd08108e1636184f28c1a71c42393"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_variable.html#ae7cbd08108e1636184f28c1a71c42393">operations_research::MPVariable::CplexInterface</a></div><divclass="ttdeci">friend class CplexInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01175">linear_solver.h:1175</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_variable_html_aecd5fee61b6013b1207c2ea622c849b5"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_variable.html#aecd5fee61b6013b1207c2ea622c849b5">operations_research::MPVariable::basis_status</a></div><divclass="ttdeci">MPSolver::BasisStatus basis_status() const</div><divclass="ttdoc">Advanced usage: returns the basis status of the variable in the current solution (only available for ...</div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_variable_html_aee1ddf25e86286c16face31551751bda"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_variable.html#aee1ddf25e86286c16face31551751bda">operations_research::MPVariable::KnapsackInterface</a></div><divclass="ttdeci">friend class KnapsackInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01182">linear_solver.h:1182</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1_m_p_variable_html_af5a7cf0c655f37c0b388a2ddcf32ac3e"><divclass="ttname"><ahref="classoperations__research_1_1_m_p_variable.html#af5a7cf0c655f37c0b388a2ddcf32ac3e">operations_research::MPVariable::CBCInterface</a></div><divclass="ttdeci">friend class CBCInterface</div><divclass="ttdef"><b>Definition:</b><ahref="linear__solver_8h_source.html#l01169">linear_solver.h:1169</a></div></div>
<divclass="ttc"id="alinear__expr_8h_html"><divclass="ttname"><ahref="linear__expr_8h.html">linear_expr.h</a></div><divclass="ttdoc">This file allows you to write natural code (like a mathematical equation) to model optimization probl...</div></div>