<ahref="linear__relaxation_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="l00034"name="l00034"></a><spanclass="lineno"> 34</span><spanclass="comment">// If the given IntegerVariable is fully encoded (li <=> var == xi), adds to the</span></div>
<divclass="line"><aid="l00035"name="l00035"></a><spanclass="lineno"> 35</span><spanclass="comment">// constraints vector the following linear relaxation of its encoding:</span></div>
<divclass="line"><aid="l00036"name="l00036"></a><spanclass="lineno"> 36</span><spanclass="comment">// - Sum li == 1</span></div>
<divclass="line"><aid="l00037"name="l00037"></a><spanclass="lineno"> 37</span><spanclass="comment">// - Sum li * xi == var</span></div>
<divclass="line"><aid="l00038"name="l00038"></a><spanclass="lineno"> 38</span><spanclass="comment">// Note that all the literal (li) of the encoding must have an IntegerView,</span></div>
<divclass="line"><aid="l00039"name="l00039"></a><spanclass="lineno"> 39</span><spanclass="comment">// otherwise this function just does nothing.</span></div>
<divclass="line"><aid="l00041"name="l00041"></a><spanclass="lineno"> 41</span><spanclass="comment">// Returns false, if the relaxation couldn't be added because this variable</span></div>
<divclass="line"><aid="l00042"name="l00042"></a><spanclass="lineno"> 42</span><spanclass="comment">// was not fully encoded or not all its associated literal had a view.</span></div>
<divclass="line"><aid="l00046"name="l00046"></a><spanclass="lineno"> 46</span><spanclass="comment">// When the set of (li <=> var == xi) do not cover the full domain of xi, we</span></div>
<divclass="line"><aid="l00047"name="l00047"></a><spanclass="lineno"> 47</span><spanclass="comment">// do something a bit more involved. Let min/max the min and max value of the</span></div>
<divclass="line"><aid="l00048"name="l00048"></a><spanclass="lineno"> 48</span><spanclass="comment">// domain of var that is NOT part of the encoding. We add:</span></div>
<divclass="line"><aid="l00049"name="l00049"></a><spanclass="lineno"> 49</span><spanclass="comment">// - Sum li <= 1</span></div>
<divclass="line"><aid="l00050"name="l00050"></a><spanclass="lineno"> 50</span><spanclass="comment">// - (Sum li * xi) + (1 - Sum li) * min <= var</span></div>
<divclass="line"><aid="l00051"name="l00051"></a><spanclass="lineno"> 51</span><spanclass="comment">// - var <= (Sum li * xi) + (1 - Sum li) * max</span></div>
<divclass="line"><aid="l00053"name="l00053"></a><spanclass="lineno"> 53</span><spanclass="comment">// Note that if it turns out that the partial encoding is full, this will just</span></div>
<divclass="line"><aid="l00054"name="l00054"></a><spanclass="lineno"> 54</span><spanclass="comment">// use the same encoding as AppendFullEncodingRelaxation(). Any literal that</span></div>
<divclass="line"><aid="l00055"name="l00055"></a><spanclass="lineno"> 55</span><spanclass="comment">// do not have an IntegerView will be skipped, there is no point adding them</span></div>
<divclass="line"><aid="l00056"name="l00056"></a><spanclass="lineno"> 56</span><spanclass="comment">// to the LP if they are not used in any other constraint, the relaxation will</span></div>
<divclass="line"><aid="l00057"name="l00057"></a><spanclass="lineno"> 57</span><spanclass="comment">// have the same "power" without them.</span></div>
<divclass="line"><aid="l00061"name="l00061"></a><spanclass="lineno"> 61</span><spanclass="comment">// This is a different relaxation that use a partial set of literal li such that</span></div>
<divclass="line"><aid="l00062"name="l00062"></a><spanclass="lineno"> 62</span><spanclass="comment">// (li <=> var >= xi). In which case we use the following encoding:</span></div>
<divclass="line"><aid="l00063"name="l00063"></a><spanclass="lineno"> 63</span><spanclass="comment">// - li >= l_{i+1} for all possible i. Note that the xi need to be sorted.</span></div>
<divclass="line"><aid="l00064"name="l00064"></a><spanclass="lineno"> 64</span><spanclass="comment">// - var >= min + l0 * (x0 - min) + Sum_{i>0} li * (xi - x_{i-1})</span></div>
<divclass="line"><aid="l00065"name="l00065"></a><spanclass="lineno"> 65</span><spanclass="comment">// - and same as above for NegationOf(var) for the upper bound.</span></div>
<divclass="line"><aid="l00067"name="l00067"></a><spanclass="lineno"> 67</span><spanclass="comment">// Like for AppendPartialEncodingRelaxation() we skip any li that do not have</span></div>
<divclass="line"><aid="l00068"name="l00068"></a><spanclass="lineno"> 68</span><spanclass="comment">// an integer view.</span></div>
<divclass="line"><aid="l00073"name="l00073"></a><spanclass="lineno"> 73</span><spanclass="comment">// Returns a vector of new literals in exactly one relationship.</span></div>
<divclass="line"><aid="l00074"name="l00074"></a><spanclass="lineno"> 74</span><spanclass="comment">// In addition, this create an IntegerView for all these literals and also add</span></div>
<divclass="line"><aid="l00075"name="l00075"></a><spanclass="lineno"> 75</span><spanclass="comment">// the exactly one to the LinearRelaxation.</span></div>
<divclass="line"><aid="l00079"name="l00079"></a><spanclass="lineno"> 79</span><spanclass="comment">// Adds linearization of int max constraints. Returns a vector of z vars such</span></div>
<divclass="line"><aid="l00082"name="l00082"></a><spanclass="lineno"> 82</span><spanclass="comment">// Consider the Lin Max constraint with d expressions and n variables in the</span></div>
<divclass="line"><aid="l00083"name="l00083"></a><spanclass="lineno"> 83</span><spanclass="comment">// form: target = max {exprs[l] = Sum (wli * xi + bl)}. l in {1,..,d}.</span></div>
<divclass="line"><aid="l00084"name="l00084"></a><spanclass="lineno"> 84</span><spanclass="comment">// Li = lower bound of xi</span></div>
<divclass="line"><aid="l00085"name="l00085"></a><spanclass="lineno"> 85</span><spanclass="comment">// Ui = upper bound of xi.</span></div>
<divclass="line"><aid="l00086"name="l00086"></a><spanclass="lineno"> 86</span><spanclass="comment">// Let zl be in {0,1} for all l in {1,..,d}.</span></div>
<divclass="line"><aid="l00087"name="l00087"></a><spanclass="lineno"> 87</span><spanclass="comment">// The target = exprs[l] when zl = 1.</span></div>
<divclass="line"><aid="l00089"name="l00089"></a><spanclass="lineno"> 89</span><spanclass="comment">// The following is a valid linearization for Lin Max.</span></div>
<divclass="line"><aid="l00090"name="l00090"></a><spanclass="lineno"> 90</span><spanclass="comment">// target >= exprs[l], for all l in {1,..,d}</span></div>
<divclass="line"><aid="l00091"name="l00091"></a><spanclass="lineno"> 91</span><spanclass="comment">// target <= Sum_i(wki * xi) + Sum_l((Nkl + bl) * zl), for all k in {1,..,d}</span></div>
<divclass="line"><aid="l00092"name="l00092"></a><spanclass="lineno"> 92</span><spanclass="comment">// Where Nkl is a large number defined as:</span></div>
<divclass="line"><aid="l00094"name="l00094"></a><spanclass="lineno"> 94</span><spanclass="comment">// = Sum (max corner difference for variable i, target expr k, max expr l)</span></div>
<divclass="line"><aid="l00095"name="l00095"></a><spanclass="lineno"> 95</span><spanclass="comment">// Reference: "Strong mixed-integer programming formulations for trained neural</span></div>
<divclass="line"><aid="l00096"name="l00096"></a><spanclass="lineno"> 96</span><spanclass="comment">// networks" by Ross Anderson et. (https://arxiv.org/pdf/1811.01988.pdf).</span></div>
<divclass="line"><aid="l00097"name="l00097"></a><spanclass="lineno"> 97</span><spanclass="comment">// TODO(user): Support linear expression as target.</span></div>
<divclass="line"><aid="l00125"name="l00125"></a><spanclass="lineno"> 125</span><spanclass="comment">// Appends linear constraints to the relaxation. This also handles the</span></div>
<divclass="line"><aid="l00126"name="l00126"></a><spanclass="lineno"> 126</span><spanclass="comment">// relaxation of linear constraints with enforcement literals.</span></div>
<divclass="line"><aid="l00127"name="l00127"></a><spanclass="lineno"> 127</span><spanclass="comment">// A linear constraint lb <= ax <= ub with enforcement literals {ei} is relaxed</span></div>
<divclass="line"><aid="l00128"name="l00128"></a><spanclass="lineno"> 128</span><spanclass="comment">// as following.</span></div>
<divclass="line"><aid="l00131"name="l00131"></a><spanclass="lineno"> 131</span><spanclass="comment">// Where implied_lb and implied_ub are trivial lower and upper bounds of the</span></div>
<divclass="line"><aid="l00147"name="l00147"></a><spanclass="lineno"> 147</span><spanclass="comment">// Adds linearization of no overlap constraints.</span></div>
<divclass="line"><aid="l00148"name="l00148"></a><spanclass="lineno"> 148</span><spanclass="comment">// It adds an energetic equation linking the duration of all potential tasks to</span></div>
<divclass="line"><aid="l00149"name="l00149"></a><spanclass="lineno"> 149</span><spanclass="comment">// the actual span of the no overlap constraint.</span></div>
<divclass="line"><aid="l00154"name="l00154"></a><spanclass="lineno"> 154</span><spanclass="comment">// Adds linearization of cumulative constraints.The second part adds an</span></div>
<divclass="line"><aid="l00155"name="l00155"></a><spanclass="lineno"> 155</span><spanclass="comment">// energetic equation linking the duration of all potential tasks to the actual</span></div>
<divclass="line"><aid="l00156"name="l00156"></a><spanclass="lineno"> 156</span><spanclass="comment">// max span * capacity of the cumulative constraint.</span></div>
<divclass="line"><aid="l00161"name="l00161"></a><spanclass="lineno"> 161</span><spanclass="comment">// Adds linearization of different types of constraints.</span></div>
<divclass="line"><aid="l00192"name="l00192"></a><spanclass="lineno"> 192</span><spanclass="comment">// Note: This only work if all affine expressions share the same variable.</span></div>
<divclass="line"><aid="l00196"name="l00196"></a><spanclass="lineno"> 196</span><spanclass="comment">// Scan the model and add cut generators.</span></div>
<divclass="line"><aid="l00200"name="l00200"></a><spanclass="lineno"> 200</span><spanclass="comment">// Builds the linear relaxaton of a CpModelProto and stores it in the</span></div>
<divclass="ttc"id="aclassoperations__research_1_1sat_1_1_model_html"><divclass="ttname"><ahref="classoperations__research_1_1sat_1_1_model.html">operations_research::sat::Model</a></div><divclass="ttdoc">Class that owns everything related to a particular optimization model.</div><divclass="ttdef"><b>Definition:</b><ahref="sat_2model_8h_source.html#l00038">sat/model.h:38</a></div></div>
<divclass="ttc"id="anamespaceoperations__research_1_1sat_html_a2dacc587a4c4f61238d9c8e85a3cf2dc"><divclass="ttname"><ahref="namespaceoperations__research_1_1sat.html#a2dacc587a4c4f61238d9c8e85a3cf2dc">operations_research::sat::ComputeLinearRelaxation</a></div><divclass="ttdeci">void ComputeLinearRelaxation(const CpModelProto &model_proto, int linearization_level, Model *m, LinearRelaxation *relaxation)</div><divclass="ttdef"><b>Definition:</b><ahref="linear__relaxation_8cc_source.html#l01449">linear_relaxation.cc:1449</a></div></div>
<divclass="ttc"id="anamespaceoperations__research_1_1sat_html_a305feb6370d1048b959ea498bb2f391b"><divclass="ttname"><ahref="namespaceoperations__research_1_1sat.html#a305feb6370d1048b959ea498bb2f391b">operations_research::sat::AppendAtMostOneRelaxation</a></div><divclass="ttdeci">void AppendAtMostOneRelaxation(const ConstraintProto &ct, Model *model, LinearRelaxation *relaxation)</div><divclass="ttdef"><b>Definition:</b><ahref="linear__relaxation_8cc_source.html#l00424">linear_relaxation.cc:424</a></div></div>
<divclass="ttc"id="anamespaceoperations__research_1_1sat_html_a342b60cdebf6f2d2bc0b7228f53b55dc"><divclass="ttname"><ahref="namespaceoperations__research_1_1sat.html#a342b60cdebf6f2d2bc0b7228f53b55dc">operations_research::sat::TryToAddCutGenerators</a></div><divclass="ttdeci">void TryToAddCutGenerators(const ConstraintProto &ct, int linearization_level, Model *m, LinearRelaxation *relaxation)</div><divclass="ttdef"><b>Definition:</b><ahref="linear__relaxation_8cc_source.html#l01325">linear_relaxation.cc:1325</a></div></div>
<divclass="ttc"id="anamespaceoperations__research_1_1sat_html_a3bb33b0ea560d1818c283bacd4b3838e"><divclass="ttname"><ahref="namespaceoperations__research_1_1sat.html#a3bb33b0ea560d1818c283bacd4b3838e">operations_research::sat::AddNoOverlapCutGenerator</a></div><divclass="ttdeci">void AddNoOverlapCutGenerator(const ConstraintProto &ct, Model *m, LinearRelaxation *relaxation)</div><divclass="ttdef"><b>Definition:</b><ahref="linear__relaxation_8cc_source.html#l01252">linear_relaxation.cc:1252</a></div></div>
<divclass="ttc"id="anamespaceoperations__research_1_1sat_html_a4dcd5302962cdb3bacde2ad477e5a187"><divclass="ttname"><ahref="namespaceoperations__research_1_1sat.html#a4dcd5302962cdb3bacde2ad477e5a187">operations_research::sat::AddIntProdCutGenerator</a></div><divclass="ttdeci">void AddIntProdCutGenerator(const ConstraintProto &ct, int linearization_level, Model *m, LinearRelaxation *relaxation)</div><divclass="ttdef"><b>Definition:</b><ahref="linear__relaxation_8cc_source.html#l01160">linear_relaxation.cc:1160</a></div></div>
<divclass="ttc"id="anamespaceoperations__research_1_1sat_html_a53d4cc6dea5adf2353b4af43bc1bb2f0"><divclass="ttname"><ahref="namespaceoperations__research_1_1sat.html#a53d4cc6dea5adf2353b4af43bc1bb2f0">operations_research::sat::AppendBoolAndRelaxation</a></div><divclass="ttdeci">void AppendBoolAndRelaxation(const ConstraintProto &ct, Model *model, LinearRelaxation *relaxation)</div><divclass="ttdef"><b>Definition:</b><ahref="linear__relaxation_8cc_source.html#l00392">linear_relaxation.cc:392</a></div></div>
<divclass="ttc"id="anamespaceoperations__research_1_1sat_html_a5564bcb1461ad3cbce7f744c3fb58c6b"><divclass="ttname"><ahref="namespaceoperations__research_1_1sat.html#a5564bcb1461ad3cbce7f744c3fb58c6b">operations_research::sat::AppendFullEncodingRelaxation</a></div><divclass="ttdeci">bool AppendFullEncodingRelaxation(IntegerVariable var, const Model &model, LinearRelaxation *relaxation)</div><divclass="ttdef"><b>Definition:</b><ahref="linear__relaxation_8cc_source.html#l00041">linear_relaxation.cc:41</a></div></div>
<divclass="ttc"id="anamespaceoperations__research_1_1sat_html_a5df2c2953d660d96c11967cd903a55fe"><divclass="ttname"><ahref="namespaceoperations__research_1_1sat.html#a5df2c2953d660d96c11967cd903a55fe">operations_research::sat::AppendLinearConstraintRelaxation</a></div><divclass="ttdeci">void AppendLinearConstraintRelaxation(const ConstraintProto &ct, bool linearize_enforced_constraints, Model *model, LinearRelaxation *relaxation)</div><divclass="ttdef"><b>Definition:</b><ahref="linear__relaxation_8cc_source.html#l00971">linear_relaxation.cc:971</a></div></div>
<divclass="ttc"id="anamespaceoperations__research_1_1sat_html_a5f9a5fb599bce0a25848485d9b5033a0"><divclass="ttname"><ahref="namespaceoperations__research_1_1sat.html#a5f9a5fb599bce0a25848485d9b5033a0">operations_research::sat::AppendIntervalRelaxation</a></div><divclass="ttdeci">void AppendIntervalRelaxation(const ConstraintProto &ct, Model *model, LinearRelaxation *relaxation)</div><divclass="ttdef"><b>Definition:</b><ahref="linear__relaxation_8cc_source.html#l00665">linear_relaxation.cc:665</a></div></div>
<divclass="ttc"id="anamespaceoperations__research_1_1sat_html_a6acf605cd9a3d72b8e33e8d145c07da5"><divclass="ttname"><ahref="namespaceoperations__research_1_1sat.html#a6acf605cd9a3d72b8e33e8d145c07da5">operations_research::sat::AddNoOverlap2dCutGenerator</a></div><divclass="ttdeci">void AddNoOverlap2dCutGenerator(const ConstraintProto &ct, Model *m, LinearRelaxation *relaxation)</div><divclass="ttdef"><b>Definition:</b><ahref="linear__relaxation_8cc_source.html#l01267">linear_relaxation.cc:1267</a></div></div>
<divclass="ttc"id="anamespaceoperations__research_1_1sat_html_a7545a11562b86718d401f1aeb5781c2a"><divclass="ttname"><ahref="namespaceoperations__research_1_1sat.html#a7545a11562b86718d401f1aeb5781c2a">operations_research::sat::AddCircuitCutGenerator</a></div><divclass="ttdeci">void AddCircuitCutGenerator(const ConstraintProto &ct, Model *m, LinearRelaxation *relaxation)</div><divclass="ttdef"><b>Definition:</b><ahref="linear__relaxation_8cc_source.html#l01120">linear_relaxation.cc:1120</a></div></div>
<divclass="ttc"id="anamespaceoperations__research_1_1sat_html_a87f6694cfc0f549668a974462118f99e"><divclass="ttname"><ahref="namespaceoperations__research_1_1sat.html#a87f6694cfc0f549668a974462118f99e">operations_research::sat::AppendMaxAffineRelaxation</a></div><divclass="ttdeci">void AppendMaxAffineRelaxation(const ConstraintProto &ct, Model *model, LinearRelaxation *relaxation)</div><divclass="ttdef"><b>Definition:</b><ahref="linear__relaxation_8cc_source.html#l00848">linear_relaxation.cc:848</a></div></div>
<divclass="ttc"id="anamespaceoperations__research_1_1sat_html_a8b2517dbe721a55849b77267941df8d1"><divclass="ttname"><ahref="namespaceoperations__research_1_1sat.html#a8b2517dbe721a55849b77267941df8d1">operations_research::sat::AppendExactlyOneRelaxation</a></div><divclass="ttdeci">void AppendExactlyOneRelaxation(const ConstraintProto &ct, Model *model, LinearRelaxation *relaxation)</div><divclass="ttdef"><b>Definition:</b><ahref="linear__relaxation_8cc_source.html#l00433">linear_relaxation.cc:433</a></div></div>
<divclass="ttc"id="anamespaceoperations__research_1_1sat_html_a938790a385e658a61d53843b6bb5dfd6"><divclass="ttname"><ahref="namespaceoperations__research_1_1sat.html#a938790a385e658a61d53843b6bb5dfd6">operations_research::sat::CreateAlternativeLiteralsWithView</a></div><divclass="ttdeci">std::vector< Literal > CreateAlternativeLiteralsWithView(int num_literals, Model *model, LinearRelaxation *relaxation)</div><divclass="ttdef"><b>Definition:</b><ahref="linear__relaxation_8cc_source.html#l00454">linear_relaxation.cc:454</a></div></div>
<divclass="ttc"id="anamespaceoperations__research_1_1sat_html_aa4529cf0e90f927c1d7005c3cc4b70c5"><divclass="ttname"><ahref="namespaceoperations__research_1_1sat.html#aa4529cf0e90f927c1d7005c3cc4b70c5">operations_research::sat::AppendCircuitRelaxation</a></div><divclass="ttdeci">void AppendCircuitRelaxation(const ConstraintProto &ct, Model *model, LinearRelaxation *relaxation)</div><divclass="ttdef"><b>Definition:</b><ahref="linear__relaxation_8cc_source.html#l00571">linear_relaxation.cc:571</a></div></div>
<divclass="ttc"id="anamespaceoperations__research_1_1sat_html_aa490b08ec514e9c567ff098d53353db1"><divclass="ttname"><ahref="namespaceoperations__research_1_1sat.html#aa490b08ec514e9c567ff098d53353db1">operations_research::sat::AppendPartialEncodingRelaxation</a></div><divclass="ttdeci">void AppendPartialEncodingRelaxation(IntegerVariable var, const Model &model, LinearRelaxation *relaxation)</div><divclass="ttdef"><b>Definition:</b><ahref="linear__relaxation_8cc_source.html#l00173">linear_relaxation.cc:173</a></div></div>
<divclass="ttc"id="anamespaceoperations__research_1_1sat_html_ab4a9f371c11b989199cb8e867d05d813"><divclass="ttname"><ahref="namespaceoperations__research_1_1sat.html#ab4a9f371c11b989199cb8e867d05d813">operations_research::sat::AddAllDiffCutGenerator</a></div><divclass="ttdeci">void AddAllDiffCutGenerator(const ConstraintProto &ct, Model *m, LinearRelaxation *relaxation)</div><divclass="ttdef"><b>Definition:</b><ahref="linear__relaxation_8cc_source.html#l01211">linear_relaxation.cc:1211</a></div></div>
<divclass="ttc"id="anamespaceoperations__research_1_1sat_html_ac17bc38e4e32fb15f01b0346eb6d0d70"><divclass="ttname"><ahref="namespaceoperations__research_1_1sat.html#ac17bc38e4e32fb15f01b0346eb6d0d70">operations_research::sat::AddLinMaxCutGenerator</a></div><divclass="ttdeci">void AddLinMaxCutGenerator(const ConstraintProto &ct, Model *m, LinearRelaxation *relaxation)</div><divclass="ttdef"><b>Definition:</b><ahref="linear__relaxation_8cc_source.html#l01282">linear_relaxation.cc:1282</a></div></div>
<divclass="ttc"id="anamespaceoperations__research_1_1sat_html_ac2091b9e5e6e887337a566d5ca547234"><divclass="ttname"><ahref="namespaceoperations__research_1_1sat.html#ac2091b9e5e6e887337a566d5ca547234">operations_research::sat::AppendRoutesRelaxation</a></div><divclass="ttdeci">void AppendRoutesRelaxation(const ConstraintProto &ct, Model *model, LinearRelaxation *relaxation)</div><divclass="ttdef"><b>Definition:</b><ahref="linear__relaxation_8cc_source.html#l00612">linear_relaxation.cc:612</a></div></div>
<divclass="ttc"id="anamespaceoperations__research_1_1sat_html_ac5b14d2bd73645b629f45c44317a5b4e"><divclass="ttname"><ahref="namespaceoperations__research_1_1sat.html#ac5b14d2bd73645b629f45c44317a5b4e">operations_research::sat::AppendIntMaxRelaxation</a></div><divclass="ttdeci">void AppendIntMaxRelaxation(const ConstraintProto &ct, int linearization_level, Model *model, LinearRelaxation *relaxation)</div><divclass="ttdef"><b>Definition:</b><ahref="linear__relaxation_8cc_source.html#l00552">linear_relaxation.cc:552</a></div></div>
<divclass="ttc"id="anamespaceoperations__research_1_1sat_html_ad84581fcda7385786fbf520e00bcab2d"><divclass="ttname"><ahref="namespaceoperations__research_1_1sat.html#ad84581fcda7385786fbf520e00bcab2d">operations_research::sat::AppendIntMinRelaxation</a></div><divclass="ttdeci">void AppendIntMinRelaxation(const ConstraintProto &ct, bool encode_other_direction, Model *model, LinearRelaxation *relaxation)</div></div>
<divclass="ttc"id="anamespaceoperations__research_1_1sat_html_ae9204d7e95002b030bdc1cff7bb9bc83"><divclass="ttname"><ahref="namespaceoperations__research_1_1sat.html#ae9204d7e95002b030bdc1cff7bb9bc83">operations_research::sat::AddRoutesCutGenerator</a></div><divclass="ttdeci">void AddRoutesCutGenerator(const ConstraintProto &ct, Model *m, LinearRelaxation *relaxation)</div><divclass="ttdef"><b>Definition:</b><ahref="linear__relaxation_8cc_source.html#l01134">linear_relaxation.cc:1134</a></div></div>
<divclass="ttc"id="anamespaceoperations__research_1_1sat_html_aff14a4092356fceea657393b7b234b7f"><divclass="ttname"><ahref="namespaceoperations__research_1_1sat.html#aff14a4092356fceea657393b7b234b7f">operations_research::sat::AppendPartialGreaterThanEncodingRelaxation</a></div><divclass="ttdeci">void AppendPartialGreaterThanEncodingRelaxation(IntegerVariable var, const Model &model, LinearRelaxation *relaxation)</div><divclass="ttdef"><b>Definition:</b><ahref="linear__relaxation_8cc_source.html#l00248">linear_relaxation.cc:248</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>