<ahref="reduced__costs_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="l00033"name="l00033"></a><spanclass="lineno"> 33</span><spanclass="comment">// Maintains the reduced costs of the non-basic variables and some related</span></div>
<divclass="line"><aid="l00037"name="l00037"></a><spanclass="lineno"> 37</span><spanclass="comment">// - To each non-basic column 'a' of A, we can associate an "edge" in the</span></div>
<divclass="line"><aid="l00038"name="l00038"></a><spanclass="lineno"> 38</span><spanclass="comment">// kernel of A equal to 1.0 on the index of 'a' and '-B^{-1}.a' on the basic</span></div>
<divclass="line"><aid="l00040"name="l00040"></a><spanclass="lineno"> 40</span><spanclass="comment">// - 'B^{-1}.a' is called the "right inverse" of 'a'.</span></div>
<divclass="line"><aid="l00041"name="l00041"></a><spanclass="lineno"> 41</span><spanclass="comment">// - The reduced cost of a column is equal to the scalar product of this</span></div>
<divclass="line"><aid="l00042"name="l00042"></a><spanclass="lineno"> 42</span><spanclass="comment">// column's edge with the cost vector (objective_), and corresponds to the</span></div>
<divclass="line"><aid="l00043"name="l00043"></a><spanclass="lineno"> 43</span><spanclass="comment">// variation in the objective function when we add this edge to the current</span></div>
<divclass="line"><aid="l00045"name="l00045"></a><spanclass="lineno"> 45</span><spanclass="comment">// - The dual values are the "left inverse" of the basic objective by B.</span></div>
<divclass="line"><aid="l00046"name="l00046"></a><spanclass="lineno"> 46</span><spanclass="comment">// That is 'basic_objective_.B^{-1}'</span></div>
<divclass="line"><aid="l00047"name="l00047"></a><spanclass="lineno"> 47</span><spanclass="comment">// - The reduced cost of a column is also equal to the scalar product of this</span></div>
<divclass="line"><aid="l00048"name="l00048"></a><spanclass="lineno"> 48</span><spanclass="comment">// column with the vector of the dual values.</span></div>
<divclass="line"><aid="l00051"name="l00051"></a><spanclass="lineno"> 51</span><spanclass="comment">// Takes references to the linear program data we need.</span></div>
<divclass="line"><aid="l00058"name="l00058"></a><spanclass="lineno"> 58</span><spanclass="comment">// If this is true, then the caller must re-factorize the basis before the</span></div>
<divclass="line"><aid="l00059"name="l00059"></a><spanclass="lineno"> 59</span><spanclass="comment">// next call to GetReducedCosts().</span></div>
<divclass="line"><aid="l00062"name="l00062"></a><spanclass="lineno"> 62</span><spanclass="comment">// Checks the precision of the entering variable choice now that the direction</span></div>
<divclass="line"><aid="l00063"name="l00063"></a><spanclass="lineno"> 63</span><spanclass="comment">// is computed. Returns its precise version. This will also trigger a</span></div>
<divclass="line"><aid="l00064"name="l00064"></a><spanclass="lineno"> 64</span><spanclass="comment">// reduced cost recomputation if it was deemed too imprecise.</span></div>
<divclass="line"><aid="l00068"name="l00068"></a><spanclass="lineno"> 68</span><spanclass="comment">// Computes the current dual residual and infeasibility. Note that these</span></div>
<divclass="line"><aid="l00069"name="l00069"></a><spanclass="lineno"> 69</span><spanclass="comment">// functions are not really fast (many scalar products will be computed) and</span></div>
<divclass="line"><aid="l00070"name="l00070"></a><spanclass="lineno"> 70</span><spanclass="comment">// shouldn't be called at each iteration.</span></div>
<divclass="line"><aid="l00072"name="l00072"></a><spanclass="lineno"> 72</span><spanclass="comment">// These function will compute the reduced costs if needed.</span></div>
<divclass="line"><aid="l00073"name="l00073"></a><spanclass="lineno"> 73</span><spanclass="comment">// ComputeMaximumDualResidual() also needs ComputeBasicObjectiveLeftInverse()</span></div>
<divclass="line"><aid="l00074"name="l00074"></a><spanclass="lineno"> 74</span><spanclass="comment">// and do not depends on reduced costs.</span></div>
<divclass="line"><aid="l00079"name="l00079"></a><spanclass="lineno"> 79</span><spanclass="comment">// Same as ComputeMaximumDualInfeasibility() but ignore boxed variables.</span></div>
<divclass="line"><aid="l00080"name="l00080"></a><spanclass="lineno"> 80</span><spanclass="comment">// Because we can always switch bounds of boxed variables, if this is under</span></div>
<divclass="line"><aid="l00081"name="l00081"></a><spanclass="lineno"> 81</span><spanclass="comment">// the dual tolerance, then we can easily have a dual feasible solution and do</span></div>
<divclass="line"><aid="l00082"name="l00082"></a><spanclass="lineno"> 82</span><spanclass="comment">// not need to run a dual phase I algorithm.</span></div>
<divclass="line"><aid="l00085"name="l00085"></a><spanclass="lineno"> 85</span><spanclass="comment">// Updates any internal data BEFORE the given simplex pivot is applied to B.</span></div>
<divclass="line"><aid="l00086"name="l00086"></a><spanclass="lineno"> 86</span><spanclass="comment">// Note that no updates are needed in case of a bound flip.</span></div>
<divclass="line"><aid="l00087"name="l00087"></a><spanclass="lineno"> 87</span><spanclass="comment">// The arguments are in order:</span></div>
<divclass="line"><aid="l00088"name="l00088"></a><spanclass="lineno"> 88</span><spanclass="comment">// - The index of the entering non-basic column of A.</span></div>
<divclass="line"><aid="l00089"name="l00089"></a><spanclass="lineno"> 89</span><spanclass="comment">// - The index in B of the leaving basic variable.</span></div>
<divclass="line"><aid="l00090"name="l00090"></a><spanclass="lineno"> 90</span><spanclass="comment">// - The 'direction', i.e. the right inverse of the entering column.</span></div>
<divclass="line"><aid="l00095"name="l00095"></a><spanclass="lineno"> 95</span><spanclass="comment">// Sets the cost of the given non-basic variable to zero and updates its</span></div>
<divclass="line"><aid="l00096"name="l00096"></a><spanclass="lineno"> 96</span><spanclass="comment">// reduced cost. Note that changing the cost of a non-basic variable only</span></div>
<divclass="line"><aid="l00097"name="l00097"></a><spanclass="lineno"> 97</span><spanclass="comment">// impacts its reduced cost and not the one of any other variables.</span></div>
<divclass="line"><aid="l00098"name="l00098"></a><spanclass="lineno"> 98</span><spanclass="comment">// The current_cost pointer must be equal to the address of objective[col]</span></div>
<divclass="line"><aid="l00099"name="l00099"></a><spanclass="lineno"> 99</span><spanclass="comment">// where objective is the DenseRow passed at construction.</span></div>
<divclass="line"><aid="l00102"name="l00102"></a><spanclass="lineno"> 102</span><spanclass="comment">// Sets the pricing parameters. This does not change the pricing rule.</span></div>
<divclass="line"><aid="l00105"name="l00105"></a><spanclass="lineno"> 105</span><spanclass="comment">// Returns true if the current reduced costs are computed with maximum</span></div>
<divclass="line"><aid="l00109"name="l00109"></a><spanclass="lineno"> 109</span><spanclass="comment">// Returns true if the current reduced costs where just recomputed or will be</span></div>
<divclass="line"><aid="l00110"name="l00110"></a><spanclass="lineno"> 110</span><spanclass="comment">// on the next call to GetReducedCosts().</span></div>
<divclass="line"><aid="l00115"name="l00115"></a><spanclass="lineno"> 115</span><spanclass="comment">// Makes sure the next time the reduced cost are needed, they will be</span></div>
<divclass="line"><aid="l00116"name="l00116"></a><spanclass="lineno"> 116</span><spanclass="comment">// recomputed with maximum precision (i.e. from scratch with a basis</span></div>
<divclass="line"><aid="l00120"name="l00120"></a><spanclass="lineno"> 120</span><spanclass="comment">// Randomly perturb the costs. Both Koberstein and Huangfu recommend doing</span></div>
<divclass="line"><aid="l00121"name="l00121"></a><spanclass="lineno"> 121</span><spanclass="comment">// that before the dual simplex starts in their Phd thesis.</span></div>
<divclass="line"><aid="l00123"name="l00123"></a><spanclass="lineno"> 123</span><spanclass="comment">// The perturbation follows what is explained in Huangfu Q (2013) "High</span></div>
<divclass="line"><aid="l00124"name="l00124"></a><spanclass="lineno"> 124</span><spanclass="comment">// performance simplex solver", Ph.D, dissertation, University of Edinburgh,</span></div>
<divclass="line"><aid="l00128"name="l00128"></a><spanclass="lineno"> 128</span><spanclass="comment">// Shifts the cost of the given non-basic column such that its current reduced</span></div>
<divclass="line"><aid="l00129"name="l00129"></a><spanclass="lineno"> 129</span><spanclass="comment">// cost becomes 0.0. Actually, this shifts the cost a bit more according to</span></div>
<divclass="line"><aid="l00130"name="l00130"></a><spanclass="lineno"> 130</span><spanclass="comment">// the positive_direction parameter.</span></div>
<divclass="line"><aid="l00132"name="l00132"></a><spanclass="lineno"> 132</span><spanclass="comment">// This is explained in Koberstein's thesis (section 6.2.2.3) and helps on</span></div>
<divclass="line"><aid="l00133"name="l00133"></a><spanclass="lineno"> 133</span><spanclass="comment">// degenerate problems. As of july 2013, this allowed to pass dano3mip and</span></div>
<divclass="line"><aid="l00134"name="l00134"></a><spanclass="lineno"> 134</span><spanclass="comment">// dbic1 without cycling forever. Note that contrary to what is explained in</span></div>
<divclass="line"><aid="l00135"name="l00135"></a><spanclass="lineno"> 135</span><spanclass="comment">// the thesis, we do not shift any other variable costs. If any becomes</span></div>
<divclass="line"><aid="l00136"name="l00136"></a><spanclass="lineno"> 136</span><spanclass="comment">// infeasible, it will be selected and shifted in subsequent iterations.</span></div>
<divclass="line"><aid="l00139"name="l00139"></a><spanclass="lineno"> 139</span><spanclass="comment">// Returns true if ShiftCostIfNeeded() was applied since the last</span></div>
<divclass="line"><aid="l00143"name="l00143"></a><spanclass="lineno"> 143</span><spanclass="comment">// Returns true if this step direction make the given column even more</span></div>
<divclass="line"><aid="l00144"name="l00144"></a><spanclass="lineno"> 144</span><spanclass="comment">// infeasible. This is just used for reporting stats.</span></div>
<divclass="line"><aid="l00147"name="l00147"></a><spanclass="lineno"> 147</span><spanclass="comment">// Removes any cost shift and cost perturbation. This also lazily forces a</span></div>
<divclass="line"><aid="l00148"name="l00148"></a><spanclass="lineno"> 148</span><spanclass="comment">// recomputation of all the derived quantities. This effectively resets the</span></div>
<divclass="line"><aid="l00149"name="l00149"></a><spanclass="lineno"> 149</span><spanclass="comment">// class to its initial state.</span></div>
<divclass="line"><aid="l00152"name="l00152"></a><spanclass="lineno"> 152</span><spanclass="comment">// Invalidates all internal structure that depends on the objective function.</span></div>
<divclass="line"><aid="l00155"name="l00155"></a><spanclass="lineno"> 155</span><spanclass="comment">// Invalidates the data that depends on the order of the column in basis_.</span></div>
<divclass="line"><aid="l00158"name="l00158"></a><spanclass="lineno"> 158</span><spanclass="comment">// Returns the current reduced costs. If AreReducedCostsPrecise() is true,</span></div>
<divclass="line"><aid="l00159"name="l00159"></a><spanclass="lineno"> 159</span><spanclass="comment">// then for basic columns, this gives the error between 'c_B' and 'y.B' and</span></div>
<divclass="line"><aid="l00160"name="l00160"></a><spanclass="lineno"> 160</span><spanclass="comment">// for non-basic columns, this is the classic reduced cost. If it is false,</span></div>
<divclass="line"><aid="l00161"name="l00161"></a><spanclass="lineno"> 161</span><spanclass="comment">// then this is defined only for the columns in</span></div>
<divclass="line"><aid="l00165"name="l00165"></a><spanclass="lineno"> 165</span><spanclass="comment">// Same as GetReducedCosts() but trigger a recomputation if not already done</span></div>
<divclass="line"><aid="l00166"name="l00166"></a><spanclass="lineno"> 166</span><spanclass="comment">// to have access to the reduced costs on all positions, not just the relevant</span></div>
<divclass="line"><aid="l00170"name="l00170"></a><spanclass="lineno"> 170</span><spanclass="comment">// Returns the dual values associated to the current basis.</span></div>
<divclass="line"><aid="l00176"name="l00176"></a><spanclass="lineno"> 176</span><spanclass="comment">// Returns the current dual feasibility tolerance.</span></div>
<divclass="line"><aid="l00181"name="l00181"></a><spanclass="lineno"> 181</span><spanclass="comment">// Does basic checking of an entering candidate.</span></div>
<divclass="line"><aid="l00187"name="l00187"></a><spanclass="lineno"> 187</span><spanclass="comment">// The deterministic time used by this class.</span></div>
<divclass="line"><aid="l00190"name="l00190"></a><spanclass="lineno"> 190</span><spanclass="comment">// Registers a boolean that will be set to true each time the reduced costs</span></div>
<divclass="line"><aid="l00191"name="l00191"></a><spanclass="lineno"> 191</span><spanclass="comment">// are or will be recomputed. This allows anyone that depends on this to know</span></div>
<divclass="line"><aid="l00192"name="l00192"></a><spanclass="lineno"> 192</span><spanclass="comment">// that it cannot just assume an incremental changes and needs to updates its</span></div>
<divclass="line"><aid="l00193"name="l00193"></a><spanclass="lineno"> 193</span><spanclass="comment">// data. Important: UpdateBeforeBasisPivot() will not trigger this.</span></div>
<divclass="line"><aid="l00210"name="l00210"></a><spanclass="lineno"> 210</span><spanclass="comment">// All these Compute() functions fill the corresponding DenseRow using</span></div>
<divclass="line"><aid="l00211"name="l00211"></a><spanclass="lineno"> 211</span><spanclass="comment">// the current problem data.</span></div>
<divclass="line"><aid="l00216"name="l00216"></a><spanclass="lineno"> 216</span><spanclass="comment">// Updates reduced_costs_ according to the given pivot. This adds a multiple</span></div>
<divclass="line"><aid="l00217"name="l00217"></a><spanclass="lineno"> 217</span><spanclass="comment">// of the vector equal to 1.0 on the leaving column and given by</span></div>
<divclass="line"><aid="l00218"name="l00218"></a><spanclass="lineno"> 218</span><spanclass="comment">// ComputeUpdateRow() on the non-basic columns. The multiple is such that the</span></div>
<divclass="line"><aid="l00219"name="l00219"></a><spanclass="lineno"> 219</span><spanclass="comment">// new leaving reduced cost is zero.</span></div>
<divclass="line"><aid="l00224"name="l00224"></a><spanclass="lineno"> 224</span><spanclass="comment">// Updates basic_objective_ according to the given pivot.</span></div>
<divclass="line"><aid="l00227"name="l00227"></a><spanclass="lineno"> 227</span><spanclass="comment">// All places that do 'recompute_reduced_costs_ = true' must go through here.</span></div>
<divclass="line"><aid="l00230"name="l00230"></a><spanclass="lineno"> 230</span><spanclass="comment">// Problem data that should be updated from outside.</span></div>
<divclass="line"><aid="l00242"name="l00242"></a><spanclass="lineno"> 242</span><spanclass="comment">// Booleans to control what happens on the next ChooseEnteringColumn() call.</span></div>
<divclass="line"><aid="l00248"name="l00248"></a><spanclass="lineno"> 248</span><spanclass="comment">// Indicates if we have computed the reduced costs with a good precision.</span></div>
<divclass="line"><aid="l00254"name="l00254"></a><spanclass="lineno"> 254</span><spanclass="comment">// Values of the objective on the columns of the basis. The order is given by</span></div>
<divclass="line"><aid="l00255"name="l00255"></a><spanclass="lineno"> 255</span><spanclass="comment">// the basis_ mapping. It is usually denoted as 'c_B' in the literature .</span></div>
<divclass="line"><aid="l00258"name="l00258"></a><spanclass="lineno"> 258</span><spanclass="comment">// Perturbations to the objective function. This may be introduced to</span></div>
<divclass="line"><aid="l00259"name="l00259"></a><spanclass="lineno"> 259</span><spanclass="comment">// counter degenerecency. It will be removed at the end of the algorithm.</span></div>
<divclass="line"><aid="l00262"name="l00262"></a><spanclass="lineno"> 262</span><spanclass="comment">// Reduced costs of the relevant columns of A.</span></div>
<divclass="line"><aid="l00265"name="l00265"></a><spanclass="lineno"> 265</span><spanclass="comment">// Left inverse by B of the basic_objective_. This is known as 'y' or 'pi' in</span></div>
<divclass="line"><aid="l00266"name="l00266"></a><spanclass="lineno"> 266</span><spanclass="comment">// the literature. Its scalar product with a column 'a' of A gives the value</span></div>
<divclass="line"><aid="l00267"name="l00267"></a><spanclass="lineno"> 267</span><spanclass="comment">// of the scalar product of the basic objective with the right inverse of 'a'.</span></div>
<divclass="line"><aid="l00269"name="l00269"></a><spanclass="lineno"> 269</span><spanclass="comment">// TODO(user): using the unit_row_left_inverse_, we can update the</span></div>
<divclass="line"><aid="l00270"name="l00270"></a><spanclass="lineno"> 270</span><spanclass="comment">// basic_objective_left_inverse_ at each iteration, this is not needed for the</span></div>
<divclass="line"><aid="l00271"name="l00271"></a><spanclass="lineno"> 271</span><spanclass="comment">// algorithm, but may gives us a good idea of the current precision of our</span></div>
<divclass="line"><aid="l00272"name="l00272"></a><spanclass="lineno"> 272</span><spanclass="comment">// estimates. It is also faster to compute the unit_row_left_inverse_ because</span></div>
<divclass="line"><aid="l00273"name="l00273"></a><spanclass="lineno"> 273</span><spanclass="comment">// of sparsity.</span></div>
<divclass="line"><aid="l00276"name="l00276"></a><spanclass="lineno"> 276</span><spanclass="comment">// This is usually parameters_.dual_feasibility_tolerance() except when the</span></div>
<divclass="line"><aid="l00277"name="l00277"></a><spanclass="lineno"> 277</span><spanclass="comment">// dual residual error |y.B - c_B| is higher than it and we have to increase</span></div>
<divclass="line"><aid="l00278"name="l00278"></a><spanclass="lineno"> 278</span><spanclass="comment">// the tolerance.</span></div>
<divclass="line"><aid="l00281"name="l00281"></a><spanclass="lineno"> 281</span><spanclass="comment">// Boolean(s) to set to false when the reduced cost are changed outside of the</span></div>
<divclass="line"><aid="l00290"name="l00290"></a><spanclass="lineno"> 290</span><spanclass="comment">// Maintains the list of dual infeasible positions and their associated prices.</span></div>
<divclass="line"><aid="l00292"name="l00292"></a><spanclass="lineno"> 292</span><spanclass="comment">// TODO(user): Not high priority but should probably be moved to its own file.</span></div>
<divclass="line"><aid="l00295"name="l00295"></a><spanclass="lineno"> 295</span><spanclass="comment">// Takes references to what we need.</span></div>
<divclass="line"><aid="l00296"name="l00296"></a><spanclass="lineno"> 296</span><spanclass="comment">// TODO(user): Switch to a model based API like in CP-SAT.</span></div>
<divclass="line"><aid="l00300"name="l00300"></a><spanclass="lineno"> 300</span><spanclass="comment">// Returns the best candidate out of the dual infeasible positions to enter</span></div>
<divclass="line"><aid="l00301"name="l00301"></a><spanclass="lineno"> 301</span><spanclass="comment">// the basis during a primal simplex iterations.</span></div>
<divclass="line"><aid="l00304"name="l00304"></a><spanclass="lineno"> 304</span><spanclass="comment">// Similar to the other UpdateBeforeBasisPivot() functions.</span></div>
<divclass="line"><aid="l00306"name="l00306"></a><spanclass="lineno"> 306</span><spanclass="comment">// Important: Both the primal norms and reduced costs must have been updated</span></div>
<divclass="line"><aid="l00307"name="l00307"></a><spanclass="lineno"> 307</span><spanclass="comment">// before this is called.</span></div>
<divclass="line"><aid="l00310"name="l00310"></a><spanclass="lineno"> 310</span><spanclass="comment">// Triggers a recomputation of the price at the given column only.</span></div>
<divclass="line"><aid="l00313"name="l00313"></a><spanclass="lineno"> 313</span><spanclass="comment">// Same than RecomputePriceAt() for the case where we know the position is</span></div>
<divclass="line"><aid="l00317"name="l00317"></a><spanclass="lineno"> 317</span><spanclass="comment">// If the incremental updates are not properly called for a while, then it is</span></div>
<divclass="line"><aid="l00318"name="l00318"></a><spanclass="lineno"> 318</span><spanclass="comment">// important to make sure that the prices will be recomputed the next time</span></div>
<divclass="line"><aid="l00319"name="l00319"></a><spanclass="lineno"> 319</span><spanclass="comment">// GetBestEnteringColumn() is called.</span></div>
<divclass="line"><aid="l00323"name="l00323"></a><spanclass="lineno"> 323</span><spanclass="comment">// Recomputes the primal prices but only for the given column indices. If</span></div>
<divclass="line"><aid="l00324"name="l00324"></a><spanclass="lineno"> 324</span><spanclass="comment">// from_clean_state is true, then we assume that there is currently no</span></div>
<divclass="line"><aid="l00325"name="l00325"></a><spanclass="lineno"> 325</span><spanclass="comment">// candidates in prices_.</span></div>
<divclass="ttc"id="aclassoperations__research_1_1glop_1_1_reduced_costs_html_a95434616ab4c32fad60527c49fb7cfe5"><divclass="ttname"><ahref="classoperations__research_1_1glop_1_1_reduced_costs.html#a95434616ab4c32fad60527c49fb7cfe5">operations_research::glop::ReducedCosts::GetFullReducedCosts</a></div><divclass="ttdeci">const DenseRow & GetFullReducedCosts()</div><divclass="ttdef"><b>Definition:</b><ahref="reduced__costs_8cc_source.html#l00311">reduced_costs.cc:311</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1glop_1_1_reduced_costs_html_a9f7d17ed171863f104fbb2a450f89251"><divclass="ttname"><ahref="classoperations__research_1_1glop_1_1_reduced_costs.html#a9f7d17ed171863f104fbb2a450f89251">operations_research::glop::ReducedCosts::GetReducedCosts</a></div><divclass="ttdeci">const DenseRow & GetReducedCosts()</div><divclass="ttdef"><b>Definition:</b><ahref="reduced__costs_8cc_source.html#l00319">reduced_costs.cc:319</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1glop_1_1_reduced_costs_html_aafa77a9d37843a7c27694231735465bc"><divclass="ttname"><ahref="classoperations__research_1_1glop_1_1_reduced_costs.html#aafa77a9d37843a7c27694231735465bc">operations_research::glop::ReducedCosts::GetDualValues</a></div><divclass="ttdeci">const DenseColumn & GetDualValues()</div><divclass="ttdef"><b>Definition:</b><ahref="reduced__costs_8cc_source.html#l00330">reduced_costs.cc:330</a></div></div>
<divclass="ttc"id="aclassoperations__research_1_1glop_1_1_reduced_costs_html_add702649541e82bd72e0fa54538b9be7"><divclass="ttname"><ahref="classoperations__research_1_1glop_1_1_reduced_costs.html#add702649541e82bd72e0fa54538b9be7">operations_research::glop::ReducedCosts::GetCostPerturbations</a></div><divclass="ttdeci">const DenseRow & GetCostPerturbations() const</div><divclass="ttdef"><b>Definition:</b><ahref="reduced__costs_8h_source.html#l00185">reduced_costs.h:185</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>