Files
ortools-clone/docs/cpp/lp__data_8h_source.html
2020-09-02 09:43:05 +02:00

932 lines
195 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- HTML header for doxygen 1.8.18-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>OR-Tools: lp_data.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="styleSheet.tmp.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="orLogo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">OR-Tools
&#160;<span id="projectnumber">8.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('lp__data_8h_source.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">lp_data.h</div> </div>
</div><!--header-->
<div class="contents">
<a href="lp__data_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright 2010-2018 Google LLC</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// you may not use this file except in compliance with the License.</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// You may obtain a copy of the License at</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">//</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">//</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// See the License for the specific language governing permissions and</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// limitations under the License.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; </div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">//</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// Storage classes for Linear Programs.</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">//</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment">// LinearProgram stores the complete data for a Linear Program:</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// - objective coefficients and offset,</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// - cost coefficients,</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">// - coefficient matrix,</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">// - bounds for each variable,</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment">// - bounds for each constraint.</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#ifndef OR_TOOLS_LP_DATA_LP_DATA_H_</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#define OR_TOOLS_LP_DATA_LP_DATA_H_</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span> <span class="comment">// for max</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &lt;map&gt;</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span> <span class="comment">// for string</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span> <span class="comment">// for vector</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &quot;absl/container/flat_hash_map.h&quot;</span></div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;absl/container/flat_hash_set.h&quot;</span></div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="hash_8h.html">ortools/base/hash.h</a>&quot;</span></div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="int__type_8h.html">ortools/base/int_type.h</a>&quot;</span></div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="int__type__indexed__vector_8h.html">ortools/base/int_type_indexed_vector.h</a>&quot;</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="base_2logging_8h.html">ortools/base/logging.h</a>&quot;</span> <span class="comment">// for CHECK*</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="macros_8h.html">ortools/base/macros.h</a>&quot;</span> <span class="comment">// for DISALLOW_COPY_AND_ASSIGN, NULL</span></div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="parameters_8pb_8h.html">ortools/glop/parameters.pb.h</a>&quot;</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="lp__types_8h.html">ortools/lp_data/lp_types.h</a>&quot;</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="sparse_8h.html">ortools/lp_data/sparse.h</a>&quot;</span></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="fp__utils_8h.html">ortools/util/fp_utils.h</a>&quot;</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceoperations__research.html">operations_research</a> {</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="keyword">namespace </span>glop {</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="keyword">class </span>SparseMatrixScaler;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="comment">// The LinearProgram class is used to store a linear problem in a form</span></div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="comment">// accepted by LPSolver.</span></div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="comment">//</span></div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="comment">// In addition to the simple setter functions used to create such problems, the</span></div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="comment">// class also contains a few more advanced modification functions used primarily</span></div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="comment">// by preprocessors. A client shouldn&#39;t need to use them directly.</span></div>
<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classoperations__research_1_1glop_1_1LinearProgram.html"> 55</a></span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html">LinearProgram</a> {</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classoperations__research_1_1glop_1_1LinearProgram.html#ac62972ff1b21a037e56530cde67309ab"> 57</a></span>&#160; <span class="keyword">enum class</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#ac62972ff1b21a037e56530cde67309ab">VariableType</a> {</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="comment">// The variable can take any value between and including its lower and upper</span></div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="comment">// bound.</span></div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#ac62972ff1b21a037e56530cde67309abab1fa9dd3af034b3ef4291579aa673c07">CONTINUOUS</a>,</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="comment">// The variable must only take integer values.</span></div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#ac62972ff1b21a037e56530cde67309aba5d5cd46919fa987731fb2edefe0f2a0c">INTEGER</a>,</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="comment">// The variable is implied integer variable i.e. it was continuous variable</span></div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="comment">// in the LP and was detected to take only integer values.</span></div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#ac62972ff1b21a037e56530cde67309abab79968c5beff3baa0791198293518e14">IMPLIED_INTEGER</a></div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; };</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; </div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#abcea67382d5e095491b022a7aa4291a7">LinearProgram</a>();</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; </div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="comment">// Clears, i.e. reset the object to its initial value.</span></div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#aa71d36872f416feaa853788a7a7a7ef8">Clear</a>();</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; </div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="comment">// Name setter and getter.</span></div>
<div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="classoperations__research_1_1glop_1_1LinearProgram.html#a940d484bb6523277e1d2c742f4f534a4"> 74</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a940d484bb6523277e1d2c742f4f534a4">SetName</a>(<span class="keyword">const</span> std::string&amp; <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#ad8227ba86a01f26e4f173cd5e219d5d1">name</a>) { name_ = <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#ad8227ba86a01f26e4f173cd5e219d5d1">name</a>; }</div>
<div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="classoperations__research_1_1glop_1_1LinearProgram.html#ad8227ba86a01f26e4f173cd5e219d5d1"> 75</a></span>&#160; <span class="keyword">const</span> std::string&amp; <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#ad8227ba86a01f26e4f173cd5e219d5d1">name</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> name_; }</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; </div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="comment">// Creates a new variable and returns its index.</span></div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="comment">// By default, the column bounds will be [0, infinity).</span></div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; ColIndex <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a695ac3d8db5a986f572711f2ef3a6a39">CreateNewVariable</a>();</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; </div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="comment">// Creates a new slack variable and returns its index. Do not use this method</span></div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="comment">// to create non-slack variables.</span></div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; ColIndex <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a69d82a65001991de390a5acc122573f3">CreateNewSlackVariable</a>(<span class="keywordtype">bool</span> is_integer_slack_variable,</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <a class="code" href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">Fractional</a> lower_bound,</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <a class="code" href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">Fractional</a> upper_bound,</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keyword">const</span> std::string&amp; <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#ad8227ba86a01f26e4f173cd5e219d5d1">name</a>);</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; </div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="comment">// Creates a new constraint and returns its index.</span></div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="comment">// By default, the constraint bounds will be [0, 0].</span></div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; RowIndex <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#ad9d564651057c77b3f2ca1293134557f">CreateNewConstraint</a>();</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; </div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="comment">// Same as CreateNewVariable() or CreateNewConstraint() but also assign an</span></div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="comment">// immutable id to the variable or constraint so they can be retrieved later.</span></div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="comment">// By default, the name is also set to this id, but it can be changed later</span></div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="comment">// without changing the id.</span></div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="comment">// Note that these ids are NOT copied over by the Populate*() functions.</span></div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="comment">// TODO(user): Move these and the two corresponding hash_table into a new</span></div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="comment">// LinearProgramBuilder class to simplify the code of some functions like</span></div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="comment">// DeleteColumns() here and make the behavior on copy clear? or simply remove</span></div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="comment">// them as it is almost as easy to maintain a hash_table on the client side.</span></div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; ColIndex <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a4e1fb82cbbf024213eae338216bf601e">FindOrCreateVariable</a>(<span class="keyword">const</span> std::string&amp; variable_id);</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; RowIndex <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a6b50792950c42b62e8bf4ed596aebb27">FindOrCreateConstraint</a>(<span class="keyword">const</span> std::string&amp; constraint_id);</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; </div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="comment">// Functions to set the name of a variable or constraint. Note that you</span></div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="comment">// won&#39;t be able to find those named variables/constraints with</span></div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="comment">// FindOrCreate{Variable|Constraint}().</span></div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="comment">// TODO(user): Add PopulateIdsFromNames() so names added via</span></div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="comment">// Set{Variable|Constraint}Name() can be found.</span></div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#aa3e03ca59f6ecbfa265efac36d89cf3d">SetVariableName</a>(ColIndex <a class="code" href="markowitz_8cc.html#aa9d6c98fdf8d89b0e2321fda02adc82c">col</a>, <span class="keyword">const</span> std::string&amp; <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#ad8227ba86a01f26e4f173cd5e219d5d1">name</a>);</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#ac097fc8d275b5c13d3646f404c0533d5">SetConstraintName</a>(RowIndex <a class="code" href="markowitz_8cc.html#aea35f36ba98d5bbd8d033382f50c9e52">row</a>, <span class="keyword">const</span> std::string&amp; <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#ad8227ba86a01f26e4f173cd5e219d5d1">name</a>);</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; </div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="comment">// Set the type of the variable.</span></div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a7ddcdc56f25d075e18d62ddbcd3389b2">SetVariableType</a>(ColIndex <a class="code" href="markowitz_8cc.html#aa9d6c98fdf8d89b0e2321fda02adc82c">col</a>, <a class="code" href="namespaceoperations__research_1_1glop.html#acfc1d5d5139f63d8c733d4562124866a">VariableType</a> type);</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; </div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="comment">// Returns whether the variable at column col is constrained to be integer.</span></div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#ab4f3103f39bdbb86151baed2347f7b0a">IsVariableInteger</a>(ColIndex <a class="code" href="markowitz_8cc.html#aa9d6c98fdf8d89b0e2321fda02adc82c">col</a>) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; </div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="comment">// Returns whether the variable at column col must take binary values or not.</span></div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#ab8efe00bb016665606d522a42543cd96">IsVariableBinary</a>(ColIndex <a class="code" href="markowitz_8cc.html#aa9d6c98fdf8d89b0e2321fda02adc82c">col</a>) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; </div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="comment">// Defines lower and upper bounds for the variable at col. Note that the</span></div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="comment">// bounds may be set to +/- infinity. The variable must have been created</span></div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="comment">// before or this will crash in non-debug mode.</span></div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a0fe7ba825c8c6cd1efdcff6dec631093">SetVariableBounds</a>(ColIndex <a class="code" href="markowitz_8cc.html#aa9d6c98fdf8d89b0e2321fda02adc82c">col</a>, <a class="code" href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">Fractional</a> lower_bound,</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <a class="code" href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">Fractional</a> upper_bound);</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; </div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="comment">// Defines lower and upper bounds for the constraint at row. Note that the</span></div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="comment">// bounds may be set to +/- infinity. If the constraint wasn&#39;t created before,</span></div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="comment">// all the rows from the current GetNumberOfRows() to the given row will be</span></div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="comment">// created with a range [0,0].</span></div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a62b98dec38b6506442f9fc63f1a9b88f">SetConstraintBounds</a>(RowIndex <a class="code" href="markowitz_8cc.html#aea35f36ba98d5bbd8d033382f50c9e52">row</a>, <a class="code" href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">Fractional</a> lower_bound,</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <a class="code" href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">Fractional</a> upper_bound);</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; </div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="comment">// Defines the coefficient for col / row.</span></div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a2d695f450ae446d5d9c225b991f8d88e">SetCoefficient</a>(RowIndex <a class="code" href="markowitz_8cc.html#aea35f36ba98d5bbd8d033382f50c9e52">row</a>, ColIndex <a class="code" href="markowitz_8cc.html#aa9d6c98fdf8d89b0e2321fda02adc82c">col</a>, <a class="code" href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">Fractional</a> <a class="code" href="demon__profiler_8cc.html#a21edc7ca4cc5802c8779d68556bc09cf">value</a>);</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; </div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="comment">// Defines the objective coefficient of column col.</span></div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="comment">// It is set to 0.0 by default.</span></div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#ab5af7f232cddcd91f70be84c0d398ba9">SetObjectiveCoefficient</a>(ColIndex <a class="code" href="markowitz_8cc.html#aa9d6c98fdf8d89b0e2321fda02adc82c">col</a>, <a class="code" href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">Fractional</a> <a class="code" href="demon__profiler_8cc.html#a21edc7ca4cc5802c8779d68556bc09cf">value</a>);</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; </div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="comment">// Define the objective offset (0.0 by default) and scaling factor (positive</span></div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="comment">// and equal to 1.0 by default). This is mainly used for displaying purpose</span></div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="comment">// and the real objective is factor * (objective + offset).</span></div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a2a29cc40908e09b0c565ceea15b77d89">SetObjectiveOffset</a>(<a class="code" href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">Fractional</a> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a81334c7ceae9d68a38fe4d4bf0b7794c">objective_offset</a>);</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a01a5a464aad9b500e5f07b0457520762">SetObjectiveScalingFactor</a>(<a class="code" href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">Fractional</a> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#adf55bb4fcaab95674f072cb528d426a0">objective_scaling_factor</a>);</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; </div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="comment">// Defines the optimization direction. When maximize is true (resp. false),</span></div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="comment">// the objective is maximized (resp. minimized). The default is false.</span></div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#ae3201a343d8df987411b55830bff7fa3">SetMaximizationProblem</a>(<span class="keywordtype">bool</span> maximize);</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; </div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="comment">// Calls CleanUp() on each columns.</span></div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="comment">// That is, removes duplicates, zeros, and orders the coefficients by row.</span></div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#abfc30f91ab75c6f4552003f777672e74">CleanUp</a>();</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; </div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="comment">// Returns true if all the columns are ordered by rows and contain no</span></div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="comment">// duplicates or zero entries (i.e. if IsCleanedUp() is true for all columns).</span></div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a5e016d204d43b2cc4a2773c25462968a">IsCleanedUp</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; </div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="comment">// Functions that return the name of a variable or constraint. If the name is</span></div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="comment">// empty, they return a special name that depends on the index.</span></div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; std::string <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a18b017687d9940cc46c92e3937a18882">GetVariableName</a>(ColIndex <a class="code" href="markowitz_8cc.html#aa9d6c98fdf8d89b0e2321fda02adc82c">col</a>) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; std::string <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a8d7d21abe90edddc22416e5db1db563f">GetConstraintName</a>(RowIndex <a class="code" href="markowitz_8cc.html#aea35f36ba98d5bbd8d033382f50c9e52">row</a>) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; </div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="comment">// Returns the type of variable.</span></div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <a class="code" href="namespaceoperations__research_1_1glop.html#acfc1d5d5139f63d8c733d4562124866a">VariableType</a> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a6b0e95d320fd02517fdd0adaadca3d71">GetVariableType</a>(ColIndex <a class="code" href="markowitz_8cc.html#aa9d6c98fdf8d89b0e2321fda02adc82c">col</a>) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; </div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="comment">// Returns true (resp. false) when the problem is a maximization</span></div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="comment">// (resp. minimization) problem.</span></div>
<div class="line"><a name="l00171"></a><span class="lineno"><a class="line" href="classoperations__research_1_1glop_1_1LinearProgram.html#accdd045ec09206640c2338524da77d23"> 171</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#accdd045ec09206640c2338524da77d23">IsMaximizationProblem</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> maximize_; }</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; </div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="comment">// Returns the underlying SparseMatrix or its transpose (which may need to be</span></div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="comment">// computed).</span></div>
<div class="line"><a name="l00175"></a><span class="lineno"><a class="line" href="classoperations__research_1_1glop_1_1LinearProgram.html#a33b78d7012477c55f395aaf92ca6e9f4"> 175</a></span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1SparseMatrix.html">SparseMatrix</a>&amp; <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a33b78d7012477c55f395aaf92ca6e9f4">GetSparseMatrix</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> matrix_; }</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1SparseMatrix.html">SparseMatrix</a>&amp; <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a2175025047722705a3af86e54229f9cd">GetTransposeSparseMatrix</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; </div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="comment">// Some transformations are better done on the transpose representation. These</span></div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="comment">// two functions are here for that. Note that calling the first function and</span></div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="comment">// modifying the matrix does not change the result of any function in this</span></div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="comment">// class until UseTransposeMatrixAsReference() is called. This is because the</span></div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="comment">// transpose matrix is only used by GetTransposeSparseMatrix() and this</span></div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="comment">// function will recompute the whole transpose from the matrix. In particular,</span></div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="comment">// do not call GetTransposeSparseMatrix() while you modify the matrix returned</span></div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="comment">// by GetMutableTransposeSparseMatrix() otherwise all your changes will be</span></div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="comment">// lost.</span></div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="comment">// IMPORTANT: The matrix dimension cannot change. Otherwise this will cause</span></div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="comment">// problems. This is checked in debug mode when calling</span></div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="comment">// UseTransposeMatrixAsReference().</span></div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <a class="code" href="classoperations__research_1_1glop_1_1SparseMatrix.html">SparseMatrix</a>* <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a007496c4e4962b2fa4d2e996fd7b4cf6">GetMutableTransposeSparseMatrix</a>();</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a9ac8fe8120fdded43c5fa888bd696d3e">UseTransposeMatrixAsReference</a>();</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; </div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="comment">// Release the memory used by the transpose matrix.</span></div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a40b46f23f42f169a527de50e016c2096">ClearTransposeMatrix</a>();</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; </div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="comment">// Gets the underlying SparseColumn with the given index.</span></div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="comment">// This is the same as GetSparseMatrix().column(col);</span></div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1SparseColumn.html">SparseColumn</a>&amp; <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#aeeee0971281f2781c379fce7a64a5049">GetSparseColumn</a>(ColIndex <a class="code" href="markowitz_8cc.html#aa9d6c98fdf8d89b0e2321fda02adc82c">col</a>) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; </div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="comment">// Gets a pointer to the underlying SparseColumn with the given index.</span></div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <a class="code" href="classoperations__research_1_1glop_1_1SparseColumn.html">SparseColumn</a>* <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a88cc1c4519b043336ce23cdcec5fb0c2">GetMutableSparseColumn</a>(ColIndex <a class="code" href="markowitz_8cc.html#aa9d6c98fdf8d89b0e2321fda02adc82c">col</a>);</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; </div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="comment">// Returns the number of variables.</span></div>
<div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="classoperations__research_1_1glop_1_1LinearProgram.html#acd8437353d8dc686a75c98b5897dd871"> 205</a></span>&#160; ColIndex <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#acd8437353d8dc686a75c98b5897dd871">num_variables</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> matrix_.<a class="code" href="classoperations__research_1_1glop_1_1SparseMatrix.html#a41741829541d089f1c4d34f190884813">num_cols</a>(); }</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; </div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="comment">// Returns the number of constraints.</span></div>
<div class="line"><a name="l00208"></a><span class="lineno"><a class="line" href="classoperations__research_1_1glop_1_1LinearProgram.html#afda9b9b5e858d0c466d2a6293361004a"> 208</a></span>&#160; RowIndex <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#afda9b9b5e858d0c466d2a6293361004a">num_constraints</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> matrix_.<a class="code" href="classoperations__research_1_1glop_1_1SparseMatrix.html#a960110e64357a3e69162ebf1f71959dd">num_rows</a>(); }</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; </div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="comment">// Returns the number of entries in the linear program matrix.</span></div>
<div class="line"><a name="l00211"></a><span class="lineno"><a class="line" href="classoperations__research_1_1glop_1_1LinearProgram.html#af69d9b7065a8f31604a8134be4307749"> 211</a></span>&#160; EntryIndex <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#af69d9b7065a8f31604a8134be4307749">num_entries</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> matrix_.<a class="code" href="classoperations__research_1_1glop_1_1SparseMatrix.html#af69d9b7065a8f31604a8134be4307749">num_entries</a>(); }</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; </div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="comment">// Return the lower bounds (resp. upper bounds) of constraints as a column</span></div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="comment">// vector. Note that the bound values may be +/- infinity.</span></div>
<div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="classoperations__research_1_1glop_1_1LinearProgram.html#a4e79763dc85eb10320835bca13697f4d"> 215</a></span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">DenseColumn</a>&amp; <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a4e79763dc85eb10320835bca13697f4d">constraint_lower_bounds</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">return</span> constraint_lower_bounds_;</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; }</div>
<div class="line"><a name="l00218"></a><span class="lineno"><a class="line" href="classoperations__research_1_1glop_1_1LinearProgram.html#aa4e5168f378a3a4e86dcf409faf14937"> 218</a></span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">DenseColumn</a>&amp; <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#aa4e5168f378a3a4e86dcf409faf14937">constraint_upper_bounds</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">return</span> constraint_upper_bounds_;</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; }</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; </div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="comment">// Returns the objective coefficients (or cost) of variables as a row vector.</span></div>
<div class="line"><a name="l00223"></a><span class="lineno"><a class="line" href="classoperations__research_1_1glop_1_1LinearProgram.html#a5c8255f82269d42db81cc944eff0180f"> 223</a></span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">DenseRow</a>&amp; <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a5c8255f82269d42db81cc944eff0180f">objective_coefficients</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">return</span> objective_coefficients_;</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; }</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; </div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="comment">// Return the lower bounds (resp. upper bounds) of variables as a row vector.</span></div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="comment">// Note that the bound values may be +/- infinity.</span></div>
<div class="line"><a name="l00229"></a><span class="lineno"><a class="line" href="classoperations__research_1_1glop_1_1LinearProgram.html#a4ba664b00317505a0026d2a38e6dd565"> 229</a></span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">DenseRow</a>&amp; <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a4ba664b00317505a0026d2a38e6dd565">variable_lower_bounds</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">return</span> variable_lower_bounds_;</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div>
<div class="line"><a name="l00232"></a><span class="lineno"><a class="line" href="classoperations__research_1_1glop_1_1LinearProgram.html#acd138469679be137d0de53459b1342cb"> 232</a></span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">DenseRow</a>&amp; <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#acd138469679be137d0de53459b1342cb">variable_upper_bounds</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordflow">return</span> variable_upper_bounds_;</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; }</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; </div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="comment">// Returns a row vector of VariableType representing types of variables.</span></div>
<div class="line"><a name="l00237"></a><span class="lineno"><a class="line" href="classoperations__research_1_1glop_1_1LinearProgram.html#aec4f9f0e8674e2b692176f599086d721"> 237</a></span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">StrictITIVector&lt;ColIndex, VariableType&gt;</a> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#aec4f9f0e8674e2b692176f599086d721">variable_types</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">return</span> variable_types_;</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; }</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; </div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="comment">// Returns a list (technically a vector) of the ColIndices of the integer</span></div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="comment">// variables. This vector is lazily computed.</span></div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keyword">const</span> std::vector&lt;ColIndex&gt;&amp; <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a609bcb18cec39c7c43dd7a6d3a51ba81">IntegerVariablesList</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; </div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="comment">// Returns a list (technically a vector) of the ColIndices of the binary</span></div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="comment">// integer variables. This vector is lazily computed.</span></div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keyword">const</span> std::vector&lt;ColIndex&gt;&amp; <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a5b58cfd45475bfab5ce1fe5c81b6da60">BinaryVariablesList</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; </div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="comment">// Returns a list (technically a vector) of the ColIndices of the non-binary</span></div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="comment">// integer variables. This vector is lazily computed.</span></div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keyword">const</span> std::vector&lt;ColIndex&gt;&amp; <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a814307860c1248b645ea68a8a11a0082">NonBinaryVariablesList</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; </div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="comment">// Returns the objective coefficient (or cost) of the given variable for the</span></div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="comment">// minimization version of the problem. That is, this is the same as</span></div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="comment">// GetObjectiveCoefficient() for a minimization problem and the opposite for a</span></div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="comment">// maximization problem.</span></div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <a class="code" href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">Fractional</a> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a6137c2df856cf2634f9bb259d2aace2b">GetObjectiveCoefficientForMinimizationVersion</a>(ColIndex <a class="code" href="markowitz_8cc.html#aa9d6c98fdf8d89b0e2321fda02adc82c">col</a>) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; </div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="comment">// Returns the objective offset and scaling factor.</span></div>
<div class="line"><a name="l00260"></a><span class="lineno"><a class="line" href="classoperations__research_1_1glop_1_1LinearProgram.html#a81334c7ceae9d68a38fe4d4bf0b7794c"> 260</a></span>&#160; <a class="code" href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">Fractional</a> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a81334c7ceae9d68a38fe4d4bf0b7794c">objective_offset</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> objective_offset_; }</div>
<div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="classoperations__research_1_1glop_1_1LinearProgram.html#adf55bb4fcaab95674f072cb528d426a0"> 261</a></span>&#160; <a class="code" href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">Fractional</a> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#adf55bb4fcaab95674f072cb528d426a0">objective_scaling_factor</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">return</span> objective_scaling_factor_;</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; }</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; </div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="comment">// Checks if each variable respects its bounds, nothing else.</span></div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a23e637a2ad0316932c194e38f8e5f5f6">SolutionIsWithinVariableBounds</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">DenseRow</a>&amp; solution,</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <a class="code" href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">Fractional</a> absolute_tolerance) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; </div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="comment">// Tests if the solution is LP-feasible within the given tolerance,</span></div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="comment">// i.e., satisfies all linear constraints within the absolute tolerance level.</span></div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="comment">// The solution does not need to satisfy the integer constraints.</span></div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#aa8fbdc130ccf992a392b066fe625443e">SolutionIsLPFeasible</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">DenseRow</a>&amp; solution,</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <a class="code" href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">Fractional</a> absolute_tolerance) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; </div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="comment">// Tests if the solution is integer within the given tolerance, i.e., all</span></div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="comment">// integer variables have integer values within the absolute tolerance level.</span></div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="comment">// The solution does not need to satisfy the linear constraints.</span></div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a887289f2d9928ca7a603fee5b77df258">SolutionIsInteger</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">DenseRow</a>&amp; solution,</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <a class="code" href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">Fractional</a> absolute_tolerance) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; </div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="comment">// Tests if the solution is both LP-feasible and integer within the tolerance.</span></div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a2c97213019318c99fd9d01658803d12f">SolutionIsMIPFeasible</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">DenseRow</a>&amp; solution,</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <a class="code" href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">Fractional</a> absolute_tolerance) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; </div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="comment">// Fills the value of the slack from the other variable values.</span></div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="comment">// This requires that the slack have been added.</span></div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#aa779a5d1f677630f42a48e1fdaadb1a8">ComputeSlackVariableValues</a>(<a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">DenseRow</a>* solution) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; </div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="comment">// Functions to translate the sum(solution * objective_coefficients()) to</span></div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="comment">// the real objective of the problem and back. Note that these can also</span></div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="comment">// be used to translate bounds of the objective in the same way.</span></div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <a class="code" href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">Fractional</a> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#ac1e28fcd73435981deb42946a3e38046">ApplyObjectiveScalingAndOffset</a>(<a class="code" href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">Fractional</a> <a class="code" href="demon__profiler_8cc.html#a21edc7ca4cc5802c8779d68556bc09cf">value</a>) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <a class="code" href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">Fractional</a> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a5d1b2b60ac8335834e40084ea545cc0d">RemoveObjectiveScalingAndOffset</a>(<a class="code" href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">Fractional</a> <a class="code" href="demon__profiler_8cc.html#a21edc7ca4cc5802c8779d68556bc09cf">value</a>) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; </div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="comment">// A short string with the problem dimension.</span></div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; std::string <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#adcc58612f6a1dc35ff3ffdb34188f299">GetDimensionString</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; </div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="comment">// A short line with some stats on the objective coefficients.</span></div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; std::string <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a009204d0a4a7bb8252d86dd53733cacc">GetObjectiveStatsString</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; </div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="comment">// Returns a stringified LinearProgram. We use the LP file format used by</span></div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="comment">// lp_solve (see http://lpsolve.sourceforge.net/5.1/index.htm).</span></div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; std::string <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#ab4a8456683d4572bd9426efab8489e99">Dump</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; </div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="comment">// Returns a string that contains the provided solution of the LP in the</span></div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="comment">// format var1 = X, var2 = Y, var3 = Z, ...</span></div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; std::string <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a476f0627b588f945d6b14b9f08457ba9">DumpSolution</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">DenseRow</a>&amp; variable_values) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; </div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="comment">// Returns a comma-separated string of integers containing (in that order)</span></div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="comment">// num_constraints_, num_variables_in_file_, num_entries_,</span></div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="comment">// num_objective_non_zeros_, num_rhs_non_zeros_, num_less_than_constraints_,</span></div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="comment">// num_greater_than_constraints_, num_equal_constraints_,</span></div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="comment">// num_range_constraints_, num_non_negative_variables_, num_boxed_variables_,</span></div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="comment">// num_free_variables_, num_fixed_variables_, num_other_variables_</span></div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="comment">// Very useful for reporting in the way used in journal articles.</span></div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; std::string <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#acd7098e54f25e34f6626efd354cb7608">GetProblemStats</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; </div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="comment">// Returns a string containing the same information as with GetProblemStats(),</span></div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="comment">// but in a much more human-readable form, for example:</span></div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="comment">// Number of rows : 27</span></div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="comment">// Number of variables in file : 32</span></div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="comment">// Number of entries (non-zeros) : 83</span></div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="comment">// Number of entries in the objective : 5</span></div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="comment">// Number of entries in the right-hand side : 7</span></div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="comment">// Number of &lt;= constraints : 19</span></div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="comment">// Number of &gt;= constraints : 0</span></div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="comment">// Number of = constraints : 8</span></div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="comment">// Number of range constraints : 0</span></div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="comment">// Number of non-negative variables : 32</span></div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="comment">// Number of boxed variables : 0</span></div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="comment">// Number of free variables : 0</span></div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="comment">// Number of fixed variables : 0</span></div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="comment">// Number of other variables : 0</span></div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; std::string <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a2c5fdde0efc79599fcb7949449028ecf">GetPrettyProblemStats</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; </div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="comment">// Returns a comma-separated string of numbers containing (in that order)</span></div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="comment">// fill rate, max number of entries (length) in a row, average row length,</span></div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="comment">// standard deviation of row length, max column length, average column length,</span></div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="comment">// standard deviation of column length</span></div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="comment">// Useful for profiling algorithms.</span></div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="comment">// TODO(user): Theses are statistics about the underlying matrix and should be</span></div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="comment">// moved to SparseMatrix.</span></div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; std::string <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a3009656fbbef7a076bcaec0cca172572">GetNonZeroStats</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; </div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="comment">// Returns a string containing the same information as with GetNonZeroStats(),</span></div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="comment">// but in a much more human-readable form, for example:</span></div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="comment">// Fill rate : 9.61%</span></div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="comment">// Entries in row (Max / average / std, dev.) : 9 / 3.07 / 1.94</span></div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="comment">// Entries in column (Max / average / std, dev.): 4 / 2.59 / 0.96</span></div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; std::string <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a7866c9704e24cad179e98c7188587cdf">GetPrettyNonZeroStats</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; </div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="comment">// Adds slack variables to the problem for all rows which don&#39;t have slack</span></div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="comment">// variables. The new slack variables have bounds set to opposite of the</span></div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="comment">// bounds of the corresponding constraint, and changes all constraints to</span></div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="comment">// equality constraints with both bounds set to 0.0. If a constraint uses only</span></div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="comment">// integer variables and all their coefficients are integer, it will mark the</span></div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="comment">// slack variable as integer too.</span></div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="comment">// It is an error to call CreateNewVariable() or CreateNewConstraint() on a</span></div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="comment">// linear program on which this method was called.</span></div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="comment">// Note that many of the slack variables may not be useful at all, but in</span></div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="comment">// order not to recompute the matrix from one Solve() to the next, we always</span></div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="comment">// include all of them for a given lp matrix.</span></div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="comment">// TODO(user): investigate the impact on the running time. It seems low</span></div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="comment">// because we almost never iterate on fixed variables.</span></div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#aa23a76f0f582369176688b458cda07dc">AddSlackVariablesWhereNecessary</a>(<span class="keywordtype">bool</span> detect_integer_constraints);</div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; </div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="comment">// Returns the index of the first slack variable in the linear program.</span></div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="comment">// Returns kInvalidCol if slack variables were not injected into the problem</span></div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="comment">// yet.</span></div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; ColIndex <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a339d5516d8c29986233765e910257b4d">GetFirstSlackVariable</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; </div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="comment">// Returns the index of the slack variable corresponding to the given</span></div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="comment">// constraint. Returns kInvalidCol if slack variables were not injected into</span></div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="comment">// the problem yet.</span></div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; ColIndex <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a48de416333220c0bea7759c5aa53ee14">GetSlackVariable</a>(RowIndex <a class="code" href="markowitz_8cc.html#aea35f36ba98d5bbd8d033382f50c9e52">row</a>) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; </div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="comment">// Populates the calling object with the dual of the LinearProgram passed as</span></div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="comment">// parameter.</span></div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="comment">// For the general form that we solve,</span></div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="comment">// min c.x</span></div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="comment">// s.t. A_1 x = b_1</span></div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="comment">// A_2 x &lt;= b_2</span></div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="comment">// A_3 x &gt;= b_3</span></div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="comment">// l &lt;= x &lt;= u</span></div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="comment">// With x: n-column of unknowns</span></div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="comment">// l,u: n-columns of bound coefficients</span></div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="comment">// c: n-row of cost coefficients</span></div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="comment">// A_i: m_i×n-matrix of coefficients</span></div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="comment">// b_i: m_i-column of right-hand side coefficients</span></div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="comment">// The dual is</span></div>
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="comment">// max b_1.y_1 + b_2.y_2 + b_3.y_3 + l.v + u.w</span></div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="comment">// s.t. y_1 A_1 + y_2 A_2 + y_3 A_3 + v + w = c</span></div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="comment">// y_1 free, y_2 &lt;= 0, y_3 &gt;= 0, v &gt;= 0, w &lt;= 0</span></div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="comment">// With:</span></div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="comment">// y_i: m_i-row of unknowns</span></div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="comment">// v,w: n-rows of unknowns</span></div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="comment">// If range constraints are present, each of the corresponding row is</span></div>
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="comment">// duplicated (with one becoming lower bounded and the other upper bounded).</span></div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="comment">// For such ranged row in the primal, duplicated_rows[row] is set to the</span></div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="comment">// column index in the dual of the corresponding column duplicate. For</span></div>
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="comment">// non-ranged row, duplicated_rows[row] is set to kInvalidCol.</span></div>
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="comment">// IMPORTANT: The linear_program argument must not have any free constraints.</span></div>
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="comment">// IMPORTANT: This function always interprets the argument in its minimization</span></div>
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="comment">// form. So the dual solution of the dual needs to be negated if we want to</span></div>
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="comment">// compute the solution of a maximization problem given as an argument.</span></div>
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="comment">// TODO(user): Do not interpret as a minimization problem?</span></div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#ad38b71923c7904791897a23722c157cb">PopulateFromDual</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html">LinearProgram</a>&amp; dual,</div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">RowToColMapping</a>* duplicated_rows);</div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; </div>
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="comment">// Populates the calling object with the given LinearProgram.</span></div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a2b3db5dc0b5e97f2790bbe1d633abc61">PopulateFromLinearProgram</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html">LinearProgram</a>&amp; linear_program);</div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; </div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="comment">// Populates the calling object with the given LinearProgram while permuting</span></div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="comment">// variables and constraints. This is useful mainly for testing to generate</span></div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="comment">// a model with the same optimal objective value.</span></div>
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a057224e0b8a244b6204e382bbb6337ee">PopulateFromPermutedLinearProgram</a>(</div>
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html">LinearProgram</a>&amp; lp, <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1Permutation.html">RowPermutation</a>&amp; row_permutation,</div>
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1Permutation.html">ColumnPermutation</a>&amp; col_permutation);</div>
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; </div>
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="comment">// Populates the calling object with the variables of the given LinearProgram.</span></div>
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="comment">// The function preserves the bounds, the integrality, the names of the</span></div>
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="comment">// variables and their objective coefficients. No constraints are copied (the</span></div>
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="comment">// matrix in the destination has 0 rows).</span></div>
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#adb6ee53de9bb4adf2734b59842cea0f5">PopulateFromLinearProgramVariables</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html">LinearProgram</a>&amp; linear_program);</div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; </div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="comment">// Adds constraints to the linear program. The constraints are specified using</span></div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="comment">// a sparse matrix of the coefficients, and vectors that represent the</span></div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="comment">// left-hand side and the right-hand side of the constraints, i.e.</span></div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="comment">// left_hand_sides &lt;= coefficients * variables &lt;= right_hand_sides.</span></div>
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="comment">// The sizes of the columns and the names must be the same as the number of</span></div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="comment">// rows of the sparse matrix; the number of columns of the matrix must be</span></div>
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="comment">// equal to the number of variables of the linear program.</span></div>
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a742dbe4804ed01bc7a27724f6b672466">AddConstraints</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1SparseMatrix.html">SparseMatrix</a>&amp; <a class="code" href="sat_2lp__utils_8cc.html#ab1734711414da2e668957d24a41b1ddf">coefficients</a>,</div>
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">DenseColumn</a>&amp; left_hand_sides,</div>
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">DenseColumn</a>&amp; right_hand_sides,</div>
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">StrictITIVector&lt;RowIndex, std::string&gt;</a>&amp; names);</div>
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; </div>
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="comment">// Calls the AddConstraints method. After adding the constraints it adds slack</span></div>
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="comment">// variables to the constraints.</span></div>
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#ae8a25f4344e17329c596cd1c387f70b2">AddConstraintsWithSlackVariables</a>(</div>
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1SparseMatrix.html">SparseMatrix</a>&amp; <a class="code" href="sat_2lp__utils_8cc.html#ab1734711414da2e668957d24a41b1ddf">coefficients</a>, <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">DenseColumn</a>&amp; left_hand_sides,</div>
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">DenseColumn</a>&amp; right_hand_sides,</div>
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">StrictITIVector&lt;RowIndex, std::string&gt;</a>&amp; names,</div>
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="keywordtype">bool</span> detect_integer_constraints_for_slack);</div>
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; </div>
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="comment">// Swaps the content of this LinearProgram with the one passed as argument.</span></div>
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <span class="comment">// Works in O(1).</span></div>
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a7054c01679c4d1b7ce846b95937582d6">Swap</a>(<a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html">LinearProgram</a>* linear_program);</div>
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; </div>
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <span class="comment">// Removes the given column indices from the LinearProgram.</span></div>
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="comment">// This needs to allocate O(num_variables) memory to update variable_table_.</span></div>
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#ac59fd9cddfe284bf9dc7581ed631ce8d">DeleteColumns</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">DenseBooleanRow</a>&amp; columns_to_delete);</div>
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; </div>
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="comment">// Removes slack variables from the linear program. The method restores the</span></div>
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="comment">// bounds on constraints from the bounds of the slack variables, resets the</span></div>
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="comment">// index of the first slack variable, and removes the relevant columns from</span></div>
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="comment">// the matrix.</span></div>
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#ad7ecca71dd3aaf60246e7638ac3df455">DeleteSlackVariables</a>();</div>
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; </div>
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="comment">// Scales the problem using the given scaler.</span></div>
<div class="line"><a name="l00471"></a><span class="lineno"><a class="line" href="classoperations__research_1_1glop_1_1LinearProgram.html#a2ba6d84c5ab7af533569ed5d7f2e2846"> 471</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a2ba6d84c5ab7af533569ed5d7f2e2846">Scale</a>(<a class="code" href="classoperations__research_1_1glop_1_1SparseMatrixScaler.html">SparseMatrixScaler</a>* scaler);</div>
<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; </div>
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="comment">// While Scale() makes sure the coefficients inside the linear program matrix</span></div>
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <span class="comment">// are in [-1, 1], the objective coefficients, variable bounds and constraint</span></div>
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="comment">// bounds can still take large values (originally or due to the matrix</span></div>
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="comment">// scaling).</span></div>
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="comment">// It makes a lot of sense to also scale them given that internally we use</span></div>
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="comment">// absolute tolerances, and that it is nice to have the same behavior if users</span></div>
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="comment">// scale their problems. For instance one could change the unit of ALL the</span></div>
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="comment">// variables from Bytes to MBytes if they denote memory quantities. Or express</span></div>
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="comment">// a cost in dollars instead of thousands of dollars.</span></div>
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="comment">// Here, we are quite prudent and just make sure that the range of the</span></div>
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="comment">// non-zeros magnitudes contains one. So for instance if all non-zeros costs</span></div>
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="comment">// are in [1e4, 1e6], we will divide them by 1e4 so that the new range is</span></div>
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="comment">// [1, 1e2].</span></div>
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="comment">// TODO(user): Another more aggressive idea is to set the median/mean/geomean</span></div>
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="comment">// of the magnitudes to one. Investigate if this leads to better results. It</span></div>
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="comment">// does look more robust.</span></div>
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="comment">// Both functions update objective_scaling_factor()/objective_offset() and</span></div>
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="comment">// return the scaling coefficient so that:</span></div>
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="comment">// - For ScaleObjective(), the old coefficients can be retrieved by</span></div>
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="comment">// multiplying the new ones by the returned factor.</span></div>
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="comment">// - For ScaleBounds(), the old variable and constraint bounds can be</span></div>
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="comment">// retrieved by multiplying the new ones by the returned factor.</span></div>
<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <a class="code" href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">Fractional</a> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#ac5df4526af1b9ac31a38e84111d4f13a">ScaleObjective</a>();</div>
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <a class="code" href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">Fractional</a> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a354fba4c3eaf6cf38ee4f9e78a59f4c1">ScaleBounds</a>();</div>
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; </div>
<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="comment">// Removes the given row indices from the LinearProgram.</span></div>
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="comment">// This needs to allocate O(num_variables) memory.</span></div>
<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#ac220cc5563c65b821d9d043010bb2121">DeleteRows</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">DenseBooleanColumn</a>&amp; rows_to_delete);</div>
<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; </div>
<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="comment">// Does basic checking on the linear program:</span></div>
<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="comment">// - returns false if some coefficient are NaNs.</span></div>
<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="comment">// - returns false if some coefficient other than the bounds are +/- infinity.</span></div>
<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="comment">// Note that these conditions are also guarded by DCHECK on each of the</span></div>
<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="comment">// SetXXX() function above.</span></div>
<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#ac532c4b500b1a85ea22217f2c65a70ed">IsValid</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; </div>
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="comment">// Updates the bounds of the variables to the intersection of their original</span></div>
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="comment">// bounds and the bounds specified by variable_lower_bounds and</span></div>
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="comment">// variable_upper_bounds. If the new bounds of all variables are non-empty,</span></div>
<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="comment">// returns true; otherwise, returns false.</span></div>
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#acfe08a4275ac11e83e806835f04cc89e">UpdateVariableBoundsToIntersection</a>(</div>
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">DenseRow</a>&amp; <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a4ba664b00317505a0026d2a38e6dd565">variable_lower_bounds</a>,</div>
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">DenseRow</a>&amp; <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#acd138469679be137d0de53459b1342cb">variable_upper_bounds</a>);</div>
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; </div>
<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="comment">// Returns true if the linear program is in equation form Ax = 0 and all slack</span></div>
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="comment">// variables have been added. This is also called &quot;computational form&quot; in some</span></div>
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="comment">// of the literature.</span></div>
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a2980fe48a1c9d1d0a792bc343314b9ba">IsInEquationForm</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; </div>
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="comment">// Returns true if all integer variables in the linear program have strictly</span></div>
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="comment">// integer bounds.</span></div>
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a38ca209d17d37eb31e29a4025ab0934f">BoundsOfIntegerVariablesAreInteger</a>(<a class="code" href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">Fractional</a> tolerance) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; </div>
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="comment">// Returns true if all integer constraints in the linear program have strictly</span></div>
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="comment">// integer bounds.</span></div>
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a25349b5748c4f5f7eaa52d6986d14265">BoundsOfIntegerConstraintsAreInteger</a>(<a class="code" href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">Fractional</a> tolerance) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; </div>
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="comment">// Advanced usage. Bypass the costly call to CleanUp() when we known that the</span></div>
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="comment">// change we made kept the matrix columns &quot;clean&quot; (see the comment of</span></div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="comment">// CleanUp()). This is unsafe but can save a big chunk of the running time</span></div>
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="comment">// when one does a small amount of incremental changes to the problem (like</span></div>
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="comment">// adding a new row with no duplicates or zero entries).</span></div>
<div class="line"><a name="l00539"></a><span class="lineno"><a class="line" href="classoperations__research_1_1glop_1_1LinearProgram.html#aab451f1144133e621abdcd566c048a8d"> 539</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#aab451f1144133e621abdcd566c048a8d">NotifyThatColumnsAreClean</a>() {</div>
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; DCHECK(matrix_.<a class="code" href="classoperations__research_1_1glop_1_1SparseMatrix.html#a5e016d204d43b2cc4a2773c25462968a">IsCleanedUp</a>());</div>
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; columns_are_known_to_be_clean_ = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; }</div>
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; </div>
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="comment">// If true, checks bound validity in debug mode.</span></div>
<div class="line"><a name="l00545"></a><span class="lineno"><a class="line" href="classoperations__research_1_1glop_1_1LinearProgram.html#a6f10999cb9fd607a0b2c2e08ba6b2ef4"> 545</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a6f10999cb9fd607a0b2c2e08ba6b2ef4">SetDcheckBounds</a>(<span class="keywordtype">bool</span> dcheck_bounds) { dcheck_bounds_ = dcheck_bounds; }</div>
<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; </div>
<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="comment">// A helper function that updates the vectors integer_variables_list_,</span></div>
<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="comment">// binary_variables_list_, and non_binary_variables_list_.</span></div>
<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <span class="keywordtype">void</span> UpdateAllIntegerVariableLists() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; </div>
<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; <span class="comment">// A helper function to format problem statistics. Used by GetProblemStats()</span></div>
<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="comment">// and GetPrettyProblemStats().</span></div>
<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; std::string ProblemStatFormatter(<span class="keyword">const</span> absl::string_view format) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; </div>
<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="comment">// A helper function to format non-zero statistics. Used by GetNonZeroStats()</span></div>
<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="comment">// and GetPrettyNonZeroStats().</span></div>
<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; std::string NonZeroStatFormatter(<span class="keyword">const</span> absl::string_view format) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; </div>
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <span class="comment">// Resizes all row vectors to include index &#39;row&#39;.</span></div>
<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <span class="keywordtype">void</span> ResizeRowsIfNeeded(RowIndex <a class="code" href="markowitz_8cc.html#aea35f36ba98d5bbd8d033382f50c9e52">row</a>);</div>
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; </div>
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <span class="comment">// Populates the definitions of variables, name and objective in the calling</span></div>
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="comment">// linear program with the data from the given linear program. The method does</span></div>
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="comment">// not touch the data structures for storing constraints.</span></div>
<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <span class="keywordtype">void</span> PopulateNameObjectiveAndVariablesFromLinearProgram(</div>
<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html">LinearProgram</a>&amp; linear_program);</div>
<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; </div>
<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="comment">// Stores the linear program coefficients.</span></div>
<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <a class="code" href="classoperations__research_1_1glop_1_1SparseMatrix.html">SparseMatrix</a> matrix_;</div>
<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; </div>
<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="comment">// The transpose of matrix_. This will be lazily recomputed by</span></div>
<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="comment">// GetTransposeSparseMatrix() if transpose_matrix_is_consistent_ is false.</span></div>
<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <span class="keyword">mutable</span> <a class="code" href="classoperations__research_1_1glop_1_1SparseMatrix.html">SparseMatrix</a> transpose_matrix_;</div>
<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; </div>
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <span class="comment">// Constraint related quantities.</span></div>
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">DenseColumn</a> constraint_lower_bounds_;</div>
<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">DenseColumn</a> constraint_upper_bounds_;</div>
<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">StrictITIVector&lt;RowIndex, std::string&gt;</a> constraint_names_;</div>
<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; </div>
<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <span class="comment">// Variable related quantities.</span></div>
<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">DenseRow</a> objective_coefficients_;</div>
<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">DenseRow</a> variable_lower_bounds_;</div>
<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">DenseRow</a> variable_upper_bounds_;</div>
<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">StrictITIVector&lt;ColIndex, std::string&gt;</a> variable_names_;</div>
<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">StrictITIVector&lt;ColIndex, VariableType&gt;</a> variable_types_;</div>
<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; </div>
<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="comment">// The vector of the indices of variables constrained to be integer.</span></div>
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="comment">// Note(user): the set of indices in integer_variables_list_ is the union</span></div>
<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="comment">// of the set of indices in binary_variables_list_ and of the set of indices</span></div>
<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="comment">// in non_binary_variables_list_ below.</span></div>
<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="keyword">mutable</span> std::vector&lt;ColIndex&gt; integer_variables_list_;</div>
<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; </div>
<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="comment">// The vector of the indices of variables constrained to be binary.</span></div>
<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="keyword">mutable</span> std::vector&lt;ColIndex&gt; binary_variables_list_;</div>
<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; </div>
<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="comment">// The vector of the indices of variables constrained to be integer, but not</span></div>
<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="comment">// binary.</span></div>
<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keyword">mutable</span> std::vector&lt;ColIndex&gt; non_binary_variables_list_;</div>
<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; </div>
<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <span class="comment">// Map used to find the index of a variable based on its id.</span></div>
<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; absl::flat_hash_map&lt;std::string, ColIndex&gt; variable_table_;</div>
<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; </div>
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="comment">// Map used to find the index of a constraint based on its id.</span></div>
<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; absl::flat_hash_map&lt;std::string, RowIndex&gt; constraint_table_;</div>
<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; </div>
<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="comment">// Offset of the objective, i.e. value of the objective when all variables</span></div>
<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="comment">// are set to zero.</span></div>
<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <a class="code" href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">Fractional</a> objective_offset_;</div>
<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <a class="code" href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">Fractional</a> objective_scaling_factor_;</div>
<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; </div>
<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <span class="comment">// Boolean true (resp. false) when the problem is a maximization</span></div>
<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="comment">// (resp. minimization) problem.</span></div>
<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="keywordtype">bool</span> maximize_;</div>
<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; </div>
<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; <span class="comment">// Boolean to speed-up multiple calls to IsCleanedUp() or</span></div>
<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="comment">// CleanUp(). Mutable so IsCleanedUp() can be const.</span></div>
<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keyword">mutable</span> <span class="keywordtype">bool</span> columns_are_known_to_be_clean_;</div>
<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; </div>
<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="comment">// Whether transpose_matrix_ is guaranteed to be the transpose of matrix_.</span></div>
<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keyword">mutable</span> <span class="keywordtype">bool</span> transpose_matrix_is_consistent_;</div>
<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; </div>
<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; <span class="comment">// Whether integer_variables_list_ is consistent with the current</span></div>
<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="comment">// LinearProgram.</span></div>
<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="keyword">mutable</span> <span class="keywordtype">bool</span> integer_variables_list_is_consistent_;</div>
<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; </div>
<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="comment">// The name of the LinearProgram.</span></div>
<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; std::string name_;</div>
<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; </div>
<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <span class="comment">// The index of the first slack variable added to the linear program by</span></div>
<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <span class="comment">// LinearProgram::AddSlackVariablesForAllRows().</span></div>
<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; ColIndex first_slack_variable_;</div>
<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; </div>
<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <span class="comment">// If true, checks bounds in debug mode.</span></div>
<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keywordtype">bool</span> dcheck_bounds_ = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; </div>
<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <span class="keyword">friend</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html#a2ba6d84c5ab7af533569ed5d7f2e2846">Scale</a>(<a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html">LinearProgram</a>* lp, <a class="code" href="classoperations__research_1_1glop_1_1SparseMatrixScaler.html">SparseMatrixScaler</a>* scaler,</div>
<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; GlopParameters::ScalingAlgorithm scaling_method);</div>
<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; </div>
<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; DISALLOW_COPY_AND_ASSIGN(<a class="code" href="classoperations__research_1_1glop_1_1LinearProgram.html">LinearProgram</a>);</div>
<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160;};</div>
<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; </div>
<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160;<span class="comment">// --------------------------------------------------------</span></div>
<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160;<span class="comment">// ProblemSolution</span></div>
<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160;<span class="comment">// --------------------------------------------------------</span></div>
<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160;<span class="comment">// Contains the solution of a LinearProgram as returned by a preprocessor.</span></div>
<div class="line"><a name="l00647"></a><span class="lineno"><a class="line" href="structoperations__research_1_1glop_1_1ProblemSolution.html"> 647</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structoperations__research_1_1glop_1_1ProblemSolution.html">ProblemSolution</a> {</div>
<div class="line"><a name="l00648"></a><span class="lineno"><a class="line" href="structoperations__research_1_1glop_1_1ProblemSolution.html#a0510352d22b652c9cda1e9dc34cd1fce"> 648</a></span>&#160; <a class="code" href="structoperations__research_1_1glop_1_1ProblemSolution.html#a0510352d22b652c9cda1e9dc34cd1fce">ProblemSolution</a>(RowIndex num_rows, ColIndex num_cols)</div>
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; : <a class="code" href="structoperations__research_1_1glop_1_1ProblemSolution.html#a15eb0790f4f62ad63676f55e4ba7d2bb">status</a>(<a class="code" href="namespaceoperations__research_1_1glop.html#ae8a885303349cb7807c7c87b405bc0c9">ProblemStatus</a>::OPTIMAL),</div>
<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <a class="code" href="structoperations__research_1_1glop_1_1ProblemSolution.html#af8a495c9872268c3e34d413d8b63ef66">primal_values</a>(num_cols, 0.0),</div>
<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <a class="code" href="structoperations__research_1_1glop_1_1ProblemSolution.html#ac6b277da46124f6b08841906b0febbed">dual_values</a>(num_rows, 0.0),</div>
<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <a class="code" href="structoperations__research_1_1glop_1_1ProblemSolution.html#a887a20330f1f58adbe564ef0fcf74e8c">variable_statuses</a>(num_cols, <a class="code" href="namespaceoperations__research_1_1glop.html#a1ac488f3db89f6d16a85c56f3243290c">VariableStatus</a>::<a class="code" href="namespaceoperations__research_1_1glop.html#a1ac488f3db89f6d16a85c56f3243290ca88c189a42c87aa49d667fc8ab76bc323">FREE</a>),</div>
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <a class="code" href="structoperations__research_1_1glop_1_1ProblemSolution.html#ae7a0a13dedf8ae7920036bfff1ad9c3b">constraint_statuses</a>(num_rows, <a class="code" href="namespaceoperations__research_1_1glop.html#ad59b85e44037bd502a5d8bd3fe16c0f9">ConstraintStatus</a>::<a class="code" href="namespaceoperations__research_1_1glop.html#a1ac488f3db89f6d16a85c56f3243290ca88c189a42c87aa49d667fc8ab76bc323">FREE</a>) {}</div>
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="comment">// The solution status.</span></div>
<div class="line"><a name="l00655"></a><span class="lineno"><a class="line" href="structoperations__research_1_1glop_1_1ProblemSolution.html#a15eb0790f4f62ad63676f55e4ba7d2bb"> 655</a></span>&#160; <a class="code" href="namespaceoperations__research_1_1glop.html#ae8a885303349cb7807c7c87b405bc0c9">ProblemStatus</a> <a class="code" href="structoperations__research_1_1glop_1_1ProblemSolution.html#a15eb0790f4f62ad63676f55e4ba7d2bb">status</a>;</div>
<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; </div>
<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <span class="comment">// The actual primal/dual solution values. This is what most clients will</span></div>
<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <span class="comment">// need, and this is enough for LPSolver to easily check the optimality.</span></div>
<div class="line"><a name="l00659"></a><span class="lineno"><a class="line" href="structoperations__research_1_1glop_1_1ProblemSolution.html#af8a495c9872268c3e34d413d8b63ef66"> 659</a></span>&#160; <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">DenseRow</a> <a class="code" href="structoperations__research_1_1glop_1_1ProblemSolution.html#af8a495c9872268c3e34d413d8b63ef66">primal_values</a>;</div>
<div class="line"><a name="l00660"></a><span class="lineno"><a class="line" href="structoperations__research_1_1glop_1_1ProblemSolution.html#ac6b277da46124f6b08841906b0febbed"> 660</a></span>&#160; <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">DenseColumn</a> <a class="code" href="structoperations__research_1_1glop_1_1ProblemSolution.html#ac6b277da46124f6b08841906b0febbed">dual_values</a>;</div>
<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; </div>
<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <span class="comment">// The status of the variables and constraints which is difficult to</span></div>
<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <span class="comment">// reconstruct from the solution values alone. Some remarks:</span></div>
<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; <span class="comment">// - From this information alone, by factorizing the basis, it is easy to</span></div>
<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <span class="comment">// reconstruct the primal and dual values.</span></div>
<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="comment">// - The main difficulty to construct this from the solution values is to</span></div>
<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <span class="comment">// reconstruct the optimal basis if some basic variables are exactly at</span></div>
<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <span class="comment">// one of their bounds (and their reduced costs are close to zero).</span></div>
<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <span class="comment">// - The non-basic information (VariableStatus::FIXED_VALUE,</span></div>
<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; <span class="comment">// VariableStatus::AT_LOWER_BOUND, VariableStatus::AT_UPPER_BOUND,</span></div>
<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; <span class="comment">// VariableStatus::FREE) is easy to construct for variables (because</span></div>
<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; <span class="comment">// they are at their exact bounds). They can be guessed for constraints</span></div>
<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; <span class="comment">// (here a small precision error is unavoidable). However, it is useful to</span></div>
<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="comment">// carry this exact information during post-solve.</span></div>
<div class="line"><a name="l00675"></a><span class="lineno"><a class="line" href="structoperations__research_1_1glop_1_1ProblemSolution.html#a887a20330f1f58adbe564ef0fcf74e8c"> 675</a></span>&#160; <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">VariableStatusRow</a> <a class="code" href="structoperations__research_1_1glop_1_1ProblemSolution.html#a887a20330f1f58adbe564ef0fcf74e8c">variable_statuses</a>;</div>
<div class="line"><a name="l00676"></a><span class="lineno"><a class="line" href="structoperations__research_1_1glop_1_1ProblemSolution.html#ae7a0a13dedf8ae7920036bfff1ad9c3b"> 676</a></span>&#160; <a class="code" href="classoperations__research_1_1glop_1_1StrictITIVector.html">ConstraintStatusColumn</a> <a class="code" href="structoperations__research_1_1glop_1_1ProblemSolution.html#ae7a0a13dedf8ae7920036bfff1ad9c3b">constraint_statuses</a>;</div>
<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; </div>
<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; std::string <a class="code" href="structoperations__research_1_1glop_1_1ProblemSolution.html#a764be64f3029f8b8e23511061d8de355">DebugString</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160;};</div>
<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; </div>
<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160;<span class="comment">// Helper function to check the bounds of the SetVariableBounds() and</span></div>
<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160;<span class="comment">// SetConstraintBounds() functions.</span></div>
<div class="line"><a name="l00683"></a><span class="lineno"><a class="line" href="namespaceoperations__research_1_1glop.html#a2122f0c519a9e417e92c63273565d6b5"> 683</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespaceoperations__research_1_1glop.html#a2122f0c519a9e417e92c63273565d6b5">AreBoundsValid</a>(<a class="code" href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">Fractional</a> lower_bound, <a class="code" href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">Fractional</a> upper_bound) {</div>
<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <span class="keywordflow">if</span> (std::isnan(lower_bound)) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="keywordflow">if</span> (std::isnan(upper_bound)) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <span class="keywordflow">if</span> (lower_bound == <a class="code" href="namespaceoperations__research_1_1glop.html#af9a790b7e8c5b0c6d55b336177378e78">kInfinity</a> &amp;&amp; upper_bound == <a class="code" href="namespaceoperations__research_1_1glop.html#af9a790b7e8c5b0c6d55b336177378e78">kInfinity</a>) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <span class="keywordflow">if</span> (lower_bound == -<a class="code" href="namespaceoperations__research_1_1glop.html#af9a790b7e8c5b0c6d55b336177378e78">kInfinity</a> &amp;&amp; upper_bound == -<a class="code" href="namespaceoperations__research_1_1glop.html#af9a790b7e8c5b0c6d55b336177378e78">kInfinity</a>) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <span class="keywordflow">if</span> (lower_bound &gt; upper_bound) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160;}</div>
<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; </div>
<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;} <span class="comment">// namespace glop</span></div>
<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160;} <span class="comment">// namespace operations_research</span></div>
<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; </div>
<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160;<span class="preprocessor">#endif // OR_TOOLS_LP_DATA_LP_DATA_H_</span></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a38ca209d17d37eb31e29a4025ab0934f"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a38ca209d17d37eb31e29a4025ab0934f">operations_research::glop::LinearProgram::BoundsOfIntegerVariablesAreInteger</a></div><div class="ttdeci">bool BoundsOfIntegerVariablesAreInteger(Fractional tolerance) const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l01416">lp_data.cc:1416</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_acfe08a4275ac11e83e806835f04cc89e"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#acfe08a4275ac11e83e806835f04cc89e">operations_research::glop::LinearProgram::UpdateVariableBoundsToIntersection</a></div><div class="ttdeci">bool UpdateVariableBoundsToIntersection(const DenseRow &amp;variable_lower_bounds, const DenseRow &amp;variable_upper_bounds)</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00975">lp_data.cc:975</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a69d82a65001991de390a5acc122573f3"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a69d82a65001991de390a5acc122573f3">operations_research::glop::LinearProgram::CreateNewSlackVariable</a></div><div class="ttdeci">ColIndex CreateNewSlackVariable(bool is_integer_slack_variable, Fractional lower_bound, Fractional upper_bound, const std::string &amp;name)</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00174">lp_data.cc:174</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_ad8227ba86a01f26e4f173cd5e219d5d1"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#ad8227ba86a01f26e4f173cd5e219d5d1">operations_research::glop::LinearProgram::name</a></div><div class="ttdeci">const std::string &amp; name() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8h_source.html#l00075">lp_data.h:75</a></div></div>
<div class="ttc" id="astructoperations__research_1_1glop_1_1ProblemSolution_html_a0510352d22b652c9cda1e9dc34cd1fce"><div class="ttname"><a href="structoperations__research_1_1glop_1_1ProblemSolution.html#a0510352d22b652c9cda1e9dc34cd1fce">operations_research::glop::ProblemSolution::ProblemSolution</a></div><div class="ttdeci">ProblemSolution(RowIndex num_rows, ColIndex num_cols)</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8h_source.html#l00648">lp_data.h:648</a></div></div>
<div class="ttc" id="asat_2lp__utils_8cc_html_ab1734711414da2e668957d24a41b1ddf"><div class="ttname"><a href="sat_2lp__utils_8cc.html#ab1734711414da2e668957d24a41b1ddf">coefficients</a></div><div class="ttdeci">std::vector&lt; double &gt; coefficients</div><div class="ttdef"><b>Definition:</b> <a href="sat_2lp__utils_8cc_source.html#l00287">sat/lp_utils.cc:287</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_aa4e5168f378a3a4e86dcf409faf14937"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#aa4e5168f378a3a4e86dcf409faf14937">operations_research::glop::LinearProgram::constraint_upper_bounds</a></div><div class="ttdeci">const DenseColumn &amp; constraint_upper_bounds() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8h_source.html#l00218">lp_data.h:218</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_aa3e03ca59f6ecbfa265efac36d89cf3d"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#aa3e03ca59f6ecbfa265efac36d89cf3d">operations_research::glop::LinearProgram::SetVariableName</a></div><div class="ttdeci">void SetVariableName(ColIndex col, const std::string &amp;name)</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00230">lp_data.cc:230</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1StrictITIVector_html"><div class="ttname"><a href="classoperations__research_1_1glop_1_1StrictITIVector.html">operations_research::glop::StrictITIVector&lt; RowIndex, Fractional &gt;</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a2c5fdde0efc79599fcb7949449028ecf"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a2c5fdde0efc79599fcb7949449028ecf">operations_research::glop::LinearProgram::GetPrettyProblemStats</a></div><div class="ttdeci">std::string GetPrettyProblemStats() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00633">lp_data.cc:633</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a4ba664b00317505a0026d2a38e6dd565"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a4ba664b00317505a0026d2a38e6dd565">operations_research::glop::LinearProgram::variable_lower_bounds</a></div><div class="ttdeci">const DenseRow &amp; variable_lower_bounds() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8h_source.html#l00229">lp_data.h:229</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_ad9d564651057c77b3f2ca1293134557f"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#ad9d564651057c77b3f2ca1293134557f">operations_research::glop::LinearProgram::CreateNewConstraint</a></div><div class="ttdeci">RowIndex CreateNewConstraint()</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00189">lp_data.cc:189</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_acd138469679be137d0de53459b1342cb"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#acd138469679be137d0de53459b1342cb">operations_research::glop::LinearProgram::variable_upper_bounds</a></div><div class="ttdeci">const DenseRow &amp; variable_upper_bounds() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8h_source.html#l00232">lp_data.h:232</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_abfc30f91ab75c6f4552003f777672e74"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#abfc30f91ab75c6f4552003f777672e74">operations_research::glop::LinearProgram::CleanUp</a></div><div class="ttdeci">void CleanUp()</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00345">lp_data.cc:345</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a007496c4e4962b2fa4d2e996fd7b4cf6"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a007496c4e4962b2fa4d2e996fd7b4cf6">operations_research::glop::LinearProgram::GetMutableTransposeSparseMatrix</a></div><div class="ttdeci">SparseMatrix * GetMutableTransposeSparseMatrix()</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00384">lp_data.cc:384</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_ac62972ff1b21a037e56530cde67309ab"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#ac62972ff1b21a037e56530cde67309ab">operations_research::glop::LinearProgram::VariableType</a></div><div class="ttdeci">VariableType</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8h_source.html#l00057">lp_data.h:57</a></div></div>
<div class="ttc" id="abase_2logging_8h_html"><div class="ttname"><a href="base_2logging_8h.html">logging.h</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_aa779a5d1f677630f42a48e1fdaadb1a8"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#aa779a5d1f677630f42a48e1fdaadb1a8">operations_research::glop::LinearProgram::ComputeSlackVariableValues</a></div><div class="ttdeci">void ComputeSlackVariableValues(DenseRow *solution) const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00504">lp_data.cc:504</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1SparseMatrix_html"><div class="ttname"><a href="classoperations__research_1_1glop_1_1SparseMatrix.html">operations_research::glop::SparseMatrix</a></div><div class="ttdef"><b>Definition:</b> <a href="sparse_8h_source.html#l00061">sparse.h:61</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a18b017687d9940cc46c92e3937a18882"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a18b017687d9940cc46c92e3937a18882">operations_research::glop::LinearProgram::GetVariableName</a></div><div class="ttdeci">std::string GetVariableName(ColIndex col) const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00358">lp_data.cc:358</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_ab5af7f232cddcd91f70be84c0d398ba9"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#ab5af7f232cddcd91f70be84c0d398ba9">operations_research::glop::LinearProgram::SetObjectiveCoefficient</a></div><div class="ttdeci">void SetObjectiveCoefficient(ColIndex col, Fractional value)</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00324">lp_data.cc:324</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a5d1b2b60ac8335834e40084ea545cc0d"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a5d1b2b60ac8335834e40084ea545cc0d">operations_research::glop::LinearProgram::RemoveObjectiveScalingAndOffset</a></div><div class="ttdeci">Fractional RemoveObjectiveScalingAndOffset(Fractional value) const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00524">lp_data.cc:524</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a6f10999cb9fd607a0b2c2e08ba6b2ef4"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a6f10999cb9fd607a0b2c2e08ba6b2ef4">operations_research::glop::LinearProgram::SetDcheckBounds</a></div><div class="ttdeci">void SetDcheckBounds(bool dcheck_bounds)</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8h_source.html#l00545">lp_data.h:545</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a48de416333220c0bea7759c5aa53ee14"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a48de416333220c0bea7759c5aa53ee14">operations_research::glop::LinearProgram::GetSlackVariable</a></div><div class="ttdeci">ColIndex GetSlackVariable(RowIndex row) const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00724">lp_data.cc:724</a></div></div>
<div class="ttc" id="ademon__profiler_8cc_html_a21edc7ca4cc5802c8779d68556bc09cf"><div class="ttname"><a href="demon__profiler_8cc.html#a21edc7ca4cc5802c8779d68556bc09cf">value</a></div><div class="ttdeci">int64 value</div><div class="ttdef"><b>Definition:</b> <a href="demon__profiler_8cc_source.html#l00043">demon_profiler.cc:43</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_ac097fc8d275b5c13d3646f404c0533d5"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#ac097fc8d275b5c13d3646f404c0533d5">operations_research::glop::LinearProgram::SetConstraintName</a></div><div class="ttdeci">void SetConstraintName(RowIndex row, const std::string &amp;name)</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00243">lp_data.cc:243</a></div></div>
<div class="ttc" id="astructoperations__research_1_1glop_1_1ProblemSolution_html"><div class="ttname"><a href="structoperations__research_1_1glop_1_1ProblemSolution.html">operations_research::glop::ProblemSolution</a></div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8h_source.html#l00647">lp_data.h:647</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1SparseMatrix_html_a960110e64357a3e69162ebf1f71959dd"><div class="ttname"><a href="classoperations__research_1_1glop_1_1SparseMatrix.html#a960110e64357a3e69162ebf1f71959dd">operations_research::glop::SparseMatrix::num_rows</a></div><div class="ttdeci">RowIndex num_rows() const</div><div class="ttdef"><b>Definition:</b> <a href="sparse_8h_source.html#l00176">sparse.h:176</a></div></div>
<div class="ttc" id="amacros_8h_html"><div class="ttname"><a href="macros_8h.html">macros.h</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_ac532c4b500b1a85ea22217f2c65a70ed"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#ac532c4b500b1a85ea22217f2c65a70ed">operations_research::glop::LinearProgram::IsValid</a></div><div class="ttdeci">bool IsValid() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l01237">lp_data.cc:1237</a></div></div>
<div class="ttc" id="anamespaceoperations__research_html"><div class="ttname"><a href="namespaceoperations__research.html">operations_research</a></div><div class="ttdoc">The vehicle routing library lets one model and solve generic vehicle routing problems ranging from th...</div><div class="ttdef"><b>Definition:</b> <a href="dense__doubly__linked__list_8h_source.html#l00021">dense_doubly_linked_list.h:21</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_acd7098e54f25e34f6626efd354cb7608"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#acd7098e54f25e34f6626efd354cb7608">operations_research::glop::LinearProgram::GetProblemStats</a></div><div class="ttdeci">std::string GetProblemStats() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00627">lp_data.cc:627</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_adb6ee53de9bb4adf2734b59842cea0f5"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#adb6ee53de9bb4adf2734b59842cea0f5">operations_research::glop::LinearProgram::PopulateFromLinearProgramVariables</a></div><div class="ttdeci">void PopulateFromLinearProgramVariables(const LinearProgram &amp;linear_program)</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00904">lp_data.cc:904</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a4e79763dc85eb10320835bca13697f4d"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a4e79763dc85eb10320835bca13697f4d">operations_research::glop::LinearProgram::constraint_lower_bounds</a></div><div class="ttdeci">const DenseColumn &amp; constraint_lower_bounds() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8h_source.html#l00215">lp_data.h:215</a></div></div>
<div class="ttc" id="anamespaceoperations__research_1_1glop_html_ad59b85e44037bd502a5d8bd3fe16c0f9"><div class="ttname"><a href="namespaceoperations__research_1_1glop.html#ad59b85e44037bd502a5d8bd3fe16c0f9">operations_research::glop::ConstraintStatus</a></div><div class="ttdeci">ConstraintStatus</div><div class="ttdef"><b>Definition:</b> <a href="lp__types_8h_source.html#l00227">lp_types.h:227</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a5e016d204d43b2cc4a2773c25462968a"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a5e016d204d43b2cc4a2773c25462968a">operations_research::glop::LinearProgram::IsCleanedUp</a></div><div class="ttdeci">bool IsCleanedUp() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00352">lp_data.cc:352</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_ac62972ff1b21a037e56530cde67309abab1fa9dd3af034b3ef4291579aa673c07"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#ac62972ff1b21a037e56530cde67309abab1fa9dd3af034b3ef4291579aa673c07">operations_research::glop::LinearProgram::VariableType::CONTINUOUS</a></div><div class="ttdeci">@ CONTINUOUS</div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_af69d9b7065a8f31604a8134be4307749"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#af69d9b7065a8f31604a8134be4307749">operations_research::glop::LinearProgram::num_entries</a></div><div class="ttdeci">EntryIndex num_entries() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8h_source.html#l00211">lp_data.h:211</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a609bcb18cec39c7c43dd7a6d3a51ba81"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a609bcb18cec39c7c43dd7a6d3a51ba81">operations_research::glop::LinearProgram::IntegerVariablesList</a></div><div class="ttdeci">const std::vector&lt; ColIndex &gt; &amp; IntegerVariablesList() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00278">lp_data.cc:278</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a2980fe48a1c9d1d0a792bc343314b9ba"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a2980fe48a1c9d1d0a792bc343314b9ba">operations_research::glop::LinearProgram::IsInEquationForm</a></div><div class="ttdeci">bool IsInEquationForm() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l01403">lp_data.cc:1403</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html">operations_research::glop::LinearProgram</a></div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8h_source.html#l00055">lp_data.h:55</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a25349b5748c4f5f7eaa52d6986d14265"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a25349b5748c4f5f7eaa52d6986d14265">operations_research::glop::LinearProgram::BoundsOfIntegerConstraintsAreInteger</a></div><div class="ttdeci">bool BoundsOfIntegerConstraintsAreInteger(Fractional tolerance) const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l01432">lp_data.cc:1432</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a2c97213019318c99fd9d01658803d12f"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a2c97213019318c99fd9d01658803d12f">operations_research::glop::LinearProgram::SolutionIsMIPFeasible</a></div><div class="ttdeci">bool SolutionIsMIPFeasible(const DenseRow &amp;solution, Fractional absolute_tolerance) const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00498">lp_data.cc:498</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_ae8a25f4344e17329c596cd1c387f70b2"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#ae8a25f4344e17329c596cd1c387f70b2">operations_research::glop::LinearProgram::AddConstraintsWithSlackVariables</a></div><div class="ttdeci">void AddConstraintsWithSlackVariables(const SparseMatrix &amp;coefficients, const DenseColumn &amp;left_hand_sides, const DenseColumn &amp;right_hand_sides, const StrictITIVector&lt; RowIndex, std::string &gt; &amp;names, bool detect_integer_constraints_for_slack)</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00966">lp_data.cc:966</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_accdd045ec09206640c2338524da77d23"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#accdd045ec09206640c2338524da77d23">operations_research::glop::LinearProgram::IsMaximizationProblem</a></div><div class="ttdeci">bool IsMaximizationProblem() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8h_source.html#l00171">lp_data.h:171</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a23e637a2ad0316932c194e38f8e5f5f6"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a23e637a2ad0316932c194e38f8e5f5f6">operations_research::glop::LinearProgram::SolutionIsWithinVariableBounds</a></div><div class="ttdeci">bool SolutionIsWithinVariableBounds(const DenseRow &amp;solution, Fractional absolute_tolerance) const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00450">lp_data.cc:450</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a62b98dec38b6506442f9fc63f1a9b88f"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a62b98dec38b6506442f9fc63f1a9b88f">operations_research::glop::LinearProgram::SetConstraintBounds</a></div><div class="ttdeci">void SetConstraintBounds(RowIndex row, Fractional lower_bound, Fractional upper_bound)</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00307">lp_data.cc:307</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a009204d0a4a7bb8252d86dd53733cacc"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a009204d0a4a7bb8252d86dd53733cacc">operations_research::glop::LinearProgram::GetObjectiveStatsString</a></div><div class="ttdeci">std::string GetObjectiveStatsString() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00431">lp_data.cc:431</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_acd8437353d8dc686a75c98b5897dd871"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#acd8437353d8dc686a75c98b5897dd871">operations_research::glop::LinearProgram::num_variables</a></div><div class="ttdeci">ColIndex num_variables() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8h_source.html#l00205">lp_data.h:205</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a354fba4c3eaf6cf38ee4f9e78a59f4c1"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a354fba4c3eaf6cf38ee4f9e78a59f4c1">operations_research::glop::LinearProgram::ScaleBounds</a></div><div class="ttdeci">Fractional ScaleBounds()</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l01155">lp_data.cc:1155</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_ac1e28fcd73435981deb42946a3e38046"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#ac1e28fcd73435981deb42946a3e38046">operations_research::glop::LinearProgram::ApplyObjectiveScalingAndOffset</a></div><div class="ttdeci">Fractional ApplyObjectiveScalingAndOffset(Fractional value) const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00519">lp_data.cc:519</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_ae3201a343d8df987411b55830bff7fa3"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#ae3201a343d8df987411b55830bff7fa3">operations_research::glop::LinearProgram::SetMaximizationProblem</a></div><div class="ttdeci">void SetMaximizationProblem(bool maximize)</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00341">lp_data.cc:341</a></div></div>
<div class="ttc" id="anamespaceoperations__research_1_1glop_html_a733947145e3e1631165b618b05c9ccb7"><div class="ttname"><a href="namespaceoperations__research_1_1glop.html#a733947145e3e1631165b618b05c9ccb7">operations_research::glop::Fractional</a></div><div class="ttdeci">double Fractional</div><div class="ttdef"><b>Definition:</b> <a href="lp__types_8h_source.html#l00077">lp_types.h:77</a></div></div>
<div class="ttc" id="anamespaceoperations__research_1_1glop_html_a2122f0c519a9e417e92c63273565d6b5"><div class="ttname"><a href="namespaceoperations__research_1_1glop.html#a2122f0c519a9e417e92c63273565d6b5">operations_research::glop::AreBoundsValid</a></div><div class="ttdeci">bool AreBoundsValid(Fractional lower_bound, Fractional upper_bound)</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8h_source.html#l00683">lp_data.h:683</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a2b3db5dc0b5e97f2790bbe1d633abc61"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a2b3db5dc0b5e97f2790bbe1d633abc61">operations_research::glop::LinearProgram::PopulateFromLinearProgram</a></div><div class="ttdeci">void PopulateFromLinearProgram(const LinearProgram &amp;linear_program)</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00831">lp_data.cc:831</a></div></div>
<div class="ttc" id="anamespaceoperations__research_1_1glop_html_af9a790b7e8c5b0c6d55b336177378e78"><div class="ttname"><a href="namespaceoperations__research_1_1glop.html#af9a790b7e8c5b0c6d55b336177378e78">operations_research::glop::kInfinity</a></div><div class="ttdeci">const double kInfinity</div><div class="ttdef"><b>Definition:</b> <a href="lp__types_8h_source.html#l00083">lp_types.h:83</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_adcc58612f6a1dc35ff3ffdb34188f299"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#adcc58612f6a1dc35ff3ffdb34188f299">operations_research::glop::LinearProgram::GetDimensionString</a></div><div class="ttdeci">std::string GetDimensionString() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00423">lp_data.cc:423</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_ac59fd9cddfe284bf9dc7581ed631ce8d"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#ac59fd9cddfe284bf9dc7581ed631ce8d">operations_research::glop::LinearProgram::DeleteColumns</a></div><div class="ttdeci">void DeleteColumns(const DenseBooleanRow &amp;columns_to_delete)</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l01034">lp_data.cc:1034</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a2d695f450ae446d5d9c225b991f8d88e"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a2d695f450ae446d5d9c225b991f8d88e">operations_research::glop::LinearProgram::SetCoefficient</a></div><div class="ttdeci">void SetCoefficient(RowIndex row, ColIndex col, Fractional value)</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00315">lp_data.cc:315</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_aec4f9f0e8674e2b692176f599086d721"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#aec4f9f0e8674e2b692176f599086d721">operations_research::glop::LinearProgram::variable_types</a></div><div class="ttdeci">const StrictITIVector&lt; ColIndex, VariableType &gt; variable_types() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8h_source.html#l00237">lp_data.h:237</a></div></div>
<div class="ttc" id="astructoperations__research_1_1glop_1_1ProblemSolution_html_af8a495c9872268c3e34d413d8b63ef66"><div class="ttname"><a href="structoperations__research_1_1glop_1_1ProblemSolution.html#af8a495c9872268c3e34d413d8b63ef66">operations_research::glop::ProblemSolution::primal_values</a></div><div class="ttdeci">DenseRow primal_values</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8h_source.html#l00659">lp_data.h:659</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1SparseMatrix_html_a41741829541d089f1c4d34f190884813"><div class="ttname"><a href="classoperations__research_1_1glop_1_1SparseMatrix.html#a41741829541d089f1c4d34f190884813">operations_research::glop::SparseMatrix::num_cols</a></div><div class="ttdeci">ColIndex num_cols() const</div><div class="ttdef"><b>Definition:</b> <a href="sparse_8h_source.html#l00177">sparse.h:177</a></div></div>
<div class="ttc" id="aint__type_8h_html"><div class="ttname"><a href="int__type_8h.html">int_type.h</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1SparseMatrix_html_af69d9b7065a8f31604a8134be4307749"><div class="ttname"><a href="classoperations__research_1_1glop_1_1SparseMatrix.html#af69d9b7065a8f31604a8134be4307749">operations_research::glop::SparseMatrix::num_entries</a></div><div class="ttdeci">EntryIndex num_entries() const</div><div class="ttdef"><b>Definition:</b> <a href="sparse_8cc_source.html#l00389">sparse.cc:389</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a814307860c1248b645ea68a8a11a0082"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a814307860c1248b645ea68a8a11a0082">operations_research::glop::LinearProgram::NonBinaryVariablesList</a></div><div class="ttdeci">const std::vector&lt; ColIndex &gt; &amp; NonBinaryVariablesList() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00288">lp_data.cc:288</a></div></div>
<div class="ttc" id="afp__utils_8h_html"><div class="ttname"><a href="fp__utils_8h.html">fp_utils.h</a></div></div>
<div class="ttc" id="astructoperations__research_1_1glop_1_1ProblemSolution_html_a764be64f3029f8b8e23511061d8de355"><div class="ttname"><a href="structoperations__research_1_1glop_1_1ProblemSolution.html#a764be64f3029f8b8e23511061d8de355">operations_research::glop::ProblemSolution::DebugString</a></div><div class="ttdeci">std::string DebugString() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l01470">lp_data.cc:1470</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_ad7ecca71dd3aaf60246e7638ac3df455"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#ad7ecca71dd3aaf60246e7638ac3df455">operations_research::glop::LinearProgram::DeleteSlackVariables</a></div><div class="ttdeci">void DeleteSlackVariables()</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l01083">lp_data.cc:1083</a></div></div>
<div class="ttc" id="aint__type__indexed__vector_8h_html"><div class="ttname"><a href="int__type__indexed__vector_8h.html">int_type_indexed_vector.h</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a40b46f23f42f169a527de50e016c2096"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a40b46f23f42f169a527de50e016c2096">operations_research::glop::LinearProgram::ClearTransposeMatrix</a></div><div class="ttdeci">void ClearTransposeMatrix()</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00402">lp_data.cc:402</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a0fe7ba825c8c6cd1efdcff6dec631093"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a0fe7ba825c8c6cd1efdcff6dec631093">operations_research::glop::LinearProgram::SetVariableBounds</a></div><div class="ttdeci">void SetVariableBounds(ColIndex col, Fractional lower_bound, Fractional upper_bound)</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00247">lp_data.cc:247</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_ab4a8456683d4572bd9426efab8489e99"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#ab4a8456683d4572bd9426efab8489e99">operations_research::glop::LinearProgram::Dump</a></div><div class="ttdeci">std::string Dump() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00529">lp_data.cc:529</a></div></div>
<div class="ttc" id="astructoperations__research_1_1glop_1_1ProblemSolution_html_ac6b277da46124f6b08841906b0febbed"><div class="ttname"><a href="structoperations__research_1_1glop_1_1ProblemSolution.html#ac6b277da46124f6b08841906b0febbed">operations_research::glop::ProblemSolution::dual_values</a></div><div class="ttdeci">DenseColumn dual_values</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8h_source.html#l00660">lp_data.h:660</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_aa23a76f0f582369176688b458cda07dc"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#aa23a76f0f582369176688b458cda07dc">operations_research::glop::LinearProgram::AddSlackVariablesWhereNecessary</a></div><div class="ttdeci">void AddSlackVariablesWhereNecessary(bool detect_integer_constraints)</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00666">lp_data.cc:666</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a3009656fbbef7a076bcaec0cca172572"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a3009656fbbef7a076bcaec0cca172572">operations_research::glop::LinearProgram::GetNonZeroStats</a></div><div class="ttdeci">std::string GetNonZeroStats() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00655">lp_data.cc:655</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a88cc1c4519b043336ce23cdcec5fb0c2"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a88cc1c4519b043336ce23cdcec5fb0c2">operations_research::glop::LinearProgram::GetMutableSparseColumn</a></div><div class="ttdeci">SparseColumn * GetMutableSparseColumn(ColIndex col)</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00411">lp_data.cc:411</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a5b58cfd45475bfab5ce1fe5c81b6da60"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a5b58cfd45475bfab5ce1fe5c81b6da60">operations_research::glop::LinearProgram::BinaryVariablesList</a></div><div class="ttdeci">const std::vector&lt; ColIndex &gt; &amp; BinaryVariablesList() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00283">lp_data.cc:283</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_ab8efe00bb016665606d522a42543cd96"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#ab8efe00bb016665606d522a42543cd96">operations_research::glop::LinearProgram::IsVariableBinary</a></div><div class="ttdeci">bool IsVariableBinary(ColIndex col) const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00298">lp_data.cc:298</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a81334c7ceae9d68a38fe4d4bf0b7794c"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a81334c7ceae9d68a38fe4d4bf0b7794c">operations_research::glop::LinearProgram::objective_offset</a></div><div class="ttdeci">Fractional objective_offset() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8h_source.html#l00260">lp_data.h:260</a></div></div>
<div class="ttc" id="astructoperations__research_1_1glop_1_1ProblemSolution_html_a887a20330f1f58adbe564ef0fcf74e8c"><div class="ttname"><a href="structoperations__research_1_1glop_1_1ProblemSolution.html#a887a20330f1f58adbe564ef0fcf74e8c">operations_research::glop::ProblemSolution::variable_statuses</a></div><div class="ttdeci">VariableStatusRow variable_statuses</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8h_source.html#l00675">lp_data.h:675</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a2175025047722705a3af86e54229f9cd"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a2175025047722705a3af86e54229f9cd">operations_research::glop::LinearProgram::GetTransposeSparseMatrix</a></div><div class="ttdeci">const SparseMatrix &amp; GetTransposeSparseMatrix() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00374">lp_data.cc:374</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a33b78d7012477c55f395aaf92ca6e9f4"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a33b78d7012477c55f395aaf92ca6e9f4">operations_research::glop::LinearProgram::GetSparseMatrix</a></div><div class="ttdeci">const SparseMatrix &amp; GetSparseMatrix() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8h_source.html#l00175">lp_data.h:175</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_ac62972ff1b21a037e56530cde67309abab79968c5beff3baa0791198293518e14"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#ac62972ff1b21a037e56530cde67309abab79968c5beff3baa0791198293518e14">operations_research::glop::LinearProgram::VariableType::IMPLIED_INTEGER</a></div><div class="ttdeci">@ IMPLIED_INTEGER</div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1SparseMatrix_html_a5e016d204d43b2cc4a2773c25462968a"><div class="ttname"><a href="classoperations__research_1_1glop_1_1SparseMatrix.html#a5e016d204d43b2cc4a2773c25462968a">operations_research::glop::SparseMatrix::IsCleanedUp</a></div><div class="ttdeci">bool IsCleanedUp() const</div><div class="ttdef"><b>Definition:</b> <a href="sparse_8cc_source.html#l00135">sparse.cc:135</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_afda9b9b5e858d0c466d2a6293361004a"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#afda9b9b5e858d0c466d2a6293361004a">operations_research::glop::LinearProgram::num_constraints</a></div><div class="ttdeci">RowIndex num_constraints() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8h_source.html#l00208">lp_data.h:208</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a476f0627b588f945d6b14b9f08457ba9"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a476f0627b588f945d6b14b9f08457ba9">operations_research::glop::LinearProgram::DumpSolution</a></div><div class="ttdeci">std::string DumpSolution(const DenseRow &amp;variable_values) const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00616">lp_data.cc:616</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a7054c01679c4d1b7ce846b95937582d6"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a7054c01679c4d1b7ce846b95937582d6">operations_research::glop::LinearProgram::Swap</a></div><div class="ttdeci">void Swap(LinearProgram *linear_program)</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l01000">lp_data.cc:1000</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_adf55bb4fcaab95674f072cb528d426a0"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#adf55bb4fcaab95674f072cb528d426a0">operations_research::glop::LinearProgram::objective_scaling_factor</a></div><div class="ttdeci">Fractional objective_scaling_factor() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8h_source.html#l00261">lp_data.h:261</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a5c8255f82269d42db81cc944eff0180f"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a5c8255f82269d42db81cc944eff0180f">operations_research::glop::LinearProgram::objective_coefficients</a></div><div class="ttdeci">const DenseRow &amp; objective_coefficients() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8h_source.html#l00223">lp_data.h:223</a></div></div>
<div class="ttc" id="amarkowitz_8cc_html_aa9d6c98fdf8d89b0e2321fda02adc82c"><div class="ttname"><a href="markowitz_8cc.html#aa9d6c98fdf8d89b0e2321fda02adc82c">col</a></div><div class="ttdeci">ColIndex col</div><div class="ttdef"><b>Definition:</b> <a href="markowitz_8cc_source.html#l00176">markowitz.cc:176</a></div></div>
<div class="ttc" id="anamespaceoperations__research_1_1glop_html_ae8a885303349cb7807c7c87b405bc0c9"><div class="ttname"><a href="namespaceoperations__research_1_1glop.html#ae8a885303349cb7807c7c87b405bc0c9">operations_research::glop::ProblemStatus</a></div><div class="ttdeci">ProblemStatus</div><div class="ttdef"><b>Definition:</b> <a href="lp__types_8h_source.html#l00101">lp_types.h:101</a></div></div>
<div class="ttc" id="amarkowitz_8cc_html_aea35f36ba98d5bbd8d033382f50c9e52"><div class="ttname"><a href="markowitz_8cc.html#aea35f36ba98d5bbd8d033382f50c9e52">row</a></div><div class="ttdeci">RowIndex row</div><div class="ttdef"><b>Definition:</b> <a href="markowitz_8cc_source.html#l00175">markowitz.cc:175</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_ac62972ff1b21a037e56530cde67309aba5d5cd46919fa987731fb2edefe0f2a0c"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#ac62972ff1b21a037e56530cde67309aba5d5cd46919fa987731fb2edefe0f2a0c">operations_research::glop::LinearProgram::VariableType::INTEGER</a></div><div class="ttdeci">@ INTEGER</div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1Permutation_html"><div class="ttname"><a href="classoperations__research_1_1glop_1_1Permutation.html">operations_research::glop::Permutation&lt; RowIndex &gt;</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_ad38b71923c7904791897a23722c157cb"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#ad38b71923c7904791897a23722c157cb">operations_research::glop::LinearProgram::PopulateFromDual</a></div><div class="ttdeci">void PopulateFromDual(const LinearProgram &amp;dual, RowToColMapping *duplicated_rows)</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00733">lp_data.cc:733</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_aab451f1144133e621abdcd566c048a8d"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#aab451f1144133e621abdcd566c048a8d">operations_research::glop::LinearProgram::NotifyThatColumnsAreClean</a></div><div class="ttdeci">void NotifyThatColumnsAreClean()</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8h_source.html#l00539">lp_data.h:539</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a9ac8fe8120fdded43c5fa888bd696d3e"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a9ac8fe8120fdded43c5fa888bd696d3e">operations_research::glop::LinearProgram::UseTransposeMatrixAsReference</a></div><div class="ttdeci">void UseTransposeMatrixAsReference()</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00395">lp_data.cc:395</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_abcea67382d5e095491b022a7aa4291a7"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#abcea67382d5e095491b022a7aa4291a7">operations_research::glop::LinearProgram::LinearProgram</a></div><div class="ttdeci">LinearProgram()</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00109">lp_data.cc:109</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a940d484bb6523277e1d2c742f4f534a4"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a940d484bb6523277e1d2c742f4f534a4">operations_research::glop::LinearProgram::SetName</a></div><div class="ttdeci">void SetName(const std::string &amp;name)</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8h_source.html#l00074">lp_data.h:74</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a2ba6d84c5ab7af533569ed5d7f2e2846"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a2ba6d84c5ab7af533569ed5d7f2e2846">operations_research::glop::LinearProgram::Scale</a></div><div class="ttdeci">void Scale(SparseMatrixScaler *scaler)</div></div>
<div class="ttc" id="ahash_8h_html"><div class="ttname"><a href="hash_8h.html">hash.h</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1SparseMatrixScaler_html"><div class="ttname"><a href="classoperations__research_1_1glop_1_1SparseMatrixScaler.html">operations_research::glop::SparseMatrixScaler</a></div><div class="ttdef"><b>Definition:</b> <a href="matrix__scaler_8h_source.html#l00079">matrix_scaler.h:79</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a6b50792950c42b62e8bf4ed596aebb27"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a6b50792950c42b62e8bf4ed596aebb27">operations_research::glop::LinearProgram::FindOrCreateConstraint</a></div><div class="ttdeci">RowIndex FindOrCreateConstraint(const std::string &amp;constraint_id)</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00216">lp_data.cc:216</a></div></div>
<div class="ttc" id="anamespaceoperations__research_1_1glop_html_acfc1d5d5139f63d8c733d4562124866a"><div class="ttname"><a href="namespaceoperations__research_1_1glop.html#acfc1d5d5139f63d8c733d4562124866a">operations_research::glop::VariableType</a></div><div class="ttdeci">VariableType</div><div class="ttdef"><b>Definition:</b> <a href="lp__types_8h_source.html#l00174">lp_types.h:174</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_ac220cc5563c65b821d9d043010bb2121"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#ac220cc5563c65b821d9d043010bb2121">operations_research::glop::LinearProgram::DeleteRows</a></div><div class="ttdeci">void DeleteRows(const DenseBooleanColumn &amp;rows_to_delete)</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l01190">lp_data.cc:1190</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a4e1fb82cbbf024213eae338216bf601e"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a4e1fb82cbbf024213eae338216bf601e">operations_research::glop::LinearProgram::FindOrCreateVariable</a></div><div class="ttdeci">ColIndex FindOrCreateVariable(const std::string &amp;variable_id)</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00203">lp_data.cc:203</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a887289f2d9928ca7a603fee5b77df258"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a887289f2d9928ca7a603fee5b77df258">operations_research::glop::LinearProgram::SolutionIsInteger</a></div><div class="ttdeci">bool SolutionIsInteger(const DenseRow &amp;solution, Fractional absolute_tolerance) const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00486">lp_data.cc:486</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_ab4f3103f39bdbb86151baed2347f7b0a"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#ab4f3103f39bdbb86151baed2347f7b0a">operations_research::glop::LinearProgram::IsVariableInteger</a></div><div class="ttdeci">bool IsVariableInteger(ColIndex col) const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00293">lp_data.cc:293</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a2a29cc40908e09b0c565ceea15b77d89"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a2a29cc40908e09b0c565ceea15b77d89">operations_research::glop::LinearProgram::SetObjectiveOffset</a></div><div class="ttdeci">void SetObjectiveOffset(Fractional objective_offset)</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00329">lp_data.cc:329</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a6b0e95d320fd02517fdd0adaadca3d71"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a6b0e95d320fd02517fdd0adaadca3d71">operations_research::glop::LinearProgram::GetVariableType</a></div><div class="ttdeci">VariableType GetVariableType(ColIndex col) const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00370">lp_data.cc:370</a></div></div>
<div class="ttc" id="anamespaceoperations__research_1_1glop_html_a1ac488f3db89f6d16a85c56f3243290c"><div class="ttname"><a href="namespaceoperations__research_1_1glop.html#a1ac488f3db89f6d16a85c56f3243290c">operations_research::glop::VariableStatus</a></div><div class="ttdeci">VariableStatus</div><div class="ttdef"><b>Definition:</b> <a href="lp__types_8h_source.html#l00196">lp_types.h:196</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1SparseColumn_html"><div class="ttname"><a href="classoperations__research_1_1glop_1_1SparseColumn.html">operations_research::glop::SparseColumn</a></div><div class="ttdef"><b>Definition:</b> <a href="sparse__column_8h_source.html#l00044">sparse_column.h:44</a></div></div>
<div class="ttc" id="anamespaceoperations__research_1_1glop_html_a1ac488f3db89f6d16a85c56f3243290ca88c189a42c87aa49d667fc8ab76bc323"><div class="ttname"><a href="namespaceoperations__research_1_1glop.html#a1ac488f3db89f6d16a85c56f3243290ca88c189a42c87aa49d667fc8ab76bc323">operations_research::glop::VariableStatus::FREE</a></div><div class="ttdeci">@ FREE</div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a057224e0b8a244b6204e382bbb6337ee"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a057224e0b8a244b6204e382bbb6337ee">operations_research::glop::LinearProgram::PopulateFromPermutedLinearProgram</a></div><div class="ttdeci">void PopulateFromPermutedLinearProgram(const LinearProgram &amp;lp, const RowPermutation &amp;row_permutation, const ColumnPermutation &amp;col_permutation)</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00852">lp_data.cc:852</a></div></div>
<div class="ttc" id="astructoperations__research_1_1glop_1_1ProblemSolution_html_a15eb0790f4f62ad63676f55e4ba7d2bb"><div class="ttname"><a href="structoperations__research_1_1glop_1_1ProblemSolution.html#a15eb0790f4f62ad63676f55e4ba7d2bb">operations_research::glop::ProblemSolution::status</a></div><div class="ttdeci">ProblemStatus status</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8h_source.html#l00655">lp_data.h:655</a></div></div>
<div class="ttc" id="alp__types_8h_html"><div class="ttname"><a href="lp__types_8h.html">lp_types.h</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_aa8fbdc130ccf992a392b066fe625443e"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#aa8fbdc130ccf992a392b066fe625443e">operations_research::glop::LinearProgram::SolutionIsLPFeasible</a></div><div class="ttdeci">bool SolutionIsLPFeasible(const DenseRow &amp;solution, Fractional absolute_tolerance) const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00466">lp_data.cc:466</a></div></div>
<div class="ttc" id="astructoperations__research_1_1glop_1_1ProblemSolution_html_ae7a0a13dedf8ae7920036bfff1ad9c3b"><div class="ttname"><a href="structoperations__research_1_1glop_1_1ProblemSolution.html#ae7a0a13dedf8ae7920036bfff1ad9c3b">operations_research::glop::ProblemSolution::constraint_statuses</a></div><div class="ttdeci">ConstraintStatusColumn constraint_statuses</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8h_source.html#l00676">lp_data.h:676</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a339d5516d8c29986233765e910257b4d"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a339d5516d8c29986233765e910257b4d">operations_research::glop::LinearProgram::GetFirstSlackVariable</a></div><div class="ttdeci">ColIndex GetFirstSlackVariable() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00720">lp_data.cc:720</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a7866c9704e24cad179e98c7188587cdf"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a7866c9704e24cad179e98c7188587cdf">operations_research::glop::LinearProgram::GetPrettyNonZeroStats</a></div><div class="ttdeci">std::string GetPrettyNonZeroStats() const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00659">lp_data.cc:659</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a695ac3d8db5a986f572711f2ef3a6a39"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a695ac3d8db5a986f572711f2ef3a6a39">operations_research::glop::LinearProgram::CreateNewVariable</a></div><div class="ttdeci">ColIndex CreateNewVariable()</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00160">lp_data.cc:160</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_aeeee0971281f2781c379fce7a64a5049"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#aeeee0971281f2781c379fce7a64a5049">operations_research::glop::LinearProgram::GetSparseColumn</a></div><div class="ttdeci">const SparseColumn &amp; GetSparseColumn(ColIndex col) const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00407">lp_data.cc:407</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a8d7d21abe90edddc22416e5db1db563f"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a8d7d21abe90edddc22416e5db1db563f">operations_research::glop::LinearProgram::GetConstraintName</a></div><div class="ttdeci">std::string GetConstraintName(RowIndex row) const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00364">lp_data.cc:364</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a7ddcdc56f25d075e18d62ddbcd3389b2"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a7ddcdc56f25d075e18d62ddbcd3389b2">operations_research::glop::LinearProgram::SetVariableType</a></div><div class="ttdeci">void SetVariableType(ColIndex col, VariableType type)</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00234">lp_data.cc:234</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a01a5a464aad9b500e5f07b0457520762"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a01a5a464aad9b500e5f07b0457520762">operations_research::glop::LinearProgram::SetObjectiveScalingFactor</a></div><div class="ttdeci">void SetObjectiveScalingFactor(Fractional objective_scaling_factor)</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00334">lp_data.cc:334</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a6137c2df856cf2634f9bb259d2aace2b"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a6137c2df856cf2634f9bb259d2aace2b">operations_research::glop::LinearProgram::GetObjectiveCoefficientForMinimizationVersion</a></div><div class="ttdeci">Fractional GetObjectiveCoefficientForMinimizationVersion(ColIndex col) const</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00417">lp_data.cc:417</a></div></div>
<div class="ttc" id="asparse_8h_html"><div class="ttname"><a href="sparse_8h.html">sparse.h</a></div></div>
<div class="ttc" id="aparameters_8pb_8h_html"><div class="ttname"><a href="parameters_8pb_8h.html">parameters.pb.h</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_ac5df4526af1b9ac31a38e84111d4f13a"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#ac5df4526af1b9ac31a38e84111d4f13a">operations_research::glop::LinearProgram::ScaleObjective</a></div><div class="ttdeci">Fractional ScaleObjective()</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l01134">lp_data.cc:1134</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_a742dbe4804ed01bc7a27724f6b672466"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#a742dbe4804ed01bc7a27724f6b672466">operations_research::glop::LinearProgram::AddConstraints</a></div><div class="ttdeci">void AddConstraints(const SparseMatrix &amp;coefficients, const DenseColumn &amp;left_hand_sides, const DenseColumn &amp;right_hand_sides, const StrictITIVector&lt; RowIndex, std::string &gt; &amp;names)</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00941">lp_data.cc:941</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1glop_1_1LinearProgram_html_aa71d36872f416feaa853788a7a7a7ef8"><div class="ttname"><a href="classoperations__research_1_1glop_1_1LinearProgram.html#aa71d36872f416feaa853788a7a7a7ef8">operations_research::glop::LinearProgram::Clear</a></div><div class="ttdeci">void Clear()</div><div class="ttdef"><b>Definition:</b> <a href="lp__data_8cc_source.html#l00132">lp_data.cc:132</a></div></div>
<!-- HTML footer for doxygen 1.8.18-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_a7cc1eeded8f693d0da6c729bc88c45a.html">ortools</a></li><li class="navelem"><a class="el" href="dir_903a7ff076ee7f01be86992fe717fc82.html">lp_data</a></li><li class="navelem"><a class="el" href="lp__data_8h.html">lp_data.h</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.18 </li>
</ul>
</div>
</body>
</html>