<ahref="variables__info_8h.html">Go to the documentation of this file.</a><divclass="fragment"><divclass="line"><aid="l00001"name="l00001"></a><spanclass="lineno"> 1</span><spanclass="comment">// Copyright 2010-2021 Google LLC</span></div>
<divclass="line"><aid="l00002"name="l00002"></a><spanclass="lineno"> 2</span><spanclass="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></div>
<divclass="line"><aid="l00003"name="l00003"></a><spanclass="lineno"> 3</span><spanclass="comment">// you may not use this file except in compliance with the License.</span></div>
<divclass="line"><aid="l00004"name="l00004"></a><spanclass="lineno"> 4</span><spanclass="comment">// You may obtain a copy of the License at</span></div>
<divclass="line"><aid="l00008"name="l00008"></a><spanclass="lineno"> 8</span><spanclass="comment">// Unless required by applicable law or agreed to in writing, software</span></div>
<divclass="line"><aid="l00009"name="l00009"></a><spanclass="lineno"> 9</span><spanclass="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></div>
<divclass="line"><aid="l00010"name="l00010"></a><spanclass="lineno"> 10</span><spanclass="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div>
<divclass="line"><aid="l00011"name="l00011"></a><spanclass="lineno"> 11</span><spanclass="comment">// See the License for the specific language governing permissions and</span></div>
<divclass="line"><aid="l00012"name="l00012"></a><spanclass="lineno"> 12</span><spanclass="comment">// limitations under the License.</span></div>
<divclass="line"><aid="l00023"name="l00023"></a><spanclass="lineno"> 23</span><spanclass="comment">// Holds the statuses of all the variables, including slack variables. There</span></div>
<divclass="line"><aid="l00024"name="l00024"></a><spanclass="lineno"> 24</span><spanclass="comment">// is no point storing constraint statuses since internally all constraints are</span></div>
<divclass="line"><aid="l00025"name="l00025"></a><spanclass="lineno"> 25</span><spanclass="comment">// always fixed to zero.</span></div>
<divclass="line"><aid="l00027"name="l00027"></a><spanclass="lineno"> 27</span><spanclass="comment">// Note that this is the minimal amount of information needed to perform a "warm</span></div>
<divclass="line"><aid="l00028"name="l00028"></a><spanclass="lineno"> 28</span><spanclass="comment">// start". Using this information and the original linear program, the basis can</span></div>
<divclass="line"><aid="l00029"name="l00029"></a><spanclass="lineno"> 29</span><spanclass="comment">// be refactorized and all the needed quantities derived.</span></div>
<divclass="line"><aid="l00031"name="l00031"></a><spanclass="lineno"> 31</span><spanclass="comment">// TODO(user): Introduce another state class to store a complete state of the</span></div>
<divclass="line"><aid="l00032"name="l00032"></a><spanclass="lineno"> 32</span><spanclass="comment">// solver. Using this state and the original linear program, the solver can be</span></div>
<divclass="line"><aid="l00033"name="l00033"></a><spanclass="lineno"> 33</span><spanclass="comment">// restarted with as little time overhead as possible. This is especially useful</span></div>
<divclass="line"><aid="l00034"name="l00034"></a><spanclass="lineno"> 34</span><spanclass="comment">// for strong branching in a MIP context.</span></div>
<divclass="line"><aid="l00036"name="l00036"></a><spanclass="lineno"> 36</span><spanclass="comment">// TODO(user): A MIP solver will potentially store a lot of BasisStates so</span></div>
<divclass="line"><aid="l00037"name="l00037"></a><spanclass="lineno"> 37</span><spanclass="comment">// memory usage is important. It is possible to use only 2 bits for one</span></div>
<divclass="line"><aid="l00038"name="l00038"></a><spanclass="lineno"> 38</span><spanclass="comment">// VariableStatus enum. To achieve this, the FIXED_VALUE status can be</span></div>
<divclass="line"><aid="l00039"name="l00039"></a><spanclass="lineno"> 39</span><spanclass="comment">// converted to either AT_LOWER_BOUND or AT_UPPER_BOUND and decoded properly</span></div>
<divclass="line"><aid="l00040"name="l00040"></a><spanclass="lineno"> 40</span><spanclass="comment">// later since this will be used with a given linear program. This way we can</span></div>
<divclass="line"><aid="l00041"name="l00041"></a><spanclass="lineno"> 41</span><spanclass="comment">// even encode more information by using the reduced cost sign to choose to</span></div>
<divclass="line"><aid="l00042"name="l00042"></a><spanclass="lineno"> 42</span><spanclass="comment">// which bound the fixed status correspond.</span></div>
<divclass="line"><aid="l00045"name="l00045"></a><spanclass="lineno"> 45</span><spanclass="comment">// Returns true if this state is empty.</span></div>
<divclass="line"><aid="l00049"name="l00049"></a><spanclass="lineno"> 49</span><spanclass="comment">// Class responsible for maintaining diverse information for each variable that</span></div>
<divclass="line"><aid="l00050"name="l00050"></a><spanclass="lineno"> 50</span><spanclass="comment">// depend on its bounds and status.</span></div>
<divclass="line"><aid="l00052"name="l00052"></a><spanclass="lineno"> 52</span><spanclass="comment">// Note(user): Not all information is needed at all time, but it is cheap to</span></div>
<divclass="line"><aid="l00053"name="l00053"></a><spanclass="lineno"> 53</span><spanclass="comment">// maintain it since it only requires a few calls to Update() per simplex</span></div>
<divclass="line"><aid="l00057"name="l00057"></a><spanclass="lineno"> 57</span><spanclass="comment">// Takes references to the linear program data we need.</span></div>
<divclass="line"><aid="l00060"name="l00060"></a><spanclass="lineno"> 60</span><spanclass="comment">// Updates the internal bounds and recomputes the variable types from the</span></div>
<divclass="line"><aid="l00061"name="l00061"></a><spanclass="lineno"> 61</span><spanclass="comment">// bounds (this is the only function that changes them).</span></div>
<divclass="line"><aid="l00063"name="l00063"></a><spanclass="lineno"> 63</span><spanclass="comment">// Returns true iff the existing bounds didn't change. Except if the bounds</span></div>
<divclass="line"><aid="l00064"name="l00064"></a><spanclass="lineno"> 64</span><spanclass="comment">// AND underlying matrix didn't change, one will need to call one of the two</span></div>
<divclass="line"><aid="l00065"name="l00065"></a><spanclass="lineno"> 65</span><spanclass="comment">// Initialize*() methods below before using this class.</span></div>
<divclass="line"><aid="l00069"name="l00069"></a><spanclass="lineno"> 69</span><spanclass="comment">// Same for an LP not in equation form.</span></div>
<divclass="line"><aid="l00076"name="l00076"></a><spanclass="lineno"> 76</span><spanclass="comment">// Initializes the status according to the given BasisState. Incompatible</span></div>
<divclass="line"><aid="l00077"name="l00077"></a><spanclass="lineno"> 77</span><spanclass="comment">// statuses will be corrected, and we transform the state correctly if new</span></div>
<divclass="line"><aid="l00078"name="l00078"></a><spanclass="lineno"> 78</span><spanclass="comment">// columns / rows were added. Note however that one will need to update the</span></div>
<divclass="line"><aid="l00079"name="l00079"></a><spanclass="lineno"> 79</span><spanclass="comment">// BasisState with deletions to preserve the status of unchanged columns.</span></div>
<divclass="line"><aid="l00083"name="l00083"></a><spanclass="lineno"> 83</span><spanclass="comment">// Changes to the FREE status any column with a BASIC status not listed in</span></div>
<divclass="line"><aid="l00084"name="l00084"></a><spanclass="lineno"> 84</span><spanclass="comment">// the basis. Returns their number. Also makes sure all the columns listed in</span></div>
<divclass="line"><aid="l00085"name="l00085"></a><spanclass="lineno"> 85</span><spanclass="comment">// basis are marked as basic. Note that if a variable is fixed, we set its</span></div>
<divclass="line"><aid="l00086"name="l00086"></a><spanclass="lineno"> 86</span><spanclass="comment">// status to FIXED_VALUE not FREE.</span></div>
<divclass="line"><aid="l00089"name="l00089"></a><spanclass="lineno"> 89</span><spanclass="comment">// Loops over all the free variables, and if such a variable has bounds and</span></div>
<divclass="line"><aid="l00090"name="l00090"></a><spanclass="lineno"> 90</span><spanclass="comment">// its starting value is closer to its closest bound than the given distance,</span></div>
<divclass="line"><aid="l00091"name="l00091"></a><spanclass="lineno"> 91</span><spanclass="comment">// change the status to move this variable to that bound. Returns the number</span></div>
<divclass="line"><aid="l00092"name="l00092"></a><spanclass="lineno"> 92</span><spanclass="comment">// of changes. The variable for which starting_values is not provided are</span></div>
<divclass="line"><aid="l00093"name="l00093"></a><spanclass="lineno"> 93</span><spanclass="comment">// considered at zero.</span></div>
<divclass="line"><aid="l00095"name="l00095"></a><spanclass="lineno"> 95</span><spanclass="comment">// This is mainly useful if non-zero starting values are provided. It allows</span></div>
<divclass="line"><aid="l00096"name="l00096"></a><spanclass="lineno"> 96</span><spanclass="comment">// to move all the variables close to their bounds at once instead of having</span></div>
<divclass="line"><aid="l00097"name="l00097"></a><spanclass="lineno"> 97</span><spanclass="comment">// to move them one by one with simplex pivots later. Of course, by doing that</span></div>
<divclass="line"><aid="l00098"name="l00098"></a><spanclass="lineno"> 98</span><spanclass="comment">// we usually introduce a small primal infeasibility that might need</span></div>
<divclass="line"><aid="l00101"name="l00101"></a><spanclass="lineno"> 101</span><spanclass="comment">// If one uses a large distance, then all such variables will start at their</span></div>
<divclass="line"><aid="l00102"name="l00102"></a><spanclass="lineno"> 102</span><spanclass="comment">// bound if they have one.</span></div>
<divclass="line"><aid="l00106"name="l00106"></a><spanclass="lineno"> 106</span><spanclass="comment">// Sets all variables status to their lowest magnitude bounds. Note that there</span></div>
<divclass="line"><aid="l00107"name="l00107"></a><spanclass="lineno"> 107</span><spanclass="comment">// will be no basic variable after this is called.</span></div>
<divclass="line"><aid="l00110"name="l00110"></a><spanclass="lineno"> 110</span><spanclass="comment">// Updates the information of the given variable. Note that it is not needed</span></div>
<divclass="line"><aid="l00111"name="l00111"></a><spanclass="lineno"> 111</span><spanclass="comment">// to call this if the status or the bound of a variable didn't change.</span></div>
<divclass="line"><aid="l00115"name="l00115"></a><spanclass="lineno"> 115</span><spanclass="comment">// Various getter, see the corresponding member declaration below for more</span></div>
<divclass="line"><aid="l00132"name="l00132"></a><spanclass="lineno"> 132</span><spanclass="comment">// Changes whether or not a non-basic boxed variable is 'relevant' and will be</span></div>
<divclass="line"><aid="l00133"name="l00133"></a><spanclass="lineno"> 133</span><spanclass="comment">// returned as such by GetIsRelevantBitRow().</span></div>
<divclass="line"><aid="l00136"name="l00136"></a><spanclass="lineno"> 136</span><spanclass="comment">// This is used in UpdateRow to decide whether to compute it using the</span></div>
<divclass="line"><aid="l00137"name="l00137"></a><spanclass="lineno"> 137</span><spanclass="comment">// row-wise or column-wise representation.</span></div>
<divclass="line"><aid="l00140"name="l00140"></a><spanclass="lineno"> 140</span><spanclass="comment">// Returns the distance between the upper and lower bound of the given column.</span></div>
<divclass="line"><aid="l00145"name="l00145"></a><spanclass="lineno"> 145</span><spanclass="comment">// This is used for the (SP) method of "Progress in the dual simplex method</span></div>
<divclass="line"><aid="l00146"name="l00146"></a><spanclass="lineno"> 146</span><spanclass="comment">// for large scale LP problems: practical dual phase I algorithms". Achim</span></div>
<divclass="line"><aid="l00147"name="l00147"></a><spanclass="lineno"> 147</span><spanclass="comment">// Koberstein & Uwe H. Suhl.</span></div>
<divclass="line"><aid="l00149"name="l00149"></a><spanclass="lineno"> 149</span><spanclass="comment">// This just set the bounds according to the variable types:</span></div>
<divclass="line"><aid="l00150"name="l00150"></a><spanclass="lineno"> 150</span><spanclass="comment">// - Boxed variables get fixed at [0,0].</span></div>
<divclass="line"><aid="l00151"name="l00151"></a><spanclass="lineno"> 151</span><spanclass="comment">// - Upper bounded variables get [-1, 0] bounds</span></div>
<divclass="line"><aid="l00152"name="l00152"></a><spanclass="lineno"> 152</span><spanclass="comment">// - Lower bounded variables get [0, 1] bounds</span></div>
<divclass="line"><aid="l00153"name="l00153"></a><spanclass="lineno"> 153</span><spanclass="comment">// - Free variables get [-1000, 1000] to heuristically move them to the basis.</span></div>
<divclass="line"><aid="l00154"name="l00154"></a><spanclass="lineno"> 154</span><spanclass="comment">// I.e. they cost in the dual infeasibility minimization problem is</span></div>
<divclass="line"><aid="l00155"name="l00155"></a><spanclass="lineno"> 155</span><spanclass="comment">// multiplied by 1000.</span></div>
<divclass="line"><aid="l00157"name="l00157"></a><spanclass="lineno"> 157</span><spanclass="comment">// It then update the status to get an initial dual feasible solution, and</span></div>
<divclass="line"><aid="l00158"name="l00158"></a><spanclass="lineno"> 158</span><spanclass="comment">// then one just have to apply the phase II algo on this problem to try to</span></div>
<divclass="line"><aid="l00159"name="l00159"></a><spanclass="lineno"> 159</span><spanclass="comment">// find a feasible solution to the original problem.</span></div>
<divclass="line"><aid="l00161"name="l00161"></a><spanclass="lineno"> 161</span><spanclass="comment">// Optimization: When a variable become basic, its non-zero bounds are</span></div>
<divclass="line"><aid="l00162"name="l00162"></a><spanclass="lineno"> 162</span><spanclass="comment">// relaxed. This is a bit hacky as it requires that the status is updated</span></div>
<divclass="line"><aid="l00163"name="l00163"></a><spanclass="lineno"> 163</span><spanclass="comment">// before the bounds are read (which is the case). It is however an important</span></div>
<divclass="line"><aid="l00166"name="l00166"></a><spanclass="lineno"> 166</span><spanclass="comment">// TODO(user): Shall we re-add the bound when the variable is moved out of</span></div>
<divclass="line"><aid="l00167"name="l00167"></a><spanclass="lineno"> 167</span><spanclass="comment">// the base? it is not needed, but might allow for more bound flips?</span></div>
<divclass="line"><aid="l00174"name="l00174"></a><spanclass="lineno"> 174</span><spanclass="comment">// Computes the initial/default variable status from its type. A constrained</span></div>
<divclass="line"><aid="l00175"name="l00175"></a><spanclass="lineno"> 175</span><spanclass="comment">// variable is set to the lowest of its 2 bounds in absolute value.</span></div>
<divclass="line"><aid="l00178"name="l00178"></a><spanclass="lineno"> 178</span><spanclass="comment">// Resizes all status related vectors.</span></div>
<divclass="line"><aid="l00181"name="l00181"></a><spanclass="lineno"> 181</span><spanclass="comment">// Computes the variable type from its lower and upper bound.</span></div>
<divclass="line"><aid="l00184"name="l00184"></a><spanclass="lineno"> 184</span><spanclass="comment">// Sets the column relevance and updates num_entries_in_relevant_columns_.</span></div>
<divclass="line"><aid="l00187"name="l00187"></a><spanclass="lineno"> 187</span><spanclass="comment">// Used by TransformToDualPhaseIProblem()/EndDualPhaseI().</span></div>
<divclass="line"><aid="l00190"name="l00190"></a><spanclass="lineno"> 190</span><spanclass="comment">// Problem data that should be updated from outside.</span></div>
<divclass="line"><aid="l00193"name="l00193"></a><spanclass="lineno"> 193</span><spanclass="comment">// The variables bounds of the current problem. Like everything here, it</span></div>
<divclass="line"><aid="l00194"name="l00194"></a><spanclass="lineno"> 194</span><spanclass="comment">// include the slacks.</span></div>
<divclass="line"><aid="l00198"name="l00198"></a><spanclass="lineno"> 198</span><spanclass="comment">// This is just used temporarily by the dual phase I algo to save the original</span></div>
<divclass="line"><aid="l00203"name="l00203"></a><spanclass="lineno"> 203</span><spanclass="comment">// Array of variable statuses, indexed by column index.</span></div>
<divclass="line"><aid="l00206"name="l00206"></a><spanclass="lineno"> 206</span><spanclass="comment">// Array of variable types, indexed by column index.</span></div>
<divclass="line"><aid="l00209"name="l00209"></a><spanclass="lineno"> 209</span><spanclass="comment">// Indicates if a non-basic variable can move up or down while not increasing</span></div>
<divclass="line"><aid="l00210"name="l00210"></a><spanclass="lineno"> 210</span><spanclass="comment">// the primal infeasibility. Note that all combinaisons are possible for a</span></div>
<divclass="line"><aid="l00211"name="l00211"></a><spanclass="lineno"> 211</span><spanclass="comment">// variable according to its status: fixed, free, upper or lower bounded. This</span></div>
<divclass="line"><aid="l00212"name="l00212"></a><spanclass="lineno"> 212</span><spanclass="comment">// is always false for basic variable.</span></div>
<divclass="line"><aid="l00216"name="l00216"></a><spanclass="lineno"> 216</span><spanclass="comment">// Indicates if we should consider this variable for entering the basis during</span></div>
<divclass="line"><aid="l00217"name="l00217"></a><spanclass="lineno"> 217</span><spanclass="comment">// the simplex algorithm. We never consider fixed variables and in the dual</span></div>
<divclass="line"><aid="l00218"name="l00218"></a><spanclass="lineno"> 218</span><spanclass="comment">// feasibility phase, we don't consider boxed variable.</span></div>
<divclass="line"><aid="l00221"name="l00221"></a><spanclass="lineno"> 221</span><spanclass="comment">// Indicates if a variable is BASIC or not. There are currently two members</span></div>
<divclass="line"><aid="l00222"name="l00222"></a><spanclass="lineno"> 222</span><spanclass="comment">// because the DenseBitRow class only supports a nice range-based iteration on</span></div>
<divclass="line"><aid="l00223"name="l00223"></a><spanclass="lineno"> 223</span><spanclass="comment">// the non-zero positions and not on the others.</span></div>
<divclass="line"><aid="l00227"name="l00227"></a><spanclass="lineno"> 227</span><spanclass="comment">// Set of boxed variables that are non-basic.</span></div>
<divclass="line"><aid="l00230"name="l00230"></a><spanclass="lineno"> 230</span><spanclass="comment">// Number of entries for the relevant matrix columns (see relevance_).</span></div>
<divclass="line"><aid="l00233"name="l00233"></a><spanclass="lineno"> 233</span><spanclass="comment">// Whether or not a boxed variable should be considered relevant.</span></div>
<divclass="line"><aid="l00236"name="l00236"></a><spanclass="lineno"> 236</span><spanclass="comment">// Whether we are between the calls TransformToDualPhaseIProblem() and</span></div>
<divclass="ttc"id="aclassoperations__research_1_1glop_1_1_variables_info_html_a28ad52f334e030f4eb45939756a4476c"><divclass="ttname"><ahref="classoperations__research_1_1glop_1_1_variables_info.html#a28ad52f334e030f4eb45939756a4476c">operations_research::glop::VariablesInfo::GetIsBasicBitRow</a></div><divclass="ttdeci">const DenseBitRow & GetIsBasicBitRow() const</div><divclass="ttdef"><b>Definition:</b><ahref="variables__info_8cc_source.html#l00306">variables_info.cc:306</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1glop_1_1_variables_info_html_a3db14ab65240d00133a76abb5f4edf8c"><divclass="ttname"><ahref="classoperations__research_1_1glop_1_1_variables_info.html#a3db14ab65240d00133a76abb5f4edf8c">operations_research::glop::VariablesInfo::GetVariableLowerBounds</a></div><divclass="ttdeci">const DenseRow & GetVariableLowerBounds() const</div><divclass="ttdef"><b>Definition:</b><ahref="variables__info_8h_source.html#l00127">variables_info.h:127</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1glop_1_1_variables_info_html_a505af340486fcf70ee83abb32e31a628"><divclass="ttname"><ahref="classoperations__research_1_1glop_1_1_variables_info.html#a505af340486fcf70ee83abb32e31a628">operations_research::glop::VariablesInfo::GetNonBasicBoxedVariables</a></div><divclass="ttdeci">const DenseBitRow & GetNonBasicBoxedVariables() const</div><divclass="ttdef"><b>Definition:</b><ahref="variables__info_8cc_source.html#l00312">variables_info.cc:312</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1glop_1_1_variables_info_html_a6cc56ab5da3a82aa2793d18a37f422c4"><divclass="ttname"><ahref="classoperations__research_1_1glop_1_1_variables_info.html#a6cc56ab5da3a82aa2793d18a37f422c4">operations_research::glop::VariablesInfo::GetCanIncreaseBitRow</a></div><divclass="ttdeci">const DenseBitRow & GetCanIncreaseBitRow() const</div><divclass="ttdef"><b>Definition:</b><ahref="variables__info_8cc_source.html#l00294">variables_info.cc:294</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1glop_1_1_variables_info_html_a71d4734d51e7037c043b68a74bd7857f"><divclass="ttname"><ahref="classoperations__research_1_1glop_1_1_variables_info.html#a71d4734d51e7037c043b68a74bd7857f">operations_research::glop::VariablesInfo::GetCanDecreaseBitRow</a></div><divclass="ttdeci">const DenseBitRow & GetCanDecreaseBitRow() const</div><divclass="ttdef"><b>Definition:</b><ahref="variables__info_8cc_source.html#l00298">variables_info.cc:298</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1glop_1_1_variables_info_html_a78146b251b30383686ec55362254cc3b"><divclass="ttname"><ahref="classoperations__research_1_1glop_1_1_variables_info.html#a78146b251b30383686ec55362254cc3b">operations_research::glop::VariablesInfo::GetTypeRow</a></div><divclass="ttdeci">const VariableTypeRow & GetTypeRow() const</div><divclass="ttdef"><b>Definition:</b><ahref="variables__info_8cc_source.html#l00286">variables_info.cc:286</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1glop_1_1_variables_info_html_a8e726c118c4449d9d3c5761e2853661a"><divclass="ttname"><ahref="classoperations__research_1_1glop_1_1_variables_info.html#a8e726c118c4449d9d3c5761e2853661a">operations_research::glop::VariablesInfo::GetNotBasicBitRow</a></div><divclass="ttdeci">const DenseBitRow & GetNotBasicBitRow() const</div><divclass="ttdef"><b>Definition:</b><ahref="variables__info_8cc_source.html#l00308">variables_info.cc:308</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1glop_1_1_variables_info_html_ab4494c9680fc5d769a6143f11f00423b"><divclass="ttname"><ahref="classoperations__research_1_1glop_1_1_variables_info.html#ab4494c9680fc5d769a6143f11f00423b">operations_research::glop::VariablesInfo::GetStatusRow</a></div><divclass="ttdeci">const VariableStatusRow & GetStatusRow() const</div><divclass="ttdef"><b>Definition:</b><ahref="variables__info_8cc_source.html#l00290">variables_info.cc:290</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1glop_1_1_variables_info_html_ab93f3d12ceb27e391fb1785db7e56463"><divclass="ttname"><ahref="classoperations__research_1_1glop_1_1_variables_info.html#ab93f3d12ceb27e391fb1785db7e56463">operations_research::glop::VariablesInfo::GetVariableUpperBounds</a></div><divclass="ttdeci">const DenseRow & GetVariableUpperBounds() const</div><divclass="ttdef"><b>Definition:</b><ahref="variables__info_8h_source.html#l00128">variables_info.h:128</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1glop_1_1_variables_info_html_ac4385751c629a96a6d1ef5ac70af45e1"><divclass="ttname"><ahref="classoperations__research_1_1glop_1_1_variables_info.html#ac4385751c629a96a6d1ef5ac70af45e1">operations_research::glop::VariablesInfo::GetIsRelevantBitRow</a></div><divclass="ttdeci">const DenseBitRow & GetIsRelevantBitRow() const</div><divclass="ttdef"><b>Definition:</b><ahref="variables__info_8cc_source.html#l00302">variables_info.cc:302</a></div></div>
<divclass="ttc"id="anamespaceoperations__research_html"><divclass="ttname"><ahref="namespaceoperations__research.html">operations_research</a></div><divclass="ttdoc">Collection of objects used to extend the Constraint Solver library.</div><divclass="ttdef"><b>Definition:</b><ahref="dense__doubly__linked__list_8h_source.html#l00021">dense_doubly_linked_list.h:21</a></div></div>