Files
ortools-clone/docs/cpp_routing/constraint__solver_8h_source.html
2019-06-29 18:18:08 +02:00

1306 lines
1.6 MiB
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.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>OR-Tools</title>
<meta http-equiv="Content-Type" content="text/html;"/>
<meta charset="utf-8"/>
<!--<link rel='stylesheet' type='text/css' href="https://fonts.googleapis.com/css?family=Ubuntu:400,700,400italic"/>-->
<link rel="stylesheet" type="text/css" href="ortools.css" title="default" media="screen,print" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
</head>
<body>
<div id="banner-container">
<div id="banner">
<span id="sfml">OR-Tools 7.2</span>
</div>
</div>
<link rel="icon" href="https://developers.google.com/optimization/images/orLogo.png">
<div id="content">
<!-- Generated by Doxygen 1.8.15 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>File&#160;Members</span></a></li>
</ul>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_a7cc1eeded8f693d0da6c729bc88c45a.html">ortools</a></li><li class="navelem"><a class="el" href="dir_afbb39f66221aac28bbdefd1dca2b2b0.html">constraint_solver</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">constraint_solver.h</div> </div>
</div><!--header-->
<div class="contents">
<a href="constraint__solver_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">// Declaration of the core objects for the constraint solver.</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">// The literature around constraint programming is extremely dense but one</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// can find some basic introductions in the following links:</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// - http://en.wikipedia.org/wiki/Constraint_programming</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">// - http://kti.mff.cuni.cz/~bartak/constraints/index.html</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment">// Here is a very simple Constraint Programming problem:</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">// Knowing that we see 56 legs and 20 heads, how many pheasants and rabbits</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment">// are we looking at?</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment">// Here is some simple Constraint Programming code to find out:</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment">// void pheasant() {</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment">// Solver s(&quot;pheasant&quot;);</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="comment">// IntVar* const p = s.MakeIntVar(0, 20, &quot;pheasant&quot;));</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="comment">// IntVar* const r = s.MakeIntVar(0, 20, &quot;rabbit&quot;));</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="comment">// IntExpr* const legs = s.MakeSum(s.MakeProd(p, 2), s.MakeProd(r, 4));</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="comment">// IntExpr* const heads = s.MakeSum(p, r);</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="comment">// Constraint* const ct_legs = s.MakeEquality(legs, 56);</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="comment">// Constraint* const ct_heads = s.MakeEquality(heads, 20);</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="comment">// s.AddConstraint(ct_legs);</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="comment">// s.AddConstraint(ct_heads);</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="comment">// DecisionBuilder* const db = s.MakePhase(p, r,</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="comment">// Solver::CHOOSE_FIRST_UNBOUND,</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="comment">// Solver::ASSIGN_MIN_VALUE);</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="comment">// s.NewSearch(db);</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="comment">// CHECK(s.NextSolution());</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="comment">// LOG(INFO) &lt;&lt; &quot;rabbits -&gt; &quot; &lt;&lt; r-&gt;Value() &lt;&lt; &quot;, pheasants -&gt; &quot;</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="comment">// &lt;&lt; p-&gt;Value();</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="comment">// LOG(INFO) &lt;&lt; s.DebugString();</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="comment">// s.EndSearch();</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="comment">// which outputs:</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">// rabbits -&gt; 8, pheasants -&gt; 12</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="comment">// Solver(name = &quot;pheasant&quot;,</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="comment">// state = OUTSIDE_SEARCH,</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="comment">// branches = 0,</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="comment">// fails = 0,</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="comment">// decisions = 0</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="comment">// propagation loops = 11,</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="comment">// demons Run = 25,</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="comment">// Run time = 0 ms)</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="preprocessor">#ifndef OR_TOOLS_CONSTRAINT_SOLVER_CONSTRAINT_SOLVER_H_</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="preprocessor">#define OR_TOOLS_CONSTRAINT_SOLVER_CONSTRAINT_SOLVER_H_</span></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;<span class="preprocessor">#include &lt;functional&gt;</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="preprocessor">#include &lt;iosfwd&gt;</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="preprocessor">#include &quot;absl/container/flat_hash_map.h&quot;</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="preprocessor">#include &quot;absl/container/flat_hash_set.h&quot;</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="preprocessor">#include &quot;absl/strings/str_format.h&quot;</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="preprocessor">#include &quot;ortools/base/commandlineflags.h&quot;</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="preprocessor">#include &quot;ortools/base/hash.h&quot;</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="preprocessor">#include &quot;ortools/base/integral_types.h&quot;</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="preprocessor">#include &quot;ortools/base/logging.h&quot;</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="preprocessor">#include &quot;ortools/base/macros.h&quot;</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="preprocessor">#include &quot;ortools/base/map_util.h&quot;</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="preprocessor">#include &quot;ortools/base/random.h&quot;</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="preprocessor">#include &quot;ortools/base/sysinfo.h&quot;</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="preprocessor">#include &quot;ortools/base/timer.h&quot;</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="preprocessor">#include &quot;ortools/constraint_solver/solver_parameters.pb.h&quot;</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="preprocessor">#include &quot;ortools/util/piecewise_linear_function.h&quot;</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="preprocessor">#include &quot;ortools/util/sorted_interval_list.h&quot;</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="preprocessor">#include &quot;ortools/util/tuple_set.h&quot;</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="keyword">class </span>File;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;</div><div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="namespaceoperations__research.html"> 93</a></span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceoperations__research.html">operations_research</a> {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="keyword">class </span>AssignmentProto;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1BaseObject.html">BaseObject</a>;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="keyword">class </span>CpArgument;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="keyword">class </span>CpConstraint;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="keyword">class </span>CpIntegerExpression;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="keyword">class </span>CpIntervalVariable;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="keyword">class </span>CpSequenceVariable;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1CastConstraint.html">CastConstraint</a>;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1Decision.html">Decision</a>;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1DecisionVisitor.html">DecisionVisitor</a>;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1Demon.html">Demon</a>;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="keyword">class </span>DemonProfiler;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;<span class="keyword">class </span>LocalSearchProfiler;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="keyword">class </span>Dimension;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1DisjunctiveConstraint.html">DisjunctiveConstraint</a>;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="keyword">class </span>ExpressionCache;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;<span class="keyword">class </span>IntTupleSet;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;<span class="keyword">class </span>IntVarAssignment;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1IntVarElement.html">IntVarElement</a>;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;<span class="keyword">class </span>IntervalVarAssignment;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1IntervalVarElement.html">IntervalVarElement</a>;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1IntVarLocalSearchFilter.html">IntVarLocalSearchFilter</a>;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1LocalSearchFilter.html">LocalSearchFilter</a>;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1LocalSearchOperator.html">LocalSearchOperator</a>;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;<span class="keyword">class </span>LocalSearchPhaseParameters;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1ModelCache.html">ModelCache</a>;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1ModelVisitor.html">ModelVisitor</a>;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1OptimizeVar.html">OptimizeVar</a>;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1Pack.html">Pack</a>;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1PropagationBaseObject.html">PropagationBaseObject</a>;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1PropagationMonitor.html">PropagationMonitor</a>;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1LocalSearchMonitor.html">LocalSearchMonitor</a>;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;<span class="keyword">class </span>Queue;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1RevBitMatrix.html">RevBitMatrix</a>;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1RevBitSet.html">RevBitSet</a>;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1RegularLimit.html">RegularLimit</a>;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="keyword">class </span>RegularLimitParameters;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;<span class="keyword">class </span>Search;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1SearchLimit.html">SearchLimit</a>;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a>;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<span class="keyword">class </span>SequenceVarAssignment;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1SolutionCollector.html">SolutionCollector</a>;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1SolutionPool.html">SolutionPool</a>;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1Solver.html">Solver</a>;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="keyword">class </span>ConstraintSolverParameters;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1SymmetryBreaker.html">SymmetryBreaker</a>;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;<span class="keyword">struct </span>StateInfo;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;<span class="keyword">struct </span>Trail;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;</div><div class="line"><a name="l00151"></a><span class="lineno"><a class="line" href="classoperations__research_1_1SimpleRevFIFO.html"> 151</a></span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1SimpleRevFIFO.html">SimpleRevFIFO</a>;</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">// This struct holds all parameters for the default search.</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;<span class="comment">// DefaultPhaseParameters is only used by Solver::MakeDefaultPhase methods.</span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;<span class="comment">// Note this is for advanced users only.</span></div><div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="structoperations__research_1_1DefaultPhaseParameters.html"> 156</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structoperations__research_1_1DefaultPhaseParameters.html">DefaultPhaseParameters</a> {</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00158"></a><span class="lineno"><a class="line" href="structoperations__research_1_1DefaultPhaseParameters.html#aa1ee3388a187cc5465d43d25ac9ab1f1"> 158</a></span>&#160; <span class="keyword">enum</span> <a class="code" href="structoperations__research_1_1DefaultPhaseParameters.html#aa1ee3388a187cc5465d43d25ac9ab1f1">VariableSelection</a> {</div><div class="line"><a name="l00159"></a><span class="lineno"><a class="line" href="structoperations__research_1_1DefaultPhaseParameters.html#aa1ee3388a187cc5465d43d25ac9ab1f1a7498691aa1fa94308453cbd0c3233e6d"> 159</a></span>&#160; <a class="code" href="structoperations__research_1_1DefaultPhaseParameters.html#aa1ee3388a187cc5465d43d25ac9ab1f1a7498691aa1fa94308453cbd0c3233e6d">CHOOSE_MAX_SUM_IMPACT</a> = 0,</div><div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="structoperations__research_1_1DefaultPhaseParameters.html#aa1ee3388a187cc5465d43d25ac9ab1f1afa625d3c663f3bd0d081170ecf446f3b"> 160</a></span>&#160; <a class="code" href="structoperations__research_1_1DefaultPhaseParameters.html#aa1ee3388a187cc5465d43d25ac9ab1f1afa625d3c663f3bd0d081170ecf446f3b">CHOOSE_MAX_AVERAGE_IMPACT</a> = 1,</div><div class="line"><a name="l00161"></a><span class="lineno"><a class="line" href="structoperations__research_1_1DefaultPhaseParameters.html#aa1ee3388a187cc5465d43d25ac9ab1f1af2a047b8f99a5e3d2dcfff41b7575242"> 161</a></span>&#160; <a class="code" href="structoperations__research_1_1DefaultPhaseParameters.html#aa1ee3388a187cc5465d43d25ac9ab1f1af2a047b8f99a5e3d2dcfff41b7575242">CHOOSE_MAX_VALUE_IMPACT</a> = 2,</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; };</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;</div><div class="line"><a name="l00164"></a><span class="lineno"><a class="line" href="structoperations__research_1_1DefaultPhaseParameters.html#a6938c08fc955872a3b8da845c8ad4e16"> 164</a></span>&#160; <span class="keyword">enum</span> <a class="code" href="structoperations__research_1_1DefaultPhaseParameters.html#a6938c08fc955872a3b8da845c8ad4e16">ValueSelection</a> {</div><div class="line"><a name="l00165"></a><span class="lineno"><a class="line" href="structoperations__research_1_1DefaultPhaseParameters.html#a6938c08fc955872a3b8da845c8ad4e16abdea23afb50539f635029f8424f40237"> 165</a></span>&#160; <a class="code" href="structoperations__research_1_1DefaultPhaseParameters.html#a6938c08fc955872a3b8da845c8ad4e16abdea23afb50539f635029f8424f40237">SELECT_MIN_IMPACT</a> = 0,</div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="structoperations__research_1_1DefaultPhaseParameters.html#a6938c08fc955872a3b8da845c8ad4e16a9b07a23261ca51a42ecd8d28387495da"> 166</a></span>&#160; <a class="code" href="structoperations__research_1_1DefaultPhaseParameters.html#a6938c08fc955872a3b8da845c8ad4e16a9b07a23261ca51a42ecd8d28387495da">SELECT_MAX_IMPACT</a> = 1,</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; };</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"><a class="line" href="structoperations__research_1_1DefaultPhaseParameters.html#a57b6ace15b9d8666f76c6618d8addc1daa7dc5065949f517176193ad86c4e6368"> 169</a></span>&#160; <span class="keyword">enum</span> <a class="code" href="structoperations__research_1_1DefaultPhaseParameters.html#a57b6ace15b9d8666f76c6618d8addc1d">DisplayLevel</a> { <a class="code" href="structoperations__research_1_1DefaultPhaseParameters.html#a57b6ace15b9d8666f76c6618d8addc1dab1a4c17b2c342104297c4d23db4c6936">NONE</a> = 0, <a class="code" href="structoperations__research_1_1DefaultPhaseParameters.html#a57b6ace15b9d8666f76c6618d8addc1da31fef74cca87cb00faf89405448bf546">NORMAL</a> = 1, <a class="code" href="structoperations__research_1_1DefaultPhaseParameters.html#a57b6ace15b9d8666f76c6618d8addc1daa7dc5065949f517176193ad86c4e6368">VERBOSE</a> = 2 };</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="comment">// This parameter describes how the next variable to instantiate</span></div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="comment">// will be chosen.</span></div><div class="line"><a name="l00173"></a><span class="lineno"><a class="line" href="structoperations__research_1_1DefaultPhaseParameters.html#ae1903959bc4ab1ec6e92aabd9465dc90"> 173</a></span>&#160; <a class="code" href="structoperations__research_1_1DefaultPhaseParameters.html#aa1ee3388a187cc5465d43d25ac9ab1f1">VariableSelection</a> <a class="code" href="structoperations__research_1_1DefaultPhaseParameters.html#ae1903959bc4ab1ec6e92aabd9465dc90">var_selection_schema</a>;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="comment">// This parameter describes which value to select for a given var.</span></div><div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="structoperations__research_1_1DefaultPhaseParameters.html#ab0fe50ca88d7e5f45ae9db09d2bd2fec"> 176</a></span>&#160; <a class="code" href="structoperations__research_1_1DefaultPhaseParameters.html#a6938c08fc955872a3b8da845c8ad4e16">ValueSelection</a> <a class="code" href="structoperations__research_1_1DefaultPhaseParameters.html#ab0fe50ca88d7e5f45ae9db09d2bd2fec">value_selection_schema</a>;</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">// Maximum number of intervals that the initialization of impacts will scan</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="comment">// per variable.</span></div><div class="line"><a name="l00180"></a><span class="lineno"><a class="line" href="structoperations__research_1_1DefaultPhaseParameters.html#a6e1093d6bf5e0301b6a7372b2a5fa119"> 180</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structoperations__research_1_1DefaultPhaseParameters.html#a6e1093d6bf5e0301b6a7372b2a5fa119">initialization_splits</a>;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="comment">// The default phase will run heuristics periodically. This parameter</span></div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="comment">// indicates if we should run all heuristics, or a randomly selected</span></div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="comment">// one.</span></div><div class="line"><a name="l00185"></a><span class="lineno"><a class="line" href="structoperations__research_1_1DefaultPhaseParameters.html#a052e4d8daedbab3afea9d53868b00161"> 185</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="structoperations__research_1_1DefaultPhaseParameters.html#a052e4d8daedbab3afea9d53868b00161">run_all_heuristics</a>;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="comment">// The distance in nodes between each run of the heuristics. A</span></div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="comment">// negative or null value will mean that we will not run heuristics</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="comment">// at all.</span></div><div class="line"><a name="l00190"></a><span class="lineno"><a class="line" href="structoperations__research_1_1DefaultPhaseParameters.html#a5599253b090dbe9b50cfa40fe05ecce0"> 190</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structoperations__research_1_1DefaultPhaseParameters.html#a5599253b090dbe9b50cfa40fe05ecce0">heuristic_period</a>;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="comment">// The failure limit for each heuristic that we run.</span></div><div class="line"><a name="l00193"></a><span class="lineno"><a class="line" href="structoperations__research_1_1DefaultPhaseParameters.html#a70d7630b38e05e7284641e04416fd570"> 193</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structoperations__research_1_1DefaultPhaseParameters.html#a70d7630b38e05e7284641e04416fd570">heuristic_num_failures_limit</a>;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="comment">// Whether to keep the impact from the first search for other searches,</span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="comment">// or to recompute the impact for each new search.</span></div><div class="line"><a name="l00197"></a><span class="lineno"><a class="line" href="structoperations__research_1_1DefaultPhaseParameters.html#a3d609270cd755aabacde8c738d49c1da"> 197</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="structoperations__research_1_1DefaultPhaseParameters.html#a3d609270cd755aabacde8c738d49c1da">persistent_impact</a>;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="comment">// Seed used to initialize the random part in some heuristics.</span></div><div class="line"><a name="l00200"></a><span class="lineno"><a class="line" href="structoperations__research_1_1DefaultPhaseParameters.html#adbccfb764ad843006381e772c828ae8b"> 200</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structoperations__research_1_1DefaultPhaseParameters.html#adbccfb764ad843006381e772c828ae8b">random_seed</a>;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="comment">// This represents the amount of information displayed by the default search.</span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="comment">// NONE means no display, VERBOSE means extra information.</span></div><div class="line"><a name="l00204"></a><span class="lineno"><a class="line" href="structoperations__research_1_1DefaultPhaseParameters.html#a7a3fddb880fc793ebe5fc960d31ab3a4"> 204</a></span>&#160; <a class="code" href="structoperations__research_1_1DefaultPhaseParameters.html#a57b6ace15b9d8666f76c6618d8addc1d">DisplayLevel</a> <a class="code" href="structoperations__research_1_1DefaultPhaseParameters.html#a7a3fddb880fc793ebe5fc960d31ab3a4">display_level</a>;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="comment">// Should we use last conflict method. The default is false.</span></div><div class="line"><a name="l00207"></a><span class="lineno"><a class="line" href="structoperations__research_1_1DefaultPhaseParameters.html#a28c6636498f47abc60feabd264ebb0bf"> 207</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="structoperations__research_1_1DefaultPhaseParameters.html#a28c6636498f47abc60feabd264ebb0bf">use_last_conflict</a>;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="comment">// When defined, this overrides the default impact based decision builder.</span></div><div class="line"><a name="l00210"></a><span class="lineno"><a class="line" href="structoperations__research_1_1DefaultPhaseParameters.html#a4e60526379b527b91e6e271aac905bc5"> 210</a></span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="structoperations__research_1_1DefaultPhaseParameters.html#a4e60526379b527b91e6e271aac905bc5">decision_builder</a>;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <a class="code" href="structoperations__research_1_1DefaultPhaseParameters.html#a76d1de2961308e35a45663d9af88c78c">DefaultPhaseParameters</a>();</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;};</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;<span class="comment">// Solver Class</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;<span class="comment">// A solver represents the main computation engine. It implements the entire</span></div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;<span class="comment">// range of Constraint Programming protocols:</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;<span class="comment">// - Reversibility</span></div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;<span class="comment">// - Propagation</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;<span class="comment">// - Search</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;<span class="comment">// Usually, Constraint Programming code consists of</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;<span class="comment">// - the creation of the Solver,</span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;<span class="comment">// - the creation of the decision variables of the model,</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;<span class="comment">// - the creation of the constraints of the model and their addition to the</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;<span class="comment">// solver() through the AddConstraint() method,</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;<span class="comment">// - the creation of the main DecisionBuilder class,</span></div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;<span class="comment">// - the launch of the solve() method with the decision builder.</span></div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;<span class="comment">// For the time being, Solver is neither MT_SAFE nor MT_HOT.</span></div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;<span class="comment"></span><span class="comment">//</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1Solver.html">Solver</a> {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00238"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html"> 238</a></span>&#160; <span class="comment">// Holds semantic information stating that the &#39;expression&#39; has been</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="comment">// cast into &#39;variable&#39; using the Var() method, and that</span></div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="comment">// &#39;maintainer&#39; is responsible for maintaining the equality between</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="comment">// &#39;variable&#39; and &#39;expression&#39;.</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keyword">struct </span><a class="code" href="structoperations__research_1_1Solver_1_1IntegerCastInfo.html">IntegerCastInfo</a> {</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <a class="code" href="structoperations__research_1_1Solver_1_1IntegerCastInfo.html#a4829cf800cd883bd0670163ef47da7cb">IntegerCastInfo</a>()</div><div class="line"><a name="l00244"></a><span class="lineno"><a class="line" href="structoperations__research_1_1Solver_1_1IntegerCastInfo.html"> 244</a></span>&#160; : <a class="code" href="structoperations__research_1_1Solver_1_1IntegerCastInfo.html#a4ddfd15e19f82e34ba4a6ef321ee0cef">variable</a>(nullptr), <a class="code" href="structoperations__research_1_1Solver_1_1IntegerCastInfo.html#a93bf7638f82b52965834ad94286161c8">expression</a>(nullptr), <a class="code" href="structoperations__research_1_1Solver_1_1IntegerCastInfo.html#ae16e463040462ec79e67106d639789a1">maintainer</a>(nullptr) {}</div><div class="line"><a name="l00245"></a><span class="lineno"><a class="line" href="structoperations__research_1_1Solver_1_1IntegerCastInfo.html#a4829cf800cd883bd0670163ef47da7cb"> 245</a></span>&#160; <a class="code" href="structoperations__research_1_1Solver_1_1IntegerCastInfo.html#a4829cf800cd883bd0670163ef47da7cb">IntegerCastInfo</a>(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> v, <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> e, <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <span class="keyword">const</span> c)</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; : <a class="code" href="structoperations__research_1_1Solver_1_1IntegerCastInfo.html#a4ddfd15e19f82e34ba4a6ef321ee0cef">variable</a>(v), <a class="code" href="structoperations__research_1_1Solver_1_1IntegerCastInfo.html#a93bf7638f82b52965834ad94286161c8">expression</a>(e), <a class="code" href="structoperations__research_1_1Solver_1_1IntegerCastInfo.html#ae16e463040462ec79e67106d639789a1">maintainer</a>(c) {}</div><div class="line"><a name="l00247"></a><span class="lineno"><a class="line" href="structoperations__research_1_1Solver_1_1IntegerCastInfo.html#acb3e9a713650dd8adf2ccd35f54f49dc"> 247</a></span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="structoperations__research_1_1Solver_1_1IntegerCastInfo.html#a4ddfd15e19f82e34ba4a6ef321ee0cef">variable</a>;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="structoperations__research_1_1Solver_1_1IntegerCastInfo.html#a93bf7638f82b52965834ad94286161c8">expression</a>;</div><div class="line"><a name="l00249"></a><span class="lineno"><a class="line" href="structoperations__research_1_1Solver_1_1IntegerCastInfo.html#a4ddfd15e19f82e34ba4a6ef321ee0cef"> 249</a></span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="structoperations__research_1_1Solver_1_1IntegerCastInfo.html#ae16e463040462ec79e67106d639789a1">maintainer</a>;</div><div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="structoperations__research_1_1Solver_1_1IntegerCastInfo.html#a93bf7638f82b52965834ad94286161c8"> 250</a></span>&#160; };</div><div class="line"><a name="l00251"></a><span class="lineno"><a class="line" href="structoperations__research_1_1Solver_1_1IntegerCastInfo.html#ae16e463040462ec79e67106d639789a1"> 251</a></span>&#160;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="comment">// Number of priorities for demons.</span></div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code" href="classoperations__research_1_1Solver.html#ad4faf53cefb2c2cdb8892b978a4b93a9">kNumPriorities</a> = 3;</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;</div><div class="line"><a name="l00255"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ad4faf53cefb2c2cdb8892b978a4b93a9"> 255</a></span>&#160; <span class="comment">// This enum describes the strategy used to select the next branching</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="comment">// variable at each node during the search.</span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keyword">enum</span> <a class="code" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8b">IntVarStrategy</a> {</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="comment">// The default behavior is CHOOSE_FIRST_UNBOUND.</span></div><div class="line"><a name="l00259"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8b"> 259</a></span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8bab82ee292f55491e6068a560434f9a649">INT_VAR_DEFAULT</a>,</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;</div><div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8bab82ee292f55491e6068a560434f9a649"> 261</a></span>&#160; <span class="comment">// The simple selection is CHOOSE_FIRST_UNBOUND.</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8baccdbce6c50c85d4ed2c507dbc5691116">INT_VAR_SIMPLE</a>,</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"><a class="line" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8baccdbce6c50c85d4ed2c507dbc5691116"> 264</a></span>&#160; <span class="comment">// Select the first unbound variable.</span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="comment">// Variables are considered in the order of the vector of IntVars used</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="comment">// to create the selector.</span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8ba8f69d3fc74e6a3faaa9be2583ce8fce3">CHOOSE_FIRST_UNBOUND</a>,</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"><a class="line" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8ba8f69d3fc74e6a3faaa9be2583ce8fce3"> 269</a></span>&#160; <span class="comment">// Randomly select one of the remaining unbound variables.</span></div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8ba2547ec2e47ea5c8da65a39817a04f220">CHOOSE_RANDOM</a>,</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;</div><div class="line"><a name="l00272"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8ba2547ec2e47ea5c8da65a39817a04f220"> 272</a></span>&#160; <span class="comment">// Among unbound variables, select the variable with the smallest size,</span></div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="comment">// i.e., the smallest number of possible values.</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="comment">// In case of a tie, the selected variables is the one with the lowest min</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="comment">// value.</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="comment">// In case of a tie, the first one is selected, first being defined by the</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="comment">// order in the vector of IntVars used to create the selector.</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8ba1b2865e3429fc5b1956da5f601ae0ed9">CHOOSE_MIN_SIZE_LOWEST_MIN</a>,</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;</div><div class="line"><a name="l00280"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8ba1b2865e3429fc5b1956da5f601ae0ed9"> 280</a></span>&#160; <span class="comment">// Among unbound variables, select the variable with the smallest size,</span></div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="comment">// i.e., the smallest number of possible values.</span></div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="comment">// In case of a tie, the selected variable is the one with the highest min</span></div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="comment">// value.</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="comment">// In case of a tie, the first one is selected, first being defined by the</span></div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="comment">// order in the vector of IntVars used to create the selector.</span></div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8baf654ef2638f1ed2cd22cee830695a2c9">CHOOSE_MIN_SIZE_HIGHEST_MIN</a>,</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;</div><div class="line"><a name="l00288"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8baf654ef2638f1ed2cd22cee830695a2c9"> 288</a></span>&#160; <span class="comment">// Among unbound variables, select the variable with the smallest size,</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="comment">// i.e., the smallest number of possible values.</span></div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="comment">// In case of a tie, the selected variables is the one with the lowest max</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="comment">// value.</span></div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="comment">// In case of a tie, the first one is selected, first being defined by the</span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="comment">// order in the vector of IntVars used to create the selector.</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8ba8954f01caaa3b482d349a3ed6c254155">CHOOSE_MIN_SIZE_LOWEST_MAX</a>,</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;</div><div class="line"><a name="l00296"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8ba8954f01caaa3b482d349a3ed6c254155"> 296</a></span>&#160; <span class="comment">// Among unbound variables, select the variable with the smallest size,</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="comment">// i.e., the smallest number of possible values.</span></div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="comment">// In case of a tie, the selected variable is the one with the highest max</span></div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="comment">// value.</span></div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="comment">// In case of a tie, the first one is selected, first being defined by the</span></div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="comment">// order in the vector of IntVars used to create the selector.</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8baf1eadfb5ea6dc853f075589cded04314">CHOOSE_MIN_SIZE_HIGHEST_MAX</a>,</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;</div><div class="line"><a name="l00304"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8baf1eadfb5ea6dc853f075589cded04314"> 304</a></span>&#160; <span class="comment">// Among unbound variables, select the variable with the smallest minimal</span></div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="comment">// value.</span></div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="comment">// In case of a tie, the first one is selected, &quot;first&quot; defined by the</span></div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="comment">// order in the vector of IntVars used to create the selector.</span></div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8ba2edce2c3cb946cfafd4541b442b3c511">CHOOSE_LOWEST_MIN</a>,</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;</div><div class="line"><a name="l00310"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8ba2edce2c3cb946cfafd4541b442b3c511"> 310</a></span>&#160; <span class="comment">// Among unbound variables, select the variable with the highest maximal</span></div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="comment">// value.</span></div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="comment">// In case of a tie, the first one is selected, first being defined by the</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="comment">// order in the vector of IntVars used to create the selector.</span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8ba76e76e12dcb8935b6a7713f849a11df6">CHOOSE_HIGHEST_MAX</a>,</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;</div><div class="line"><a name="l00316"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8ba76e76e12dcb8935b6a7713f849a11df6"> 316</a></span>&#160; <span class="comment">// Among unbound variables, select the variable with the smallest size.</span></div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="comment">// In case of a tie, the first one is selected, first being defined by the</span></div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="comment">// order in the vector of IntVars used to create the selector.</span></div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8babcab6960ac4a67fbb73fb94aa5e752e1">CHOOSE_MIN_SIZE</a>,</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;</div><div class="line"><a name="l00321"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8babcab6960ac4a67fbb73fb94aa5e752e1"> 321</a></span>&#160; <span class="comment">// Among unbound variables, select the variable with the highest size.</span></div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="comment">// In case of a tie, the first one is selected, first being defined by the</span></div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="comment">// order in the vector of IntVars used to create the selector.</span></div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8babce047aa9c6aa994057ae76e535d59df">CHOOSE_MAX_SIZE</a>,</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;</div><div class="line"><a name="l00326"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8babce047aa9c6aa994057ae76e535d59df"> 326</a></span>&#160; <span class="comment">// Among unbound variables, select the variable with the largest</span></div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="comment">// gap between the first and the second values of the domain.</span></div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8baf25b88c6fb8a0b956dd3812af864e2a9">CHOOSE_MAX_REGRET_ON_MIN</a>,</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;</div><div class="line"><a name="l00330"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8baf25b88c6fb8a0b956dd3812af864e2a9"> 330</a></span>&#160; <span class="comment">// Selects the next unbound variable on a path, the path being defined by</span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="comment">// the variables: var[i] corresponds to the index of the next of i.</span></div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8ba46e6f2fa2b646a2114a32d816ba399ee">CHOOSE_PATH</a>,</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; };</div><div class="line"><a name="l00334"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8ba46e6f2fa2b646a2114a32d816ba399ee"> 334</a></span>&#160; <span class="comment">// TODO(user): add HIGHEST_MIN and LOWEST_MAX.</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">// This enum describes the strategy used to select the next variable value to</span></div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="comment">// set.</span></div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keyword">enum</span> <a class="code" href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659">IntValueStrategy</a> {</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="comment">// The default behavior is ASSIGN_MIN_VALUE.</span></div><div class="line"><a name="l00340"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659"> 340</a></span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659a3291dae3d9aa520fe52d1ffaa2a2eadc">INT_VALUE_DEFAULT</a>,</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;</div><div class="line"><a name="l00342"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659a3291dae3d9aa520fe52d1ffaa2a2eadc"> 342</a></span>&#160; <span class="comment">// The simple selection is ASSIGN_MIN_VALUE.</span></div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659a78588d0b2a789c20c1252eaffed29e50">INT_VALUE_SIMPLE</a>,</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160;</div><div class="line"><a name="l00345"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659a78588d0b2a789c20c1252eaffed29e50"> 345</a></span>&#160; <span class="comment">// Selects the min value of the selected variable.</span></div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659ab68b8c2566158157a2ba1660aae07553">ASSIGN_MIN_VALUE</a>,</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;</div><div class="line"><a name="l00348"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659ab68b8c2566158157a2ba1660aae07553"> 348</a></span>&#160; <span class="comment">// Selects the max value of the selected variable.</span></div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659a13d07bd4fac1cf9de979eaa59bb9089b">ASSIGN_MAX_VALUE</a>,</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;</div><div class="line"><a name="l00351"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659a13d07bd4fac1cf9de979eaa59bb9089b"> 351</a></span>&#160; <span class="comment">// Selects randomly one of the possible values of the selected variable.</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659ab75b213a2a3871a9946a74610e388b8e">ASSIGN_RANDOM_VALUE</a>,</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;</div><div class="line"><a name="l00354"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659ab75b213a2a3871a9946a74610e388b8e"> 354</a></span>&#160; <span class="comment">// Selects the first possible value which is the closest to the center</span></div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="comment">// of the domain of the selected variable.</span></div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="comment">// The center is defined as (min + max) / 2.</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659a0484f76eaad7b381c13bfd4ccd47ef68">ASSIGN_CENTER_VALUE</a>,</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;</div><div class="line"><a name="l00359"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659a0484f76eaad7b381c13bfd4ccd47ef68"> 359</a></span>&#160; <span class="comment">// Split the domain in two around the center, and choose the lower</span></div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="comment">// part first.</span></div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659a5abe444845850bb7a0f2f5c87cef2763">SPLIT_LOWER_HALF</a>,</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;</div><div class="line"><a name="l00363"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659a5abe444845850bb7a0f2f5c87cef2763"> 363</a></span>&#160; <span class="comment">// Split the domain in two around the center, and choose the lower</span></div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="comment">// part first.</span></div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659a094a0fbeabae8b18ca5367f2564a0896">SPLIT_UPPER_HALF</a>,</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; };</div><div class="line"><a name="l00367"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659a094a0fbeabae8b18ca5367f2564a0896"> 367</a></span>&#160;</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="comment">// This enum is used by Solver::MakePhase to specify how to select variables</span></div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="comment">// and values during the search.</span></div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="comment">// In Solver::MakePhase(const std::vector&lt;IntVar*&gt;&amp;, IntVarStrategy,</span></div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="comment">// IntValueStrategy), variables are selected first, and then the associated</span></div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="comment">// value.</span></div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="comment">// In Solver::MakePhase(const std::vector&lt;IntVar*&gt;&amp; vars, IndexEvaluator2,</span></div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="comment">// EvaluatorStrategy), the selection is done scanning every pair</span></div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="comment">// &lt;variable, possible value&gt;. The next selected pair is then the best among</span></div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="comment">// all possibilities, i.e. the pair with the smallest evaluation.</span></div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="comment">// As this is costly, two options are offered: static or dynamic evaluation.</span></div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keyword">enum</span> <a class="code" href="classoperations__research_1_1Solver.html#afabd2f40b8da33b224a5cafd2a053a21">EvaluatorStrategy</a> {</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="comment">// Pairs are compared at the first call of the selector, and results are</span></div><div class="line"><a name="l00380"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#afabd2f40b8da33b224a5cafd2a053a21"> 380</a></span>&#160; <span class="comment">// cached. Next calls to the selector use the previous computation, and so</span></div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="comment">// are not up-to-date, e.g. some &lt;variable, value&gt; pairs may not be possible</span></div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="comment">// anymore due to propagation since the first to call.</span></div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#afabd2f40b8da33b224a5cafd2a053a21ad2e527283c597c714aa93e9fa72ee0e7">CHOOSE_STATIC_GLOBAL_BEST</a>,</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;</div><div class="line"><a name="l00385"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#afabd2f40b8da33b224a5cafd2a053a21ad2e527283c597c714aa93e9fa72ee0e7"> 385</a></span>&#160; <span class="comment">// Pairs are compared each time a variable is selected. That way all pairs</span></div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="comment">// are relevant and evaluation is accurate.</span></div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="comment">// This strategy runs in O(number-of-pairs) at each variable selection,</span></div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="comment">// versus O(1) in the static version.</span></div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#afabd2f40b8da33b224a5cafd2a053a21a4c35b22102e37b5ca3d0e62cffcf93d6">CHOOSE_DYNAMIC_GLOBAL_BEST</a>,</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; };</div><div class="line"><a name="l00391"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#afabd2f40b8da33b224a5cafd2a053a21a4c35b22102e37b5ca3d0e62cffcf93d6"> 391</a></span>&#160;</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="comment">// Used for scheduling. Not yet implemented.</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="keyword">enum</span> <a class="code" href="classoperations__research_1_1Solver.html#a94a24557456395e59c924a095f2096aa">SequenceStrategy</a> {</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a94a24557456395e59c924a095f2096aaaaf8c34e2288277212469f187b5cc268b">SEQUENCE_DEFAULT</a>,</div><div class="line"><a name="l00395"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a94a24557456395e59c924a095f2096aa"> 395</a></span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a94a24557456395e59c924a095f2096aaa2824d95f6832660bf47a077680403b7c">SEQUENCE_SIMPLE</a>,</div><div class="line"><a name="l00396"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a94a24557456395e59c924a095f2096aaaaf8c34e2288277212469f187b5cc268b"> 396</a></span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a94a24557456395e59c924a095f2096aaaeb08eb7c7c4cd0b65331584e4ae7bedf">CHOOSE_MIN_SLACK_RANK_FORWARD</a>,</div><div class="line"><a name="l00397"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a94a24557456395e59c924a095f2096aaa2824d95f6832660bf47a077680403b7c"> 397</a></span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a94a24557456395e59c924a095f2096aaa139097881c016328ab920b3505100887">CHOOSE_RANDOM_RANK_FORWARD</a>,</div><div class="line"><a name="l00398"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a94a24557456395e59c924a095f2096aaaeb08eb7c7c4cd0b65331584e4ae7bedf"> 398</a></span>&#160; };</div><div class="line"><a name="l00399"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a94a24557456395e59c924a095f2096aaa139097881c016328ab920b3505100887"> 399</a></span>&#160;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="comment">// This enum describes the straregy used to select the next interval variable</span></div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="comment">// and its value to be fixed.</span></div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keyword">enum</span> <a class="code" href="classoperations__research_1_1Solver.html#ae21b3786b7770dc880343e4a1445b424">IntervalStrategy</a> {</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="comment">// The default is INTERVAL_SET_TIMES_FORWARD.</span></div><div class="line"><a name="l00404"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ae21b3786b7770dc880343e4a1445b424"> 404</a></span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ae21b3786b7770dc880343e4a1445b424a1bd1a37995f05ae93089ba0475799682">INTERVAL_DEFAULT</a>,</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="comment">// The simple is INTERVAL_SET_TIMES_FORWARD.</span></div><div class="line"><a name="l00406"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ae21b3786b7770dc880343e4a1445b424a1bd1a37995f05ae93089ba0475799682"> 406</a></span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ae21b3786b7770dc880343e4a1445b424ae24e4970fab2a37e23eaa50c783fd6e7">INTERVAL_SIMPLE</a>,</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="comment">// Selects the variable with the lowest starting time of all variables,</span></div><div class="line"><a name="l00408"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ae21b3786b7770dc880343e4a1445b424ae24e4970fab2a37e23eaa50c783fd6e7"> 408</a></span>&#160; <span class="comment">// and fixes its starting time to this lowest value.</span></div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ae21b3786b7770dc880343e4a1445b424a0ad27937b9a501b07827886abd97a8df">INTERVAL_SET_TIMES_FORWARD</a>,</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="comment">// Selects the variable with the highest ending time of all variables,</span></div><div class="line"><a name="l00411"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ae21b3786b7770dc880343e4a1445b424a0ad27937b9a501b07827886abd97a8df"> 411</a></span>&#160; <span class="comment">// and fixes the ending time to this highest values.</span></div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ae21b3786b7770dc880343e4a1445b424a3892d13c5d6ce4a93609e4eb176195a0">INTERVAL_SET_TIMES_BACKWARD</a></div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; };</div><div class="line"><a name="l00414"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ae21b3786b7770dc880343e4a1445b424a3892d13c5d6ce4a93609e4eb176195a0"> 414</a></span>&#160;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="comment">// This enum is used in Solver::MakeOperator to specify the neighborhood to</span></div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="comment">// create.</span></div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keyword">enum</span> <a class="code" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4">LocalSearchOperators</a> {</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="comment">// Operator which reverses a sub-chain of a path. It is called TwoOpt</span></div><div class="line"><a name="l00419"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4"> 419</a></span>&#160; <span class="comment">// because it breaks two arcs on the path; resulting paths are called</span></div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="comment">// two-optimal.</span></div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="comment">// Possible neighbors for the path 1 -&gt; 2 -&gt; 3 -&gt; 4 -&gt; 5</span></div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="comment">// (where (1, 5) are first and last nodes of the path and can therefore not</span></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="comment">// be moved):</span></div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="comment">// 1 -&gt; [3 -&gt; 2] -&gt; 4 -&gt; 5</span></div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="comment">// 1 -&gt; [4 -&gt; 3 -&gt; 2] -&gt; 5</span></div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="comment">// 1 -&gt; 2 -&gt; [4 -&gt; 3] -&gt; 5</span></div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a6954bf415a41a3e683060ce706cec2b6">TWOOPT</a>,</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160;</div><div class="line"><a name="l00429"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a6954bf415a41a3e683060ce706cec2b6"> 429</a></span>&#160; <span class="comment">// Relocate: OROPT and RELOCATE.</span></div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="comment">// Operator which moves a sub-chain of a path to another position; the</span></div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="comment">// specified chain length is the fixed length of the chains being moved.</span></div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="comment">// When this length is 1, the operator simply moves a node to another</span></div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="comment">// position.</span></div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="comment">// Possible neighbors for the path 1 -&gt; 2 -&gt; 3 -&gt; 4 -&gt; 5, for a chain</span></div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="comment">// length of 2 (where (1, 5) are first and last nodes of the path and can</span></div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="comment">// therefore not be moved):</span></div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="comment">// 1 -&gt; 4 -&gt; [2 -&gt; 3] -&gt; 5</span></div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="comment">// 1 -&gt; [3 -&gt; 4] -&gt; 2 -&gt; 5</span></div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="comment">// Using Relocate with chain lengths of 1, 2 and 3 together is equivalent</span></div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="comment">// to the OrOpt operator on a path. The OrOpt operator is a limited</span></div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="comment">// version of 3Opt (breaks 3 arcs on a path).</span></div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a721d9e61cd2a9b9c221793b9b8086b09">OROPT</a>,</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;</div><div class="line"><a name="l00445"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a721d9e61cd2a9b9c221793b9b8086b09"> 445</a></span>&#160; <span class="comment">// Relocate neighborhood with length of 1 (see OROPT comment).</span></div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4ae38682b404f0255b45c6c5a3d4d31399">RELOCATE</a>,</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"><a class="line" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4ae38682b404f0255b45c6c5a3d4d31399"> 448</a></span>&#160; <span class="comment">// Operator which exchanges the positions of two nodes.</span></div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="comment">// Possible neighbors for the path 1 -&gt; 2 -&gt; 3 -&gt; 4 -&gt; 5</span></div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="comment">// (where (1, 5) are first and last nodes of the path and can therefore not</span></div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="comment">// be moved):</span></div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="comment">// 1 -&gt; [3] -&gt; [2] -&gt; 4 -&gt; 5</span></div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="comment">// 1 -&gt; [4] -&gt; 3 -&gt; [2] -&gt; 5</span></div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="comment">// 1 -&gt; 2 -&gt; [4] -&gt; [3] -&gt; 5</span></div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a27e459c0332eecea29a0b793ec635b49">EXCHANGE</a>,</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;</div><div class="line"><a name="l00457"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a27e459c0332eecea29a0b793ec635b49"> 457</a></span>&#160; <span class="comment">// Operator which cross exchanges the starting chains of 2 paths, including</span></div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="comment">// exchanging the whole paths.</span></div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="comment">// First and last nodes are not moved.</span></div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <span class="comment">// Possible neighbors for the paths 1 -&gt; 2 -&gt; 3 -&gt; 4 -&gt; 5 and 6 -&gt; 7 -&gt; 8</span></div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="comment">// (where (1, 5) and (6, 8) are first and last nodes of the paths and can</span></div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="comment">// therefore not be moved):</span></div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="comment">// 1 -&gt; [7] -&gt; 3 -&gt; 4 -&gt; 5 6 -&gt; [2] -&gt; 8</span></div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="comment">// 1 -&gt; [7] -&gt; 4 -&gt; 5 6 -&gt; [2 -&gt; 3] -&gt; 8</span></div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="comment">// 1 -&gt; [7] -&gt; 5 6 -&gt; [2 -&gt; 3 -&gt; 4] -&gt; 8</span></div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a5dcd871e02933eb704b45ea8ea68a852">CROSS</a>,</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160;</div><div class="line"><a name="l00468"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a5dcd871e02933eb704b45ea8ea68a852"> 468</a></span>&#160; <span class="comment">// Operator which inserts an inactive node into a path.</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="comment">// Possible neighbors for the path 1 -&gt; 2 -&gt; 3 -&gt; 4 with 5 inactive</span></div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="comment">// (where 1 and 4 are first and last nodes of the path) are:</span></div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="comment">// 1 -&gt; [5] -&gt; 2 -&gt; 3 -&gt; 4</span></div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="comment">// 1 -&gt; 2 -&gt; [5] -&gt; 3 -&gt; 4</span></div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="comment">// 1 -&gt; 2 -&gt; 3 -&gt; [5] -&gt; 4</span></div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a41dc08543fce010d8ce65df80935ff38">MAKEACTIVE</a>,</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160;</div><div class="line"><a name="l00476"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a41dc08543fce010d8ce65df80935ff38"> 476</a></span>&#160; <span class="comment">// Operator which makes path nodes inactive.</span></div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="comment">// Possible neighbors for the path 1 -&gt; 2 -&gt; 3 -&gt; 4 (where 1 and 4 are</span></div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="comment">// first and last nodes of the path) are:</span></div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="comment">// 1 -&gt; 3 -&gt; 4 with 2 inactive</span></div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="comment">// 1 -&gt; 2 -&gt; 4 with 3 inactive</span></div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a1a2beb32468f536c96644b3faa9c8d6e">MAKEINACTIVE</a>,</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160;</div><div class="line"><a name="l00483"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a1a2beb32468f536c96644b3faa9c8d6e"> 483</a></span>&#160; <span class="comment">// Operator which makes a &quot;chain&quot; of path nodes inactive.</span></div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="comment">// Possible neighbors for the path 1 -&gt; 2 -&gt; 3 -&gt; 4 (where 1 and 4 are</span></div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="comment">// first and last nodes of the path) are:</span></div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="comment">// 1 -&gt; 3 -&gt; 4 with 2 inactive</span></div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="comment">// 1 -&gt; 2 -&gt; 4 with 3 inactive</span></div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="comment">// 1 -&gt; 4 with 2 and 3 inactive</span></div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4aa2d880da72318dcffa237e4f2100c58c">MAKECHAININACTIVE</a>,</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;</div><div class="line"><a name="l00491"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4aa2d880da72318dcffa237e4f2100c58c"> 491</a></span>&#160; <span class="comment">// Operator which replaces an active node by an inactive one.</span></div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <span class="comment">// Possible neighbors for the path 1 -&gt; 2 -&gt; 3 -&gt; 4 with 5 inactive</span></div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="comment">// (where 1 and 4 are first and last nodes of the path) are:</span></div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="comment">// 1 -&gt; [5] -&gt; 3 -&gt; 4 with 2 inactive</span></div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="comment">// 1 -&gt; 2 -&gt; [5] -&gt; 4 with 3 inactive</span></div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4aeac9baf3ea4fa072bb9e4eccf691205d">SWAPACTIVE</a>,</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160;</div><div class="line"><a name="l00498"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4aeac9baf3ea4fa072bb9e4eccf691205d"> 498</a></span>&#160; <span class="comment">// Operator which makes an inactive node active and an active one inactive.</span></div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="comment">// It is similar to SwapActiveOperator except that it tries to insert the</span></div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="comment">// inactive node in all possible positions instead of just the position of</span></div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="comment">// the node made inactive.</span></div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="comment">// Possible neighbors for the path 1 -&gt; 2 -&gt; 3 -&gt; 4 with 5 inactive</span></div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="comment">// (where 1 and 4 are first and last nodes of the path) are:</span></div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="comment">// 1 -&gt; [5] -&gt; 3 -&gt; 4 with 2 inactive</span></div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="comment">// 1 -&gt; 3 -&gt; [5] -&gt; 4 with 2 inactive</span></div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="comment">// 1 -&gt; [5] -&gt; 2 -&gt; 4 with 3 inactive</span></div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="comment">// 1 -&gt; 2 -&gt; [5] -&gt; 4 with 3 inactive</span></div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a99c891d39d424a087b7fd551b27906ec">EXTENDEDSWAPACTIVE</a>,</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;</div><div class="line"><a name="l00510"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a99c891d39d424a087b7fd551b27906ec"> 510</a></span>&#160; <span class="comment">// Operator which relaxes two sub-chains of three consecutive arcs each.</span></div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="comment">// Each sub-chain is defined by a start node and the next three arcs. Those</span></div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="comment">// six arcs are relaxed to build a new neighbor.</span></div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="comment">// PATHLNS explores all possible pairs of starting nodes and so defines</span></div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="comment">// n^2 neighbors, n being the number of nodes.</span></div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="comment">// Note that the two sub-chains can be part of the same path; they even may</span></div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="comment">// overlap.</span></div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4aae749f308386810f29338c96daf0e4f8">PATHLNS</a>,</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160;</div><div class="line"><a name="l00519"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4aae749f308386810f29338c96daf0e4f8"> 519</a></span>&#160; <span class="comment">// Operator which relaxes one entire path and all inactive nodes, thus</span></div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="comment">// defining num_paths neighbors.</span></div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a3efd902ca50bb59867c6aaf3fbf20e01">FULLPATHLNS</a>,</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;</div><div class="line"><a name="l00523"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a3efd902ca50bb59867c6aaf3fbf20e01"> 523</a></span>&#160; <span class="comment">// Operator which relaxes all inactive nodes and one sub-chain of six</span></div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="comment">// consecutive arcs. That way the path can be improved by inserting</span></div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="comment">// inactive nodes or swapping arcs.</span></div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a5dbb9333b0dd7a380a85b4e1bd298667">UNACTIVELNS</a>,</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160;</div><div class="line"><a name="l00528"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a5dbb9333b0dd7a380a85b4e1bd298667"> 528</a></span>&#160; <span class="comment">// Operator which defines one neighbor per variable. Each neighbor tries to</span></div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="comment">// increment by one the value of the corresponding variable. When a new</span></div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="comment">// solution is found the neighborhood is rebuilt from scratch, i.e., tries</span></div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="comment">// to increment values in the variable order.</span></div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="comment">// Consider for instance variables x and y. x is incremented one by one to</span></div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="comment">// its max, and when it is not possible to increment x anymore, y is</span></div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="comment">// incremented once. If this is a solution, then next neighbor tries to</span></div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="comment">// increment x.</span></div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4aed2205097d136a425fa309dcfc71586e">INCREMENT</a>,</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160;</div><div class="line"><a name="l00538"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4aed2205097d136a425fa309dcfc71586e"> 538</a></span>&#160; <span class="comment">// Operator which defines a neighborhood to decrement values.</span></div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="comment">// The behavior is the same as INCREMENT, except values are decremented</span></div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="comment">// instead of incremented.</span></div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4ad5eb45c9651dc49f7e2f0f9bf251dd40">DECREMENT</a>,</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"><a class="line" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4ad5eb45c9651dc49f7e2f0f9bf251dd40"> 543</a></span>&#160; <span class="comment">// Operator which defines one neighbor per variable. Each neighbor relaxes</span></div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="comment">// one variable.</span></div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <span class="comment">// When a new solution is found the neighborhood is rebuilt from scratch.</span></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="comment">// Consider for instance variables x and y. First x is relaxed and the</span></div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <span class="comment">// solver is looking for the best possible solution (with only x relaxed).</span></div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="comment">// Then y is relaxed, and the solver is looking for a new solution.</span></div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="comment">// If a new solution is found, then the next variable to be relaxed is x.</span></div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a3a1a321416e317c8ed906573a937ffc4">SIMPLELNS</a></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"><a class="line" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a3a1a321416e317c8ed906573a937ffc4"> 552</a></span>&#160;</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="comment">// This enum is used in Solver::MakeOperator associated with an evaluator</span></div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <span class="comment">// to specify the neighborhood to create.</span></div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <span class="keyword">enum</span> <a class="code" href="classoperations__research_1_1Solver.html#ac1b3220ae80fb8430bc06310c5bea5f1">EvaluatorLocalSearchOperators</a> {</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="comment">// LinKernighan local search.</span></div><div class="line"><a name="l00557"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ac1b3220ae80fb8430bc06310c5bea5f1"> 557</a></span>&#160; <span class="comment">// While the accumulated local gain is positive, perform a 2opt or a 3opt</span></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <span class="comment">// move followed by a series of 2opt moves. Return a neighbor for which the</span></div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <span class="comment">// global gain is positive.</span></div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ac1b3220ae80fb8430bc06310c5bea5f1aae6bcc97b395e12e9a8e54093a327512">LK</a>,</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;</div><div class="line"><a name="l00562"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ac1b3220ae80fb8430bc06310c5bea5f1aae6bcc97b395e12e9a8e54093a327512"> 562</a></span>&#160; <span class="comment">// Sliding TSP operator.</span></div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <span class="comment">// Uses an exact dynamic programming algorithm to solve the TSP</span></div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="comment">// corresponding to path sub-chains.</span></div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="comment">// For a subchain 1 -&gt; 2 -&gt; 3 -&gt; 4 -&gt; 5 -&gt; 6, solves the TSP on</span></div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <span class="comment">// nodes A, 2, 3, 4, 5, where A is a merger of nodes 1 and 6 such that</span></div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="comment">// cost(A,i) = cost(1,i) and cost(i,A) = cost(i,6).</span></div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ac1b3220ae80fb8430bc06310c5bea5f1ac712194c4e0edea857001e9cf2ed5811">TSPOPT</a>,</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160;</div><div class="line"><a name="l00570"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ac1b3220ae80fb8430bc06310c5bea5f1ac712194c4e0edea857001e9cf2ed5811"> 570</a></span>&#160; <span class="comment">// TSP-base LNS.</span></div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="comment">// Randomly merge consecutive nodes until n &quot;meta&quot;-nodes remain and solve</span></div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="comment">// the corresponding TSP.</span></div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="comment">// This is an &quot;unlimited&quot; neighborhood which must be stopped by search</span></div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <span class="comment">// limits. To force diversification, the operator iteratively forces each</span></div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <span class="comment">// node to serve as base of a meta-node.</span></div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ac1b3220ae80fb8430bc06310c5bea5f1a29c43618e41fc69d29d248c0031d5af1">TSPLNS</a></div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; };</div><div class="line"><a name="l00578"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ac1b3220ae80fb8430bc06310c5bea5f1a29c43618e41fc69d29d248c0031d5af1"> 578</a></span>&#160;</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="comment">// This enum is used in Solver::MakeLocalSearchObjectiveFilter. It specifies</span></div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <span class="comment">// the behavior of the objective filter to create. The goal is to define</span></div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <span class="comment">// under which condition a move is accepted based on the current objective</span></div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="comment">// value.</span></div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="keyword">enum</span> <a class="code" href="classoperations__research_1_1Solver.html#a8e9cbe2323b10c6b49da625f5bae14c0">LocalSearchFilterBound</a> {</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <span class="comment">// Move is accepted when the current objective value &gt;= objective.Min.</span></div><div class="line"><a name="l00585"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a8e9cbe2323b10c6b49da625f5bae14c0"> 585</a></span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a8e9cbe2323b10c6b49da625f5bae14c0ac146aa5e02ea92fc5666c258910c049e">GE</a>,</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="comment">// Move is accepted when the current objective value &lt;= objective.Max.</span></div><div class="line"><a name="l00587"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a8e9cbe2323b10c6b49da625f5bae14c0ac146aa5e02ea92fc5666c258910c049e"> 587</a></span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a8e9cbe2323b10c6b49da625f5bae14c0a7b0d93c6324068fe1984836247bc1104">LE</a>,</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="comment">// Move is accepted when the current objective value is in the interval</span></div><div class="line"><a name="l00589"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a8e9cbe2323b10c6b49da625f5bae14c0a7b0d93c6324068fe1984836247bc1104"> 589</a></span>&#160; <span class="comment">// objective.Min .. objective.Max.</span></div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a8e9cbe2323b10c6b49da625f5bae14c0a1ed30b8b721fbabcd346c23b61ba8f7b">EQ</a></div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; };</div><div class="line"><a name="l00592"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a8e9cbe2323b10c6b49da625f5bae14c0a1ed30b8b721fbabcd346c23b61ba8f7b"> 592</a></span>&#160;</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="comment">// This enum represents the three possible priorities for a demon in the</span></div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="comment">// Solver queue.</span></div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="comment">// Note: this is for advanced users only.</span></div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <span class="keyword">enum</span> <a class="code" href="classoperations__research_1_1Solver.html#a4b0972c731faf884eba5acab99ebb2b4">DemonPriority</a> {</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="comment">// DELAYED_PRIORITY is the lowest priority: Demons will be processed after</span></div><div class="line"><a name="l00598"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a4b0972c731faf884eba5acab99ebb2b4"> 598</a></span>&#160; <span class="comment">// VAR_PRIORITY and NORMAL_PRIORITY demons.</span></div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a4b0972c731faf884eba5acab99ebb2b4af8769149902a8a2b168069cb93cc6370">DELAYED_PRIORITY</a> = 0,</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"><a class="line" href="classoperations__research_1_1Solver.html#a4b0972c731faf884eba5acab99ebb2b4af8769149902a8a2b168069cb93cc6370"> 601</a></span>&#160; <span class="comment">// VAR_PRIORITY is between DELAYED_PRIORITY and NORMAL_PRIORITY.</span></div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a4b0972c731faf884eba5acab99ebb2b4ae5f79fc80ef9ae665bcd7c0e55c02aa6">VAR_PRIORITY</a> = 1,</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"><a class="line" href="classoperations__research_1_1Solver.html#a4b0972c731faf884eba5acab99ebb2b4ae5f79fc80ef9ae665bcd7c0e55c02aa6"> 604</a></span>&#160; <span class="comment">// NORMAL_PRIORITY is the highest priority: Demons will be processed first.</span></div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a4b0972c731faf884eba5acab99ebb2b4a4f432957a8b27277538d5ee856201a4c">NORMAL_PRIORITY</a> = 2,</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"><a class="line" href="classoperations__research_1_1Solver.html#a4b0972c731faf884eba5acab99ebb2b4a4f432957a8b27277538d5ee856201a4c"> 607</a></span>&#160;</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="comment">// This enum is used in Solver::MakeIntervalVarRelation to specify the</span></div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="comment">// temporal relation between the two intervals t1 and t2.</span></div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <span class="keyword">enum</span> <a class="code" href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9">BinaryIntervalRelation</a> {</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="comment">// t1 ends after t2 end, i.e. End(t1) &gt;= End(t2) + delay.</span></div><div class="line"><a name="l00612"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9"> 612</a></span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9a6498f37a4ad4a85e8309080a357cb587">ENDS_AFTER_END</a>,</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160;</div><div class="line"><a name="l00614"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9a6498f37a4ad4a85e8309080a357cb587"> 614</a></span>&#160; <span class="comment">// t1 ends after t2 start, i.e. End(t1) &gt;= Start(t2) + delay.</span></div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9aa98eb73b7940d0127b133f170976fb0e">ENDS_AFTER_START</a>,</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160;</div><div class="line"><a name="l00617"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9aa98eb73b7940d0127b133f170976fb0e"> 617</a></span>&#160; <span class="comment">// t1 ends at t2 end, i.e. End(t1) == End(t2) + delay.</span></div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9abaaae5f195366a4e2aeae19bb2f0ae76">ENDS_AT_END</a>,</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"><a class="line" href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9abaaae5f195366a4e2aeae19bb2f0ae76"> 620</a></span>&#160; <span class="comment">// t1 ends at t2 start, i.e. End(t1) == Start(t2) + delay.</span></div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9ad02b3b6c25bdd69c2735af0dcd7c3aa8">ENDS_AT_START</a>,</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"><a class="line" href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9ad02b3b6c25bdd69c2735af0dcd7c3aa8"> 623</a></span>&#160; <span class="comment">// t1 starts after t2 end, i.e. Start(t1) &gt;= End(t2) + delay.</span></div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9ad5a5ac7b999f4c37d11206e531125988">STARTS_AFTER_END</a>,</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160;</div><div class="line"><a name="l00626"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9ad5a5ac7b999f4c37d11206e531125988"> 626</a></span>&#160; <span class="comment">// t1 starts after t2 start, i.e. Start(t1) &gt;= Start(t2) + delay.</span></div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9ae80d18ceaf9ae55ad39559b85b745628">STARTS_AFTER_START</a>,</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160;</div><div class="line"><a name="l00629"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9ae80d18ceaf9ae55ad39559b85b745628"> 629</a></span>&#160; <span class="comment">// t1 starts at t2 end, i.e. Start(t1) == End(t2) + delay.</span></div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9aea2183489b4cb88c3e43e90e8f96eb61">STARTS_AT_END</a>,</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160;</div><div class="line"><a name="l00632"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9aea2183489b4cb88c3e43e90e8f96eb61"> 632</a></span>&#160; <span class="comment">// t1 starts at t2 start, i.e. Start(t1) == Start(t2) + delay.</span></div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9a5fbb5a6ea281c2affbcd2fc79c1d7c63">STARTS_AT_START</a>,</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160;</div><div class="line"><a name="l00635"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9a5fbb5a6ea281c2affbcd2fc79c1d7c63"> 635</a></span>&#160; <span class="comment">// STARTS_AT_START and ENDS_AT_END at the same time.</span></div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <span class="comment">// t1 starts at t2 start, i.e. Start(t1) == Start(t2) + delay.</span></div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <span class="comment">// t1 ends at t2 end, i.e. End(t1) == End(t2).</span></div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9a4d3f223d92b1ac90127546c396f6cd26">STAYS_IN_SYNC</a></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"><a class="line" href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9a4d3f223d92b1ac90127546c396f6cd26"> 640</a></span>&#160;</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <span class="comment">// This enum is used in Solver::MakeIntervalVarRelation to specify the</span></div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <span class="comment">// temporal relation between an interval t and an integer d.</span></div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="keyword">enum</span> <a class="code" href="classoperations__research_1_1Solver.html#a83e14be9c6bba9abdd1949c25c32a60d">UnaryIntervalRelation</a> {</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="comment">// t ends after d, i.e. End(t) &gt;= d.</span></div><div class="line"><a name="l00645"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a83e14be9c6bba9abdd1949c25c32a60d"> 645</a></span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a83e14be9c6bba9abdd1949c25c32a60dac88ebc55bfbf4a9ad97391ef97b4d6b9">ENDS_AFTER</a>,</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160;</div><div class="line"><a name="l00647"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a83e14be9c6bba9abdd1949c25c32a60dac88ebc55bfbf4a9ad97391ef97b4d6b9"> 647</a></span>&#160; <span class="comment">// t ends at d, i.e. End(t) == d.</span></div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a83e14be9c6bba9abdd1949c25c32a60da294a4a33adc6833aa24adfd0d8eb44f5">ENDS_AT</a>,</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160;</div><div class="line"><a name="l00650"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a83e14be9c6bba9abdd1949c25c32a60da294a4a33adc6833aa24adfd0d8eb44f5"> 650</a></span>&#160; <span class="comment">// t ends before d, i.e. End(t) &lt;= d.</span></div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a83e14be9c6bba9abdd1949c25c32a60da9cc048da4ce5362c5a58866161a219bd">ENDS_BEFORE</a>,</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160;</div><div class="line"><a name="l00653"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a83e14be9c6bba9abdd1949c25c32a60da9cc048da4ce5362c5a58866161a219bd"> 653</a></span>&#160; <span class="comment">// t starts after d, i.e. Start(t) &gt;= d.</span></div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a83e14be9c6bba9abdd1949c25c32a60da5228c64950eccf096f9847d100100b8a">STARTS_AFTER</a>,</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160;</div><div class="line"><a name="l00656"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a83e14be9c6bba9abdd1949c25c32a60da5228c64950eccf096f9847d100100b8a"> 656</a></span>&#160; <span class="comment">// t starts at d, i.e. Start(t) == d.</span></div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a83e14be9c6bba9abdd1949c25c32a60dab88a6a21271bd5f34e12ada996c0bfee">STARTS_AT</a>,</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160;</div><div class="line"><a name="l00659"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a83e14be9c6bba9abdd1949c25c32a60dab88a6a21271bd5f34e12ada996c0bfee"> 659</a></span>&#160; <span class="comment">// t starts before d, i.e. Start(t) &lt;= d.</span></div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a83e14be9c6bba9abdd1949c25c32a60da21ce390ff5a9625cc07569f7629b2a32">STARTS_BEFORE</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"><a class="line" href="classoperations__research_1_1Solver.html#a83e14be9c6bba9abdd1949c25c32a60da21ce390ff5a9625cc07569f7629b2a32"> 662</a></span>&#160; <span class="comment">// STARTS_BEFORE and ENDS_AFTER at the same time, i.e. d is in t.</span></div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <span class="comment">// t starts before d, i.e. Start(t) &lt;= d.</span></div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; <span class="comment">// t ends after d, i.e. End(t) &gt;= d.</span></div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a83e14be9c6bba9abdd1949c25c32a60da79c510d187e0d3ef01df628731231ec1">CROSS_DATE</a>,</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160;</div><div class="line"><a name="l00667"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a83e14be9c6bba9abdd1949c25c32a60da79c510d187e0d3ef01df628731231ec1"> 667</a></span>&#160; <span class="comment">// STARTS_AFTER or ENDS_BEFORE, i.e. d is not in t.</span></div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <span class="comment">// t starts after d, i.e. Start(t) &gt;= d.</span></div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <span class="comment">// t ends before d, i.e. End(t) &lt;= d.</span></div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a83e14be9c6bba9abdd1949c25c32a60da6ea2fea7afd48b130486b2b48b5ae418">AVOID_DATE</a></div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; };</div><div class="line"><a name="l00672"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a83e14be9c6bba9abdd1949c25c32a60da6ea2fea7afd48b130486b2b48b5ae418"> 672</a></span>&#160;</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; <span class="comment">// The Solver is responsible for creating the search tree. Thanks to the</span></div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="comment">// DecisionBuilder, it creates a new decision with two branches at each node:</span></div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <span class="comment">// left and right.</span></div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="comment">// The DecisionModification enum is used to specify how the branch selector</span></div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="comment">// should behave.</span></div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; <span class="keyword">enum</span> <a class="code" href="classoperations__research_1_1Solver.html#a5f87c832967334179f0f9c8d05380847">DecisionModification</a> {</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <span class="comment">// Keeps the default behavior, i.e. apply left branch first, and then right</span></div><div class="line"><a name="l00680"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a5f87c832967334179f0f9c8d05380847"> 680</a></span>&#160; <span class="comment">// branch in case of backtracking.</span></div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a5f87c832967334179f0f9c8d05380847aa8dfadb94521ac7979525ae94f618d57">NO_CHANGE</a>,</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160;</div><div class="line"><a name="l00683"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a5f87c832967334179f0f9c8d05380847aa8dfadb94521ac7979525ae94f618d57"> 683</a></span>&#160; <span class="comment">// Right branches are ignored. This is used to make the code faster when</span></div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <span class="comment">// backtrack makes no sense or is not useful.</span></div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="comment">// This is faster as there is no need to create one new node per decision.</span></div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a5f87c832967334179f0f9c8d05380847a7a7d1379ff946fd786c118c3358ce438">KEEP_LEFT</a>,</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160;</div><div class="line"><a name="l00688"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a5f87c832967334179f0f9c8d05380847a7a7d1379ff946fd786c118c3358ce438"> 688</a></span>&#160; <span class="comment">// Left branches are ignored. This is used to make the code faster when</span></div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <span class="comment">// backtrack makes no sense or is not useful.</span></div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <span class="comment">// This is faster as there is no need to create one new node per decision.</span></div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a5f87c832967334179f0f9c8d05380847a1322e52b2ac49d3b2975acb1f4603cae">KEEP_RIGHT</a>,</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;</div><div class="line"><a name="l00693"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a5f87c832967334179f0f9c8d05380847a1322e52b2ac49d3b2975acb1f4603cae"> 693</a></span>&#160; <span class="comment">// Backtracks to the previous decisions, i.e. left and right branches are</span></div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="comment">// not applied.</span></div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a5f87c832967334179f0f9c8d05380847af16daaa1fec927c823d4d0441f4c742b">KILL_BOTH</a>,</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160;</div><div class="line"><a name="l00697"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a5f87c832967334179f0f9c8d05380847af16daaa1fec927c823d4d0441f4c742b"> 697</a></span>&#160; <span class="comment">// Applies right branch first. Left branch will be applied in case of</span></div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <span class="comment">// backtracking.</span></div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a5f87c832967334179f0f9c8d05380847a9bbb245ecd3725f5a67fd4c8466ee678">SWITCH_BRANCHES</a></div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; };</div><div class="line"><a name="l00701"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a5f87c832967334179f0f9c8d05380847a9bbb245ecd3725f5a67fd4c8466ee678"> 701</a></span>&#160;</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="comment">// This enum is used internally in private methods Solver::PushState and</span></div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="comment">// Solver::PopState to tag states in the search tree.</span></div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="keyword">enum</span> <a class="code" href="classoperations__research_1_1Solver.html#ae6dee2b402434520635e66e9d58a6215">MarkerType</a> { <a class="code" href="classoperations__research_1_1Solver.html#ae6dee2b402434520635e66e9d58a6215a6a8779a3d27000ed1e11b3549c0470ef">SENTINEL</a>, <a class="code" href="classoperations__research_1_1Solver.html#ae6dee2b402434520635e66e9d58a6215aa5148450bdc2fa1d4b40c2dd70b6dd3c">SIMPLE_MARKER</a>, <a class="code" href="classoperations__research_1_1Solver.html#ae6dee2b402434520635e66e9d58a6215a68e4780981758b35943123d19ea5c070">CHOICE_POINT</a>, <a class="code" href="classoperations__research_1_1Solver.html#ae6dee2b402434520635e66e9d58a6215ab8ed3456ae15444c88849d08123e4c03">REVERSIBLE_ACTION</a> };</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160;</div><div class="line"><a name="l00706"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ae6dee2b402434520635e66e9d58a6215aa5148450bdc2fa1d4b40c2dd70b6dd3c"> 706</a></span>&#160; <span class="comment">// This enum represents the state of the solver w.r.t. the search.</span></div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="keyword">enum</span> <a class="code" href="classoperations__research_1_1Solver.html#a5b5712802e63dcd3ee5abfd37e0f2a95">SolverState</a> {</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a5b5712802e63dcd3ee5abfd37e0f2a95ac05654b6a7479316478744b3ce4a50df">OUTSIDE_SEARCH</a>, <span class="comment">// Before search, after search.</span></div><div class="line"><a name="l00709"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a5b5712802e63dcd3ee5abfd37e0f2a95"> 709</a></span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a5b5712802e63dcd3ee5abfd37e0f2a95a0e9b4a7467a4d4f1a7da211e6c59251e">IN_ROOT_NODE</a>, <span class="comment">// Executing the root node.</span></div><div class="line"><a name="l00710"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a5b5712802e63dcd3ee5abfd37e0f2a95ac05654b6a7479316478744b3ce4a50df"> 710</a></span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a5b5712802e63dcd3ee5abfd37e0f2a95a066908e143fd988a03767f05e682acaf">IN_SEARCH</a>, <span class="comment">// Executing the search code.</span></div><div class="line"><a name="l00711"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a5b5712802e63dcd3ee5abfd37e0f2a95a0e9b4a7467a4d4f1a7da211e6c59251e"> 711</a></span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a5b5712802e63dcd3ee5abfd37e0f2a95ad487136b6f055fa3fadfd6a3c12aa3a3">AT_SOLUTION</a>, <span class="comment">// After successful NextSolution and before EndSearch.</span></div><div class="line"><a name="l00712"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a5b5712802e63dcd3ee5abfd37e0f2a95a066908e143fd988a03767f05e682acaf"> 712</a></span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a5b5712802e63dcd3ee5abfd37e0f2a95a401b0c79d1fa9261524343fce4dd5439">NO_MORE_SOLUTIONS</a>, <span class="comment">// After failed NextSolution and before EndSearch.</span></div><div class="line"><a name="l00713"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a5b5712802e63dcd3ee5abfd37e0f2a95ad487136b6f055fa3fadfd6a3c12aa3a3"> 713</a></span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a5b5712802e63dcd3ee5abfd37e0f2a95a30b34e2664f9b1e2fb0d1347d7a87674">PROBLEM_INFEASIBLE</a> <span class="comment">// After search, the model is infeasible.</span></div><div class="line"><a name="l00714"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a5b5712802e63dcd3ee5abfd37e0f2a95a401b0c79d1fa9261524343fce4dd5439"> 714</a></span>&#160; };</div><div class="line"><a name="l00715"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a5b5712802e63dcd3ee5abfd37e0f2a95a30b34e2664f9b1e2fb0d1347d7a87674"> 715</a></span>&#160;</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <span class="comment">// Optimization directions.</span></div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; <span class="keyword">enum</span> <a class="code" href="classoperations__research_1_1Solver.html#a8a00b64c16b54cef4e0467730e171bef">OptimizationDirection</a> { <a class="code" href="classoperations__research_1_1Solver.html#a8a00b64c16b54cef4e0467730e171befadd112fa680436644573a4d6e6e955906">NOT_SET</a>, <a class="code" href="classoperations__research_1_1Solver.html#a8a00b64c16b54cef4e0467730e171befa76db89f0caee82059523e2f233c31433">MAXIMIZATION</a>, <a class="code" href="classoperations__research_1_1Solver.html#a8a00b64c16b54cef4e0467730e171befaf042b1d4c82247d9ff0ca476800d8fc2">MINIMIZATION</a> };</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160;</div><div class="line"><a name="l00719"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a8a00b64c16b54cef4e0467730e171bef"> 719</a></span>&#160; <span class="comment">// Callback typedefs</span></div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <span class="keyword">typedef</span> std::function&lt;int64(int64)&gt; <a class="code" href="classoperations__research_1_1Solver.html#a1040bdf484009e1a00e60ebb055ad1a1">IndexEvaluator1</a>;</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <span class="keyword">typedef</span> std::function&lt;int64(int64, int64)&gt; <a class="code" href="classoperations__research_1_1Solver.html#a0243986dd2db4b6e1bda331329ae529b">IndexEvaluator2</a>;</div><div class="line"><a name="l00722"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a1040bdf484009e1a00e60ebb055ad1a1"> 722</a></span>&#160; <span class="keyword">typedef</span> std::function&lt;int64(int64, int64, int64)&gt; <a class="code" href="classoperations__research_1_1Solver.html#a1f24a08006b3142731a258d856f13e43">IndexEvaluator3</a>;</div><div class="line"><a name="l00723"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a0243986dd2db4b6e1bda331329ae529b"> 723</a></span>&#160;</div><div class="line"><a name="l00724"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a1f24a08006b3142731a258d856f13e43"> 724</a></span>&#160; <span class="keyword">typedef</span> std::function&lt;bool(int64)&gt; <a class="code" href="classoperations__research_1_1Solver.html#a7e47d3b978e31e6273a63dc52fcf3379">IndexFilter1</a>;</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160;</div><div class="line"><a name="l00726"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a7e47d3b978e31e6273a63dc52fcf3379"> 726</a></span>&#160; <span class="keyword">typedef</span> std::function&lt;<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>*(int64)&gt; <a class="code" href="classoperations__research_1_1Solver.html#a6183a217e1ddf504a4fd3f49788b73db">Int64ToIntVar</a>;</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160;</div><div class="line"><a name="l00728"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a6183a217e1ddf504a4fd3f49788b73db"> 728</a></span>&#160; <span class="keyword">typedef</span> std::function&lt;int64(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <a class="code" href="routing_8h.html#a5f32c22c620c811754ba7b6f977db864">solver</a>, <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; int64 first_unbound, int64 last_unbound)&gt;</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a360a918948e4a8ae01a49899c5a9438e">VariableIndexSelector</a>;</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160;</div><div class="line"><a name="l00732"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a360a918948e4a8ae01a49899c5a9438e"> 732</a></span>&#160; <span class="keyword">typedef</span> std::function&lt;int64(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* v, int64 <span class="keywordtype">id</span>)&gt; <a class="code" href="classoperations__research_1_1Solver.html#addc64b89be5f633952a7735861cc9901">VariableValueSelector</a>;</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="keyword">typedef</span> std::function&lt;bool(int64, int64, int64)&gt; <a class="code" href="classoperations__research_1_1Solver.html#af24d476da11ebf69fae9d4890447cc95">VariableValueComparator</a>;</div><div class="line"><a name="l00734"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#addc64b89be5f633952a7735861cc9901"> 734</a></span>&#160; <span class="keyword">typedef</span> std::function&lt;void(int64)&gt; <a class="code" href="classoperations__research_1_1Solver.html#acb354925d9ed2803b56953a9a9ec59df">ObjectiveWatcher</a>;</div><div class="line"><a name="l00735"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#af24d476da11ebf69fae9d4890447cc95"> 735</a></span>&#160; <span class="keyword">typedef</span> std::function&lt;<a class="code" href="classoperations__research_1_1Solver.html#a5f87c832967334179f0f9c8d05380847">DecisionModification</a>()&gt; <a class="code" href="classoperations__research_1_1Solver.html#a704132f8c12e3bbbd0590308a58ee744">BranchSelector</a>;</div><div class="line"><a name="l00736"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#acb354925d9ed2803b56953a9a9ec59df"> 736</a></span>&#160; <span class="comment">// TODO(user): wrap in swig.</span></div><div class="line"><a name="l00737"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a704132f8c12e3bbbd0590308a58ee744"> 737</a></span>&#160; <span class="keyword">typedef</span> std::function&lt;void(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>*)&gt; <a class="code" href="classoperations__research_1_1Solver.html#a87ca0b6abf9c8724900387f5aa557c04">Action</a>;</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; <span class="keyword">typedef</span> std::function&lt;void()&gt; <a class="code" href="classoperations__research_1_1Solver.html#aab58d22b2215e79f8e3a9424fe186239">Closure</a>;</div><div class="line"><a name="l00739"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a87ca0b6abf9c8724900387f5aa557c04"> 739</a></span>&#160;</div><div class="line"><a name="l00740"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#aab58d22b2215e79f8e3a9424fe186239"> 740</a></span>&#160; <span class="comment">// Solver API</span></div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classoperations__research_1_1Solver.html#af4d2c143bd1e769ab96a69a8ab855136">Solver</a>(<span class="keyword">const</span> std::string&amp; name);</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#af4d2c143bd1e769ab96a69a8ab855136">Solver</a>(<span class="keyword">const</span> std::string&amp; name, <span class="keyword">const</span> ConstraintSolverParameters&amp; <a class="code" href="classoperations__research_1_1Solver.html#adb77a0b4b40ea4e8282cf78b54717cd6">parameters</a>);</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a663bdb75f27a96e424ad2a7a4ba397ec">~Solver</a>();</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160;</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="comment">// Stored Parameters.</span></div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; ConstraintSolverParameters <a class="code" href="classoperations__research_1_1Solver.html#adb77a0b4b40ea4e8282cf78b54717cd6">parameters</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> parameters_; }</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="comment">// Create a ConstraintSolverParameters proto with all the default values.</span></div><div class="line"><a name="l00748"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#adb77a0b4b40ea4e8282cf78b54717cd6"> 748</a></span>&#160; <span class="comment">// TODO(user): Move to constraint_solver_parameters.h.</span></div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <span class="keyword">static</span> ConstraintSolverParameters <a class="code" href="classoperations__research_1_1Solver.html#ad47d47ea8e05e2187fcb81ae1dea508a">DefaultSolverParameters</a>();</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160;</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <span class="comment">// reversibility</span></div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160;</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; <span class="comment">// SaveValue() saves the value of the corresponding object. It must be</span></div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; <span class="comment">// called before modifying the object. The value will be restored upon</span></div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <span class="comment">// backtrack.</span></div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#add51e06535f44461347658d8ce59979a">SaveValue</a>(T* o) {</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; InternalSaveValue(o);</div><div class="line"><a name="l00759"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#add51e06535f44461347658d8ce59979a"> 759</a></span>&#160; }</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160;</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <span class="comment">// Registers the given object as being reversible. By calling this method,</span></div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <span class="comment">// the caller gives ownership of the object to the solver, which will</span></div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <span class="comment">// delete it when there is a backtrack out of the current state.</span></div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; <span class="comment">// Returns the argument for convenience: this way, the caller may directly</span></div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <span class="comment">// invoke a constructor in the argument, without having to store the pointer</span></div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <span class="comment">// first.</span></div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; <span class="comment">// This function is only for users that define their own subclasses of</span></div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; <span class="comment">// BaseObject: for all subclasses predefined in the library, the</span></div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; <span class="comment">// corresponding factory methods (e.g., MakeIntVar(...),</span></div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; <span class="comment">// MakeAllDifferent(...) already take care of the registration.</span></div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; T* <a class="code" href="classoperations__research_1_1Solver.html#a01e1a27e5e6c03b48faab541885737ca">RevAlloc</a>(T* <span class="keywordtype">object</span>) {</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="keywordflow">return</span> reinterpret_cast&lt;T*&gt;(SafeRevAlloc(<span class="keywordtype">object</span>));</div><div class="line"><a name="l00776"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a01e1a27e5e6c03b48faab541885737ca"> 776</a></span>&#160; }</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160;</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; <span class="comment">// Like RevAlloc() above, but for an array of objects: the array</span></div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <span class="comment">// must have been allocated with the new[] operator. The entire array</span></div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; <span class="comment">// will be deleted when backtracking out of the current state.</span></div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <span class="comment">// This method is valid for arrays of int, int64, uint64, bool,</span></div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <span class="comment">// BaseObject*, IntVar*, IntExpr*, and Constraint*.</span></div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; T* <a class="code" href="classoperations__research_1_1Solver.html#a45ce1ff8007e76e844d2ec32e740b3d9">RevAllocArray</a>(T* <span class="keywordtype">object</span>) {</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; <span class="keywordflow">return</span> reinterpret_cast&lt;T*&gt;(SafeRevAllocArray(<span class="keywordtype">object</span>));</div><div class="line"><a name="l00787"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a45ce1ff8007e76e844d2ec32e740b3d9"> 787</a></span>&#160; }</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160;</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <span class="comment">// propagation</span></div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160;</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <span class="comment">// Adds the constraint &#39;c&#39; to the model.</span></div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; <span class="comment">// After calling this method, and until there is a backtrack that undoes the</span></div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; <span class="comment">// addition, any assignment of variables to values must satisfy the given</span></div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="comment">// constraint in order to be considered feasible. There are two fairly</span></div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; <span class="comment">// different use cases:</span></div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <span class="comment">// - the most common use case is modeling: the given constraint is really</span></div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <span class="comment">// part of the problem that the user is trying to solve. In this use case,</span></div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; <span class="comment">// AddConstraint is called outside of search (i.e., with &lt;tt&gt;state() ==</span></div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; <span class="comment">// OUTSIDE_SEARCH&lt;/tt&gt;). Most users should only use AddConstraint in this</span></div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; <span class="comment">// way. In this case, the constraint will belong to the model forever: it</span></div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <span class="comment">// cannot not be removed by backtracking.</span></div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; <span class="comment">// - a rarer use case is that &#39;c&#39; is not a real constraint of the model. It</span></div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; <span class="comment">// may be a constraint generated by a branching decision (a constraint whose</span></div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; <span class="comment">// goal is to restrict the search space), a symmetry breaking constraint (a</span></div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; <span class="comment">// constraint that does restrict the search space, but in a way that cannot</span></div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; <span class="comment">// have an impact on the quality of the solutions in the subtree), or an</span></div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <span class="comment">// inferred constraint that, while having no semantic value to the model (it</span></div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; <span class="comment">// does not restrict the set of solutions), is worth having because we</span></div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; <span class="comment">// believe it may strengthen the propagation. In these cases, it happens</span></div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; <span class="comment">// that the constraint is added during the search (i.e., with state() ==</span></div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; <span class="comment">// IN_SEARCH or state() == IN_ROOT_NODE). When a constraint is</span></div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; <span class="comment">// added during a search, it applies only to the subtree of the search tree</span></div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; <span class="comment">// rooted at the current node, and will be automatically removed by</span></div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; <span class="comment">// backtracking.</span></div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; <span class="comment">// This method does not take ownership of the constraint. If the constraint</span></div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; <span class="comment">// has been created by any factory method (Solver::MakeXXX), it will</span></div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; <span class="comment">// automatically be deleted. However, power users who implement their own</span></div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; <span class="comment">// constraints should do: solver.AddConstraint(solver.RevAlloc(new</span></div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; <span class="comment">// MyConstraint(...));</span></div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a9c522a6cff91adae19af5cce7d8e411f">AddConstraint</a>(<a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <span class="keyword">const</span> c);</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; <span class="comment">// Adds &#39;constraint&#39; to the solver and marks it as a cast constraint, that</span></div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; <span class="comment">// is, a constraint created calling Var() on an expression. This is used</span></div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; <span class="comment">// internally.</span></div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a8e06358629a979e64e62158816f6759a">AddCastConstraint</a>(<a class="code" href="classoperations__research_1_1CastConstraint.html">CastConstraint</a>* <span class="keyword">const</span> constraint,</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> target_var, <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr);</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160;</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; <span class="comment">// @{</span></div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; <span class="comment">// Solves the problem using the given DecisionBuilder and returns true if a</span></div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; <span class="comment">// solution was found and accepted.</span></div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; <span class="comment">// These methods are the ones most users should use to search for a solution.</span></div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; <span class="comment">// Note that the definition of &#39;solution&#39; is subtle. A solution here is</span></div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; <span class="comment">// defined as a leaf of the search tree with respect to the given decision</span></div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; <span class="comment">// builder for which there is no failure. What this means is that, contrary</span></div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; <span class="comment">// to intuition, a solution may not have all variables of the model bound.</span></div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; <span class="comment">// It is the responsibility of the decision builder to keep returning</span></div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; <span class="comment">// decisions until all variables are indeed bound. The most extreme</span></div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; <span class="comment">// counterexample is calling Solve with a trivial decision builder whose</span></div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; <span class="comment">// Next() method always returns nullptr. In this case, Solve immediately</span></div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <span class="comment">// returns &#39;true&#39;, since not assigning any variable to any value is a</span></div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <span class="comment">// solution, unless the root node propagation discovers that the model is</span></div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; <span class="comment">// infeasible.</span></div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; <span class="comment">// This function must be called either from outside of search,</span></div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; <span class="comment">// or from within the Next() method of a decision builder.</span></div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; <span class="comment">// Solve will terminate whenever any of the following event arise:</span></div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; <span class="comment">// * A search monitor asks the solver to terminate the search by calling</span></div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; <span class="comment">// solver()-&gt;FinishCurrentSearch().</span></div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; <span class="comment">// * A solution is found that is accepted by all search monitors, and none of</span></div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; <span class="comment">// the search monitors decides to search for another one.</span></div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; <span class="comment">// Upon search termination, there will be a series of backtracks all the way</span></div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; <span class="comment">// to the top level. This means that a user cannot expect to inspect the</span></div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; <span class="comment">// solution by querying variables after a call to Solve(): all the</span></div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; <span class="comment">// information will be lost. In order to do something with the solution, the</span></div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; <span class="comment">// user must either:</span></div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; <span class="comment">// * Use a search monitor that can process such a leaf. See, in particular,</span></div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; <span class="comment">// the SolutionCollector class.</span></div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; <span class="comment">// * Do not use Solve. Instead, use the more fine-grained approach using</span></div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; <span class="comment">// methods NewSearch(...), NextSolution(), and EndSearch().</span></div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; <span class="comment">// @param db The decision builder that will generate the search tree.</span></div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; <span class="comment">// @param monitors A vector of search monitors that will be notified of</span></div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; <span class="comment">// various events during the search. In their reaction to these events, such</span></div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; <span class="comment">// monitors may influence the search.</span></div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Solver.html#a3ce9d85b90e2416f59ee89b13579c725">Solve</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db,</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; <span class="keyword">const</span> std::vector&lt;SearchMonitor*&gt;&amp; monitors);</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Solver.html#a3ce9d85b90e2416f59ee89b13579c725">Solve</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db);</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Solver.html#a3ce9d85b90e2416f59ee89b13579c725">Solve</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db, <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> m1);</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Solver.html#a3ce9d85b90e2416f59ee89b13579c725">Solve</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db, <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> m1,</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> m2);</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Solver.html#a3ce9d85b90e2416f59ee89b13579c725">Solve</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db, <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> m1,</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> m2, <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> m3);</div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Solver.html#a3ce9d85b90e2416f59ee89b13579c725">Solve</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db, <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> m1,</div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> m2, <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> m3,</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> m4);</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; <span class="comment">// @}</span></div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160;</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; <span class="comment">// @{</span></div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <span class="comment">// Decomposed search.</span></div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; <span class="comment">// The code for a top level search should look like</span></div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; <span class="comment">// solver-&gt;NewSearch(db);</span></div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; <span class="comment">// while (solver-&gt;NextSolution()) {</span></div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; <span class="comment">// //.. use the current solution</span></div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; <span class="comment">// }</span></div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; <span class="comment">// solver()-&gt;EndSearch();</span></div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160;</div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a67ed18b7174df0eb483834276f19ce73">NewSearch</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db,</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; <span class="keyword">const</span> std::vector&lt;SearchMonitor*&gt;&amp; monitors);</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a67ed18b7174df0eb483834276f19ce73">NewSearch</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db);</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a67ed18b7174df0eb483834276f19ce73">NewSearch</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db, <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> m1);</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a67ed18b7174df0eb483834276f19ce73">NewSearch</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db, <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> m1,</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> m2);</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a67ed18b7174df0eb483834276f19ce73">NewSearch</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db, <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> m1,</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> m2, <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> m3);</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a67ed18b7174df0eb483834276f19ce73">NewSearch</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db, <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> m1,</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> m2, <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> m3,</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> m4);</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160;</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Solver.html#a11ed2a5d7bb8fb1a8967fee572ab9c47">NextSolution</a>();</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a13e7e93a66ce0f15343c48c66d615e47">RestartSearch</a>();</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#ab95c7f997dbe36deb51e7c0213bdf445">EndSearch</a>();</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; <span class="comment">// @}</span></div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160;</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; <span class="comment">// SolveAndCommit using a decision builder and up to three</span></div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; <span class="comment">// search monitors, usually one for the objective, one for the limits</span></div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; <span class="comment">// and one to collect solutions.</span></div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; <span class="comment">// The difference between a SolveAndCommit() and a Solve() method</span></div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; <span class="comment">// call is the fact that SolveAndCommit will not backtrack all</span></div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; <span class="comment">// modifications at the end of the search. This method is only</span></div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; <span class="comment">// usable during the Next() method of a decision builder.</span></div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Solver.html#a4610adb8edc9b5804370b55e84d9c99b">SolveAndCommit</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db,</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; <span class="keyword">const</span> std::vector&lt;SearchMonitor*&gt;&amp; monitors);</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Solver.html#a4610adb8edc9b5804370b55e84d9c99b">SolveAndCommit</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db);</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Solver.html#a4610adb8edc9b5804370b55e84d9c99b">SolveAndCommit</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db, <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> m1);</div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Solver.html#a4610adb8edc9b5804370b55e84d9c99b">SolveAndCommit</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db, <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> m1,</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> m2);</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Solver.html#a4610adb8edc9b5804370b55e84d9c99b">SolveAndCommit</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db, <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> m1,</div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> m2, <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> m3);</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160;</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; <span class="comment">// Checks whether the given assignment satisfies all relevant constraints.</span></div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Solver.html#a779da92d4afffabdb868318665298d59">CheckAssignment</a>(<a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>* <span class="keyword">const</span> solution);</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160;</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; <span class="comment">// Checks whether adding this constraint will lead to an immediate</span></div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; <span class="comment">// failure. It will return false if the model is already inconsistent, or if</span></div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; <span class="comment">// adding the constraint makes it inconsistent.</span></div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Solver.html#ae39c8f6f3ee87c9a3d74bc8a446db697">CheckConstraint</a>(<a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <span class="keyword">const</span> ct);</div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160;</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; <span class="comment">// State of the solver.</span></div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a5b5712802e63dcd3ee5abfd37e0f2a95">SolverState</a> <a class="code" href="classoperations__research_1_1Solver.html#ad8d269e222a882295b43ebf8dc4ec83a">state</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> state_; }</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160;</div><div class="line"><a name="l00939"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ad8d269e222a882295b43ebf8dc4ec83a"> 939</a></span>&#160; <span class="comment">// Abandon the current branch in the search tree. A backtrack will follow.</span></div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a45534161a4dda7e1997bc0effd606648">Fail</a>();</div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160;</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160;<span class="preprocessor">#if !defined(SWIG)</span></div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; <span class="comment">// When SaveValue() is not the best way to go, one can create a reversible</span></div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; <span class="comment">// action that will be called upon backtrack. The &quot;fast&quot; parameter</span></div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; <span class="comment">// indicates whether we need restore all values saved through SaveValue()</span></div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; <span class="comment">// before calling this method.</span></div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a67a3f35a5b19a1ebdf4217b483068ad7">AddBacktrackAction</a>(<a class="code" href="classoperations__research_1_1Solver.html#a87ca0b6abf9c8724900387f5aa557c04">Action</a> a, <span class="keywordtype">bool</span> fast);</div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160;<span class="preprocessor">#endif // !defined(SWIG)</span></div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160;</div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; <span class="comment">// misc debug std::string.</span></div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; std::string <a class="code" href="classoperations__research_1_1Solver.html#ad3a0dd883b4adb63646503b62dabbc23">DebugString</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160;</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; <span class="comment">// Current memory usage in bytes</span></div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; <span class="keyword">static</span> int64 <a class="code" href="classoperations__research_1_1Solver.html#a3d8a500d9eb0df0d74daffa348a4ffef">MemoryUsage</a>();</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160;</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; <span class="comment">// The &#39;absolute time&#39; as seen by the solver. Unless a user-provided clock</span></div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; <span class="comment">// was injected via SetClock() (eg. for unit tests), this is a real walltime,</span></div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; <span class="comment">// shifted so that it was 0 at construction. All so-called &quot;walltime&quot; limits</span></div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; <span class="comment">// are relative to this time.</span></div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; absl::Time <a class="code" href="classoperations__research_1_1Solver.html#a543e7aa911009e1c4a6c33e82e49e582">Now</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160;</div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; <span class="comment">// DEPRECATED: Use Now() instead.</span></div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; <span class="comment">// Time elapsed, in ms since the creation of the solver.</span></div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; int64 <a class="code" href="classoperations__research_1_1Solver.html#a53fae091a4dac1829b8947ff7426aa4b">wall_time</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160;</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; <span class="comment">// The number of branches explored since the creation of the solver.</span></div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; int64 <a class="code" href="classoperations__research_1_1Solver.html#aa843d980b4526a9b051e98e7f3425b40">branches</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> branches_; }</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160;</div><div class="line"><a name="l00969"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#aa843d980b4526a9b051e98e7f3425b40"> 969</a></span>&#160; <span class="comment">// The number of solutions found since the start of the search.</span></div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; int64 <a class="code" href="classoperations__research_1_1Solver.html#a89a5139453ffd5edd1992c82bd95f675">solutions</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160;</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; <span class="comment">// The number of unchecked solutions found by local search.</span></div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; int64 <a class="code" href="classoperations__research_1_1Solver.html#ad68a982dad17396ac23877b5c80f7b7d">unchecked_solutions</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160;</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; <span class="comment">// The number of demons executed during search for a given priority.</span></div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; int64 <a class="code" href="classoperations__research_1_1Solver.html#ab6905ce95ac75e188d838c0a230888f2">demon_runs</a>(<a class="code" href="classoperations__research_1_1Solver.html#a4b0972c731faf884eba5acab99ebb2b4">DemonPriority</a> p)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> demon_runs_[p]; }</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160;</div><div class="line"><a name="l00978"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ab6905ce95ac75e188d838c0a230888f2"> 978</a></span>&#160; <span class="comment">// The number of failures encountered since the creation of the solver.</span></div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; int64 <a class="code" href="classoperations__research_1_1Solver.html#a2047abfd3e0cf6919d67a4a6ccd1d3cc">failures</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fails_; }</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160;</div><div class="line"><a name="l00981"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a2047abfd3e0cf6919d67a4a6ccd1d3cc"> 981</a></span>&#160; <span class="comment">// The number of neighbors created.</span></div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; int64 <a class="code" href="classoperations__research_1_1Solver.html#a440a3d529f66bbb818d953beb362a825">neighbors</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> neighbors_; }</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160;</div><div class="line"><a name="l00984"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a440a3d529f66bbb818d953beb362a825"> 984</a></span>&#160; <span class="comment">// The number of filtered neighbors (neighbors accepted by filters).</span></div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; int64 <a class="code" href="classoperations__research_1_1Solver.html#ab3e7525b57ce27119e4eb32fe24eedca">filtered_neighbors</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> filtered_neighbors_; }</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160;</div><div class="line"><a name="l00987"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ab3e7525b57ce27119e4eb32fe24eedca"> 987</a></span>&#160; <span class="comment">// The number of accepted neighbors.</span></div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; int64 <a class="code" href="classoperations__research_1_1Solver.html#a644bf665c00f8b9447bdcb5f18590ee9">accepted_neighbors</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> accepted_neighbors_; }</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160;</div><div class="line"><a name="l00990"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a644bf665c00f8b9447bdcb5f18590ee9"> 990</a></span>&#160; <span class="comment">// The stamp indicates how many moves in the search tree we have performed.</span></div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; <span class="comment">// It is useful to detect if we need to update same lazy structures.</span></div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; uint64 <a class="code" href="classoperations__research_1_1Solver.html#af9873f0b909de865b771b6168eafc78b">stamp</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160;</div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; <span class="comment">// The fail_stamp() is incremented after each backtrack.</span></div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; uint64 <a class="code" href="classoperations__research_1_1Solver.html#ac1bcd30f46029ec27d32f9718c5a0d2f">fail_stamp</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160;</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; <span class="comment">// The direction of optimization, getter and setter.</span></div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a8a00b64c16b54cef4e0467730e171bef">OptimizationDirection</a> <a class="code" href="classoperations__research_1_1Solver.html#a045309e1ee229240071692a4e889f3e0">optimization_direction</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; <span class="keywordflow">return</span> optimization_direction_;</div><div class="line"><a name="l01000"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a045309e1ee229240071692a4e889f3e0"> 1000</a></span>&#160; }</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#ae49d5791dd8bb104be6a25c30cf59de6">set_optimization_direction</a>(<a class="code" href="classoperations__research_1_1Solver.html#a8a00b64c16b54cef4e0467730e171bef">OptimizationDirection</a> direction) {</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; optimization_direction_ = direction;</div><div class="line"><a name="l01003"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ae49d5791dd8bb104be6a25c30cf59de6"> 1003</a></span>&#160; }</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; <span class="comment">// ---------- Make Factory ----------</span></div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; <span class="comment">// All factories (MakeXXX methods) encapsulate creation of objects</span></div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; <span class="comment">// through RevAlloc(). Hence, the Solver used for allocating the</span></div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; <span class="comment">// returned object will retain ownership of the allocated memory.</span></div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; <span class="comment">// Destructors are called upon backtrack, or when the Solver is</span></div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; <span class="comment">// itself destructed.</span></div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; <span class="comment">// ----- Int Variables and Constants -----</span></div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; <span class="comment">// MakeIntVar will create the best range based int var for the bounds given.</span></div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1Solver.html#a6a699e2d6f96a64244119ee9718e0f71">MakeIntVar</a>(int64 min, int64 max, <span class="keyword">const</span> std::string&amp; name);</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; <span class="comment">// MakeIntVar will create a variable with the given sparse domain.</span></div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1Solver.html#a6a699e2d6f96a64244119ee9718e0f71">MakeIntVar</a>(<span class="keyword">const</span> std::vector&lt;int64&gt;&amp; values, <span class="keyword">const</span> std::string&amp; name);</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; <span class="comment">// MakeIntVar will create a variable with the given sparse domain.</span></div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1Solver.html#a6a699e2d6f96a64244119ee9718e0f71">MakeIntVar</a>(<span class="keyword">const</span> std::vector&lt;int&gt;&amp; values, <span class="keyword">const</span> std::string&amp; name);</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; <span class="comment">// MakeIntVar will create the best range based int var for the bounds given.</span></div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1Solver.html#a6a699e2d6f96a64244119ee9718e0f71">MakeIntVar</a>(int64 min, int64 max);</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; <span class="comment">// MakeIntVar will create a variable with the given sparse domain.</span></div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1Solver.html#a6a699e2d6f96a64244119ee9718e0f71">MakeIntVar</a>(<span class="keyword">const</span> std::vector&lt;int64&gt;&amp; values);</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; <span class="comment">// MakeIntVar will create a variable with the given sparse domain.</span></div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1Solver.html#a6a699e2d6f96a64244119ee9718e0f71">MakeIntVar</a>(<span class="keyword">const</span> std::vector&lt;int&gt;&amp; values);</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; <span class="comment">// MakeBoolVar will create a variable with a {0, 1} domain.</span></div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1Solver.html#a941c7c212362540d900af004c16692a7">MakeBoolVar</a>(<span class="keyword">const</span> std::string&amp; name);</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; <span class="comment">// MakeBoolVar will create a variable with a {0, 1} domain.</span></div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1Solver.html#a941c7c212362540d900af004c16692a7">MakeBoolVar</a>();</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; <span class="comment">// IntConst will create a constant expression.</span></div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1Solver.html#a462cc213ea47b1e4c772e0332cb12249">MakeIntConst</a>(int64 val, <span class="keyword">const</span> std::string&amp; name);</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; <span class="comment">// IntConst will create a constant expression.</span></div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1Solver.html#a462cc213ea47b1e4c772e0332cb12249">MakeIntConst</a>(int64 val);</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; <span class="comment">// This method will append the vector vars with &#39;var_count&#39; variables</span></div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; <span class="comment">// having bounds vmin and vmax and having name &quot;name&lt;i&gt;&quot; where &lt;i&gt; is</span></div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; <span class="comment">// the index of the variable.</span></div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a8b9acf693b1584dd7c7113ba7cea2527">MakeIntVarArray</a>(<span class="keywordtype">int</span> var_count, int64 vmin, int64 vmax,</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; <span class="keyword">const</span> std::string&amp; name, std::vector&lt;IntVar*&gt;* vars);</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; <span class="comment">// This method will append the vector vars with &#39;var_count&#39; variables</span></div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; <span class="comment">// having bounds vmin and vmax and having no names.</span></div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a8b9acf693b1584dd7c7113ba7cea2527">MakeIntVarArray</a>(<span class="keywordtype">int</span> var_count, int64 vmin, int64 vmax,</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; std::vector&lt;IntVar*&gt;* vars);</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; <span class="comment">// Same but allocates an array and returns it.</span></div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>** <a class="code" href="classoperations__research_1_1Solver.html#a8b9acf693b1584dd7c7113ba7cea2527">MakeIntVarArray</a>(<span class="keywordtype">int</span> var_count, int64 vmin, int64 vmax,</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; <span class="keyword">const</span> std::string&amp; name);</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; <span class="comment">// This method will append the vector vars with &#39;var_count&#39; boolean</span></div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; <span class="comment">// variables having name &quot;name&lt;i&gt;&quot; where &lt;i&gt; is the index of the</span></div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; <span class="comment">// variable.</span></div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a8307ead1637b1c665169d0dc1f822549">MakeBoolVarArray</a>(<span class="keywordtype">int</span> var_count, <span class="keyword">const</span> std::string&amp; name,</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; std::vector&lt;IntVar*&gt;* vars);</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; <span class="comment">// This method will append the vector vars with &#39;var_count&#39; boolean</span></div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; <span class="comment">// variables having no names.</span></div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a8307ead1637b1c665169d0dc1f822549">MakeBoolVarArray</a>(<span class="keywordtype">int</span> var_count, std::vector&lt;IntVar*&gt;* vars);</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; <span class="comment">// Same but allocates an array and returns it.</span></div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>** <a class="code" href="classoperations__research_1_1Solver.html#a8307ead1637b1c665169d0dc1f822549">MakeBoolVarArray</a>(<span class="keywordtype">int</span> var_count, <span class="keyword">const</span> std::string&amp; name);</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; <span class="comment">// ----- Integer Expressions -----</span></div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; <span class="comment">// left + right.</span></div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#a8b4e4af37e3d9c1f667992bcec34630c">MakeSum</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> left, <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> right);</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; <span class="comment">// expr + value.</span></div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#a8b4e4af37e3d9c1f667992bcec34630c">MakeSum</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, int64 value);</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; <span class="comment">// sum of all vars.</span></div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#a8b4e4af37e3d9c1f667992bcec34630c">MakeSum</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars);</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; <span class="comment">// scalar product</span></div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#a58f99f85567010c8726801175b285bfe">MakeScalProd</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; coefs);</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; <span class="comment">// scalar product</span></div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#a58f99f85567010c8726801175b285bfe">MakeScalProd</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; coefs);</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; <span class="comment">// left - right</span></div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#a6ef8634dceaef579006ab4db28f1f684">MakeDifference</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> left, <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> right);</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; <span class="comment">// value - expr</span></div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#a6ef8634dceaef579006ab4db28f1f684">MakeDifference</a>(int64 value, <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr);</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; <span class="comment">// -expr</span></div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#a0fe164a682eb2272efa0f483373b9db8">MakeOpposite</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr);</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160;</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; <span class="comment">// left * right</span></div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#ae6da70a11e2bce1a688259a2e0ab6c9d">MakeProd</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> left, <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> right);</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; <span class="comment">// expr * value</span></div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#ae6da70a11e2bce1a688259a2e0ab6c9d">MakeProd</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, int64 value);</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; <span class="comment">// expr / value (integer division)</span></div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#a95f09c393e1c513ff4bc15522a854633">MakeDiv</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, int64 value);</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; <span class="comment">// numerator / denominator (integer division). Terms need to be positive.</span></div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#a95f09c393e1c513ff4bc15522a854633">MakeDiv</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> numerator, <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> denominator);</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; <span class="comment">// |expr|</span></div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#a57875170b22abd8ca8c499be11659af1">MakeAbs</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr);</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; <span class="comment">// expr * expr</span></div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#a547a1c1bd3b8df3a759661e60fbb3e9d">MakeSquare</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr);</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; <span class="comment">// expr ^ n (n &gt; 0)</span></div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#af0f7c0067b5a3a79cfff03d48e9eeb94">MakePower</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, int64 n);</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160;</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; <span class="comment">// values[index]</span></div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#aea4e904944dd8850347309110ee64c36">MakeElement</a>(<span class="keyword">const</span> std::vector&lt;int64&gt;&amp; values, <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> index);</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; <span class="comment">// values[index]</span></div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#aea4e904944dd8850347309110ee64c36">MakeElement</a>(<span class="keyword">const</span> std::vector&lt;int&gt;&amp; values, <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> index);</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160;</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; <span class="comment">// Function-based element. The constraint takes ownership of the</span></div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; <span class="comment">// callback. The callback must be able to cope with any possible</span></div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; <span class="comment">// value in the domain of &#39;index&#39; (potentially negative ones too).</span></div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#aea4e904944dd8850347309110ee64c36">MakeElement</a>(<a class="code" href="classoperations__research_1_1Solver.html#a1040bdf484009e1a00e60ebb055ad1a1">IndexEvaluator1</a> values, <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> index);</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; <span class="comment">// Function based element. The constraint takes ownership of the</span></div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; <span class="comment">// callback. The callback must be monotonic. It must be able to</span></div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; <span class="comment">// cope with any possible value in the domain of &#39;index&#39;</span></div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; <span class="comment">// (potentially negative ones too). Furtermore, monotonicity is not</span></div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; <span class="comment">// checked. Thus giving a non-monotonic function, or specifying an</span></div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; <span class="comment">// incorrect increasing parameter will result in undefined behavior.</span></div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#aa729df413387f7bb5b6b54bf7b21f340">MakeMonotonicElement</a>(<a class="code" href="classoperations__research_1_1Solver.html#a1040bdf484009e1a00e60ebb055ad1a1">IndexEvaluator1</a> values, <span class="keywordtype">bool</span> increasing,</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> index);</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; <span class="comment">// 2D version of function-based element expression, values(expr1, expr2).</span></div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#aea4e904944dd8850347309110ee64c36">MakeElement</a>(<a class="code" href="classoperations__research_1_1Solver.html#a0243986dd2db4b6e1bda331329ae529b">IndexEvaluator2</a> values, <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> index1,</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> index2);</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; <span class="comment">// vars[expr]</span></div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#aea4e904944dd8850347309110ee64c36">MakeElement</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars, <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> index);</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;<span class="preprocessor">#if !defined(SWIG)</span></div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; <span class="comment">// vars(argument)</span></div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#aea4e904944dd8850347309110ee64c36">MakeElement</a>(<a class="code" href="classoperations__research_1_1Solver.html#a6183a217e1ddf504a4fd3f49788b73db">Int64ToIntVar</a> vars, int64 range_start, int64 range_end,</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* argument);</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160;<span class="preprocessor">#endif // SWIG</span></div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160;</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; <span class="comment">// Returns the expression expr such that vars[expr] == value.</span></div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; <span class="comment">// It assumes that vars are all different.</span></div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#a6e6d2b77130f2557bd0b0c77f19710dc">MakeIndexExpression</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars, int64 value);</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160;</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; <span class="comment">// Special cases with arrays of size two.</span></div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#ac6ac3661a9add716fade6fecf1645805">MakeIfThenElseCt</a>(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> condition,</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> then_expr,</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> else_expr,</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> target_var);</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160;</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; <span class="comment">// std::min(vars)</span></div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#a0047bb3bb4cdff41ece9cfaad2ad108b">MakeMin</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars);</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; <span class="comment">// std::min (left, right)</span></div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#a0047bb3bb4cdff41ece9cfaad2ad108b">MakeMin</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> left, <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> right);</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; <span class="comment">// std::min(expr, value)</span></div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#a0047bb3bb4cdff41ece9cfaad2ad108b">MakeMin</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, int64 value);</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; <span class="comment">// std::min(expr, value)</span></div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#a0047bb3bb4cdff41ece9cfaad2ad108b">MakeMin</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, <span class="keywordtype">int</span> value);</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160;</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; <span class="comment">// std::max(vars)</span></div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#abebae695ae85e01fe4c176c5a056c9b9">MakeMax</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars);</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; <span class="comment">// std::max(left, right)</span></div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#abebae695ae85e01fe4c176c5a056c9b9">MakeMax</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> left, <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> right);</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; <span class="comment">// std::max(expr, value)</span></div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#abebae695ae85e01fe4c176c5a056c9b9">MakeMax</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, int64 value);</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; <span class="comment">// std::max(expr, value)</span></div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#abebae695ae85e01fe4c176c5a056c9b9">MakeMax</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, <span class="keywordtype">int</span> value);</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; <span class="comment">// Convex piecewise function.</span></div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#a7133f1f0ea6afd334b2091e3d5a668d0">MakeConvexPiecewiseExpr</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* expr, int64 early_cost,</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; int64 early_date, int64 late_date,</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; int64 late_cost);</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; <span class="comment">// Semi continuous Expression (x &lt;= 0 -&gt; f(x) = 0; x &gt; 0 -&gt; f(x) = ax + b)</span></div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; <span class="comment">// a &gt;= 0 and b &gt;= 0</span></div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#a0c3ee759e1618eb55ca895c8f6878e57">MakeSemiContinuousExpr</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, int64 fixed_charge,</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; int64 step);</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160;</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; <span class="comment">// General piecewise-linear function expression, built from f(x) where f is</span></div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; <span class="comment">// piecewise-linear. The resulting expression is f(expr).</span></div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; <span class="comment">// TODO(user): Investigate if we can merge all three piecewise linear</span></div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; <span class="comment">// expressions.</span></div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;<span class="preprocessor">#ifndef SWIG</span></div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#aaa52f2620322c849e2142fdfc0eb4213">MakePiecewiseLinearExpr</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* expr,</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; <span class="keyword">const</span> PiecewiseLinearFunction&amp; f);</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; <span class="comment">// Modulo expression x % mod (with the python convention for modulo).</span></div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#ad80dd1ae1e4b2a33944cf207f2a63458">MakeModulo</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> x, int64 mod);</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; <span class="comment">// Modulo expression x % mod (with the python convention for modulo).</span></div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#ad80dd1ae1e4b2a33944cf207f2a63458">MakeModulo</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> x, <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> mod);</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; <span class="comment">// Conditional Expr condition ? expr : unperformed_value</span></div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#a3ae4ede3b7a68624006b888b97fae3c5">MakeConditionalExpression</a>(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> condition,</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr,</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; int64 unperformed_value);</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; <span class="comment">// ----- Constraints -----</span></div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; <span class="comment">// This constraint always succeeds.</span></div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#abdbfec794188ed5074d0cb2f611124ea">MakeTrueConstraint</a>();</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; <span class="comment">// This constraint always fails.</span></div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#ad0b048792bdbf3cd5699eb82a9b57e76">MakeFalseConstraint</a>();</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#ad0b048792bdbf3cd5699eb82a9b57e76">MakeFalseConstraint</a>(<span class="keyword">const</span> std::string&amp; explanation);</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160; <span class="comment">// boolvar == (var == value)</span></div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#ab170e1ca8e081b65e7ee595be5fb9e81">MakeIsEqualCstCt</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> var, int64 value,</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> boolvar);</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; <span class="comment">// status var of (var == value)</span></div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1Solver.html#a655735058a06195cc28f25d2564fc8ca">MakeIsEqualCstVar</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> var, int64 value);</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; <span class="comment">// b == (v1 == v2)</span></div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#aae6f147ee2f7bf03fa728868ae2d670d">MakeIsEqualCt</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> v1, <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* v2, <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> b);</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; <span class="comment">// status var of (v1 == v2)</span></div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1Solver.html#a52c3bdf647a8bcea13c4da9330c3a9d3">MakeIsEqualVar</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> v1, <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* v2);</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; <span class="comment">// left == right</span></div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a44c97dfc4f51c14779ea29f76c662036">MakeEquality</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> left, <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> right);</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; <span class="comment">// expr == value</span></div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a44c97dfc4f51c14779ea29f76c662036">MakeEquality</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, int64 value);</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; <span class="comment">// expr == value</span></div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a44c97dfc4f51c14779ea29f76c662036">MakeEquality</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, <span class="keywordtype">int</span> value);</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160;</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; <span class="comment">// boolvar == (var != value)</span></div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a0bd00b719a0d7571e3bbc3bb93f64eb6">MakeIsDifferentCstCt</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> var, int64 value,</div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> boolvar);</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; <span class="comment">// status var of (var != value)</span></div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1Solver.html#a9a9e58a1e346c571e52c2d491f8b3748">MakeIsDifferentCstVar</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> var, int64 value);</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; <span class="comment">// status var of (v1 != v2)</span></div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1Solver.html#a91764cdc9186294ec25adb3dec886515">MakeIsDifferentVar</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> v1, <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> v2);</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; <span class="comment">// b == (v1 != v2)</span></div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#afdd94e94c4d4b8950d20f1ebf7fd238d">MakeIsDifferentCt</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> v1, <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> v2,</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> b);</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; <span class="comment">// left != right</span></div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#aa99c80d3aa788f16d966b7b5af4be7e2">MakeNonEquality</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> left, <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> right);</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; <span class="comment">// expr != value</span></div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#aa99c80d3aa788f16d966b7b5af4be7e2">MakeNonEquality</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, int64 value);</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; <span class="comment">// expr != value</span></div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#aa99c80d3aa788f16d966b7b5af4be7e2">MakeNonEquality</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, <span class="keywordtype">int</span> value);</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160;</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; <span class="comment">// boolvar == (var &lt;= value)</span></div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a452f6de4ae9e08677c8303dfd7c3292f">MakeIsLessOrEqualCstCt</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> var, int64 value,</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> boolvar);</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; <span class="comment">// status var of (var &lt;= value)</span></div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1Solver.html#a7b555e672930179b244785a8f97b3b8f">MakeIsLessOrEqualCstVar</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> var, int64 value);</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; <span class="comment">// status var of (left &lt;= right)</span></div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1Solver.html#ae6f96ee767c7b6bd0e190c86d995e88c">MakeIsLessOrEqualVar</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> left, <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> right);</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; <span class="comment">// b == (left &lt;= right)</span></div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a84a1c30c400cb98e95fca1f74d064c80">MakeIsLessOrEqualCt</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> left, <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> right,</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> b);</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; <span class="comment">// left &lt;= right</span></div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a53ea0cb612f72835754ca2d0c5a3c51c">MakeLessOrEqual</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> left, <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> right);</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; <span class="comment">// expr &lt;= value</span></div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a53ea0cb612f72835754ca2d0c5a3c51c">MakeLessOrEqual</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, int64 value);</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; <span class="comment">// expr &lt;= value</span></div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a53ea0cb612f72835754ca2d0c5a3c51c">MakeLessOrEqual</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, <span class="keywordtype">int</span> value);</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160;</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; <span class="comment">// boolvar == (var &gt;= value)</span></div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a8f5eee399d887d3f3f0bfebec6096cc3">MakeIsGreaterOrEqualCstCt</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> var, int64 value,</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> boolvar);</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; <span class="comment">// status var of (var &gt;= value)</span></div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1Solver.html#a4f85930982b76fe71ed525a692957515">MakeIsGreaterOrEqualCstVar</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> var, int64 value);</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; <span class="comment">// status var of (left &gt;= right)</span></div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1Solver.html#a5bdf15368dacb3a71e78ed7f7ca38ce3">MakeIsGreaterOrEqualVar</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> left, <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> right);</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; <span class="comment">// b == (left &gt;= right)</span></div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#aa6f53d2a5d18750d91f16db45700c3af">MakeIsGreaterOrEqualCt</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> left, <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> right,</div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> b);</div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; <span class="comment">// left &gt;= right</span></div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#ab836ebc6f5a7daa6e9e5e2bd08cd50f3">MakeGreaterOrEqual</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> left, <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> right);</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; <span class="comment">// expr &gt;= value</span></div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#ab836ebc6f5a7daa6e9e5e2bd08cd50f3">MakeGreaterOrEqual</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, int64 value);</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; <span class="comment">// expr &gt;= value</span></div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#ab836ebc6f5a7daa6e9e5e2bd08cd50f3">MakeGreaterOrEqual</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, <span class="keywordtype">int</span> value);</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160;</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; <span class="comment">// b == (v &gt; c)</span></div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a85403f4ea76885802e486103ef5d6615">MakeIsGreaterCstCt</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> v, int64 c, <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> b);</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; <span class="comment">// status var of (var &gt; value)</span></div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1Solver.html#a6cea2e744a27c3ee4567c65216f36c39">MakeIsGreaterCstVar</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> var, int64 value);</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; <span class="comment">// status var of (left &gt; right)</span></div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1Solver.html#a3f704993474818667273f078cd273863">MakeIsGreaterVar</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> left, <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> right);</div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; <span class="comment">// b == (left &gt; right)</span></div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a6a8f7bc1b42272024cb04882c410894b">MakeIsGreaterCt</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> left, <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> right,</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> b);</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; <span class="comment">// left &gt; right</span></div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a8d6fbba2ba47eda46d4565e4a0ca69cf">MakeGreater</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> left, <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> right);</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; <span class="comment">// expr &gt; value</span></div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a8d6fbba2ba47eda46d4565e4a0ca69cf">MakeGreater</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, int64 value);</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; <span class="comment">// expr &gt; value</span></div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a8d6fbba2ba47eda46d4565e4a0ca69cf">MakeGreater</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, <span class="keywordtype">int</span> value);</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160;</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; <span class="comment">// b == (v &lt; c)</span></div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#adab85b93ce8b5ea9a14b5a5969adcc14">MakeIsLessCstCt</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> v, int64 c, <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> b);</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; <span class="comment">// status var of (var &lt; value)</span></div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1Solver.html#a932daaf79abd6438cab1c6c8acb71e0f">MakeIsLessCstVar</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> var, int64 value);</div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; <span class="comment">// status var of (left &lt; right)</span></div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1Solver.html#af26049e7a0c0bd0a3d3b826579a839ff">MakeIsLessVar</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> left, <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> right);</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; <span class="comment">// b == (left &lt; right)</span></div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a8986fc6e352ee5b9601831e6466b923c">MakeIsLessCt</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> left, <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> right,</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> b);</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; <span class="comment">// left &lt; right</span></div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a1d3505710b6b1b66c738695d877aef8b">MakeLess</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> left, <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> right);</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; <span class="comment">// expr &lt; value</span></div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a1d3505710b6b1b66c738695d877aef8b">MakeLess</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, int64 value);</div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; <span class="comment">// expr &lt; value</span></div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a1d3505710b6b1b66c738695d877aef8b">MakeLess</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, <span class="keywordtype">int</span> value);</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160;</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; <span class="comment">// Variation on arrays.</span></div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a124e2377182b7f2be763fc2c009f2fe6">MakeSumLessOrEqual</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars, int64 cst);</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a0dd7452d63d18c1e4591ce9468e38026">MakeSumGreaterOrEqual</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; int64 cst);</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#abb5ced4ea25c0dfaa7f5a5a8258423da">MakeSumEquality</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars, int64 cst);</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#abb5ced4ea25c0dfaa7f5a5a8258423da">MakeSumEquality</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var);</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#abc4f50009f6abdfa5430c828c2119d76">MakeScalProdEquality</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; coefficients,</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; int64 cst);</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#abc4f50009f6abdfa5430c828c2119d76">MakeScalProdEquality</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; coefficients,</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; int64 cst);</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#abc4f50009f6abdfa5430c828c2119d76">MakeScalProdEquality</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160; <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; coefficients,</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> target);</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#abc4f50009f6abdfa5430c828c2119d76">MakeScalProdEquality</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; coefficients,</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> target);</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#ab00ece9bae955aa3eed634a3df54e8b0">MakeScalProdGreaterOrEqual</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160; <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; coeffs,</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160; int64 cst);</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#ab00ece9bae955aa3eed634a3df54e8b0">MakeScalProdGreaterOrEqual</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; coeffs,</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160; int64 cst);</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a674a604bf7823571ae7ba12dbd939290">MakeScalProdLessOrEqual</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160; <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; coefficients,</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160; int64 cst);</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a674a604bf7823571ae7ba12dbd939290">MakeScalProdLessOrEqual</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; coefficients,</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; int64 cst);</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160;</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a707908bc6f7b50d0a3ea6a6814912b03">MakeMinEquality</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> min_var);</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a18ff54edbaad4a3da9eb7b1112194d1a">MakeMaxEquality</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> max_var);</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160;</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#ad2d2769a8cae1736dec41abe50d6a711">MakeElementEquality</a>(<span class="keyword">const</span> std::vector&lt;int64&gt;&amp; vals,</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> index, <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> target);</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#ad2d2769a8cae1736dec41abe50d6a711">MakeElementEquality</a>(<span class="keyword">const</span> std::vector&lt;int&gt;&amp; vals,</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> index, <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> target);</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#ad2d2769a8cae1736dec41abe50d6a711">MakeElementEquality</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> index, <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> target);</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#ad2d2769a8cae1736dec41abe50d6a711">MakeElementEquality</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> index, int64 target);</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160; <span class="comment">// Creates the constraint abs(var) == abs_var.</span></div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a6c2937a3cb434bc01c01d454419fcb95">MakeAbsEquality</a>(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var, <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> abs_var);</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160; <span class="comment">// This constraint is a special case of the element constraint with</span></div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160; <span class="comment">// an array of integer variables, where the variables are all</span></div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160; <span class="comment">// different and the index variable is constrained such that</span></div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; <span class="comment">// vars[index] == target.</span></div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a07f7fa906a3c321c3095969fca1c6ff5">MakeIndexOfConstraint</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> index, int64 target);</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160;</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160; <span class="comment">// This method is a specialized case of the MakeConstraintDemon</span></div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160; <span class="comment">// method to call the InitiatePropagate of the constraint &#39;ct&#39;.</span></div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160; <a class="code" href="classoperations__research_1_1Demon.html">Demon</a>* <a class="code" href="classoperations__research_1_1Solver.html#a7c32391ccea4cf45797ccb99d3b4ea2f">MakeConstraintInitialPropagateCallback</a>(<a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <span class="keyword">const</span> ct);</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160; <span class="comment">// This method is a specialized case of the MakeConstraintDemon</span></div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160; <span class="comment">// method to call the InitiatePropagate of the constraint &#39;ct&#39; with</span></div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160; <span class="comment">// low priority.</span></div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160; <a class="code" href="classoperations__research_1_1Demon.html">Demon</a>* <a class="code" href="classoperations__research_1_1Solver.html#a92be45d90f748f1228f09b9585deefcf">MakeDelayedConstraintInitialPropagateCallback</a>(<a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <span class="keyword">const</span> ct);</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160;<span class="preprocessor">#if !defined(SWIG)</span></div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160; <span class="comment">// Creates a demon from a callback.</span></div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160; <a class="code" href="classoperations__research_1_1Demon.html">Demon</a>* <a class="code" href="classoperations__research_1_1Solver.html#a70a1f8ef1f9c2d029d134917e60bf363">MakeActionDemon</a>(<a class="code" href="classoperations__research_1_1Solver.html#a87ca0b6abf9c8724900387f5aa557c04">Action</a> action);</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160;<span class="preprocessor">#endif // !defined(SWIG)</span></div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160; <span class="comment">// Creates a demon from a closure.</span></div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160; <a class="code" href="classoperations__research_1_1Demon.html">Demon</a>* <a class="code" href="classoperations__research_1_1Solver.html#a1b2eed669b8c881a2d596f63bb68150c">MakeClosureDemon</a>(<a class="code" href="classoperations__research_1_1Solver.html#aab58d22b2215e79f8e3a9424fe186239">Closure</a> closure);</div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160;</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160; <span class="comment">// ----- Between and related constraints -----</span></div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160;</div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160; <span class="comment">// (l &lt;= expr &lt;= u)</span></div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a997571dcb78d0c1cedd3e5cb6a8afbd3">MakeBetweenCt</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, int64 l, int64 u);</div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160;</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160; <span class="comment">// (expr &lt; l || expr &gt; u)</span></div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160; <span class="comment">// This constraint is lazy as it will not make holes in the domain of</span></div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160; <span class="comment">// variables. It will propagate only when expr-&gt;Min() &gt;= l</span></div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160; <span class="comment">// or expr-&gt;Max() &lt;= u.</span></div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a1b0628976e99904e7c4ae72618c9772e">MakeNotBetweenCt</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, int64 l, int64 u);</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160;</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160; <span class="comment">// b == (l &lt;= expr &lt;= u)</span></div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a776893abf62ec0dbf9b80a5faf0aa455">MakeIsBetweenCt</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, int64 l, int64 u,</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> b);</div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1Solver.html#a6d314aa714607f1c12b3f3b75928f250">MakeIsBetweenVar</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> v, int64 l, int64 u);</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160;</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160; <span class="comment">// ----- Member and related constraints -----</span></div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160; <span class="comment">// expr in set. Propagation is lazy, i.e. this constraint does not</span></div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160; <span class="comment">// creates holes in the domain of the variable.</span></div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a7cb2726d3860a2ca7d7097d58beaa58f">MakeMemberCt</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr,</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160; <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; values);</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a7cb2726d3860a2ca7d7097d58beaa58f">MakeMemberCt</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, <span class="keyword">const</span> std::vector&lt;int&gt;&amp; values);</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160;</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160; <span class="comment">// expr not in set.</span></div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a687be895b4cfd73ad06992a8e6115eef">MakeNotMemberCt</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr,</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160; <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; values);</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a687be895b4cfd73ad06992a8e6115eef">MakeNotMemberCt</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr,</div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; values);</div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160;</div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160; <span class="comment">// expr should not be in the list of forbidden intervals [start[i]..end[i]].</span></div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a687be895b4cfd73ad06992a8e6115eef">MakeNotMemberCt</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, std::vector&lt;int64&gt; starts,</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160; std::vector&lt;int64&gt; ends);</div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160; <span class="comment">// expr should not be in the list of forbidden intervals [start[i]..end[i]].</span></div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a687be895b4cfd73ad06992a8e6115eef">MakeNotMemberCt</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, std::vector&lt;int&gt; starts,</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160; std::vector&lt;int&gt; ends);</div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160;<span class="preprocessor">#if !defined(SWIG)</span></div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160; <span class="comment">// expr should not be in the list of forbidden intervals.</span></div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a687be895b4cfd73ad06992a8e6115eef">MakeNotMemberCt</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* expr,</div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160; SortedDisjointIntervalList intervals);</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160;<span class="preprocessor">#endif // !defined(SWIG)</span></div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160;</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160; <span class="comment">// boolvar == (expr in set)</span></div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#abe0c38990d5922ce0b7b8674c5c9cdd8">MakeIsMemberCt</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr,</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160; <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; values,</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> boolvar);</div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#abe0c38990d5922ce0b7b8674c5c9cdd8">MakeIsMemberCt</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr,</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; values,</div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> boolvar);</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1Solver.html#a495f20c9f679b71c617a627c3041eba2">MakeIsMemberVar</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr,</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160; <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; values);</div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1Solver.html#a495f20c9f679b71c617a627c3041eba2">MakeIsMemberVar</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, <span class="keyword">const</span> std::vector&lt;int&gt;&amp; values);</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160;</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160; <span class="comment">// |{i | vars[i] == value}| &lt;= max_count</span></div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#af10e474564d080f7949e680215224176">MakeAtMost</a>(std::vector&lt;IntVar*&gt; vars, int64 value,</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160; int64 max_count);</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160; <span class="comment">// |{i | vars[i] == value}| == max_count</span></div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a2fc4c2534a45caa04ad4e11ba7b10a52">MakeCount</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars, int64 value,</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160; int64 max_count);</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160; <span class="comment">// |{i | vars[i] == value}| == max_count</span></div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a2fc4c2534a45caa04ad4e11ba7b10a52">MakeCount</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars, int64 value,</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> max_count);</div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160;</div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160; <span class="comment">// Aggregated version of count: |{i | v[i] == values[j]}| == cards[j]</span></div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a8f39cd51e795db7a44e418fafbabf93f">MakeDistribute</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160; <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; values,</div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; cards);</div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160; <span class="comment">// Aggregated version of count: |{i | v[i] == values[j]}| == cards[j]</span></div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a8f39cd51e795db7a44e418fafbabf93f">MakeDistribute</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; values,</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; cards);</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160; <span class="comment">// Aggregated version of count: |{i | v[i] == j}| == cards[j]</span></div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a8f39cd51e795db7a44e418fafbabf93f">MakeDistribute</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; cards);</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160; <span class="comment">// Aggregated version of count with bounded cardinalities:</span></div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160; <span class="comment">// forall j in 0 .. card_size - 1: card_min &lt;= |{i | v[i] == j}| &lt;= card_max</span></div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a8f39cd51e795db7a44e418fafbabf93f">MakeDistribute</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars, int64 card_min,</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160; int64 card_max, int64 card_size);</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; <span class="comment">// Aggregated version of count with bounded cardinalities:</span></div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160; <span class="comment">// forall j in 0 .. card_size - 1:</span></div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160; <span class="comment">// card_min[j] &lt;= |{i | v[i] == j}| &lt;= card_max[j]</span></div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a8f39cd51e795db7a44e418fafbabf93f">MakeDistribute</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160; <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; card_min,</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160; <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; card_max);</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160; <span class="comment">// Aggregated version of count with bounded cardinalities:</span></div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160; <span class="comment">// forall j in 0 .. card_size - 1:</span></div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160; <span class="comment">// card_min[j] &lt;= |{i | v[i] == j}| &lt;= card_max[j]</span></div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a8f39cd51e795db7a44e418fafbabf93f">MakeDistribute</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; card_min,</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; card_max);</div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160; <span class="comment">// Aggregated version of count with bounded cardinalities:</span></div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160; <span class="comment">// forall j in 0 .. card_size - 1:</span></div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160; <span class="comment">// card_min[j] &lt;= |{i | v[i] == values[j]}| &lt;= card_max[j]</span></div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a8f39cd51e795db7a44e418fafbabf93f">MakeDistribute</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160; <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; values,</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160; <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; card_min,</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160; <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; card_max);</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; <span class="comment">// Aggregated version of count with bounded cardinalities:</span></div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160; <span class="comment">// forall j in 0 .. card_size - 1:</span></div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160; <span class="comment">// card_min[j] &lt;= |{i | v[i] == values[j]}| &lt;= card_max[j]</span></div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a8f39cd51e795db7a44e418fafbabf93f">MakeDistribute</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; values,</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; card_min,</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; card_max);</div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160;</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160; <span class="comment">// Deviation constraint:</span></div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160; <span class="comment">// sum_i |n * vars[i] - total_sum| &lt;= deviation_var and</span></div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160; <span class="comment">// sum_i vars[i] == total_sum</span></div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160; <span class="comment">// n = #vars</span></div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#aced209d10277f701930a1e46f95465e7">MakeDeviation</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> deviation_var, int64 total_sum);</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160;</div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160; <span class="comment">// All variables are pairwise different. This corresponds to the</span></div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160; <span class="comment">// stronger version of the propagation algorithm.</span></div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a63eadebc6faf0538523bfc4dcbc39d97">MakeAllDifferent</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars);</div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160;</div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160; <span class="comment">// All variables are pairwise different. If &#39;stronger_propagation&#39;</span></div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160; <span class="comment">// is true, stronger, and potentially slower propagation will</span></div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160; <span class="comment">// occur. This API will be deprecated in the future.</span></div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a63eadebc6faf0538523bfc4dcbc39d97">MakeAllDifferent</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160; <span class="keywordtype">bool</span> stronger_propagation);</div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160;</div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160; <span class="comment">// All variables are pairwise different, unless they are assigned to</span></div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160; <span class="comment">// the escape value.</span></div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a305fcf51481e580ce845a7c1642fb63a">MakeAllDifferentExcept</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160; int64 escape_value);</div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160; <span class="comment">// TODO(user): Do we need a version with an array of escape</span></div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160; <span class="comment">// values.</span></div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160;</div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160; <span class="comment">// Creates a constraint binding the arrays of variables &quot;vars&quot; and</span></div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160; <span class="comment">// &quot;sorted_vars&quot;: sorted_vars[0] must be equal to the minimum of all</span></div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160; <span class="comment">// variables in vars, and so on: the value of sorted_vars[i] must be</span></div><div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160; <span class="comment">// equal to the i-th value of variables invars.</span></div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160; <span class="comment">// This constraint propagates in both directions: from &quot;vars&quot; to</span></div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160; <span class="comment">// &quot;sorted_vars&quot; and vice-versa.</span></div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160; <span class="comment">// Behind the scenes, this constraint maintains that:</span></div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160; <span class="comment">// - sorted is always increasing.</span></div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160; <span class="comment">// - whatever the values of vars, there exists a permutation that</span></div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160; <span class="comment">// injects its values into the sorted variables.</span></div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160; <span class="comment">// For more info, please have a look at:</span></div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160; <span class="comment">// https://mpi-inf.mpg.de/~mehlhorn/ftp/Mehlhorn-Thiel.pdf</span></div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#af46c19361350e8714e3749c9d70047cf">MakeSortingConstraint</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; sorted);</div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160; <span class="comment">// TODO(user): Add void MakeSortedArray(const std::vector&lt;IntVar*&gt;&amp; vars,</span></div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160; <span class="comment">// std::vector&lt;IntVar*&gt;* const</span></div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160; <span class="comment">// sorted);</span></div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160;</div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160; <span class="comment">// Creates a constraint that enforces that left is lexicographically less</span></div><div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160; <span class="comment">// than right.</span></div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a82743e5fcfb142e69798225fc83305ca">MakeLexicalLess</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; left,</div><div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; right);</div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160;</div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160; <span class="comment">// Creates a constraint that enforces that left is lexicographically less</span></div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160; <span class="comment">// than or equal to right.</span></div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#ae2bcfbbfd2ccd50e71d9b7c2b466a9c2">MakeLexicalLessOrEqual</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; left,</div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; right);</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160;</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160; <span class="comment">// Creates a constraint that enforces that &#39;left&#39; and &#39;right&#39; both</span></div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160; <span class="comment">// represent permutations of [0..left.size()-1], and that &#39;right&#39; is</span></div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160; <span class="comment">// the inverse permutation of &#39;left&#39;, i.e. for all i in</span></div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160; <span class="comment">// [0..left.size()-1], right[left[i]] = i.</span></div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a59f3825b2c4fc01c7be8d7e523211d68">MakeInversePermutationConstraint</a>(</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; left, <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; right);</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160;</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160; <span class="comment">// Creates a constraint that binds the index variable to the index of the</span></div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160; <span class="comment">// first variable with the maximum value.</span></div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a65a1027f9fa77f54095277f7ef10cfca">MakeIndexOfFirstMaxValueConstraint</a>(</div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* index, <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars);</div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160;</div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160; <span class="comment">// Creates a constraint that binds the index variable to the index of the</span></div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160; <span class="comment">// first variable with the minimum value.</span></div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a1f15c77df41fd565ee016cfde6185052">MakeIndexOfFirstMinValueConstraint</a>(</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* index, <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars);</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160;</div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160; <span class="comment">// Creates a constraint that states that all variables in the first</span></div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160; <span class="comment">// vector are different from all variables in the second</span></div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160; <span class="comment">// group. Thus the set of values in the first vector does not</span></div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160; <span class="comment">// intersect with the set of values in the second vector.</span></div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#aad9eb1217dc7ff8f54cf10a3391410b6">MakeNullIntersect</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; first_vars,</div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; second_vars);</div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160;</div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160; <span class="comment">// Creates a constraint that states that all variables in the first</span></div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160; <span class="comment">// vector are different from all variables from the second group,</span></div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160; <span class="comment">// unless they are assigned to the escape value. Thus the set of</span></div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160; <span class="comment">// values in the first vector minus the escape value does not</span></div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160; <span class="comment">// intersect with the set of values in the second vector.</span></div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#af285b462fedc4cf35d36faff5fc78e21">MakeNullIntersectExcept</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; first_vars,</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; second_vars,</div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160; int64 escape_value);</div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160;</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160; <span class="comment">// TODO(user): Implement MakeAllNullIntersect taking an array of</span></div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160; <span class="comment">// variable vectors.</span></div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160;</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160; <span class="comment">// Prevent cycles. The &quot;nexts&quot; variables represent the next in the chain.</span></div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160; <span class="comment">// &quot;active&quot; variables indicate if the corresponding next variable is active;</span></div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160; <span class="comment">// this could be useful to model unperformed nodes in a routing problem.</span></div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160; <span class="comment">// A callback can be added to specify sink values (by default sink values</span></div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160; <span class="comment">// are values &gt;= vars.size()). Ownership of the callback is passed to the</span></div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160; <span class="comment">// constraint.</span></div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160; <span class="comment">// If assume_paths is either not specified or true, the constraint assumes</span></div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160; <span class="comment">// the &quot;nexts&quot; variables represent paths (and performs a faster propagation);</span></div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160; <span class="comment">// otherwise the constraint assumes they represent a forest.</span></div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a3a2e8e7abcce51fb754da16c477fca45">MakeNoCycle</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; nexts,</div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; active,</div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a7e47d3b978e31e6273a63dc52fcf3379">IndexFilter1</a> sink_handler = <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a3a2e8e7abcce51fb754da16c477fca45">MakeNoCycle</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; nexts,</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; active,</div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a7e47d3b978e31e6273a63dc52fcf3379">IndexFilter1</a> sink_handler, <span class="keywordtype">bool</span> assume_paths);</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160;</div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160; <span class="comment">// Force the &quot;nexts&quot; variable to create a complete Hamiltonian path.</span></div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#ac69bf81e7f8a9d08453ca8dae9619092">MakeCircuit</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; nexts);</div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160;</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160; <span class="comment">// Force the &quot;nexts&quot; variable to create a complete Hamiltonian path</span></div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160; <span class="comment">// for those that do not loop upon themselves.</span></div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a149da4f0a5e14223dd41d0b647b8f392">MakeSubCircuit</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; nexts);</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160;</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160; <span class="comment">// Creates a constraint which accumulates values along a path such that:</span></div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160; <span class="comment">// cumuls[next[i]] = cumuls[i] + transits[i].</span></div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160; <span class="comment">// Active variables indicate if the corresponding next variable is active;</span></div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160; <span class="comment">// this could be useful to model unperformed nodes in a routing problem.</span></div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a67e272ab8675e00ddeaf04d21bf87ce3">MakePathCumul</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; nexts,</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; active,</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; cumuls,</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; transits);</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160; <span class="comment">// Delayed version of the same constraint: propagation on the nexts variables</span></div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160; <span class="comment">// is delayed until all constraints have propagated.</span></div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160; <span class="comment">// TODO(user): Merge with other path-cumuls constraints.</span></div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a16cf34d9d8c3f46d7d1414b8c0e3b0c8">MakeDelayedPathCumul</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; nexts,</div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; active,</div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; cumuls,</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; transits);</div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160; <span class="comment">// Creates a constraint which accumulates values along a path such that:</span></div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160; <span class="comment">// cumuls[next[i]] = cumuls[i] + transit_evaluator(i, next[i]).</span></div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160; <span class="comment">// Active variables indicate if the corresponding next variable is active;</span></div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160; <span class="comment">// this could be useful to model unperformed nodes in a routing problem.</span></div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160; <span class="comment">// Ownership of transit_evaluator is taken and it must be a repeatable</span></div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160; <span class="comment">// callback.</span></div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a67e272ab8675e00ddeaf04d21bf87ce3">MakePathCumul</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; nexts,</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; active,</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; cumuls,</div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a0243986dd2db4b6e1bda331329ae529b">IndexEvaluator2</a> transit_evaluator);</div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160;</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160; <span class="comment">// Creates a constraint which accumulates values along a path such that:</span></div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160; <span class="comment">// cumuls[next[i]] = cumuls[i] + transit_evaluator(i, next[i]) + slacks[i].</span></div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160; <span class="comment">// Active variables indicate if the corresponding next variable is active;</span></div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160; <span class="comment">// this could be useful to model unperformed nodes in a routing problem.</span></div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160; <span class="comment">// Ownership of transit_evaluator is taken and it must be a repeatable</span></div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160; <span class="comment">// callback.</span></div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a67e272ab8675e00ddeaf04d21bf87ce3">MakePathCumul</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; nexts,</div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; active,</div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; cumuls,</div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; slacks,</div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a0243986dd2db4b6e1bda331329ae529b">IndexEvaluator2</a> transit_evaluator);</div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160; <span class="comment">// Constraint enforcing that status[i] is true iff there&#39;s a path defined on</span></div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160; <span class="comment">// next variables from sources[i] to sinks[i].</span></div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160; <span class="comment">// TODO(user): Only does checking on WhenBound events on next variables.</span></div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160; <span class="comment">// Check whether more propagation is needed.</span></div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a65bedad451869cdc814f87ceb68f2a7c">MakePathConnected</a>(std::vector&lt;IntVar*&gt; nexts,</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160; std::vector&lt;int64&gt; sources,</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160; std::vector&lt;int64&gt; sinks,</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160; std::vector&lt;IntVar*&gt; <a class="code" href="routing_8h.html#adb1490a44086db009cdb51f854a02a65">status</a>);</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160;<span class="preprocessor">#ifndef SWIG</span></div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160; <span class="comment">// Contraint enforcing, for each pair (i,j) in precedences, i to be before j</span></div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160; <span class="comment">// in paths defined by next variables.</span></div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160; <span class="comment">// TODO(user): This constraint does not make holes in variable domains;</span></div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160; <span class="comment">// the implementation can easily be modified to do that; evaluate the impact</span></div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160; <span class="comment">// on models solved with local search.</span></div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#abdda7108c8185b3dcea12523567b96a4">MakePathPrecedenceConstraint</a>(</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160; std::vector&lt;IntVar*&gt; nexts,</div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160; <span class="keyword">const</span> std::vector&lt;std::pair&lt;int, int&gt;&gt;&amp; precedences);</div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160; <span class="comment">// Same as MakePathPrecedenceConstraint but ensures precedence pairs on some</span></div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160; <span class="comment">// paths follow a LIFO or FIFO order.</span></div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160; <span class="comment">// LIFO order: given 2 pairs (a,b) and (c,d), if a is before c on the path</span></div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160; <span class="comment">// then d must be before b or b must be before c.</span></div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160; <span class="comment">// FIFO order: given 2 pairs (a,b) and (c,d), if a is before c on the path</span></div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160; <span class="comment">// then b must be before d.</span></div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160; <span class="comment">// LIFO (resp. FIFO) orders are enforced only on paths starting by indices in</span></div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160; <span class="comment">// lifo_path_starts (resp. fifo_path_start).</span></div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#abdda7108c8185b3dcea12523567b96a4">MakePathPrecedenceConstraint</a>(</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160; std::vector&lt;IntVar*&gt; nexts,</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160; <span class="keyword">const</span> std::vector&lt;std::pair&lt;int, int&gt;&gt;&amp; precedences,</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; lifo_path_starts,</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; fifo_path_starts);</div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160; <span class="comment">// Same as MakePathPrecedenceConstraint but will force i to be before j if</span></div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160; <span class="comment">// the sum of transits on the path from i to j is strictly positive.</span></div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a39c7db7afb0e10783e0f9f18a9045139">MakePathTransitPrecedenceConstraint</a>(</div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160; std::vector&lt;IntVar*&gt; nexts, std::vector&lt;IntVar*&gt; transits,</div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160; <span class="keyword">const</span> std::vector&lt;std::pair&lt;int, int&gt;&gt;&amp; precedences);</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160; <span class="comment">// This constraint maps the domain of &#39;var&#39; onto the array of</span></div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160; <span class="comment">// variables &#39;actives&#39;. That is</span></div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160; <span class="comment">// for all i in [0 .. size - 1]: actives[i] == 1 &lt;=&gt; var-&gt;Contains(i);</span></div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a95b306294d94049874328a4c02f320b4">MakeMapDomain</a>(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var,</div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; actives);</div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160;</div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160; <span class="comment">// This method creates a constraint where the graph of the relation</span></div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160; <span class="comment">// between the variables is given in extension. There are &#39;arity&#39;</span></div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160; <span class="comment">// variables involved in the relation and the graph is given by a</span></div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160; <span class="comment">// integer tuple set.</span></div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#aa4bb610f8e4708b2ea925c37db2b7f66">MakeAllowedAssignments</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160; <span class="keyword">const</span> IntTupleSet&amp; tuples);</div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160;</div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160; <span class="comment">// This constraint create a finite automaton that will check the</span></div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160; <span class="comment">// sequence of variables vars. It uses a transition table called</span></div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160; <span class="comment">// &#39;transition_table&#39;. Each transition is a triple</span></div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160; <span class="comment">// (current_state, variable_value, new_state).</span></div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160; <span class="comment">// The initial state is given, and the set of accepted states is decribed</span></div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160; <span class="comment">// by &#39;final_states&#39;. These states are hidden inside the constraint.</span></div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160; <span class="comment">// Only the transitions (i.e. the variables) are visible.</span></div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#ae4b9d3730dc01f9b766e69d411f190a6">MakeTransitionConstraint</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160; <span class="keyword">const</span> IntTupleSet&amp; transition_table,</div><div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160; int64 initial_state,</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160; <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; final_states);</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160;</div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160; <span class="comment">// This constraint create a finite automaton that will check the</span></div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160; <span class="comment">// sequence of variables vars. It uses a transition table called</span></div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160; <span class="comment">// &#39;transition_table&#39;. Each transition is a triple</span></div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160; <span class="comment">// (current_state, variable_value, new_state).</span></div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160; <span class="comment">// The initial state is given, and the set of accepted states is decribed</span></div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160; <span class="comment">// by &#39;final_states&#39;. These states are hidden inside the constraint.</span></div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160; <span class="comment">// Only the transitions (i.e. the variables) are visible.</span></div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#ae4b9d3730dc01f9b766e69d411f190a6">MakeTransitionConstraint</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160; <span class="keyword">const</span> IntTupleSet&amp; transition_table,</div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160; int64 initial_state,</div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; final_states);</div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160;</div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160;<span class="preprocessor">#if defined(SWIGPYTHON)</span></div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160; <span class="comment">// Compatibility layer for Python API.</span></div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#aa4bb610f8e4708b2ea925c37db2b7f66">MakeAllowedAssignments</a>(</div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160; <span class="keyword">const</span> std::vector&lt;std::vector&lt;int64&gt;&gt;&amp; raw_tuples) {</div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160; IntTupleSet tuples(vars.size());</div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160; tuples.InsertAll(raw_tuples);</div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classoperations__research_1_1Solver.html#aa4bb610f8e4708b2ea925c37db2b7f66">MakeAllowedAssignments</a>(vars, tuples);</div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160; }</div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160;</div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a697ed9eaa8955d595a023663ab1e8418">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#ae4b9d3730dc01f9b766e69d411f190a6">MakeTransitionConstraint</a>(</div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160; <span class="keyword">const</span> std::vector&lt;std::vector&lt;int64&gt;&gt;&amp; raw_transitions,</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160; int64 initial_state, <span class="keyword">const</span> std::vector&lt;int&gt;&amp; final_states) {</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160; IntTupleSet transitions(3);</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160; transitions.InsertAll(raw_transitions);</div><div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classoperations__research_1_1Solver.html#ae4b9d3730dc01f9b766e69d411f190a6">MakeTransitionConstraint</a>(vars, transitions, initial_state,</div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160; final_states);</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160; }</div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160;</div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160; <span class="comment">// This constraint states that all the boxes must not overlap.</span></div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160; <span class="comment">// The coordinates of box i are:</span></div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160; <span class="comment">// (x_vars[i], y_vars[i]),</span></div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160; <span class="comment">// (x_vars[i], y_vars[i] + y_size[i]),</span></div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160; <span class="comment">// (x_vars[i] + x_size[i], y_vars[i]),</span></div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160; <span class="comment">// (x_vars[i] + x_size[i], y_vars[i] + y_size[i]).</span></div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160; <span class="comment">// The sizes must be non-negative. Boxes with a zero dimension can be</span></div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160; <span class="comment">// pushed like any box.</span></div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a697ed9eaa8955d595a023663ab1e8418">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a3e4a18958cd72c63d679d1feea501e98">MakeNonOverlappingBoxesConstraint</a>(</div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; x_vars, <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; y_vars,</div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; x_size, <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; y_size);</div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a697ed9eaa8955d595a023663ab1e8418">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a3e4a18958cd72c63d679d1feea501e98">MakeNonOverlappingBoxesConstraint</a>(</div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; x_vars, <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; y_vars,</div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160; <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; x_size, <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; y_size);</div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a697ed9eaa8955d595a023663ab1e8418">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a3e4a18958cd72c63d679d1feea501e98">MakeNonOverlappingBoxesConstraint</a>(</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; x_vars, <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; y_vars,</div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; x_size, <span class="keyword">const</span> std::vector&lt;int&gt;&amp; y_size);</div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160;</div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160; <span class="comment">// This constraint states that all the boxes must not overlap.</span></div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160; <span class="comment">// The coordinates of box i are:</span></div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160; <span class="comment">// (x_vars[i], y_vars[i]),</span></div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160; <span class="comment">// (x_vars[i], y_vars[i] + y_size[i]),</span></div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160; <span class="comment">// (x_vars[i] + x_size[i], y_vars[i]),</span></div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160; <span class="comment">// (x_vars[i] + x_size[i], y_vars[i] + y_size[i]).</span></div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160; <span class="comment">// The sizes must be positive.</span></div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160; <span class="comment">// Boxes with a zero dimension can be placed anywhere.</span></div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a697ed9eaa8955d595a023663ab1e8418">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#ab235bf1af3430d5b19cf811be7c2da0f">MakeNonOverlappingNonStrictBoxesConstraint</a>(</div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; x_vars, <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; y_vars,</div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; x_size, <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; y_size);</div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a697ed9eaa8955d595a023663ab1e8418">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#ab235bf1af3430d5b19cf811be7c2da0f">MakeNonOverlappingNonStrictBoxesConstraint</a>(</div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; x_vars, <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; y_vars,</div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160; <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; x_size, <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; y_size);</div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a697ed9eaa8955d595a023663ab1e8418">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#ab235bf1af3430d5b19cf811be7c2da0f">MakeNonOverlappingNonStrictBoxesConstraint</a>(</div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; x_vars, <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; y_vars,</div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; x_size, <span class="keyword">const</span> std::vector&lt;int&gt;&amp; y_size);</div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160;</div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160; <span class="comment">// ----- Packing constraint -----</span></div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160;</div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160; <span class="comment">// This constraint packs all variables onto &#39;number_of_bins&#39;</span></div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160; <span class="comment">// variables. For any given variable, a value of &#39;number_of_bins&#39;</span></div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160; <span class="comment">// indicates that the variable is not assigned to any bin.</span></div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160; <span class="comment">// Dimensions, i.e., cumulative constraints on this packing, can be</span></div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160; <span class="comment">// added directly from the pack class.</span></div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160; Pack* <a class="code" href="classoperations__research_1_1Solver.html#a4140a32d9cc0d4700ef8cd391e20f635">MakePack</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars, <span class="keywordtype">int</span> number_of_bins);</div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160;</div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160; <span class="comment">// ----- scheduling objects -----</span></div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160;</div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160; <span class="comment">// Creates an interval var with a fixed duration. The duration must</span></div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160; <span class="comment">// be greater than 0. If optional is true, then the interval can be</span></div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160; <span class="comment">// performed or unperformed. If optional is false, then the interval</span></div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160; <span class="comment">// is always performed.</span></div><div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>&#160; IntervalVar* <a class="code" href="classoperations__research_1_1Solver.html#af3cf859de88467c7340a3ada0fe79620">MakeFixedDurationIntervalVar</a>(int64 start_min, int64 start_max,</div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160; int64 duration, <span class="keywordtype">bool</span> optional,</div><div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160; <span class="keyword">const</span> std::string&amp; name);</div><div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>&#160;</div><div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>&#160; <span class="comment">// This method fills the vector with &#39;count&#39; interval variables built with</span></div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160; <span class="comment">// the corresponding parameters.</span></div><div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a84df9e10dbd2548f4ffebba134c41a31">MakeFixedDurationIntervalVarArray</a>(</div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160; <span class="keywordtype">int</span> count, int64 start_min, int64 start_max, int64 duration,</div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160; <span class="keywordtype">bool</span> optional, <span class="keyword">const</span> std::string&amp; name,</div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160; std::vector&lt;IntervalVar*&gt;* <span class="keyword">const</span> array);</div><div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160;</div><div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160; <span class="comment">// Creates a performed interval var with a fixed duration. The duration must</span></div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160; <span class="comment">// be greater than 0.</span></div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160; IntervalVar* <a class="code" href="classoperations__research_1_1Solver.html#af3cf859de88467c7340a3ada0fe79620">MakeFixedDurationIntervalVar</a>(<a class="code" href="classoperations__research_1_1Solver.html#a34419e55556ff4e92b447fe895bdb9c3">IntVar</a>* <span class="keyword">const</span> start_variable,</div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160; int64 duration,</div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160; <span class="keyword">const</span> std::string&amp; name);</div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160;</div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160; <span class="comment">// Creates an interval var with a fixed duration, and performed_variable.</span></div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160; <span class="comment">// The duration must be greater than 0.</span></div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>&#160; IntervalVar* <a class="code" href="classoperations__research_1_1Solver.html#af3cf859de88467c7340a3ada0fe79620">MakeFixedDurationIntervalVar</a>(<a class="code" href="classoperations__research_1_1Solver.html#a34419e55556ff4e92b447fe895bdb9c3">IntVar</a>* <span class="keyword">const</span> start_variable,</div><div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>&#160; int64 duration,</div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a34419e55556ff4e92b447fe895bdb9c3">IntVar</a>* <span class="keyword">const</span> performed_variable,</div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>&#160; <span class="keyword">const</span> std::string&amp; name);</div><div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>&#160;</div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160; <span class="comment">// This method fills the vector with &#39;count&#39; interval var built with</span></div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160; <span class="comment">// the corresponding start variables.</span></div><div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a84df9e10dbd2548f4ffebba134c41a31">MakeFixedDurationIntervalVarArray</a>(</div><div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; start_variables, int64 duration,</div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160; <span class="keyword">const</span> std::string&amp; name, std::vector&lt;IntervalVar*&gt;* <span class="keyword">const</span> array);</div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160;</div><div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>&#160; <span class="comment">// This method fills the vector with interval variables built with</span></div><div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>&#160; <span class="comment">// the corresponding start variables.</span></div><div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a84df9e10dbd2548f4ffebba134c41a31">MakeFixedDurationIntervalVarArray</a>(</div><div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; start_variables,</div><div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>&#160; <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; durations, <span class="keyword">const</span> std::string&amp; name,</div><div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>&#160; std::vector&lt;IntervalVar*&gt;* <span class="keyword">const</span> array);</div><div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>&#160; <span class="comment">// This method fills the vector with interval variables built with</span></div><div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>&#160; <span class="comment">// the corresponding start variables.</span></div><div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a84df9e10dbd2548f4ffebba134c41a31">MakeFixedDurationIntervalVarArray</a>(</div><div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; start_variables,</div><div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; durations, <span class="keyword">const</span> std::string&amp; name,</div><div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160; std::vector&lt;IntervalVar*&gt;* <span class="keyword">const</span> array);</div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160;</div><div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160; <span class="comment">// This method fills the vector with interval variables built with</span></div><div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>&#160; <span class="comment">// the corresponding start and performed variables.</span></div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a84df9e10dbd2548f4ffebba134c41a31">MakeFixedDurationIntervalVarArray</a>(</div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; start_variables,</div><div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160; <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; durations,</div><div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; performed_variables, <span class="keyword">const</span> std::string&amp; name,</div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>&#160; std::vector&lt;IntervalVar*&gt;* <span class="keyword">const</span> array);</div><div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>&#160;</div><div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>&#160; <span class="comment">// This method fills the vector with interval variables built with</span></div><div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>&#160; <span class="comment">// the corresponding start and performed variables.</span></div><div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a84df9e10dbd2548f4ffebba134c41a31">MakeFixedDurationIntervalVarArray</a>(</div><div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; start_variables,</div><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; durations,</div><div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; performed_variables, <span class="keyword">const</span> std::string&amp; name,</div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160; std::vector&lt;IntervalVar*&gt;* <span class="keyword">const</span> array);</div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160;</div><div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>&#160; <span class="comment">// Creates a fixed and performed interval.</span></div><div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>&#160; IntervalVar* <a class="code" href="classoperations__research_1_1Solver.html#abc3ebe43e811c7fb172f962a78305a2e">MakeFixedInterval</a>(int64 start, int64 duration,</div><div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>&#160; <span class="keyword">const</span> std::string&amp; name);</div><div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>&#160;</div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160; <span class="comment">// Creates an interval var by specifying the bounds on start,</span></div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160; <span class="comment">// duration, and end.</span></div><div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160; IntervalVar* <a class="code" href="classoperations__research_1_1Solver.html#ac87d5128f0c386531d6bc37d847e9379">MakeIntervalVar</a>(int64 start_min, int64 start_max,</div><div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160; int64 duration_min, int64 duration_max,</div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160; int64 end_min, int64 end_max, <span class="keywordtype">bool</span> optional,</div><div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>&#160; <span class="keyword">const</span> std::string&amp; name);</div><div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>&#160;</div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160; <span class="comment">// This method fills the vector with &#39;count&#39; interval var built with</span></div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160; <span class="comment">// the corresponding parameters.</span></div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a406c32061db9fd011adb31709eab75ea">MakeIntervalVarArray</a>(<span class="keywordtype">int</span> count, int64 start_min, int64 start_max,</div><div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>&#160; int64 duration_min, int64 duration_max,</div><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160; int64 end_min, int64 end_max, <span class="keywordtype">bool</span> optional,</div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160; <span class="keyword">const</span> std::string&amp; name,</div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160; std::vector&lt;IntervalVar*&gt;* <span class="keyword">const</span> array);</div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160;</div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160; <span class="comment">// Creates an interval var that is the mirror image of the given one, that is,</span></div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160; <span class="comment">// the interval var obtained by reversing the axis.</span></div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160; IntervalVar* <a class="code" href="classoperations__research_1_1Solver.html#a2b941bb1e1090e457abd3b2da7e45b09">MakeMirrorInterval</a>(IntervalVar* <span class="keyword">const</span> interval_var);</div><div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>&#160;</div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160; <span class="comment">// Creates an interval var with a fixed duration whose start is</span></div><div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>&#160; <span class="comment">// synchronized with the start of another interval, with a given</span></div><div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>&#160; <span class="comment">// offset. The performed status is also in sync with the performed</span></div><div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>&#160; <span class="comment">// status of the given interval variable.</span></div><div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>&#160; IntervalVar* <a class="code" href="classoperations__research_1_1Solver.html#afb8890710339634b60f2c59043a2b4dd">MakeFixedDurationStartSyncedOnStartIntervalVar</a>(</div><div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160; IntervalVar* <span class="keyword">const</span> interval_var, int64 duration, int64 offset);</div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160;</div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160; <span class="comment">// Creates an interval var with a fixed duration whose start is</span></div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160; <span class="comment">// synchronized with the end of another interval, with a given</span></div><div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160; <span class="comment">// offset. The performed status is also in sync with the performed</span></div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160; <span class="comment">// status of the given interval variable.</span></div><div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>&#160; IntervalVar* <a class="code" href="classoperations__research_1_1Solver.html#a14b79fb7c8d45f40452921f13bdcf3a1">MakeFixedDurationStartSyncedOnEndIntervalVar</a>(</div><div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>&#160; IntervalVar* <span class="keyword">const</span> interval_var, int64 duration, int64 offset);</div><div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>&#160;</div><div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>&#160; <span class="comment">// Creates an interval var with a fixed duration whose end is</span></div><div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>&#160; <span class="comment">// synchronized with the start of another interval, with a given</span></div><div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160; <span class="comment">// offset. The performed status is also in sync with the performed</span></div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160; <span class="comment">// status of the given interval variable.</span></div><div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>&#160; IntervalVar* <a class="code" href="classoperations__research_1_1Solver.html#a7c7cdd60d6c9e3bc141dfc36595bdd7f">MakeFixedDurationEndSyncedOnStartIntervalVar</a>(</div><div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160; IntervalVar* <span class="keyword">const</span> interval_var, int64 duration, int64 offset);</div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160;</div><div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>&#160; <span class="comment">// Creates an interval var with a fixed duration whose end is</span></div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>&#160; <span class="comment">// synchronized with the end of another interval, with a given</span></div><div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>&#160; <span class="comment">// offset. The performed status is also in sync with the performed</span></div><div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>&#160; <span class="comment">// status of the given interval variable.</span></div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160; IntervalVar* <a class="code" href="classoperations__research_1_1Solver.html#a561299bd3b4d1875e1a627084c4f3dc2">MakeFixedDurationEndSyncedOnEndIntervalVar</a>(</div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>&#160; IntervalVar* <span class="keyword">const</span> interval_var, int64 duration, int64 offset);</div><div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>&#160;</div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>&#160; <span class="comment">// Creates and returns an interval variable that wraps around the given one,</span></div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>&#160; <span class="comment">// relaxing the min start and end. Relaxing means making unbounded when</span></div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160; <span class="comment">// optional. If the variable is non-optional, this method returns</span></div><div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>&#160; <span class="comment">// interval_var.</span></div><div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>&#160; <span class="comment">// More precisely, such an interval variable behaves as follows:</span></div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>&#160; <span class="comment">// * When the underlying must be performed, the returned interval variable</span></div><div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>&#160; <span class="comment">// behaves exactly as the underlying;</span></div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>&#160; <span class="comment">// * When the underlying may or may not be performed, the returned interval</span></div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>&#160; <span class="comment">// variable behaves like the underlying, except that it is unbounded on</span></div><div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>&#160; <span class="comment">// the min side;</span></div><div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>&#160; <span class="comment">// * When the underlying cannot be performed, the returned interval variable</span></div><div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>&#160; <span class="comment">// is of duration 0 and must be performed in an interval unbounded on both</span></div><div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>&#160; <span class="comment">// sides.</span></div><div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>&#160; <span class="comment">// This is very useful to implement propagators that may only modify</span></div><div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>&#160; <span class="comment">// the start max or end max.</span></div><div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>&#160; IntervalVar* <a class="code" href="classoperations__research_1_1Solver.html#a0a9ab7660c16c45e3a04547107a1f44f">MakeIntervalRelaxedMin</a>(IntervalVar* <span class="keyword">const</span> interval_var);</div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160;</div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160; <span class="comment">// Creates and returns an interval variable that wraps around the given one,</span></div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160; <span class="comment">// relaxing the max start and end. Relaxing means making unbounded when</span></div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160; <span class="comment">// optional. If the variable is non optional, this method returns</span></div><div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>&#160; <span class="comment">// interval_var.</span></div><div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>&#160; <span class="comment">// More precisely, such an interval variable behaves as follows:</span></div><div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>&#160; <span class="comment">// * When the underlying must be performed, the returned interval variable</span></div><div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>&#160; <span class="comment">// behaves exactly as the underlying;</span></div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>&#160; <span class="comment">// * When the underlying may or may not be performed, the returned interval</span></div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>&#160; <span class="comment">// variable behaves like the underlying, except that it is unbounded on</span></div><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160; <span class="comment">// the max side;</span></div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160; <span class="comment">// * When the underlying cannot be performed, the returned interval variable</span></div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160; <span class="comment">// is of duration 0 and must be performed in an interval unbounded on</span></div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160; <span class="comment">// both sides.</span></div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160; <span class="comment">// This is very useful for implementing propagators that may only modify</span></div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160; <span class="comment">// the start min or end min.</span></div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160; IntervalVar* <a class="code" href="classoperations__research_1_1Solver.html#a5664b23c751cead631f08318bdeeb63a">MakeIntervalRelaxedMax</a>(IntervalVar* <span class="keyword">const</span> interval_var);</div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>&#160;</div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160; <span class="comment">// ----- scheduling constraints -----</span></div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160;</div><div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160; <span class="comment">// This method creates a relation between an interval var and a</span></div><div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>&#160; <span class="comment">// date.</span></div><div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a697ed9eaa8955d595a023663ab1e8418">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a44750e41a0195b2790202338c3798ce1">MakeIntervalVarRelation</a>(IntervalVar* <span class="keyword">const</span> t,</div><div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a83e14be9c6bba9abdd1949c25c32a60d">UnaryIntervalRelation</a> r, int64 d);</div><div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>&#160;</div><div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>&#160; <span class="comment">// This method creates a relation between two interval vars.</span></div><div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a697ed9eaa8955d595a023663ab1e8418">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a44750e41a0195b2790202338c3798ce1">MakeIntervalVarRelation</a>(IntervalVar* <span class="keyword">const</span> t1,</div><div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9">BinaryIntervalRelation</a> r,</div><div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>&#160; IntervalVar* <span class="keyword">const</span> t2);</div><div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>&#160;</div><div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>&#160; <span class="comment">// This method creates a relation between two interval vars.</span></div><div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>&#160; <span class="comment">// The given delay is added to the second interval.</span></div><div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>&#160; <span class="comment">// i.e.: t1 STARTS_AFTER_END of t2 with a delay of 2</span></div><div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>&#160; <span class="comment">// means t1 will start at least two units of time after the end of t2.</span></div><div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a697ed9eaa8955d595a023663ab1e8418">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a01d92f3ca676da6aecf64fd91fbcf1b5">MakeIntervalVarRelationWithDelay</a>(IntervalVar* <span class="keyword">const</span> t1,</div><div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9">BinaryIntervalRelation</a> r,</div><div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>&#160; IntervalVar* <span class="keyword">const</span> t2,</div><div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>&#160; int64 delay);</div><div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>&#160;</div><div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>&#160; <span class="comment">// This constraint implements a temporal disjunction between two</span></div><div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>&#160; <span class="comment">// interval vars t1 and t2. &#39;alt&#39; indicates which alternative was</span></div><div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>&#160; <span class="comment">// chosen (alt == 0 is equivalent to t1 before t2).</span></div><div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a697ed9eaa8955d595a023663ab1e8418">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#acb0a02a6acc71bb5c26f5db75be94d43">MakeTemporalDisjunction</a>(IntervalVar* <span class="keyword">const</span> t1,</div><div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>&#160; IntervalVar* <span class="keyword">const</span> t2, <a class="code" href="classoperations__research_1_1Solver.html#a34419e55556ff4e92b447fe895bdb9c3">IntVar</a>* <span class="keyword">const</span> alt);</div><div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>&#160;</div><div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>&#160; <span class="comment">// This constraint implements a temporal disjunction between two</span></div><div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>&#160; <span class="comment">// interval vars.</span></div><div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a697ed9eaa8955d595a023663ab1e8418">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#acb0a02a6acc71bb5c26f5db75be94d43">MakeTemporalDisjunction</a>(IntervalVar* <span class="keyword">const</span> t1,</div><div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>&#160; IntervalVar* <span class="keyword">const</span> t2);</div><div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>&#160;</div><div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>&#160; <span class="comment">// This constraint forces all interval vars into an non-overlapping</span></div><div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>&#160; <span class="comment">// sequence. Intervals with zero duration can be scheduled anywhere.</span></div><div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>&#160; DisjunctiveConstraint* <a class="code" href="classoperations__research_1_1Solver.html#ac1097997c1048eba4ed6b2ba1bc3d3a1">MakeDisjunctiveConstraint</a>(</div><div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>&#160; <span class="keyword">const</span> std::vector&lt;IntervalVar*&gt;&amp; intervals, <span class="keyword">const</span> std::string&amp; name);</div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160;</div><div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>&#160; <span class="comment">// This constraint forces all interval vars into an non-overlapping</span></div><div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160; <span class="comment">// sequence. Intervals with zero durations cannot overlap with over</span></div><div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>&#160; <span class="comment">// intervals.</span></div><div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>&#160; DisjunctiveConstraint* <a class="code" href="classoperations__research_1_1Solver.html#afab240c5c40998926973f668308d3e28">MakeStrictDisjunctiveConstraint</a>(</div><div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>&#160; <span class="keyword">const</span> std::vector&lt;IntervalVar*&gt;&amp; intervals, <span class="keyword">const</span> std::string&amp; name);</div><div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>&#160;</div><div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>&#160; <span class="comment">// This constraint forces that, for any integer t, the sum of the demands</span></div><div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>&#160; <span class="comment">// corresponding to an interval containing t does not exceed the given</span></div><div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>&#160; <span class="comment">// capacity.</span></div><div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>&#160; <span class="comment">// Intervals and demands should be vectors of equal size.</span></div><div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>&#160; <span class="comment">// Demands should only contain non-negative values. Zero values are</span></div><div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>&#160; <span class="comment">// supported, and the corresponding intervals are filtered out, as they</span></div><div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>&#160; <span class="comment">// neither impact nor are impacted by this constraint.</span></div><div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a697ed9eaa8955d595a023663ab1e8418">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a91cc6755dcf8a72ebdccea585239b223">MakeCumulative</a>(<span class="keyword">const</span> std::vector&lt;IntervalVar*&gt;&amp; intervals,</div><div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>&#160; <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; demands, int64 capacity,</div><div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>&#160; <span class="keyword">const</span> std::string&amp; name);</div><div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>&#160;</div><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>&#160; <span class="comment">// This constraint forces that, for any integer t, the sum of the demands</span></div><div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>&#160; <span class="comment">// corresponding to an interval containing t does not exceed the given</span></div><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160; <span class="comment">// capacity.</span></div><div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>&#160; <span class="comment">// Intervals and demands should be vectors of equal size.</span></div><div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160; <span class="comment">// Demands should only contain non-negative values. Zero values are supported,</span></div><div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>&#160; <span class="comment">// and the corresponding intervals are filtered out, as they neither impact</span></div><div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>&#160; <span class="comment">// nor are impacted by this constraint.</span></div><div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a697ed9eaa8955d595a023663ab1e8418">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a91cc6755dcf8a72ebdccea585239b223">MakeCumulative</a>(<span class="keyword">const</span> std::vector&lt;IntervalVar*&gt;&amp; intervals,</div><div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; demands, int64 capacity,</div><div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>&#160; <span class="keyword">const</span> std::string&amp; name);</div><div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>&#160;</div><div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>&#160; <span class="comment">// This constraint forces that, for any integer t, the sum of the demands</span></div><div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160; <span class="comment">// corresponding to an interval containing t does not exceed the given</span></div><div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>&#160; <span class="comment">// capacity.</span></div><div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>&#160; <span class="comment">// Intervals and demands should be vectors of equal size.</span></div><div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160; <span class="comment">// Demands should only contain non-negative values. Zero values are</span></div><div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>&#160; <span class="comment">// supported, and the corresponding intervals are filtered out, as they</span></div><div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>&#160; <span class="comment">// neither impact nor are impacted by this constraint.</span></div><div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a697ed9eaa8955d595a023663ab1e8418">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a91cc6755dcf8a72ebdccea585239b223">MakeCumulative</a>(<span class="keyword">const</span> std::vector&lt;IntervalVar*&gt;&amp; intervals,</div><div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160; <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; demands,</div><div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a34419e55556ff4e92b447fe895bdb9c3">IntVar</a>* <span class="keyword">const</span> capacity, <span class="keyword">const</span> std::string&amp; name);</div><div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>&#160;</div><div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160; <span class="comment">// This constraint enforces that, for any integer t, the sum of the demands</span></div><div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160; <span class="comment">// corresponding to an interval containing t does not exceed the given</span></div><div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160; <span class="comment">// capacity.</span></div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160; <span class="comment">// Intervals and demands should be vectors of equal size.</span></div><div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>&#160; <span class="comment">// Demands should only contain non-negative values. Zero values are</span></div><div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>&#160; <span class="comment">// supported, and the corresponding intervals are filtered out, as they</span></div><div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>&#160; <span class="comment">// neither impact nor are impacted by this constraint.</span></div><div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a697ed9eaa8955d595a023663ab1e8418">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a91cc6755dcf8a72ebdccea585239b223">MakeCumulative</a>(<span class="keyword">const</span> std::vector&lt;IntervalVar*&gt;&amp; intervals,</div><div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; demands,</div><div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a34419e55556ff4e92b447fe895bdb9c3">IntVar</a>* <span class="keyword">const</span> capacity, <span class="keyword">const</span> std::string&amp; name);</div><div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>&#160;</div><div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>&#160; <span class="comment">// This constraint enforces that, for any integer t, the sum of demands</span></div><div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>&#160; <span class="comment">// corresponding to an interval containing t does not exceed the given</span></div><div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>&#160; <span class="comment">// capacity.</span></div><div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>&#160; <span class="comment">// Intervals and demands should be vectors of equal size.</span></div><div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160; <span class="comment">// Demands should be positive.</span></div><div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a697ed9eaa8955d595a023663ab1e8418">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a91cc6755dcf8a72ebdccea585239b223">MakeCumulative</a>(<span class="keyword">const</span> std::vector&lt;IntervalVar*&gt;&amp; intervals,</div><div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; demands,</div><div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160; int64 capacity, <span class="keyword">const</span> std::string&amp; name);</div><div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160;</div><div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>&#160; <span class="comment">// This constraint enforces that, for any integer t, the sum of demands</span></div><div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>&#160; <span class="comment">// corresponding to an interval containing t does not exceed the given</span></div><div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>&#160; <span class="comment">// capacity.</span></div><div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160; <span class="comment">// Intervals and demands should be vectors of equal size.</span></div><div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160; <span class="comment">// Demands should be positive.</span></div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a697ed9eaa8955d595a023663ab1e8418">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a91cc6755dcf8a72ebdccea585239b223">MakeCumulative</a>(<span class="keyword">const</span> std::vector&lt;IntervalVar*&gt;&amp; intervals,</div><div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; demands,</div><div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a34419e55556ff4e92b447fe895bdb9c3">IntVar</a>* <span class="keyword">const</span> capacity, <span class="keyword">const</span> std::string&amp; name);</div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160;</div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160; <span class="comment">// This constraint states that the target_var is the convex hull of</span></div><div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160; <span class="comment">// the intervals. If none of the interval variables is performed,</span></div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160; <span class="comment">// then the target var is unperformed too. Also, if the target</span></div><div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160; <span class="comment">// variable is unperformed, then all the intervals variables are</span></div><div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160; <span class="comment">// unperformed too.</span></div><div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a697ed9eaa8955d595a023663ab1e8418">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a31446874c1dc3fd6e1e81b85f0be282f">MakeCover</a>(<span class="keyword">const</span> std::vector&lt;IntervalVar*&gt;&amp; vars,</div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160; IntervalVar* <span class="keyword">const</span> target_var);</div><div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160;</div><div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160; <span class="comment">// This constraints states that the two interval variables are equal.</span></div><div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a697ed9eaa8955d595a023663ab1e8418">Constraint</a>* <a class="code" href="classoperations__research_1_1Solver.html#a44c97dfc4f51c14779ea29f76c662036">MakeEquality</a>(IntervalVar* <span class="keyword">const</span> var1, IntervalVar* <span class="keyword">const</span> var2);</div><div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160;</div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160; <span class="comment">// ----- Assignments -----</span></div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160;</div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160; <span class="comment">// This method creates an empty assignment.</span></div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160; Assignment* <a class="code" href="classoperations__research_1_1Solver.html#a44616760a35fb4c8a0811c487108a773">MakeAssignment</a>();</div><div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160;</div><div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160; <span class="comment">// This method creates an assignment which is a copy of &#39;a&#39;.</span></div><div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160; Assignment* <a class="code" href="classoperations__research_1_1Solver.html#a44616760a35fb4c8a0811c487108a773">MakeAssignment</a>(<span class="keyword">const</span> Assignment* <span class="keyword">const</span> a);</div><div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>&#160;</div><div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>&#160; <span class="comment">// ----- Solution Collectors -----</span></div><div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160;</div><div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160; <span class="comment">// Collect the first solution of the search.</span></div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160; SolutionCollector* <a class="code" href="classoperations__research_1_1Solver.html#a18656e1529d449a029580307f65978e8">MakeFirstSolutionCollector</a>(</div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160; <span class="keyword">const</span> Assignment* <span class="keyword">const</span> assignment);</div><div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160; <span class="comment">// Collect the first solution of the search. The variables will need to</span></div><div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160; <span class="comment">// be added later.</span></div><div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160; SolutionCollector* <a class="code" href="classoperations__research_1_1Solver.html#a18656e1529d449a029580307f65978e8">MakeFirstSolutionCollector</a>();</div><div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160;</div><div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160; <span class="comment">// Collect the last solution of the search.</span></div><div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160; SolutionCollector* <a class="code" href="classoperations__research_1_1Solver.html#aecb0b69911306ae5b8aa6a69839812e0">MakeLastSolutionCollector</a>(</div><div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160; <span class="keyword">const</span> Assignment* <span class="keyword">const</span> assignment);</div><div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160; <span class="comment">// Collect the last solution of the search. The variables will need to</span></div><div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160; <span class="comment">// be added later.</span></div><div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160; SolutionCollector* <a class="code" href="classoperations__research_1_1Solver.html#aecb0b69911306ae5b8aa6a69839812e0">MakeLastSolutionCollector</a>();</div><div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160;</div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160; <span class="comment">// Collect the solution corresponding to the optimal value of the objective</span></div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160; <span class="comment">// of &#39;assignment&#39;; if &#39;assignment&#39; does not have an objective no solution is</span></div><div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160; <span class="comment">// collected. This collector only collects one solution corresponding to the</span></div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160; <span class="comment">// best objective value (the first one found).</span></div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160; SolutionCollector* <a class="code" href="classoperations__research_1_1Solver.html#a1f477deb432653548d529105d333b51e">MakeBestValueSolutionCollector</a>(</div><div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160; <span class="keyword">const</span> Assignment* <span class="keyword">const</span> assignment, <span class="keywordtype">bool</span> maximize);</div><div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160; <span class="comment">// Collect the solution corresponding to the optimal value of the</span></div><div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160; <span class="comment">// objective of &#39;assignment&#39;; if &#39;assignment&#39; does not have an objective no</span></div><div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160; <span class="comment">// solution is collected. This collector only collects one solution</span></div><div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160; <span class="comment">// corresponding to the best objective value (the first one</span></div><div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160; <span class="comment">// found). The variables will need to be added later.</span></div><div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160; SolutionCollector* <a class="code" href="classoperations__research_1_1Solver.html#a1f477deb432653548d529105d333b51e">MakeBestValueSolutionCollector</a>(<span class="keywordtype">bool</span> maximize);</div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160;</div><div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160; <span class="comment">// Same as MakeBestValueSolutionCollector but collects the best</span></div><div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160; <span class="comment">// solution_count solutions. Collected solutions are sorted in increasing</span></div><div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160; <span class="comment">// optimality order (the best solution is the last one).</span></div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160; SolutionCollector* <a class="code" href="classoperations__research_1_1Solver.html#af56a95588607d60cd6908739164c2455">MakeNBestValueSolutionCollector</a>(</div><div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160; <span class="keyword">const</span> Assignment* <span class="keyword">const</span> assignment, <span class="keywordtype">int</span> solution_count, <span class="keywordtype">bool</span> maximize);</div><div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160; SolutionCollector* <a class="code" href="classoperations__research_1_1Solver.html#af56a95588607d60cd6908739164c2455">MakeNBestValueSolutionCollector</a>(<span class="keywordtype">int</span> solution_count,</div><div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160; <span class="keywordtype">bool</span> maximize);</div><div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160;</div><div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160; <span class="comment">// Collect all solutions of the search.</span></div><div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160; SolutionCollector* <a class="code" href="classoperations__research_1_1Solver.html#af2dd63ac2ae9f837cfab35b13176dc38">MakeAllSolutionCollector</a>(</div><div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160; <span class="keyword">const</span> Assignment* <span class="keyword">const</span> assignment);</div><div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160; <span class="comment">// Collect all solutions of the search. The variables will need to</span></div><div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160; <span class="comment">// be added later.</span></div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160; SolutionCollector* <a class="code" href="classoperations__research_1_1Solver.html#af2dd63ac2ae9f837cfab35b13176dc38">MakeAllSolutionCollector</a>();</div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160;</div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160; <span class="comment">// ----- Objective -----</span></div><div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160;</div><div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160; <span class="comment">// Creates a minimization objective.</span></div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160; OptimizeVar* <a class="code" href="classoperations__research_1_1Solver.html#a2ebf87279a0ec3e2342579e72f2bd34f">MakeMinimize</a>(<a class="code" href="classoperations__research_1_1Solver.html#a34419e55556ff4e92b447fe895bdb9c3">IntVar</a>* <span class="keyword">const</span> v, int64 step);</div><div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160;</div><div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160; <span class="comment">// Creates a maximization objective.</span></div><div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160; OptimizeVar* <a class="code" href="classoperations__research_1_1Solver.html#adf3a1f03acad746f2abe8bf5d2d6f93d">MakeMaximize</a>(<a class="code" href="classoperations__research_1_1Solver.html#a34419e55556ff4e92b447fe895bdb9c3">IntVar</a>* <span class="keyword">const</span> v, int64 step);</div><div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160;</div><div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160; <span class="comment">// Creates a objective with a given sense (true = maximization).</span></div><div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160; OptimizeVar* <a class="code" href="classoperations__research_1_1Solver.html#a2359ce77356b72617d07f9fe15e64b8e">MakeOptimize</a>(<span class="keywordtype">bool</span> maximize, <a class="code" href="classoperations__research_1_1Solver.html#a34419e55556ff4e92b447fe895bdb9c3">IntVar</a>* <span class="keyword">const</span> v, int64 step);</div><div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160;</div><div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160; <span class="comment">// Creates a minimization weighted objective. The actual objective is</span></div><div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160; <span class="comment">// scalar_prod(sub_objectives, weights).</span></div><div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160; OptimizeVar* <a class="code" href="classoperations__research_1_1Solver.html#a5d2f031cb8202d7b1cfe534e3c8e1918">MakeWeightedMinimize</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; sub_objectives,</div><div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160; <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; weights,</div><div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160; int64 step);</div><div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160;</div><div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>&#160; <span class="comment">// Creates a minimization weighted objective. The actual objective is</span></div><div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160; <span class="comment">// scalar_prod(sub_objectives, weights).</span></div><div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160; OptimizeVar* <a class="code" href="classoperations__research_1_1Solver.html#a5d2f031cb8202d7b1cfe534e3c8e1918">MakeWeightedMinimize</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; sub_objectives,</div><div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; weights,</div><div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160; int64 step);</div><div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160;</div><div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>&#160; <span class="comment">// Creates a maximization weigthed objective.</span></div><div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>&#160; OptimizeVar* <a class="code" href="classoperations__research_1_1Solver.html#aeb7ec77351bcc3b896fbd6f034749427">MakeWeightedMaximize</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; sub_objectives,</div><div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>&#160; <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; weights,</div><div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160; int64 step);</div><div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160;</div><div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160; <span class="comment">// Creates a maximization weigthed objective.</span></div><div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>&#160; OptimizeVar* <a class="code" href="classoperations__research_1_1Solver.html#aeb7ec77351bcc3b896fbd6f034749427">MakeWeightedMaximize</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; sub_objectives,</div><div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; weights,</div><div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>&#160; int64 step);</div><div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160;</div><div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160; <span class="comment">// Creates a weighted objective with a given sense (true = maximization).</span></div><div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>&#160; OptimizeVar* <a class="code" href="classoperations__research_1_1Solver.html#aa41f52a032f36aa8f26b00cceb8b6793">MakeWeightedOptimize</a>(<span class="keywordtype">bool</span> maximize,</div><div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; sub_objectives,</div><div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160; <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; weights,</div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160; int64 step);</div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160;</div><div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160; <span class="comment">// Creates a weighted objective with a given sense (true = maximization).</span></div><div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>&#160; OptimizeVar* <a class="code" href="classoperations__research_1_1Solver.html#aa41f52a032f36aa8f26b00cceb8b6793">MakeWeightedOptimize</a>(<span class="keywordtype">bool</span> maximize,</div><div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; sub_objectives,</div><div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; weights,</div><div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>&#160; int64 step);</div><div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>&#160;</div><div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>&#160; <span class="comment">// ----- Meta-heuristics -----</span></div><div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>&#160; <span class="comment">// Search monitors which try to get the search out of local optima.</span></div><div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>&#160;</div><div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160; <span class="comment">// Creates a Tabu Search monitor.</span></div><div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160; <span class="comment">// In the context of local search the behavior is similar to MakeOptimize(),</span></div><div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>&#160; <span class="comment">// creating an objective in a given sense. The behavior differs once a local</span></div><div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>&#160; <span class="comment">// optimum is reached: thereafter solutions which degrade the value of the</span></div><div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>&#160; <span class="comment">// objective are allowed if they are not &quot;tabu&quot;. A solution is &quot;tabu&quot; if it</span></div><div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160; <span class="comment">// doesn&#39;t respect the following rules:</span></div><div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160; <span class="comment">// - improving the best solution found so far</span></div><div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160; <span class="comment">// - variables in the &quot;keep&quot; list must keep their value, variables in the</span></div><div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160; <span class="comment">// &quot;forbid&quot; list must not take the value they have in the list.</span></div><div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>&#160; <span class="comment">// Variables with new values enter the tabu lists after each new solution</span></div><div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>&#160; <span class="comment">// found and leave the lists after a given number of iterations (called</span></div><div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>&#160; <span class="comment">// tenure). Only the variables passed to the method can enter the lists.</span></div><div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160; <span class="comment">// The tabu criterion is softened by the tabu factor which gives the number</span></div><div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160; <span class="comment">// of &quot;tabu&quot; violations which is tolerated; a factor of 1 means no violations</span></div><div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>&#160; <span class="comment">// allowed; a factor of 0 means all violations are allowed.</span></div><div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160;</div><div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#aac32a6eabe1d316d7ff5f92fedd1ec5b">SearchMonitor</a>* <a class="code" href="classoperations__research_1_1Solver.html#a741958c282764f0093800613f9a49eb7">MakeTabuSearch</a>(<span class="keywordtype">bool</span> maximize, <a class="code" href="classoperations__research_1_1Solver.html#a34419e55556ff4e92b447fe895bdb9c3">IntVar</a>* <span class="keyword">const</span> v, int64 step,</div><div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>&#160; int64 keep_tenure, int64 forbid_tenure,</div><div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>&#160; <span class="keywordtype">double</span> tabu_factor);</div><div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>&#160;</div><div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>&#160; <span class="comment">// Creates a Tabu Search based on the vars |vars|.</span></div><div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>&#160; <span class="comment">// A solution is &quot;tabu&quot; if all the vars in |vars| keep their value.</span></div><div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#aac32a6eabe1d316d7ff5f92fedd1ec5b">SearchMonitor</a>* <a class="code" href="classoperations__research_1_1Solver.html#a3488d384fcd80a6dbc3347c6b8dfb222">MakeGenericTabuSearch</a>(<span class="keywordtype">bool</span> maximize, <a class="code" href="classoperations__research_1_1Solver.html#a34419e55556ff4e92b447fe895bdb9c3">IntVar</a>* <span class="keyword">const</span> v,</div><div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>&#160; int64 step,</div><div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; tabu_vars,</div><div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>&#160; int64 forbid_tenure);</div><div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>&#160;</div><div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>&#160; <span class="comment">// Creates a Simulated Annealing monitor.</span></div><div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>&#160; <span class="comment">// TODO(user): document behavior</span></div><div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#aac32a6eabe1d316d7ff5f92fedd1ec5b">SearchMonitor</a>* <a class="code" href="classoperations__research_1_1Solver.html#aaba6e77a62dd706b07a0c993f6e0a945">MakeSimulatedAnnealing</a>(<span class="keywordtype">bool</span> maximize, <a class="code" href="classoperations__research_1_1Solver.html#a34419e55556ff4e92b447fe895bdb9c3">IntVar</a>* <span class="keyword">const</span> v,</div><div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>&#160; int64 step, int64 initial_temperature);</div><div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>&#160;</div><div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>&#160; <span class="comment">// Creates a Guided Local Search monitor.</span></div><div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>&#160; <span class="comment">// Description here: http://en.wikipedia.org/wiki/Guided_Local_Search</span></div><div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#aac32a6eabe1d316d7ff5f92fedd1ec5b">SearchMonitor</a>* <a class="code" href="classoperations__research_1_1Solver.html#a01b92dc5c74e94c0decb3883663b6a21">MakeGuidedLocalSearch</a>(<span class="keywordtype">bool</span> maximize, <a class="code" href="classoperations__research_1_1Solver.html#a34419e55556ff4e92b447fe895bdb9c3">IntVar</a>* <span class="keyword">const</span> objective,</div><div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a0243986dd2db4b6e1bda331329ae529b">IndexEvaluator2</a> objective_function,</div><div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>&#160; int64 step,</div><div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>&#160; <span class="keywordtype">double</span> penalty_factor);</div><div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#aac32a6eabe1d316d7ff5f92fedd1ec5b">SearchMonitor</a>* <a class="code" href="classoperations__research_1_1Solver.html#a01b92dc5c74e94c0decb3883663b6a21">MakeGuidedLocalSearch</a>(</div><div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>&#160; <span class="keywordtype">bool</span> maximize, <a class="code" href="classoperations__research_1_1Solver.html#a34419e55556ff4e92b447fe895bdb9c3">IntVar</a>* <span class="keyword">const</span> objective,</div><div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a1f24a08006b3142731a258d856f13e43">IndexEvaluator3</a> objective_function, int64 step,</div><div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; secondary_vars, <span class="keywordtype">double</span> penalty_factor);</div><div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>&#160;</div><div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>&#160; <span class="comment">// ----- Restart Search -----</span></div><div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>&#160;</div><div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>&#160; <span class="comment">// This search monitor will restart the search periodically.</span></div><div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>&#160; <span class="comment">// At the iteration n, it will restart after scale_factor * Luby(n) failures</span></div><div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>&#160; <span class="comment">// where Luby is the Luby Strategy (i.e. 1 1 2 1 1 2 4 1 1 2 1 1 2 4 8...).</span></div><div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#aac32a6eabe1d316d7ff5f92fedd1ec5b">SearchMonitor</a>* <a class="code" href="classoperations__research_1_1Solver.html#ac4587ad555a3768febcd111ac7481b58">MakeLubyRestart</a>(<span class="keywordtype">int</span> scale_factor);</div><div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>&#160;</div><div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>&#160; <span class="comment">// This search monitor will restart the search periodically after &#39;frequency&#39;</span></div><div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>&#160; <span class="comment">// failures.</span></div><div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#aac32a6eabe1d316d7ff5f92fedd1ec5b">SearchMonitor</a>* <a class="code" href="classoperations__research_1_1Solver.html#aa4558615a9df31d326b9e04902cc362a">MakeConstantRestart</a>(<span class="keywordtype">int</span> frequency);</div><div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>&#160;</div><div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>&#160; <span class="comment">// ----- Search Limit -----</span></div><div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>&#160;</div><div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>&#160; <span class="comment">// Creates a search limit that constrains the running time given in</span></div><div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>&#160; <span class="comment">// milliseconds.</span></div><div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>&#160; RegularLimit* <a class="code" href="classoperations__research_1_1Solver.html#a9b761ffa2c4aa399c1247b642a5e1d54">MakeTimeLimit</a>(int64 time_in_ms);</div><div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>&#160;</div><div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>&#160; <span class="comment">// Creates a search limit that constrains the number of branches</span></div><div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>&#160; <span class="comment">// explored in the search tree.</span></div><div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>&#160; RegularLimit* <a class="code" href="classoperations__research_1_1Solver.html#af9171596e98a897628f751924979a3ab">MakeBranchesLimit</a>(int64 <a class="code" href="classoperations__research_1_1Solver.html#aa843d980b4526a9b051e98e7f3425b40">branches</a>);</div><div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>&#160;</div><div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>&#160; <span class="comment">// Creates a search limit that constrains the number of failures</span></div><div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>&#160; <span class="comment">// that can happen when exploring the search tree.</span></div><div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>&#160; RegularLimit* <a class="code" href="classoperations__research_1_1Solver.html#aff9d2ee8b32e16581d3b5838f1d56e21">MakeFailuresLimit</a>(int64 <a class="code" href="classoperations__research_1_1Solver.html#a2047abfd3e0cf6919d67a4a6ccd1d3cc">failures</a>);</div><div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>&#160;</div><div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>&#160; <span class="comment">// Creates a search limit that constrains the number of solutions found</span></div><div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>&#160; <span class="comment">// during the search.</span></div><div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>&#160; RegularLimit* <a class="code" href="classoperations__research_1_1Solver.html#a5d25b8d216afddbe19a9713a0398e2d2">MakeSolutionsLimit</a>(int64 <a class="code" href="classoperations__research_1_1Solver.html#a89a5139453ffd5edd1992c82bd95f675">solutions</a>);</div><div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>&#160;</div><div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>&#160; <span class="comment">// Limits the search with the &#39;time&#39;, &#39;branches&#39;, &#39;failures&#39; and</span></div><div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>&#160; <span class="comment">// &#39;solutions&#39; limits.</span></div><div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>&#160; RegularLimit* <a class="code" href="classoperations__research_1_1Solver.html#ae094ccae48e0e5942835f318aee30f58">MakeLimit</a>(int64 time, int64 <a class="code" href="classoperations__research_1_1Solver.html#aa843d980b4526a9b051e98e7f3425b40">branches</a>, int64 <a class="code" href="classoperations__research_1_1Solver.html#a2047abfd3e0cf6919d67a4a6ccd1d3cc">failures</a>,</div><div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>&#160; int64 <a class="code" href="classoperations__research_1_1Solver.html#a89a5139453ffd5edd1992c82bd95f675">solutions</a>);</div><div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>&#160; <span class="comment">// Version reducing calls to wall timer by estimating number of remaining</span></div><div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>&#160; <span class="comment">// calls.</span></div><div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>&#160; RegularLimit* <a class="code" href="classoperations__research_1_1Solver.html#ae094ccae48e0e5942835f318aee30f58">MakeLimit</a>(int64 time, int64 <a class="code" href="classoperations__research_1_1Solver.html#aa843d980b4526a9b051e98e7f3425b40">branches</a>, int64 <a class="code" href="classoperations__research_1_1Solver.html#a2047abfd3e0cf6919d67a4a6ccd1d3cc">failures</a>,</div><div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>&#160; int64 <a class="code" href="classoperations__research_1_1Solver.html#a89a5139453ffd5edd1992c82bd95f675">solutions</a>, <span class="keywordtype">bool</span> smart_time_check);</div><div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>&#160; <span class="comment">// Creates a search limit which can either apply cumulatively or</span></div><div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>&#160; <span class="comment">// search-by-search.</span></div><div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>&#160; RegularLimit* <a class="code" href="classoperations__research_1_1Solver.html#ae094ccae48e0e5942835f318aee30f58">MakeLimit</a>(int64 time, int64 <a class="code" href="classoperations__research_1_1Solver.html#aa843d980b4526a9b051e98e7f3425b40">branches</a>, int64 <a class="code" href="classoperations__research_1_1Solver.html#a2047abfd3e0cf6919d67a4a6ccd1d3cc">failures</a>,</div><div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>&#160; int64 <a class="code" href="classoperations__research_1_1Solver.html#a89a5139453ffd5edd1992c82bd95f675">solutions</a>, <span class="keywordtype">bool</span> smart_time_check,</div><div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>&#160; <span class="keywordtype">bool</span> cumulative);</div><div class="line"><a name="l02236"></a><span class="lineno"> 2236</span>&#160; <span class="comment">// Creates a search limit from its protobuf description</span></div><div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>&#160; RegularLimit* <a class="code" href="classoperations__research_1_1Solver.html#ae094ccae48e0e5942835f318aee30f58">MakeLimit</a>(<span class="keyword">const</span> RegularLimitParameters&amp; proto);</div><div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>&#160;</div><div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>&#160; <span class="comment">// Creates a regular limit proto containing default values.</span></div><div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>&#160; RegularLimitParameters <a class="code" href="classoperations__research_1_1Solver.html#ae91967e7ceb0016a3bc1d177a17c1ef9">MakeDefaultRegularLimitParameters</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>&#160;</div><div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>&#160; <span class="comment">// Creates a search limit that is reached when either of the underlying limit</span></div><div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>&#160; <span class="comment">// is reached. That is, the returned limit is more stringent than both</span></div><div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>&#160; <span class="comment">// argument limits.</span></div><div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#abb737b44b0a0335d550d2a740ba00236">SearchLimit</a>* <a class="code" href="classoperations__research_1_1Solver.html#ae094ccae48e0e5942835f318aee30f58">MakeLimit</a>(<a class="code" href="classoperations__research_1_1Solver.html#abb737b44b0a0335d550d2a740ba00236">SearchLimit</a>* <span class="keyword">const</span> limit_1,</div><div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#abb737b44b0a0335d550d2a740ba00236">SearchLimit</a>* <span class="keyword">const</span> limit_2);</div><div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>&#160;</div><div class="line"><a name="l02248"></a><span class="lineno"> 2248</span>&#160; <span class="comment">// Callback-based search limit. Search stops when limiter returns true; if</span></div><div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>&#160; <span class="comment">// this happens at a leaf the corresponding solution will be rejected.</span></div><div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#abb737b44b0a0335d550d2a740ba00236">SearchLimit</a>* <a class="code" href="classoperations__research_1_1Solver.html#af8fa7be9bf993f9441d56aaaa8213eb5">MakeCustomLimit</a>(std::function&lt;<span class="keywordtype">bool</span>()&gt; limiter);</div><div class="line"><a name="l02251"></a><span class="lineno"> 2251</span>&#160;</div><div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>&#160; <span class="comment">// TODO(user): DEPRECATE API of MakeSearchLog(.., IntVar* var,..).</span></div><div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>&#160;</div><div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>&#160; <span class="comment">// ----- Search Log -----</span></div><div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>&#160; <span class="comment">// The SearchMonitors below will display a periodic search log</span></div><div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>&#160; <span class="comment">// on LOG(INFO) every branch_period branches explored.</span></div><div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#aac32a6eabe1d316d7ff5f92fedd1ec5b">SearchMonitor</a>* <a class="code" href="classoperations__research_1_1Solver.html#ab46fa9dd348f4228f9b830fcf8ab0ca6">MakeSearchLog</a>(<span class="keywordtype">int</span> branch_period);</div><div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>&#160;</div><div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>&#160; <span class="comment">// At each solution, this monitor also display the var value.</span></div><div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#aac32a6eabe1d316d7ff5f92fedd1ec5b">SearchMonitor</a>* <a class="code" href="classoperations__research_1_1Solver.html#ab46fa9dd348f4228f9b830fcf8ab0ca6">MakeSearchLog</a>(<span class="keywordtype">int</span> branch_period, <a class="code" href="classoperations__research_1_1Solver.html#a34419e55556ff4e92b447fe895bdb9c3">IntVar</a>* <span class="keyword">const</span> var);</div><div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>&#160;</div><div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>&#160; <span class="comment">// At each solution, this monitor will also display result of @p</span></div><div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>&#160; <span class="comment">// display_callback.</span></div><div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#aac32a6eabe1d316d7ff5f92fedd1ec5b">SearchMonitor</a>* <a class="code" href="classoperations__research_1_1Solver.html#ab46fa9dd348f4228f9b830fcf8ab0ca6">MakeSearchLog</a>(<span class="keywordtype">int</span> branch_period,</div><div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>&#160; std::function&lt;std::string()&gt; display_callback);</div><div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>&#160;</div><div class="line"><a name="l02267"></a><span class="lineno"> 2267</span>&#160; <span class="comment">// At each solution, this monitor will display the &#39;var&#39; value and the</span></div><div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>&#160; <span class="comment">// result of @p display_callback.</span></div><div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#aac32a6eabe1d316d7ff5f92fedd1ec5b">SearchMonitor</a>* <a class="code" href="classoperations__research_1_1Solver.html#ab46fa9dd348f4228f9b830fcf8ab0ca6">MakeSearchLog</a>(<span class="keywordtype">int</span> branch_period, <a class="code" href="classoperations__research_1_1Solver.html#a34419e55556ff4e92b447fe895bdb9c3">IntVar</a>* var,</div><div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>&#160; std::function&lt;std::string()&gt; display_callback);</div><div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>&#160;</div><div class="line"><a name="l02272"></a><span class="lineno"> 2272</span>&#160; <span class="comment">// OptimizeVar Search Logs</span></div><div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>&#160; <span class="comment">// At each solution, this monitor will also display the &#39;opt_var&#39; value.</span></div><div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#aac32a6eabe1d316d7ff5f92fedd1ec5b">SearchMonitor</a>* <a class="code" href="classoperations__research_1_1Solver.html#ab46fa9dd348f4228f9b830fcf8ab0ca6">MakeSearchLog</a>(<span class="keywordtype">int</span> branch_period, OptimizeVar* <span class="keyword">const</span> opt_var);</div><div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>&#160;</div><div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>&#160; <span class="comment">// Creates a search monitor that will also print the result of the</span></div><div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>&#160; <span class="comment">// display callback.</span></div><div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#aac32a6eabe1d316d7ff5f92fedd1ec5b">SearchMonitor</a>* <a class="code" href="classoperations__research_1_1Solver.html#ab46fa9dd348f4228f9b830fcf8ab0ca6">MakeSearchLog</a>(<span class="keywordtype">int</span> branch_period, OptimizeVar* <span class="keyword">const</span> opt_var,</div><div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>&#160; std::function&lt;std::string()&gt; display_callback);</div><div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>&#160;</div><div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>&#160; <span class="comment">// Creates a search monitor from logging parameters.</span></div><div class="line"><a name="l02282"></a><span class="lineno"> 2282</span>&#160; <span class="keyword">struct </span>SearchLogParameters {</div><div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>&#160; <span class="comment">// SearchMonitors will display a periodic search log every branch_period</span></div><div class="line"><a name="l02284"></a><span class="lineno"><a class="line" href="structoperations__research_1_1Solver_1_1SearchLogParameters.html"> 2284</a></span>&#160; <span class="comment">// branches explored.</span></div><div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>&#160; <span class="keywordtype">int</span> <a class="code" href="structoperations__research_1_1Solver_1_1SearchLogParameters.html#a71a927cbad9edffb0f6bed715809c251">branch_period</a> = 1;</div><div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>&#160; <span class="comment">// SearchMonitors will display values of objective or variable (both cannot</span></div><div class="line"><a name="l02287"></a><span class="lineno"><a class="line" href="structoperations__research_1_1Solver_1_1SearchLogParameters.html#a71a927cbad9edffb0f6bed715809c251"> 2287</a></span>&#160; <span class="comment">// be used together).</span></div><div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>&#160; <a class="code" href="classoperations__research_1_1OptimizeVar.html">OptimizeVar</a>* <a class="code" href="structoperations__research_1_1Solver_1_1SearchLogParameters.html#aa0b92206253b0409db49ebda4632b90e">objective</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="structoperations__research_1_1Solver_1_1SearchLogParameters.html#ae40b4b440b5b9e79ed7cd50b444a5466">variable</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02290"></a><span class="lineno"><a class="line" href="structoperations__research_1_1Solver_1_1SearchLogParameters.html#aa0b92206253b0409db49ebda4632b90e"> 2290</a></span>&#160; <span class="comment">// Objective or var values are unscaled by this factor when displayed.</span></div><div class="line"><a name="l02291"></a><span class="lineno"><a class="line" href="structoperations__research_1_1Solver_1_1SearchLogParameters.html#ae40b4b440b5b9e79ed7cd50b444a5466"> 2291</a></span>&#160; <span class="keywordtype">double</span> <a class="code" href="structoperations__research_1_1Solver_1_1SearchLogParameters.html#a61e516d58793110b2d8bca05ac810a3c">scaling_factor</a> = 1.0;</div><div class="line"><a name="l02292"></a><span class="lineno"> 2292</span>&#160; <span class="comment">// SearchMonitors will display the result of display_callback at each new</span></div><div class="line"><a name="l02293"></a><span class="lineno"><a class="line" href="structoperations__research_1_1Solver_1_1SearchLogParameters.html#a61e516d58793110b2d8bca05ac810a3c"> 2293</a></span>&#160; <span class="comment">// solution found.</span></div><div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>&#160; std::function&lt;std::string()&gt; <a class="code" href="structoperations__research_1_1Solver_1_1SearchLogParameters.html#a95a779b76301c3b1241e93f26332adb0">display_callback</a>;</div><div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>&#160; };</div><div class="line"><a name="l02296"></a><span class="lineno"><a class="line" href="structoperations__research_1_1Solver_1_1SearchLogParameters.html#a95a779b76301c3b1241e93f26332adb0"> 2296</a></span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <a class="code" href="classoperations__research_1_1Solver.html#ab46fa9dd348f4228f9b830fcf8ab0ca6">MakeSearchLog</a>(<a class="code" href="structoperations__research_1_1Solver_1_1SearchLogParameters.html">SearchLogParameters</a> <a class="code" href="classoperations__research_1_1Solver.html#adb77a0b4b40ea4e8282cf78b54717cd6">parameters</a>);</div><div class="line"><a name="l02297"></a><span class="lineno"> 2297</span>&#160;</div><div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>&#160; <span class="comment">// ----- Search Trace ------</span></div><div class="line"><a name="l02299"></a><span class="lineno"> 2299</span>&#160;</div><div class="line"><a name="l02300"></a><span class="lineno"> 2300</span>&#160; <span class="comment">// Creates a search monitor that will trace precisely the behavior of the</span></div><div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>&#160; <span class="comment">// search. Use this only for low level debugging.</span></div><div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <a class="code" href="classoperations__research_1_1Solver.html#a608fbd51b0f1c5b6fa65be4b5fc9e4a6">MakeSearchTrace</a>(<span class="keyword">const</span> std::string&amp; prefix);</div><div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>&#160;</div><div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>&#160; <span class="comment">// ----- Callback-based search monitors -----</span></div><div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <a class="code" href="classoperations__research_1_1Solver.html#a4d7cd9490b4b727b513fa325aa118561">MakeEnterSearchCallback</a>(std::function&lt;<span class="keywordtype">void</span>()&gt; callback);</div><div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <a class="code" href="classoperations__research_1_1Solver.html#a9358d9ba39e033777f5d862f76f8531b">MakeExitSearchCallback</a>(std::function&lt;<span class="keywordtype">void</span>()&gt; callback);</div><div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <a class="code" href="classoperations__research_1_1Solver.html#a131e1a06b2ee488ac26d6e2c84a187c1">MakeAtSolutionCallback</a>(std::function&lt;<span class="keywordtype">void</span>()&gt; callback);</div><div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>&#160;</div><div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>&#160; <span class="comment">// ----- ModelVisitor -----</span></div><div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>&#160;</div><div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>&#160; <span class="comment">// Prints the model.</span></div><div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>&#160; <a class="code" href="classoperations__research_1_1ModelVisitor.html">ModelVisitor</a>* <a class="code" href="classoperations__research_1_1Solver.html#a3755a91175b0918171b5758e15e34208">MakePrintModelVisitor</a>();</div><div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>&#160; <span class="comment">// Displays some nice statistics on the model.</span></div><div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>&#160; <a class="code" href="classoperations__research_1_1ModelVisitor.html">ModelVisitor</a>* <a class="code" href="classoperations__research_1_1Solver.html#a3a509ada6c8ab1ca9924a548e9614344">MakeStatisticsModelVisitor</a>();</div><div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>&#160;<span class="preprocessor">#if !defined(SWIG)</span></div><div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>&#160; <span class="comment">// Compute the number of constraints a variable is attached to.</span></div><div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>&#160; <a class="code" href="classoperations__research_1_1ModelVisitor.html">ModelVisitor</a>* <a class="code" href="classoperations__research_1_1Solver.html#af45183dc5bc39eda3d7a7ed11e0e7f31">MakeVariableDegreeVisitor</a>(</div><div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>&#160; absl::flat_hash_map&lt;const IntVar*, int&gt;* <span class="keyword">const</span> map);</div><div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>&#160;</div><div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>&#160; <span class="comment">// ----- Symmetry Breaking -----</span></div><div class="line"><a name="l02322"></a><span class="lineno"> 2322</span>&#160;</div><div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <a class="code" href="classoperations__research_1_1Solver.html#a3023ac289117048d22e69d76b5f6640e">MakeSymmetryManager</a>(</div><div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>&#160; <span class="keyword">const</span> std::vector&lt;SymmetryBreaker*&gt;&amp; visitors);</div><div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <a class="code" href="classoperations__research_1_1Solver.html#a3023ac289117048d22e69d76b5f6640e">MakeSymmetryManager</a>(<a class="code" href="classoperations__research_1_1SymmetryBreaker.html">SymmetryBreaker</a>* <span class="keyword">const</span> v1);</div><div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <a class="code" href="classoperations__research_1_1Solver.html#a3023ac289117048d22e69d76b5f6640e">MakeSymmetryManager</a>(<a class="code" href="classoperations__research_1_1SymmetryBreaker.html">SymmetryBreaker</a>* <span class="keyword">const</span> v1,</div><div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>&#160; <a class="code" href="classoperations__research_1_1SymmetryBreaker.html">SymmetryBreaker</a>* <span class="keyword">const</span> v2);</div><div class="line"><a name="l02328"></a><span class="lineno"> 2328</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <a class="code" href="classoperations__research_1_1Solver.html#a3023ac289117048d22e69d76b5f6640e">MakeSymmetryManager</a>(<a class="code" href="classoperations__research_1_1SymmetryBreaker.html">SymmetryBreaker</a>* <span class="keyword">const</span> v1,</div><div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>&#160; <a class="code" href="classoperations__research_1_1SymmetryBreaker.html">SymmetryBreaker</a>* <span class="keyword">const</span> v2,</div><div class="line"><a name="l02330"></a><span class="lineno"> 2330</span>&#160; <a class="code" href="classoperations__research_1_1SymmetryBreaker.html">SymmetryBreaker</a>* <span class="keyword">const</span> v3);</div><div class="line"><a name="l02331"></a><span class="lineno"> 2331</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <a class="code" href="classoperations__research_1_1Solver.html#a3023ac289117048d22e69d76b5f6640e">MakeSymmetryManager</a>(<a class="code" href="classoperations__research_1_1SymmetryBreaker.html">SymmetryBreaker</a>* <span class="keyword">const</span> v1,</div><div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>&#160; <a class="code" href="classoperations__research_1_1SymmetryBreaker.html">SymmetryBreaker</a>* <span class="keyword">const</span> v2,</div><div class="line"><a name="l02333"></a><span class="lineno"> 2333</span>&#160; <a class="code" href="classoperations__research_1_1SymmetryBreaker.html">SymmetryBreaker</a>* <span class="keyword">const</span> v3,</div><div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>&#160; <a class="code" href="classoperations__research_1_1SymmetryBreaker.html">SymmetryBreaker</a>* <span class="keyword">const</span> v4);</div><div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>&#160;</div><div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>&#160; <span class="comment">// ----- Search Decicions and Decision Builders -----</span></div><div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>&#160;</div><div class="line"><a name="l02338"></a><span class="lineno"> 2338</span>&#160; <span class="comment">// ----- Decisions -----</span></div><div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>&#160; <a class="code" href="classoperations__research_1_1Decision.html">Decision</a>* <a class="code" href="classoperations__research_1_1Solver.html#a4d59a6ca10783bbd71c02450cd300167">MakeAssignVariableValue</a>(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var, int64 val);</div><div class="line"><a name="l02340"></a><span class="lineno"> 2340</span>&#160; <a class="code" href="classoperations__research_1_1Decision.html">Decision</a>* <a class="code" href="classoperations__research_1_1Solver.html#ac2ec1f48c0928a10193dbd01c9a2ca7e">MakeVariableLessOrEqualValue</a>(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var, int64 value);</div><div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>&#160; <a class="code" href="classoperations__research_1_1Decision.html">Decision</a>* <a class="code" href="classoperations__research_1_1Solver.html#a7439b7f22691d89b1743cd176973904e">MakeVariableGreaterOrEqualValue</a>(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var, int64 value);</div><div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>&#160; <a class="code" href="classoperations__research_1_1Decision.html">Decision</a>* <a class="code" href="classoperations__research_1_1Solver.html#ae92ae7da7adbe8c74cfca8bda16b3ab4">MakeSplitVariableDomain</a>(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var, int64 val,</div><div class="line"><a name="l02343"></a><span class="lineno"> 2343</span>&#160; <span class="keywordtype">bool</span> start_with_lower_half);</div><div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>&#160; <a class="code" href="classoperations__research_1_1Decision.html">Decision</a>* <a class="code" href="classoperations__research_1_1Solver.html#ad7e8f831f8fe5c00526fc38f30c4ab8d">MakeAssignVariableValueOrFail</a>(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var, int64 value);</div><div class="line"><a name="l02345"></a><span class="lineno"> 2345</span>&#160; <a class="code" href="classoperations__research_1_1Decision.html">Decision</a>* <a class="code" href="classoperations__research_1_1Solver.html#a9816b2778045704456abd21374c9174d">MakeAssignVariableValueOrDoNothing</a>(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var, int64 value);</div><div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>&#160; <a class="code" href="classoperations__research_1_1Decision.html">Decision</a>* <a class="code" href="classoperations__research_1_1Solver.html#ad7fbe491c3a389f2cd649301689375f5">MakeAssignVariablesValues</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>&#160; <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; values);</div><div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>&#160; <a class="code" href="classoperations__research_1_1Decision.html">Decision</a>* <a class="code" href="classoperations__research_1_1Solver.html#adf86f33f53f99f73d5f0a459e11e2a64">MakeFailDecision</a>();</div><div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>&#160; <a class="code" href="classoperations__research_1_1Decision.html">Decision</a>* <a class="code" href="classoperations__research_1_1Solver.html#a915268f135681d8a8eeafe9feb4efc5f">MakeDecision</a>(<a class="code" href="classoperations__research_1_1Solver.html#a87ca0b6abf9c8724900387f5aa557c04">Action</a> apply, <a class="code" href="classoperations__research_1_1Solver.html#a87ca0b6abf9c8724900387f5aa557c04">Action</a> refute);</div><div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>&#160;</div><div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>&#160; <span class="comment">// Creates a decision builder which sequentially composes decision builders.</span></div><div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>&#160; <span class="comment">// At each leaf of a decision builder, the next decision builder is therefore</span></div><div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>&#160; <span class="comment">// called. For instance, Compose(db1, db2) will result in the following tree:</span></div><div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>&#160; <span class="comment">// d1 tree |</span></div><div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>&#160; <span class="comment">// / | \ |</span></div><div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>&#160; <span class="comment">// db1 leaves |</span></div><div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>&#160; <span class="comment">// / | \ |</span></div><div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>&#160; <span class="comment">// db2 tree db2 tree db2 tree |</span></div><div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a5deb6524933e21a8cd1c3563f5cd3c4d">Compose</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db1,</div><div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db2);</div><div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a5deb6524933e21a8cd1c3563f5cd3c4d">Compose</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db1,</div><div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db2,</div><div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db3);</div><div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a5deb6524933e21a8cd1c3563f5cd3c4d">Compose</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db1,</div><div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db2,</div><div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db3,</div><div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db4);</div><div class="line"><a name="l02368"></a><span class="lineno"> 2368</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a5deb6524933e21a8cd1c3563f5cd3c4d">Compose</a>(<span class="keyword">const</span> std::vector&lt;DecisionBuilder*&gt;&amp; dbs);</div><div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>&#160;</div><div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>&#160; <span class="comment">// Creates a decision builder which will create a search tree where each</span></div><div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>&#160; <span class="comment">// decision builder is called from the top of the search tree. For instance</span></div><div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>&#160; <span class="comment">// the decision builder Try(db1, db2) will entirely explore the search tree</span></div><div class="line"><a name="l02373"></a><span class="lineno"> 2373</span>&#160; <span class="comment">// of db1 then the one of db2, resulting in the following search tree:</span></div><div class="line"><a name="l02374"></a><span class="lineno"> 2374</span>&#160; <span class="comment">// Tree root |</span></div><div class="line"><a name="l02375"></a><span class="lineno"> 2375</span>&#160; <span class="comment">// / \ |</span></div><div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>&#160; <span class="comment">// db1 tree db2 tree |</span></div><div class="line"><a name="l02377"></a><span class="lineno"> 2377</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>&#160; <span class="comment">// This is very handy to try a decision builder which partially explores the</span></div><div class="line"><a name="l02379"></a><span class="lineno"> 2379</span>&#160; <span class="comment">// search space and if it fails to try another decision builder.</span></div><div class="line"><a name="l02380"></a><span class="lineno"> 2380</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l02381"></a><span class="lineno"> 2381</span>&#160; <span class="comment">// TODO(user): The search tree can be balanced by using binary</span></div><div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>&#160; <span class="comment">// &quot;Try&quot;-builders &quot;recursively&quot;. For instance, Try(a,b,c,d) will give a tree</span></div><div class="line"><a name="l02383"></a><span class="lineno"> 2383</span>&#160; <span class="comment">// unbalanced to the right, whereas Try(Try(a,b), Try(b,c)) will give a</span></div><div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>&#160; <span class="comment">// balanced tree. Investigate if we should only provide the binary version</span></div><div class="line"><a name="l02385"></a><span class="lineno"> 2385</span>&#160; <span class="comment">// and/or if we should balance automatically.</span></div><div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#add5cfd638da3fe013e6d86aef1426009">Try</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db1, <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db2);</div><div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#add5cfd638da3fe013e6d86aef1426009">Try</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db1, <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db2,</div><div class="line"><a name="l02388"></a><span class="lineno"> 2388</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db3);</div><div class="line"><a name="l02389"></a><span class="lineno"> 2389</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#add5cfd638da3fe013e6d86aef1426009">Try</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db1, <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db2,</div><div class="line"><a name="l02390"></a><span class="lineno"> 2390</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db3, <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db4);</div><div class="line"><a name="l02391"></a><span class="lineno"> 2391</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#add5cfd638da3fe013e6d86aef1426009">Try</a>(<span class="keyword">const</span> std::vector&lt;DecisionBuilder*&gt;&amp; dbs);</div><div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>&#160;</div><div class="line"><a name="l02393"></a><span class="lineno"> 2393</span>&#160; <span class="comment">// Phases on IntVar arrays.</span></div><div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>&#160; <span class="comment">// TODO(user): name each of them differently, and document them (and do that</span></div><div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>&#160; <span class="comment">// for all other functions that have several homonyms in this .h).</span></div><div class="line"><a name="l02396"></a><span class="lineno"> 2396</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a2f30468d938065d5e3ae986a09b66df4">MakePhase</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l02397"></a><span class="lineno"> 2397</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8b">IntVarStrategy</a> var_str, <a class="code" href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659">IntValueStrategy</a> val_str);</div><div class="line"><a name="l02398"></a><span class="lineno"> 2398</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a2f30468d938065d5e3ae986a09b66df4">MakePhase</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a1040bdf484009e1a00e60ebb055ad1a1">IndexEvaluator1</a> var_evaluator,</div><div class="line"><a name="l02400"></a><span class="lineno"> 2400</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659">IntValueStrategy</a> val_str);</div><div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>&#160;</div><div class="line"><a name="l02402"></a><span class="lineno"> 2402</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a2f30468d938065d5e3ae986a09b66df4">MakePhase</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l02403"></a><span class="lineno"> 2403</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8b">IntVarStrategy</a> var_str,</div><div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a0243986dd2db4b6e1bda331329ae529b">IndexEvaluator2</a> value_evaluator);</div><div class="line"><a name="l02405"></a><span class="lineno"> 2405</span>&#160;</div><div class="line"><a name="l02406"></a><span class="lineno"> 2406</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a2f30468d938065d5e3ae986a09b66df4">MakePhase</a>(</div><div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars, <a class="code" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8b">IntVarStrategy</a> var_str,</div><div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>&#160; <span class="comment">// var_val1_val2_comparator(var, val1, val2) is true iff assigning value</span></div><div class="line"><a name="l02409"></a><span class="lineno"> 2409</span>&#160; <span class="comment">// &quot;val1&quot; to variable &quot;var&quot; is better than assigning value &quot;val2&quot;.</span></div><div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#af24d476da11ebf69fae9d4890447cc95">VariableValueComparator</a> var_val1_val2_comparator);</div><div class="line"><a name="l02411"></a><span class="lineno"> 2411</span>&#160;</div><div class="line"><a name="l02412"></a><span class="lineno"> 2412</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a2f30468d938065d5e3ae986a09b66df4">MakePhase</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a1040bdf484009e1a00e60ebb055ad1a1">IndexEvaluator1</a> var_evaluator,</div><div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a0243986dd2db4b6e1bda331329ae529b">IndexEvaluator2</a> value_evaluator);</div><div class="line"><a name="l02415"></a><span class="lineno"> 2415</span>&#160;</div><div class="line"><a name="l02416"></a><span class="lineno"> 2416</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a2f30468d938065d5e3ae986a09b66df4">MakePhase</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8b">IntVarStrategy</a> var_str,</div><div class="line"><a name="l02418"></a><span class="lineno"> 2418</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a0243986dd2db4b6e1bda331329ae529b">IndexEvaluator2</a> value_evaluator,</div><div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a1040bdf484009e1a00e60ebb055ad1a1">IndexEvaluator1</a> tie_breaker);</div><div class="line"><a name="l02420"></a><span class="lineno"> 2420</span>&#160;</div><div class="line"><a name="l02421"></a><span class="lineno"> 2421</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a2f30468d938065d5e3ae986a09b66df4">MakePhase</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a1040bdf484009e1a00e60ebb055ad1a1">IndexEvaluator1</a> var_evaluator,</div><div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a0243986dd2db4b6e1bda331329ae529b">IndexEvaluator2</a> value_evaluator,</div><div class="line"><a name="l02424"></a><span class="lineno"> 2424</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a1040bdf484009e1a00e60ebb055ad1a1">IndexEvaluator1</a> tie_breaker);</div><div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>&#160;</div><div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a2b8fff361dacff8b29be507fc704d0b1">MakeDefaultPhase</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars);</div><div class="line"><a name="l02427"></a><span class="lineno"> 2427</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a2b8fff361dacff8b29be507fc704d0b1">MakeDefaultPhase</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l02428"></a><span class="lineno"> 2428</span>&#160; <span class="keyword">const</span> <a class="code" href="structoperations__research_1_1DefaultPhaseParameters.html">DefaultPhaseParameters</a>&amp; <a class="code" href="classoperations__research_1_1Solver.html#adb77a0b4b40ea4e8282cf78b54717cd6">parameters</a>);</div><div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>&#160;</div><div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>&#160; <span class="comment">// Shortcuts for small arrays.</span></div><div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a2f30468d938065d5e3ae986a09b66df4">MakePhase</a>(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> v0, <a class="code" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8b">IntVarStrategy</a> var_str,</div><div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659">IntValueStrategy</a> val_str);</div><div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a2f30468d938065d5e3ae986a09b66df4">MakePhase</a>(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> v0, <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> v1,</div><div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8b">IntVarStrategy</a> var_str, <a class="code" href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659">IntValueStrategy</a> val_str);</div><div class="line"><a name="l02435"></a><span class="lineno"> 2435</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a2f30468d938065d5e3ae986a09b66df4">MakePhase</a>(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> v0, <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> v1,</div><div class="line"><a name="l02436"></a><span class="lineno"> 2436</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> v2, <a class="code" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8b">IntVarStrategy</a> var_str,</div><div class="line"><a name="l02437"></a><span class="lineno"> 2437</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659">IntValueStrategy</a> val_str);</div><div class="line"><a name="l02438"></a><span class="lineno"> 2438</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a2f30468d938065d5e3ae986a09b66df4">MakePhase</a>(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> v0, <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> v1,</div><div class="line"><a name="l02439"></a><span class="lineno"> 2439</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> v2, <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> v3,</div><div class="line"><a name="l02440"></a><span class="lineno"> 2440</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8b">IntVarStrategy</a> var_str, <a class="code" href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659">IntValueStrategy</a> val_str);</div><div class="line"><a name="l02441"></a><span class="lineno"> 2441</span>&#160;</div><div class="line"><a name="l02442"></a><span class="lineno"> 2442</span>&#160; <span class="comment">// ----- Scheduling Decisions -----</span></div><div class="line"><a name="l02443"></a><span class="lineno"> 2443</span>&#160;</div><div class="line"><a name="l02444"></a><span class="lineno"> 2444</span>&#160; <span class="comment">// Returns a decision that tries to schedule a task at a given time.</span></div><div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>&#160; <span class="comment">// On the Apply branch, it will set that interval var as performed and set</span></div><div class="line"><a name="l02446"></a><span class="lineno"> 2446</span>&#160; <span class="comment">// its start to &#39;est&#39;. On the Refute branch, it will just update the</span></div><div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>&#160; <span class="comment">// &#39;marker&#39; to &#39;est&#39; + 1. This decision is used in the</span></div><div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>&#160; <span class="comment">// INTERVAL_SET_TIMES_FORWARD strategy.</span></div><div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>&#160; <a class="code" href="classoperations__research_1_1Decision.html">Decision</a>* <a class="code" href="classoperations__research_1_1Solver.html#a31d7d8bb2bb4f992ef1ec9d41434091c">MakeScheduleOrPostpone</a>(<a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var, int64 est,</div><div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>&#160; int64* <span class="keyword">const</span> marker);</div><div class="line"><a name="l02451"></a><span class="lineno"> 2451</span>&#160;</div><div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>&#160; <span class="comment">// Returns a decision that tries to schedule a task at a given time.</span></div><div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>&#160; <span class="comment">// On the Apply branch, it will set that interval var as performed and set</span></div><div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>&#160; <span class="comment">// its end to &#39;est&#39;. On the Refute branch, it will just update the</span></div><div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>&#160; <span class="comment">// &#39;marker&#39; to &#39;est&#39; - 1. This decision is used in the</span></div><div class="line"><a name="l02456"></a><span class="lineno"> 2456</span>&#160; <span class="comment">// INTERVAL_SET_TIMES_BACKWARD strategy.</span></div><div class="line"><a name="l02457"></a><span class="lineno"> 2457</span>&#160; <a class="code" href="classoperations__research_1_1Decision.html">Decision</a>* <a class="code" href="classoperations__research_1_1Solver.html#a76d57c8fe9937093475ce43cdfe2412d">MakeScheduleOrExpedite</a>(<a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var, int64 est,</div><div class="line"><a name="l02458"></a><span class="lineno"> 2458</span>&#160; int64* <span class="keyword">const</span> marker);</div><div class="line"><a name="l02459"></a><span class="lineno"> 2459</span>&#160;</div><div class="line"><a name="l02460"></a><span class="lineno"> 2460</span>&#160; <span class="comment">// Returns a decision that tries to rank first the ith interval var</span></div><div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>&#160; <span class="comment">// in the sequence variable.</span></div><div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>&#160; <a class="code" href="classoperations__research_1_1Decision.html">Decision</a>* <a class="code" href="classoperations__research_1_1Solver.html#a1ce9ae264e0bbde4bcd8c5b9fd97a7e2">MakeRankFirstInterval</a>(<a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a>* <span class="keyword">const</span> sequence, <span class="keywordtype">int</span> index);</div><div class="line"><a name="l02463"></a><span class="lineno"> 2463</span>&#160;</div><div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>&#160; <span class="comment">// Returns a decision that tries to rank last the ith interval var</span></div><div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>&#160; <span class="comment">// in the sequence variable.</span></div><div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>&#160; <a class="code" href="classoperations__research_1_1Decision.html">Decision</a>* <a class="code" href="classoperations__research_1_1Solver.html#a878714df7b35afc923456d2608205377">MakeRankLastInterval</a>(<a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a>* <span class="keyword">const</span> sequence, <span class="keywordtype">int</span> index);</div><div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>&#160;</div><div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>&#160; <span class="comment">// Returns a decision builder which assigns values to variables which</span></div><div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>&#160; <span class="comment">// minimize the values returned by the evaluator. The arguments passed to the</span></div><div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>&#160; <span class="comment">// evaluator callback are the indices of the variables in vars and the values</span></div><div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>&#160; <span class="comment">// of these variables. Ownership of the callback is passed to the decision</span></div><div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>&#160; <span class="comment">// builder.</span></div><div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a2f30468d938065d5e3ae986a09b66df4">MakePhase</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a0243986dd2db4b6e1bda331329ae529b">IndexEvaluator2</a> eval, <a class="code" href="classoperations__research_1_1Solver.html#afabd2f40b8da33b224a5cafd2a053a21">EvaluatorStrategy</a> str);</div><div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>&#160;</div><div class="line"><a name="l02476"></a><span class="lineno"> 2476</span>&#160; <span class="comment">// Returns a decision builder which assigns values to variables</span></div><div class="line"><a name="l02477"></a><span class="lineno"> 2477</span>&#160; <span class="comment">// which minimize the values returned by the evaluator. In case of</span></div><div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>&#160; <span class="comment">// tie breaks, the second callback is used to choose the best index</span></div><div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>&#160; <span class="comment">// in the array of equivalent pairs with equivalent evaluations. The</span></div><div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>&#160; <span class="comment">// arguments passed to the evaluator callback are the indices of the</span></div><div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>&#160; <span class="comment">// variables in vars and the values of these variables. Ownership of</span></div><div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>&#160; <span class="comment">// the callback is passed to the decision builder.</span></div><div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a2f30468d938065d5e3ae986a09b66df4">MakePhase</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a0243986dd2db4b6e1bda331329ae529b">IndexEvaluator2</a> eval, <a class="code" href="classoperations__research_1_1Solver.html#a1040bdf484009e1a00e60ebb055ad1a1">IndexEvaluator1</a> tie_breaker,</div><div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#afabd2f40b8da33b224a5cafd2a053a21">EvaluatorStrategy</a> str);</div><div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>&#160;</div><div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>&#160; <span class="comment">// Scheduling phases.</span></div><div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>&#160;</div><div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a2f30468d938065d5e3ae986a09b66df4">MakePhase</a>(<span class="keyword">const</span> std::vector&lt;IntervalVar*&gt;&amp; intervals,</div><div class="line"><a name="l02490"></a><span class="lineno"> 2490</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ae21b3786b7770dc880343e4a1445b424">IntervalStrategy</a> str);</div><div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>&#160;</div><div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a2f30468d938065d5e3ae986a09b66df4">MakePhase</a>(<span class="keyword">const</span> std::vector&lt;SequenceVar*&gt;&amp; sequences,</div><div class="line"><a name="l02493"></a><span class="lineno"> 2493</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a94a24557456395e59c924a095f2096aa">SequenceStrategy</a> str);</div><div class="line"><a name="l02494"></a><span class="lineno"> 2494</span>&#160;</div><div class="line"><a name="l02495"></a><span class="lineno"> 2495</span>&#160; <span class="comment">// Returns a decision builder for which the left-most leaf corresponds</span></div><div class="line"><a name="l02496"></a><span class="lineno"> 2496</span>&#160; <span class="comment">// to assignment, the rest of the tree being explored using &#39;db&#39;.</span></div><div class="line"><a name="l02497"></a><span class="lineno"> 2497</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#aea8c7f5b1272ab68b5cb2f864029a233">MakeDecisionBuilderFromAssignment</a>(</div><div class="line"><a name="l02498"></a><span class="lineno"> 2498</span>&#160; <a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>* <span class="keyword">const</span> assignment, <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db,</div><div class="line"><a name="l02499"></a><span class="lineno"> 2499</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars);</div><div class="line"><a name="l02500"></a><span class="lineno"> 2500</span>&#160;</div><div class="line"><a name="l02501"></a><span class="lineno"> 2501</span>&#160; <span class="comment">// Returns a decision builder that will add the given constraint to</span></div><div class="line"><a name="l02502"></a><span class="lineno"> 2502</span>&#160; <span class="comment">// the model.</span></div><div class="line"><a name="l02503"></a><span class="lineno"> 2503</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a9110719b65ea5b817d9da02a742270fe">MakeConstraintAdder</a>(<a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <span class="keyword">const</span> ct);</div><div class="line"><a name="l02504"></a><span class="lineno"> 2504</span>&#160;</div><div class="line"><a name="l02505"></a><span class="lineno"> 2505</span>&#160; <span class="comment">// SolveOnce will collapse a search tree described by a decision</span></div><div class="line"><a name="l02506"></a><span class="lineno"> 2506</span>&#160; <span class="comment">// builder &#39;db&#39; and a set of monitors and wrap it into a single point.</span></div><div class="line"><a name="l02507"></a><span class="lineno"> 2507</span>&#160; <span class="comment">// If there are no solutions to this nested tree, then SolveOnce will</span></div><div class="line"><a name="l02508"></a><span class="lineno"> 2508</span>&#160; <span class="comment">// fail. If there is a solution, it will find it and returns nullptr.</span></div><div class="line"><a name="l02509"></a><span class="lineno"> 2509</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a983c4e29e7048bcbcd8b7e170089df83">MakeSolveOnce</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db);</div><div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a983c4e29e7048bcbcd8b7e170089df83">MakeSolveOnce</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db,</div><div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> monitor1);</div><div class="line"><a name="l02512"></a><span class="lineno"> 2512</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a983c4e29e7048bcbcd8b7e170089df83">MakeSolveOnce</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db,</div><div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> monitor1,</div><div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> monitor2);</div><div class="line"><a name="l02515"></a><span class="lineno"> 2515</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a983c4e29e7048bcbcd8b7e170089df83">MakeSolveOnce</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db,</div><div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> monitor1,</div><div class="line"><a name="l02517"></a><span class="lineno"> 2517</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> monitor2,</div><div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> monitor3);</div><div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a983c4e29e7048bcbcd8b7e170089df83">MakeSolveOnce</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db,</div><div class="line"><a name="l02520"></a><span class="lineno"> 2520</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> monitor1,</div><div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> monitor2,</div><div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> monitor3,</div><div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> monitor4);</div><div class="line"><a name="l02524"></a><span class="lineno"> 2524</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a983c4e29e7048bcbcd8b7e170089df83">MakeSolveOnce</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db,</div><div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>&#160; <span class="keyword">const</span> std::vector&lt;SearchMonitor*&gt;&amp; monitors);</div><div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>&#160;</div><div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>&#160; <span class="comment">// NestedOptimize will collapse a search tree described by a</span></div><div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>&#160; <span class="comment">// decision builder &#39;db&#39; and a set of monitors and wrap it into a</span></div><div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>&#160; <span class="comment">// single point. If there are no solutions to this nested tree, then</span></div><div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>&#160; <span class="comment">// NestedOptimize will fail. If there are solutions, it will find</span></div><div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>&#160; <span class="comment">// the best as described by the mandatory objective in the solution</span></div><div class="line"><a name="l02532"></a><span class="lineno"> 2532</span>&#160; <span class="comment">// as well as the optimization direction, instantiate all variables</span></div><div class="line"><a name="l02533"></a><span class="lineno"> 2533</span>&#160; <span class="comment">// to this solution, and return nullptr.</span></div><div class="line"><a name="l02534"></a><span class="lineno"> 2534</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#adbf9d5aec9bc8016844cdb07a9f56bfa">MakeNestedOptimize</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db,</div><div class="line"><a name="l02535"></a><span class="lineno"> 2535</span>&#160; <a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>* <span class="keyword">const</span> solution, <span class="keywordtype">bool</span> maximize,</div><div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>&#160; int64 step);</div><div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#adbf9d5aec9bc8016844cdb07a9f56bfa">MakeNestedOptimize</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db,</div><div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>&#160; <a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>* <span class="keyword">const</span> solution, <span class="keywordtype">bool</span> maximize,</div><div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>&#160; int64 step,</div><div class="line"><a name="l02540"></a><span class="lineno"> 2540</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> monitor1);</div><div class="line"><a name="l02541"></a><span class="lineno"> 2541</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#adbf9d5aec9bc8016844cdb07a9f56bfa">MakeNestedOptimize</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db,</div><div class="line"><a name="l02542"></a><span class="lineno"> 2542</span>&#160; <a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>* <span class="keyword">const</span> solution, <span class="keywordtype">bool</span> maximize,</div><div class="line"><a name="l02543"></a><span class="lineno"> 2543</span>&#160; int64 step, <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> monitor1,</div><div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> monitor2);</div><div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#adbf9d5aec9bc8016844cdb07a9f56bfa">MakeNestedOptimize</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db,</div><div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>&#160; <a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>* <span class="keyword">const</span> solution, <span class="keywordtype">bool</span> maximize,</div><div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>&#160; int64 step, <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> monitor1,</div><div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> monitor2,</div><div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> monitor3);</div><div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#adbf9d5aec9bc8016844cdb07a9f56bfa">MakeNestedOptimize</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db,</div><div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>&#160; <a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>* <span class="keyword">const</span> solution, <span class="keywordtype">bool</span> maximize,</div><div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>&#160; int64 step, <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> monitor1,</div><div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> monitor2,</div><div class="line"><a name="l02554"></a><span class="lineno"> 2554</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> monitor3,</div><div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>* <span class="keyword">const</span> monitor4);</div><div class="line"><a name="l02556"></a><span class="lineno"> 2556</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#adbf9d5aec9bc8016844cdb07a9f56bfa">MakeNestedOptimize</a>(</div><div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db, <a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>* <span class="keyword">const</span> solution, <span class="keywordtype">bool</span> maximize,</div><div class="line"><a name="l02558"></a><span class="lineno"> 2558</span>&#160; int64 step, <span class="keyword">const</span> std::vector&lt;SearchMonitor*&gt;&amp; monitors);</div><div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>&#160;</div><div class="line"><a name="l02560"></a><span class="lineno"> 2560</span>&#160; <span class="comment">// Returns a DecisionBuilder which restores an Assignment</span></div><div class="line"><a name="l02561"></a><span class="lineno"> 2561</span>&#160; <span class="comment">// (calls void Assignment::Restore())</span></div><div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a4ee11d297238c4b366eacbe02fe2ed23">MakeRestoreAssignment</a>(<a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>* assignment);</div><div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>&#160;</div><div class="line"><a name="l02564"></a><span class="lineno"> 2564</span>&#160; <span class="comment">// Returns a DecisionBuilder which stores an Assignment</span></div><div class="line"><a name="l02565"></a><span class="lineno"> 2565</span>&#160; <span class="comment">// (calls void Assignment::Store())</span></div><div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a0f974867e7b4d7f51f9ae33bea50ba02">MakeStoreAssignment</a>(<a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>* assignment);</div><div class="line"><a name="l02567"></a><span class="lineno"> 2567</span>&#160;</div><div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>&#160; <span class="comment">// ----- Local Search Operators -----</span></div><div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>&#160;</div><div class="line"><a name="l02570"></a><span class="lineno"> 2570</span>&#160; <a class="code" href="classoperations__research_1_1LocalSearchOperator.html">LocalSearchOperator</a>* <a class="code" href="classoperations__research_1_1Solver.html#a5a4f58391d4317f078f4940adaeea72e">MakeOperator</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l02571"></a><span class="lineno"> 2571</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4">LocalSearchOperators</a> op);</div><div class="line"><a name="l02572"></a><span class="lineno"> 2572</span>&#160; <a class="code" href="classoperations__research_1_1LocalSearchOperator.html">LocalSearchOperator</a>* <a class="code" href="classoperations__research_1_1Solver.html#a5a4f58391d4317f078f4940adaeea72e">MakeOperator</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; secondary_vars,</div><div class="line"><a name="l02574"></a><span class="lineno"> 2574</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4">LocalSearchOperators</a> op);</div><div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>&#160; <span class="comment">// TODO(user): Make the callback an IndexEvaluator2 when there are no</span></div><div class="line"><a name="l02576"></a><span class="lineno"> 2576</span>&#160; <span class="comment">// secondary variables.</span></div><div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>&#160; <a class="code" href="classoperations__research_1_1LocalSearchOperator.html">LocalSearchOperator</a>* <a class="code" href="classoperations__research_1_1Solver.html#a5a4f58391d4317f078f4940adaeea72e">MakeOperator</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l02578"></a><span class="lineno"> 2578</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a1f24a08006b3142731a258d856f13e43">IndexEvaluator3</a> evaluator,</div><div class="line"><a name="l02579"></a><span class="lineno"> 2579</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ac1b3220ae80fb8430bc06310c5bea5f1">EvaluatorLocalSearchOperators</a> op);</div><div class="line"><a name="l02580"></a><span class="lineno"> 2580</span>&#160; <a class="code" href="classoperations__research_1_1LocalSearchOperator.html">LocalSearchOperator</a>* <a class="code" href="classoperations__research_1_1Solver.html#a5a4f58391d4317f078f4940adaeea72e">MakeOperator</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; secondary_vars,</div><div class="line"><a name="l02582"></a><span class="lineno"> 2582</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a1f24a08006b3142731a258d856f13e43">IndexEvaluator3</a> evaluator,</div><div class="line"><a name="l02583"></a><span class="lineno"> 2583</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ac1b3220ae80fb8430bc06310c5bea5f1">EvaluatorLocalSearchOperators</a> op);</div><div class="line"><a name="l02584"></a><span class="lineno"> 2584</span>&#160;</div><div class="line"><a name="l02585"></a><span class="lineno"> 2585</span>&#160; <span class="comment">// Creates a large neighborhood search operator which creates fragments (set</span></div><div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>&#160; <span class="comment">// of relaxed variables) with up to number_of_variables random variables</span></div><div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>&#160; <span class="comment">// (sampling with replacement is performed meaning that at most</span></div><div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>&#160; <span class="comment">// number_of_variables variables are selected). Warning: this operator will</span></div><div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>&#160; <span class="comment">// always return neighbors; using it without a search limit will result in a</span></div><div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>&#160; <span class="comment">// non-ending search.</span></div><div class="line"><a name="l02591"></a><span class="lineno"> 2591</span>&#160; <span class="comment">// Optionally a random seed can be specified.</span></div><div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>&#160; <a class="code" href="classoperations__research_1_1LocalSearchOperator.html">LocalSearchOperator</a>* <a class="code" href="classoperations__research_1_1Solver.html#a5ca2c3302d7fda338f6c59adbb8c7979">MakeRandomLnsOperator</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>&#160; <span class="keywordtype">int</span> number_of_variables);</div><div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>&#160; <a class="code" href="classoperations__research_1_1LocalSearchOperator.html">LocalSearchOperator</a>* <a class="code" href="classoperations__research_1_1Solver.html#a5ca2c3302d7fda338f6c59adbb8c7979">MakeRandomLnsOperator</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l02595"></a><span class="lineno"> 2595</span>&#160; <span class="keywordtype">int</span> number_of_variables,</div><div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>&#160; int32 seed);</div><div class="line"><a name="l02597"></a><span class="lineno"> 2597</span>&#160;</div><div class="line"><a name="l02598"></a><span class="lineno"> 2598</span>&#160; <span class="comment">// Creates a local search operator that tries to move the assignment of some</span></div><div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>&#160; <span class="comment">// variables toward a target. The target is given as an Assignment. This</span></div><div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>&#160; <span class="comment">// operator generates neighbors in which the only difference compared to the</span></div><div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>&#160; <span class="comment">// current state is that one variable that belongs to the target assignment</span></div><div class="line"><a name="l02602"></a><span class="lineno"> 2602</span>&#160; <span class="comment">// is set to its target value.</span></div><div class="line"><a name="l02603"></a><span class="lineno"> 2603</span>&#160; <a class="code" href="classoperations__research_1_1LocalSearchOperator.html">LocalSearchOperator</a>* <a class="code" href="classoperations__research_1_1Solver.html#a566bbd1c5497546294c96367cffa47f8">MakeMoveTowardTargetOperator</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>&amp; target);</div><div class="line"><a name="l02604"></a><span class="lineno"> 2604</span>&#160;</div><div class="line"><a name="l02605"></a><span class="lineno"> 2605</span>&#160; <span class="comment">// Creates a local search operator that tries to move the assignment of some</span></div><div class="line"><a name="l02606"></a><span class="lineno"> 2606</span>&#160; <span class="comment">// variables toward a target. The target is given either as two vectors: a</span></div><div class="line"><a name="l02607"></a><span class="lineno"> 2607</span>&#160; <span class="comment">// vector of variables and a vector of associated target values. The two</span></div><div class="line"><a name="l02608"></a><span class="lineno"> 2608</span>&#160; <span class="comment">// vectors should be of the same length. This operator generates neighbors in</span></div><div class="line"><a name="l02609"></a><span class="lineno"> 2609</span>&#160; <span class="comment">// which the only difference compared to the current state is that one</span></div><div class="line"><a name="l02610"></a><span class="lineno"> 2610</span>&#160; <span class="comment">// variable that belongs to the given vector is set to its target value.</span></div><div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>&#160; <a class="code" href="classoperations__research_1_1LocalSearchOperator.html">LocalSearchOperator</a>* <a class="code" href="classoperations__research_1_1Solver.html#a566bbd1c5497546294c96367cffa47f8">MakeMoveTowardTargetOperator</a>(</div><div class="line"><a name="l02612"></a><span class="lineno"> 2612</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; variables,</div><div class="line"><a name="l02613"></a><span class="lineno"> 2613</span>&#160; <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; target_values);</div><div class="line"><a name="l02614"></a><span class="lineno"> 2614</span>&#160;</div><div class="line"><a name="l02615"></a><span class="lineno"> 2615</span>&#160; <span class="comment">// Creates a local search operator which concatenates a vector of operators.</span></div><div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>&#160; <span class="comment">// Each operator from the vector is called sequentially. By default, when a</span></div><div class="line"><a name="l02617"></a><span class="lineno"> 2617</span>&#160; <span class="comment">// neighbor is found the neighborhood exploration restarts from the last</span></div><div class="line"><a name="l02618"></a><span class="lineno"> 2618</span>&#160; <span class="comment">// active operator (the one which produced the neighbor).</span></div><div class="line"><a name="l02619"></a><span class="lineno"> 2619</span>&#160; <span class="comment">// This can be overridden by setting restart to true to force the exploration</span></div><div class="line"><a name="l02620"></a><span class="lineno"> 2620</span>&#160; <span class="comment">// to start from the first operator in the vector.</span></div><div class="line"><a name="l02621"></a><span class="lineno"> 2621</span>&#160; <span class="comment">// The default behavior can also be overridden using an evaluation callback to</span></div><div class="line"><a name="l02622"></a><span class="lineno"> 2622</span>&#160; <span class="comment">// set the order in which the operators are explored (the callback is called</span></div><div class="line"><a name="l02623"></a><span class="lineno"> 2623</span>&#160; <span class="comment">// in LocalSearchOperator::Start()). The first argument of the callback is</span></div><div class="line"><a name="l02624"></a><span class="lineno"> 2624</span>&#160; <span class="comment">// the index of the operator which produced the last move, the second</span></div><div class="line"><a name="l02625"></a><span class="lineno"> 2625</span>&#160; <span class="comment">// argument is the index of the operator to be evaluated.</span></div><div class="line"><a name="l02626"></a><span class="lineno"> 2626</span>&#160; <span class="comment">// Ownership of the callback is taken by ConcatenateOperators.</span></div><div class="line"><a name="l02627"></a><span class="lineno"> 2627</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l02628"></a><span class="lineno"> 2628</span>&#160; <span class="comment">// Example:</span></div><div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l02630"></a><span class="lineno"> 2630</span>&#160; <span class="comment">// const int kPriorities = {10, 100, 10, 0};</span></div><div class="line"><a name="l02631"></a><span class="lineno"> 2631</span>&#160; <span class="comment">// int64 Evaluate(int active_operator, int current_operator) {</span></div><div class="line"><a name="l02632"></a><span class="lineno"> 2632</span>&#160; <span class="comment">// return kPriorities[current_operator];</span></div><div class="line"><a name="l02633"></a><span class="lineno"> 2633</span>&#160; <span class="comment">// }</span></div><div class="line"><a name="l02634"></a><span class="lineno"> 2634</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l02635"></a><span class="lineno"> 2635</span>&#160; <span class="comment">// LocalSearchOperator* concat =</span></div><div class="line"><a name="l02636"></a><span class="lineno"> 2636</span>&#160; <span class="comment">// solver.ConcatenateOperators(operators,</span></div><div class="line"><a name="l02637"></a><span class="lineno"> 2637</span>&#160; <span class="comment">// NewPermanentCallback(&amp;Evaluate));</span></div><div class="line"><a name="l02638"></a><span class="lineno"> 2638</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>&#160; <span class="comment">// The elements of the vector operators will be sorted by increasing priority</span></div><div class="line"><a name="l02640"></a><span class="lineno"> 2640</span>&#160; <span class="comment">// and explored in that order (tie-breaks are handled by keeping the relative</span></div><div class="line"><a name="l02641"></a><span class="lineno"> 2641</span>&#160; <span class="comment">// operator order in the vector). This would result in the following order:</span></div><div class="line"><a name="l02642"></a><span class="lineno"> 2642</span>&#160; <span class="comment">// operators[3], operators[0], operators[2], operators[1].</span></div><div class="line"><a name="l02643"></a><span class="lineno"> 2643</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l02644"></a><span class="lineno"> 2644</span>&#160; <a class="code" href="classoperations__research_1_1LocalSearchOperator.html">LocalSearchOperator</a>* <a class="code" href="classoperations__research_1_1Solver.html#ab97f6b20657cd0f589db096d9d6da855">ConcatenateOperators</a>(</div><div class="line"><a name="l02645"></a><span class="lineno"> 2645</span>&#160; <span class="keyword">const</span> std::vector&lt;LocalSearchOperator*&gt;&amp; ops);</div><div class="line"><a name="l02646"></a><span class="lineno"> 2646</span>&#160; <a class="code" href="classoperations__research_1_1LocalSearchOperator.html">LocalSearchOperator</a>* <a class="code" href="classoperations__research_1_1Solver.html#ab97f6b20657cd0f589db096d9d6da855">ConcatenateOperators</a>(</div><div class="line"><a name="l02647"></a><span class="lineno"> 2647</span>&#160; <span class="keyword">const</span> std::vector&lt;LocalSearchOperator*&gt;&amp; ops, <span class="keywordtype">bool</span> restart);</div><div class="line"><a name="l02648"></a><span class="lineno"> 2648</span>&#160; <a class="code" href="classoperations__research_1_1LocalSearchOperator.html">LocalSearchOperator</a>* <a class="code" href="classoperations__research_1_1Solver.html#ab97f6b20657cd0f589db096d9d6da855">ConcatenateOperators</a>(</div><div class="line"><a name="l02649"></a><span class="lineno"> 2649</span>&#160; <span class="keyword">const</span> std::vector&lt;LocalSearchOperator*&gt;&amp; ops,</div><div class="line"><a name="l02650"></a><span class="lineno"> 2650</span>&#160; std::function&lt;int64(<span class="keywordtype">int</span>, <span class="keywordtype">int</span>)&gt; evaluator);</div><div class="line"><a name="l02651"></a><span class="lineno"> 2651</span>&#160; <span class="comment">// Randomized version of local search concatenator; calls a random operator</span></div><div class="line"><a name="l02652"></a><span class="lineno"> 2652</span>&#160; <span class="comment">// at each call to MakeNextNeighbor().</span></div><div class="line"><a name="l02653"></a><span class="lineno"> 2653</span>&#160; <a class="code" href="classoperations__research_1_1LocalSearchOperator.html">LocalSearchOperator</a>* <a class="code" href="classoperations__research_1_1Solver.html#aba8c3c31b4420581c108861a64014df2">RandomConcatenateOperators</a>(</div><div class="line"><a name="l02654"></a><span class="lineno"> 2654</span>&#160; <span class="keyword">const</span> std::vector&lt;LocalSearchOperator*&gt;&amp; ops);</div><div class="line"><a name="l02655"></a><span class="lineno"> 2655</span>&#160;</div><div class="line"><a name="l02656"></a><span class="lineno"> 2656</span>&#160; <span class="comment">// Randomized version of local search concatenator; calls a random operator</span></div><div class="line"><a name="l02657"></a><span class="lineno"> 2657</span>&#160; <span class="comment">// at each call to MakeNextNeighbor(). The provided seed is used to</span></div><div class="line"><a name="l02658"></a><span class="lineno"> 2658</span>&#160; <span class="comment">// initialize the random number generator.</span></div><div class="line"><a name="l02659"></a><span class="lineno"> 2659</span>&#160; <a class="code" href="classoperations__research_1_1LocalSearchOperator.html">LocalSearchOperator</a>* <a class="code" href="classoperations__research_1_1Solver.html#aba8c3c31b4420581c108861a64014df2">RandomConcatenateOperators</a>(</div><div class="line"><a name="l02660"></a><span class="lineno"> 2660</span>&#160; <span class="keyword">const</span> std::vector&lt;LocalSearchOperator*&gt;&amp; ops, int32 seed);</div><div class="line"><a name="l02661"></a><span class="lineno"> 2661</span>&#160;</div><div class="line"><a name="l02662"></a><span class="lineno"> 2662</span>&#160; <span class="comment">// Creates a local search operator that wraps another local search</span></div><div class="line"><a name="l02663"></a><span class="lineno"> 2663</span>&#160; <span class="comment">// operator and limits the number of neighbors explored (i.e., calls</span></div><div class="line"><a name="l02664"></a><span class="lineno"> 2664</span>&#160; <span class="comment">// to MakeNextNeighbor from the current solution (between two calls</span></div><div class="line"><a name="l02665"></a><span class="lineno"> 2665</span>&#160; <span class="comment">// to Start()). When this limit is reached, MakeNextNeighbor()</span></div><div class="line"><a name="l02666"></a><span class="lineno"> 2666</span>&#160; <span class="comment">// returns false. The counter is cleared when Start() is called.</span></div><div class="line"><a name="l02667"></a><span class="lineno"> 2667</span>&#160; <a class="code" href="classoperations__research_1_1LocalSearchOperator.html">LocalSearchOperator</a>* <a class="code" href="classoperations__research_1_1Solver.html#a8ebee4942752665dac914898d2c1ff49">MakeNeighborhoodLimit</a>(<a class="code" href="classoperations__research_1_1LocalSearchOperator.html">LocalSearchOperator</a>* <span class="keyword">const</span> op,</div><div class="line"><a name="l02668"></a><span class="lineno"> 2668</span>&#160; int64 limit);</div><div class="line"><a name="l02669"></a><span class="lineno"> 2669</span>&#160;</div><div class="line"><a name="l02670"></a><span class="lineno"> 2670</span>&#160; <span class="comment">// Local Search decision builders factories.</span></div><div class="line"><a name="l02671"></a><span class="lineno"> 2671</span>&#160; <span class="comment">// Local search is used to improve a given solution. This initial solution</span></div><div class="line"><a name="l02672"></a><span class="lineno"> 2672</span>&#160; <span class="comment">// can be specified either by an Assignment or by a DecisionBulder, and the</span></div><div class="line"><a name="l02673"></a><span class="lineno"> 2673</span>&#160; <span class="comment">// corresponding variables, the initial solution being the first solution</span></div><div class="line"><a name="l02674"></a><span class="lineno"> 2674</span>&#160; <span class="comment">// found by the DecisionBuilder.</span></div><div class="line"><a name="l02675"></a><span class="lineno"> 2675</span>&#160; <span class="comment">// The LocalSearchPhaseParameters parameter holds the actual definition of</span></div><div class="line"><a name="l02676"></a><span class="lineno"> 2676</span>&#160; <span class="comment">// the local search phase:</span></div><div class="line"><a name="l02677"></a><span class="lineno"> 2677</span>&#160; <span class="comment">// - a local search operator used to explore the neighborhood of the current</span></div><div class="line"><a name="l02678"></a><span class="lineno"> 2678</span>&#160; <span class="comment">// solution,</span></div><div class="line"><a name="l02679"></a><span class="lineno"> 2679</span>&#160; <span class="comment">// - a decision builder to instantiate unbound variables once a neighbor has</span></div><div class="line"><a name="l02680"></a><span class="lineno"> 2680</span>&#160; <span class="comment">// been defined; in the case of LNS-based operators instantiates fragment</span></div><div class="line"><a name="l02681"></a><span class="lineno"> 2681</span>&#160; <span class="comment">// variables; search monitors can be added to this sub-search by wrapping</span></div><div class="line"><a name="l02682"></a><span class="lineno"> 2682</span>&#160; <span class="comment">// the decision builder with MakeSolveOnce.</span></div><div class="line"><a name="l02683"></a><span class="lineno"> 2683</span>&#160; <span class="comment">// - a search limit specifying how long local search looks for neighbors</span></div><div class="line"><a name="l02684"></a><span class="lineno"> 2684</span>&#160; <span class="comment">// before accepting one; the last neighbor is always taken and in the case</span></div><div class="line"><a name="l02685"></a><span class="lineno"> 2685</span>&#160; <span class="comment">// of a greedy search, this corresponds to the best local neighbor;</span></div><div class="line"><a name="l02686"></a><span class="lineno"> 2686</span>&#160; <span class="comment">// first-accept (which is the default behavior) can be modeled using a</span></div><div class="line"><a name="l02687"></a><span class="lineno"> 2687</span>&#160; <span class="comment">// solution found limit of 1,</span></div><div class="line"><a name="l02688"></a><span class="lineno"> 2688</span>&#160; <span class="comment">// - a vector of local search filters used to speed up the search by pruning</span></div><div class="line"><a name="l02689"></a><span class="lineno"> 2689</span>&#160; <span class="comment">// unfeasible neighbors.</span></div><div class="line"><a name="l02690"></a><span class="lineno"> 2690</span>&#160; <span class="comment">// Metaheuristics can be added by defining specialized search monitors;</span></div><div class="line"><a name="l02691"></a><span class="lineno"> 2691</span>&#160; <span class="comment">// currently down/up-hill climbing is available through OptimizeVar, as well</span></div><div class="line"><a name="l02692"></a><span class="lineno"> 2692</span>&#160; <span class="comment">// as Guided Local Search, Tabu Search and Simulated Annealing.</span></div><div class="line"><a name="l02693"></a><span class="lineno"> 2693</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l02694"></a><span class="lineno"> 2694</span>&#160; <span class="comment">// TODO(user): Make a variant which runs a local search after each</span></div><div class="line"><a name="l02695"></a><span class="lineno"> 2695</span>&#160; <span class="comment">// solution found in a DFS.</span></div><div class="line"><a name="l02696"></a><span class="lineno"> 2696</span>&#160;</div><div class="line"><a name="l02697"></a><span class="lineno"> 2697</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a6c4750d9d038ef7c4fac71b6f3d12f46">MakeLocalSearchPhase</a>(</div><div class="line"><a name="l02698"></a><span class="lineno"> 2698</span>&#160; <a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>* <span class="keyword">const</span> assignment,</div><div class="line"><a name="l02699"></a><span class="lineno"> 2699</span>&#160; LocalSearchPhaseParameters* <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1Solver.html#adb77a0b4b40ea4e8282cf78b54717cd6">parameters</a>);</div><div class="line"><a name="l02700"></a><span class="lineno"> 2700</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a6c4750d9d038ef7c4fac71b6f3d12f46">MakeLocalSearchPhase</a>(</div><div class="line"><a name="l02701"></a><span class="lineno"> 2701</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars, <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> first_solution,</div><div class="line"><a name="l02702"></a><span class="lineno"> 2702</span>&#160; LocalSearchPhaseParameters* <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1Solver.html#adb77a0b4b40ea4e8282cf78b54717cd6">parameters</a>);</div><div class="line"><a name="l02703"></a><span class="lineno"> 2703</span>&#160; <span class="comment">// Variant with a sub_decison_builder specific to the first solution.</span></div><div class="line"><a name="l02704"></a><span class="lineno"> 2704</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a6c4750d9d038ef7c4fac71b6f3d12f46">MakeLocalSearchPhase</a>(</div><div class="line"><a name="l02705"></a><span class="lineno"> 2705</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars, <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> first_solution,</div><div class="line"><a name="l02706"></a><span class="lineno"> 2706</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> first_solution_sub_decision_builder,</div><div class="line"><a name="l02707"></a><span class="lineno"> 2707</span>&#160; LocalSearchPhaseParameters* <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1Solver.html#adb77a0b4b40ea4e8282cf78b54717cd6">parameters</a>);</div><div class="line"><a name="l02708"></a><span class="lineno"> 2708</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a6c4750d9d038ef7c4fac71b6f3d12f46">MakeLocalSearchPhase</a>(</div><div class="line"><a name="l02709"></a><span class="lineno"> 2709</span>&#160; <span class="keyword">const</span> std::vector&lt;SequenceVar*&gt;&amp; vars,</div><div class="line"><a name="l02710"></a><span class="lineno"> 2710</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> first_solution,</div><div class="line"><a name="l02711"></a><span class="lineno"> 2711</span>&#160; LocalSearchPhaseParameters* <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1Solver.html#adb77a0b4b40ea4e8282cf78b54717cd6">parameters</a>);</div><div class="line"><a name="l02712"></a><span class="lineno"> 2712</span>&#160;</div><div class="line"><a name="l02713"></a><span class="lineno"> 2713</span>&#160; <span class="comment">// Solution Pool.</span></div><div class="line"><a name="l02714"></a><span class="lineno"> 2714</span>&#160; <a class="code" href="classoperations__research_1_1SolutionPool.html">SolutionPool</a>* <a class="code" href="classoperations__research_1_1Solver.html#aae471dd402e8c4860b84b50a17012364">MakeDefaultSolutionPool</a>();</div><div class="line"><a name="l02715"></a><span class="lineno"> 2715</span>&#160;</div><div class="line"><a name="l02716"></a><span class="lineno"> 2716</span>&#160; <span class="comment">// Local Search Phase Parameters</span></div><div class="line"><a name="l02717"></a><span class="lineno"> 2717</span>&#160; LocalSearchPhaseParameters* <a class="code" href="classoperations__research_1_1Solver.html#a0f79c92d6b10f900f213b483162466e6">MakeLocalSearchPhaseParameters</a>(</div><div class="line"><a name="l02718"></a><span class="lineno"> 2718</span>&#160; <a class="code" href="classoperations__research_1_1LocalSearchOperator.html">LocalSearchOperator</a>* <span class="keyword">const</span> ls_operator,</div><div class="line"><a name="l02719"></a><span class="lineno"> 2719</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> sub_decision_builder);</div><div class="line"><a name="l02720"></a><span class="lineno"> 2720</span>&#160; LocalSearchPhaseParameters* <a class="code" href="classoperations__research_1_1Solver.html#a0f79c92d6b10f900f213b483162466e6">MakeLocalSearchPhaseParameters</a>(</div><div class="line"><a name="l02721"></a><span class="lineno"> 2721</span>&#160; <a class="code" href="classoperations__research_1_1LocalSearchOperator.html">LocalSearchOperator</a>* <span class="keyword">const</span> ls_operator,</div><div class="line"><a name="l02722"></a><span class="lineno"> 2722</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> sub_decision_builder, <a class="code" href="classoperations__research_1_1RegularLimit.html">RegularLimit</a>* <span class="keyword">const</span> limit);</div><div class="line"><a name="l02723"></a><span class="lineno"> 2723</span>&#160; LocalSearchPhaseParameters* <a class="code" href="classoperations__research_1_1Solver.html#a0f79c92d6b10f900f213b483162466e6">MakeLocalSearchPhaseParameters</a>(</div><div class="line"><a name="l02724"></a><span class="lineno"> 2724</span>&#160; <a class="code" href="classoperations__research_1_1LocalSearchOperator.html">LocalSearchOperator</a>* <span class="keyword">const</span> ls_operator,</div><div class="line"><a name="l02725"></a><span class="lineno"> 2725</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> sub_decision_builder, <a class="code" href="classoperations__research_1_1RegularLimit.html">RegularLimit</a>* <span class="keyword">const</span> limit,</div><div class="line"><a name="l02726"></a><span class="lineno"> 2726</span>&#160; <span class="keyword">const</span> std::vector&lt;LocalSearchFilter*&gt;&amp; filters);</div><div class="line"><a name="l02727"></a><span class="lineno"> 2727</span>&#160;</div><div class="line"><a name="l02728"></a><span class="lineno"> 2728</span>&#160; LocalSearchPhaseParameters* <a class="code" href="classoperations__research_1_1Solver.html#a0f79c92d6b10f900f213b483162466e6">MakeLocalSearchPhaseParameters</a>(</div><div class="line"><a name="l02729"></a><span class="lineno"> 2729</span>&#160; <a class="code" href="classoperations__research_1_1SolutionPool.html">SolutionPool</a>* <span class="keyword">const</span> pool, <a class="code" href="classoperations__research_1_1LocalSearchOperator.html">LocalSearchOperator</a>* <span class="keyword">const</span> ls_operator,</div><div class="line"><a name="l02730"></a><span class="lineno"> 2730</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> sub_decision_builder);</div><div class="line"><a name="l02731"></a><span class="lineno"> 2731</span>&#160; LocalSearchPhaseParameters* <a class="code" href="classoperations__research_1_1Solver.html#a0f79c92d6b10f900f213b483162466e6">MakeLocalSearchPhaseParameters</a>(</div><div class="line"><a name="l02732"></a><span class="lineno"> 2732</span>&#160; <a class="code" href="classoperations__research_1_1SolutionPool.html">SolutionPool</a>* <span class="keyword">const</span> pool, <a class="code" href="classoperations__research_1_1LocalSearchOperator.html">LocalSearchOperator</a>* <span class="keyword">const</span> ls_operator,</div><div class="line"><a name="l02733"></a><span class="lineno"> 2733</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> sub_decision_builder, <a class="code" href="classoperations__research_1_1RegularLimit.html">RegularLimit</a>* <span class="keyword">const</span> limit);</div><div class="line"><a name="l02734"></a><span class="lineno"> 2734</span>&#160; LocalSearchPhaseParameters* <a class="code" href="classoperations__research_1_1Solver.html#a0f79c92d6b10f900f213b483162466e6">MakeLocalSearchPhaseParameters</a>(</div><div class="line"><a name="l02735"></a><span class="lineno"> 2735</span>&#160; <a class="code" href="classoperations__research_1_1SolutionPool.html">SolutionPool</a>* <span class="keyword">const</span> pool, <a class="code" href="classoperations__research_1_1LocalSearchOperator.html">LocalSearchOperator</a>* <span class="keyword">const</span> ls_operator,</div><div class="line"><a name="l02736"></a><span class="lineno"> 2736</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> sub_decision_builder, <a class="code" href="classoperations__research_1_1RegularLimit.html">RegularLimit</a>* <span class="keyword">const</span> limit,</div><div class="line"><a name="l02737"></a><span class="lineno"> 2737</span>&#160; <span class="keyword">const</span> std::vector&lt;LocalSearchFilter*&gt;&amp; filters);</div><div class="line"><a name="l02738"></a><span class="lineno"> 2738</span>&#160;</div><div class="line"><a name="l02739"></a><span class="lineno"> 2739</span>&#160; <span class="comment">// Local Search Filters</span></div><div class="line"><a name="l02740"></a><span class="lineno"> 2740</span>&#160; <a class="code" href="classoperations__research_1_1LocalSearchFilter.html">LocalSearchFilter</a>* <a class="code" href="classoperations__research_1_1Solver.html#a5ac432327eb7d81e8521da4936f9a12b">MakeVariableDomainFilter</a>();</div><div class="line"><a name="l02741"></a><span class="lineno"> 2741</span>&#160; <a class="code" href="classoperations__research_1_1IntVarLocalSearchFilter.html">IntVarLocalSearchFilter</a>* <a class="code" href="classoperations__research_1_1Solver.html#a845c613a7ca1a56f898c0b8eedc86a24">MakeSumObjectiveFilter</a>(</div><div class="line"><a name="l02742"></a><span class="lineno"> 2742</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars, <a class="code" href="classoperations__research_1_1Solver.html#a0243986dd2db4b6e1bda331329ae529b">IndexEvaluator2</a> values,</div><div class="line"><a name="l02743"></a><span class="lineno"> 2743</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> objective, <a class="code" href="classoperations__research_1_1Solver.html#a8e9cbe2323b10c6b49da625f5bae14c0">Solver::LocalSearchFilterBound</a> filter_enum);</div><div class="line"><a name="l02744"></a><span class="lineno"> 2744</span>&#160; <a class="code" href="classoperations__research_1_1IntVarLocalSearchFilter.html">IntVarLocalSearchFilter</a>* <a class="code" href="classoperations__research_1_1Solver.html#a845c613a7ca1a56f898c0b8eedc86a24">MakeSumObjectiveFilter</a>(</div><div class="line"><a name="l02745"></a><span class="lineno"> 2745</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars, <a class="code" href="classoperations__research_1_1Solver.html#a0243986dd2db4b6e1bda331329ae529b">IndexEvaluator2</a> values,</div><div class="line"><a name="l02746"></a><span class="lineno"> 2746</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#acb354925d9ed2803b56953a9a9ec59df">ObjectiveWatcher</a> delta_objective_callback, <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> objective,</div><div class="line"><a name="l02747"></a><span class="lineno"> 2747</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a8e9cbe2323b10c6b49da625f5bae14c0">Solver::LocalSearchFilterBound</a> filter_enum);</div><div class="line"><a name="l02748"></a><span class="lineno"> 2748</span>&#160; <a class="code" href="classoperations__research_1_1IntVarLocalSearchFilter.html">IntVarLocalSearchFilter</a>* <a class="code" href="classoperations__research_1_1Solver.html#a845c613a7ca1a56f898c0b8eedc86a24">MakeSumObjectiveFilter</a>(</div><div class="line"><a name="l02749"></a><span class="lineno"> 2749</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l02750"></a><span class="lineno"> 2750</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; secondary_vars,</div><div class="line"><a name="l02751"></a><span class="lineno"> 2751</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a1f24a08006b3142731a258d856f13e43">Solver::IndexEvaluator3</a> values, <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> objective,</div><div class="line"><a name="l02752"></a><span class="lineno"> 2752</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a8e9cbe2323b10c6b49da625f5bae14c0">Solver::LocalSearchFilterBound</a> filter_enum);</div><div class="line"><a name="l02753"></a><span class="lineno"> 2753</span>&#160; <a class="code" href="classoperations__research_1_1IntVarLocalSearchFilter.html">IntVarLocalSearchFilter</a>* <a class="code" href="classoperations__research_1_1Solver.html#a845c613a7ca1a56f898c0b8eedc86a24">MakeSumObjectiveFilter</a>(</div><div class="line"><a name="l02754"></a><span class="lineno"> 2754</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars,</div><div class="line"><a name="l02755"></a><span class="lineno"> 2755</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; secondary_vars,</div><div class="line"><a name="l02756"></a><span class="lineno"> 2756</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a1f24a08006b3142731a258d856f13e43">Solver::IndexEvaluator3</a> values, <a class="code" href="classoperations__research_1_1Solver.html#acb354925d9ed2803b56953a9a9ec59df">ObjectiveWatcher</a> delta_objective_callback,</div><div class="line"><a name="l02757"></a><span class="lineno"> 2757</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> objective, <a class="code" href="classoperations__research_1_1Solver.html#a8e9cbe2323b10c6b49da625f5bae14c0">Solver::LocalSearchFilterBound</a> filter_enum);</div><div class="line"><a name="l02758"></a><span class="lineno"> 2758</span>&#160;</div><div class="line"><a name="l02759"></a><span class="lineno"> 2759</span>&#160; <span class="comment">// Performs PeriodicCheck on the top-level search; for instance, can be</span></div><div class="line"><a name="l02760"></a><span class="lineno"> 2760</span>&#160; <span class="comment">// called from a nested solve to check top-level limits.</span></div><div class="line"><a name="l02761"></a><span class="lineno"> 2761</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a6ffc56653b5ef9643ce87d05c9ebd8d6">TopPeriodicCheck</a>();</div><div class="line"><a name="l02762"></a><span class="lineno"> 2762</span>&#160; <span class="comment">// Returns a percentage representing the propress of the search before</span></div><div class="line"><a name="l02763"></a><span class="lineno"> 2763</span>&#160; <span class="comment">// reaching the limits of the top-level search (can be called from a nested</span></div><div class="line"><a name="l02764"></a><span class="lineno"> 2764</span>&#160; <span class="comment">// solve).</span></div><div class="line"><a name="l02765"></a><span class="lineno"> 2765</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classoperations__research_1_1Solver.html#a121897bbc632a6e27428666949b781e9">TopProgressPercent</a>();</div><div class="line"><a name="l02766"></a><span class="lineno"> 2766</span>&#160;</div><div class="line"><a name="l02767"></a><span class="lineno"> 2767</span>&#160; <span class="comment">// The PushState and PopState methods manipulates the states</span></div><div class="line"><a name="l02768"></a><span class="lineno"> 2768</span>&#160; <span class="comment">// of the reversible objects. They are visible only because they</span></div><div class="line"><a name="l02769"></a><span class="lineno"> 2769</span>&#160; <span class="comment">// are useful to write unitary tests.</span></div><div class="line"><a name="l02770"></a><span class="lineno"> 2770</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a6d2ae179cd6e66dc4cfd14307126b2cb">PushState</a>();</div><div class="line"><a name="l02771"></a><span class="lineno"> 2771</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a67a90d3f386c8530100f810ef54a240a">PopState</a>();</div><div class="line"><a name="l02772"></a><span class="lineno"> 2772</span>&#160;</div><div class="line"><a name="l02773"></a><span class="lineno"> 2773</span>&#160; <span class="comment">// Gets the search depth of the current active search. Returns -1 if</span></div><div class="line"><a name="l02774"></a><span class="lineno"> 2774</span>&#160; <span class="comment">// there is no active search opened.</span></div><div class="line"><a name="l02775"></a><span class="lineno"> 2775</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classoperations__research_1_1Solver.html#a1694a1680e59545addfa46bf8512218c">SearchDepth</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l02776"></a><span class="lineno"> 2776</span>&#160;</div><div class="line"><a name="l02777"></a><span class="lineno"> 2777</span>&#160; <span class="comment">// Gets the search left depth of the current active search. Returns -1 if</span></div><div class="line"><a name="l02778"></a><span class="lineno"> 2778</span>&#160; <span class="comment">// there is no active search opened.</span></div><div class="line"><a name="l02779"></a><span class="lineno"> 2779</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classoperations__research_1_1Solver.html#a5804f6bd3c4bc743ed902d467aa11343">SearchLeftDepth</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l02780"></a><span class="lineno"> 2780</span>&#160;</div><div class="line"><a name="l02781"></a><span class="lineno"> 2781</span>&#160; <span class="comment">// Gets the number of nested searches. It returns 0 outside search,</span></div><div class="line"><a name="l02782"></a><span class="lineno"> 2782</span>&#160; <span class="comment">// 1 during the top level search, 2 or more in case of nested searches.</span></div><div class="line"><a name="l02783"></a><span class="lineno"> 2783</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classoperations__research_1_1Solver.html#abbf76a02f141b5d555d37f047be49155">SolveDepth</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l02784"></a><span class="lineno"> 2784</span>&#160;</div><div class="line"><a name="l02785"></a><span class="lineno"> 2785</span>&#160; <span class="comment">// Sets the given branch selector on the current active search.</span></div><div class="line"><a name="l02786"></a><span class="lineno"> 2786</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a0333a30480e11666e6b67162d05b2144">SetBranchSelector</a>(<a class="code" href="classoperations__research_1_1Solver.html#a704132f8c12e3bbbd0590308a58ee744">BranchSelector</a> bs);</div><div class="line"><a name="l02787"></a><span class="lineno"> 2787</span>&#160;</div><div class="line"><a name="l02788"></a><span class="lineno"> 2788</span>&#160; <span class="comment">// Creates a decision builder that will set the branch selector.</span></div><div class="line"><a name="l02789"></a><span class="lineno"> 2789</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <a class="code" href="classoperations__research_1_1Solver.html#a51f15897d3435634cc78f1a18a67530f">MakeApplyBranchSelector</a>(<a class="code" href="classoperations__research_1_1Solver.html#a704132f8c12e3bbbd0590308a58ee744">BranchSelector</a> bs);</div><div class="line"><a name="l02790"></a><span class="lineno"> 2790</span>&#160;</div><div class="line"><a name="l02791"></a><span class="lineno"> 2791</span>&#160; <span class="comment">// All-in-one SaveAndSetValue.</span></div><div class="line"><a name="l02792"></a><span class="lineno"> 2792</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;</div><div class="line"><a name="l02793"></a><span class="lineno"> 2793</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a6b4182ad46462a9374c84063249eef45">SaveAndSetValue</a>(T* adr, T val) {</div><div class="line"><a name="l02794"></a><span class="lineno"> 2794</span>&#160; <span class="keywordflow">if</span> (*adr != val) {</div><div class="line"><a name="l02795"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a6b4182ad46462a9374c84063249eef45"> 2795</a></span>&#160; InternalSaveValue(adr);</div><div class="line"><a name="l02796"></a><span class="lineno"> 2796</span>&#160; *adr = val;</div><div class="line"><a name="l02797"></a><span class="lineno"> 2797</span>&#160; }</div><div class="line"><a name="l02798"></a><span class="lineno"> 2798</span>&#160; }</div><div class="line"><a name="l02799"></a><span class="lineno"> 2799</span>&#160;</div><div class="line"><a name="l02800"></a><span class="lineno"> 2800</span>&#160; <span class="comment">// All-in-one SaveAndAdd_value.</span></div><div class="line"><a name="l02801"></a><span class="lineno"> 2801</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;</div><div class="line"><a name="l02802"></a><span class="lineno"> 2802</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a63132523df4ebdb9948c120d12b8d802">SaveAndAdd</a>(T* adr, T val) {</div><div class="line"><a name="l02803"></a><span class="lineno"> 2803</span>&#160; <span class="keywordflow">if</span> (val != 0) {</div><div class="line"><a name="l02804"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a63132523df4ebdb9948c120d12b8d802"> 2804</a></span>&#160; InternalSaveValue(adr);</div><div class="line"><a name="l02805"></a><span class="lineno"> 2805</span>&#160; (*adr) += val;</div><div class="line"><a name="l02806"></a><span class="lineno"> 2806</span>&#160; }</div><div class="line"><a name="l02807"></a><span class="lineno"> 2807</span>&#160; }</div><div class="line"><a name="l02808"></a><span class="lineno"> 2808</span>&#160;</div><div class="line"><a name="l02809"></a><span class="lineno"> 2809</span>&#160; <span class="comment">// Returns a random value between 0 and &#39;size&#39; - 1;</span></div><div class="line"><a name="l02810"></a><span class="lineno"> 2810</span>&#160; int64 <a class="code" href="classoperations__research_1_1Solver.html#a5166877a2d94e773fc8abf433b086d82">Rand64</a>(int64 size) { <span class="keywordflow">return</span> random_.Next64() % size; }</div><div class="line"><a name="l02811"></a><span class="lineno"> 2811</span>&#160;</div><div class="line"><a name="l02812"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a5166877a2d94e773fc8abf433b086d82"> 2812</a></span>&#160; <span class="comment">// Returns a random value between 0 and &#39;size&#39; - 1;</span></div><div class="line"><a name="l02813"></a><span class="lineno"> 2813</span>&#160; int32 <a class="code" href="classoperations__research_1_1Solver.html#a5ed39d9055b446d626bad476ace74cac">Rand32</a>(int32 size) { <span class="keywordflow">return</span> random_.Next() % size; }</div><div class="line"><a name="l02814"></a><span class="lineno"> 2814</span>&#160;</div><div class="line"><a name="l02815"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a5ed39d9055b446d626bad476ace74cac"> 2815</a></span>&#160; <span class="comment">// Reseed the solver random generator.</span></div><div class="line"><a name="l02816"></a><span class="lineno"> 2816</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a977f97618d061bd656919818a3e5b63c">ReSeed</a>(int32 seed) { random_.Reset(seed); }</div><div class="line"><a name="l02817"></a><span class="lineno"> 2817</span>&#160;</div><div class="line"><a name="l02818"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a977f97618d061bd656919818a3e5b63c"> 2818</a></span>&#160; <span class="comment">// Exports the profiling information in a human readable overview.</span></div><div class="line"><a name="l02819"></a><span class="lineno"> 2819</span>&#160; <span class="comment">// The parameter profile_level used to create the solver must be</span></div><div class="line"><a name="l02820"></a><span class="lineno"> 2820</span>&#160; <span class="comment">// set to true.</span></div><div class="line"><a name="l02821"></a><span class="lineno"> 2821</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a10095177497184eb69d38915b04e2b82">ExportProfilingOverview</a>(<span class="keyword">const</span> std::string&amp; filename);</div><div class="line"><a name="l02822"></a><span class="lineno"> 2822</span>&#160;</div><div class="line"><a name="l02823"></a><span class="lineno"> 2823</span>&#160; <span class="comment">// Returns local search profiling information in a human readable format.</span></div><div class="line"><a name="l02824"></a><span class="lineno"> 2824</span>&#160; <span class="comment">// TODO(user): Add a profiling protocol buffer and merge demon and local</span></div><div class="line"><a name="l02825"></a><span class="lineno"> 2825</span>&#160; <span class="comment">// search profiles.</span></div><div class="line"><a name="l02826"></a><span class="lineno"> 2826</span>&#160; std::string <a class="code" href="classoperations__research_1_1Solver.html#a64fd8adbc00c3bed16bf4b824dfd3e2b">LocalSearchProfile</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l02827"></a><span class="lineno"> 2827</span>&#160;</div><div class="line"><a name="l02828"></a><span class="lineno"> 2828</span>&#160; <span class="comment">// Returns true whether the current search has been</span></div><div class="line"><a name="l02829"></a><span class="lineno"> 2829</span>&#160; <span class="comment">// created using a Solve() call instead of a NewSearch one. It</span></div><div class="line"><a name="l02830"></a><span class="lineno"> 2830</span>&#160; <span class="comment">// returns false if the solver is not in search at all.</span></div><div class="line"><a name="l02831"></a><span class="lineno"> 2831</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Solver.html#a06878b72d0eb67da9c177f29468a721c">CurrentlyInSolve</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l02832"></a><span class="lineno"> 2832</span>&#160;</div><div class="line"><a name="l02833"></a><span class="lineno"> 2833</span>&#160; <span class="comment">// Counts the number of constraints that have been added</span></div><div class="line"><a name="l02834"></a><span class="lineno"> 2834</span>&#160; <span class="comment">// to the solver before the search.</span></div><div class="line"><a name="l02835"></a><span class="lineno"> 2835</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classoperations__research_1_1Solver.html#a0683bc1537d5fbc81ae0a2f0c271cd75">constraints</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> constraints_list_.size(); }</div><div class="line"><a name="l02836"></a><span class="lineno"> 2836</span>&#160;</div><div class="line"><a name="l02837"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a0683bc1537d5fbc81ae0a2f0c271cd75"> 2837</a></span>&#160; <span class="comment">// Accepts the given model visitor.</span></div><div class="line"><a name="l02838"></a><span class="lineno"> 2838</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a1c39e5b63288d7be78e1b70eeec4ee54">Accept</a>(<a class="code" href="classoperations__research_1_1ModelVisitor.html">ModelVisitor</a>* <span class="keyword">const</span> visitor) <span class="keyword">const</span>;</div><div class="line"><a name="l02839"></a><span class="lineno"> 2839</span>&#160;</div><div class="line"><a name="l02840"></a><span class="lineno"> 2840</span>&#160; <a class="code" href="classoperations__research_1_1Decision.html">Decision</a>* <a class="code" href="classoperations__research_1_1Solver.html#ade277831f6962ff6979f8a2e6558cef5">balancing_decision</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> balancing_decision_.get(); }</div><div class="line"><a name="l02841"></a><span class="lineno"> 2841</span>&#160;</div><div class="line"><a name="l02842"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ade277831f6962ff6979f8a2e6558cef5"> 2842</a></span>&#160; <span class="comment">// Internal</span></div><div class="line"><a name="l02843"></a><span class="lineno"> 2843</span>&#160;<span class="preprocessor">#if !defined(SWIG)</span></div><div class="line"><a name="l02844"></a><span class="lineno"> 2844</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a173ed9d464551149bbb92274ddb129e9">set_fail_intercept</a>(std::function&lt;<span class="keywordtype">void</span>()&gt; fail_intercept) {</div><div class="line"><a name="l02845"></a><span class="lineno"> 2845</span>&#160; fail_intercept_ = std::move(fail_intercept);</div><div class="line"><a name="l02846"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a173ed9d464551149bbb92274ddb129e9"> 2846</a></span>&#160; }</div><div class="line"><a name="l02847"></a><span class="lineno"> 2847</span>&#160;<span class="preprocessor">#endif // !defined(SWIG)</span></div><div class="line"><a name="l02848"></a><span class="lineno"> 2848</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a57300a63dc9978b1a14a74e1698a8920">clear_fail_intercept</a>() { fail_intercept_ = <span class="keyword">nullptr</span>; }</div><div class="line"><a name="l02849"></a><span class="lineno"> 2849</span>&#160; <span class="comment">// Access to demon profiler.</span></div><div class="line"><a name="l02850"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a57300a63dc9978b1a14a74e1698a8920"> 2850</a></span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a17a56adc8ee57642c3f00a1778319192">DemonProfiler</a>* <a class="code" href="classoperations__research_1_1Solver.html#a9f660afd82319498e83cb630a71dedd6">demon_profiler</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> demon_profiler_; }</div><div class="line"><a name="l02851"></a><span class="lineno"> 2851</span>&#160; <span class="comment">// TODO(user): Get rid of the following methods once fast local search is</span></div><div class="line"><a name="l02852"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a9f660afd82319498e83cb630a71dedd6"> 2852</a></span>&#160; <span class="comment">// enabled for metaheuristics.</span></div><div class="line"><a name="l02853"></a><span class="lineno"> 2853</span>&#160; <span class="comment">// Disables/enables fast local search.</span></div><div class="line"><a name="l02854"></a><span class="lineno"> 2854</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#afa66a85cec14980401bb16d4f4a84aa1">SetUseFastLocalSearch</a>(<span class="keywordtype">bool</span> use_fast_local_search) {</div><div class="line"><a name="l02855"></a><span class="lineno"> 2855</span>&#160; use_fast_local_search_ = use_fast_local_search;</div><div class="line"><a name="l02856"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#afa66a85cec14980401bb16d4f4a84aa1"> 2856</a></span>&#160; }</div><div class="line"><a name="l02857"></a><span class="lineno"> 2857</span>&#160; <span class="comment">// Returns true if fast local search is enabled.</span></div><div class="line"><a name="l02858"></a><span class="lineno"> 2858</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Solver.html#a4f085aa9a85c0d17046a1410e46de3c5">UseFastLocalSearch</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> use_fast_local_search_; }</div><div class="line"><a name="l02859"></a><span class="lineno"> 2859</span>&#160; <span class="comment">// Returns whether the object has been named or not.</span></div><div class="line"><a name="l02860"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a4f085aa9a85c0d17046a1410e46de3c5"> 2860</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Solver.html#acf6d57032f4a4c2ea638066179385b5e">HasName</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1PropagationBaseObject.html">PropagationBaseObject</a>* <span class="keywordtype">object</span>) <span class="keyword">const</span>;</div><div class="line"><a name="l02861"></a><span class="lineno"> 2861</span>&#160; <span class="comment">// Adds a new demon and wraps it inside a DemonProfiler if necessary.</span></div><div class="line"><a name="l02862"></a><span class="lineno"> 2862</span>&#160; <a class="code" href="classoperations__research_1_1Demon.html">Demon</a>* <a class="code" href="classoperations__research_1_1Solver.html#aacf8c33542c5f879ab9e1e21717c6fa6">RegisterDemon</a>(<a class="code" href="classoperations__research_1_1Demon.html">Demon</a>* <span class="keyword">const</span> demon);</div><div class="line"><a name="l02863"></a><span class="lineno"> 2863</span>&#160; <span class="comment">// Registers a new IntExpr and wraps it inside a TraceIntExpr if necessary.</span></div><div class="line"><a name="l02864"></a><span class="lineno"> 2864</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#aaa99adf81f8caaf01fd593e95c33ae50">RegisterIntExpr</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr);</div><div class="line"><a name="l02865"></a><span class="lineno"> 2865</span>&#160; <span class="comment">// Registers a new IntVar and wraps it inside a TraceIntVar if necessary.</span></div><div class="line"><a name="l02866"></a><span class="lineno"> 2866</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1Solver.html#a66ac2efcb889501c994e3355d5a331ba">RegisterIntVar</a>(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var);</div><div class="line"><a name="l02867"></a><span class="lineno"> 2867</span>&#160; <span class="comment">// Registers a new IntervalVar and wraps it inside a TraceIntervalVar</span></div><div class="line"><a name="l02868"></a><span class="lineno"> 2868</span>&#160; <span class="comment">// if necessary.</span></div><div class="line"><a name="l02869"></a><span class="lineno"> 2869</span>&#160; <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <a class="code" href="classoperations__research_1_1Solver.html#a70e56c3a6b9f72cd1237a48eda01d330">RegisterIntervalVar</a>(<a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var);</div><div class="line"><a name="l02870"></a><span class="lineno"> 2870</span>&#160;</div><div class="line"><a name="l02871"></a><span class="lineno"> 2871</span>&#160; <span class="comment">// Returns the active search, nullptr outside search.</span></div><div class="line"><a name="l02872"></a><span class="lineno"> 2872</span>&#160; Search* <a class="code" href="classoperations__research_1_1Solver.html#afd4223d7e392bacabeacbd256cfd6b47">ActiveSearch</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l02873"></a><span class="lineno"> 2873</span>&#160; <span class="comment">// Returns the cache of the model.</span></div><div class="line"><a name="l02874"></a><span class="lineno"> 2874</span>&#160; <a class="code" href="classoperations__research_1_1ModelCache.html">ModelCache</a>* <a class="code" href="classoperations__research_1_1Solver.html#ab2055a138f98b721cf76d2656a3b90f7">Cache</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l02875"></a><span class="lineno"> 2875</span>&#160; <span class="comment">// Returns whether we are instrumenting demons.</span></div><div class="line"><a name="l02876"></a><span class="lineno"> 2876</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Solver.html#aeb2e6947882d148bfaece200f5c6b131">InstrumentsDemons</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l02877"></a><span class="lineno"> 2877</span>&#160; <span class="comment">// Returns whether we are profiling the solver.</span></div><div class="line"><a name="l02878"></a><span class="lineno"> 2878</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Solver.html#aa916897f2e52eefc110e225ffd8d23e8">IsProfilingEnabled</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l02879"></a><span class="lineno"> 2879</span>&#160; <span class="comment">// Returns whether we are profiling local search.</span></div><div class="line"><a name="l02880"></a><span class="lineno"> 2880</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Solver.html#a0f576f70d8fae8d5d498ec142490f8e1">IsLocalSearchProfilingEnabled</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l02881"></a><span class="lineno"> 2881</span>&#160; <span class="comment">// Returns whether we are tracing variables.</span></div><div class="line"><a name="l02882"></a><span class="lineno"> 2882</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Solver.html#af6888b151e4711476ed1e0d64732ac44">InstrumentsVariables</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l02883"></a><span class="lineno"> 2883</span>&#160; <span class="comment">// Returns whether all variables should be named.</span></div><div class="line"><a name="l02884"></a><span class="lineno"> 2884</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Solver.html#a3267baa7f21b8bda6b5ac4bced87fbae">NameAllVariables</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l02885"></a><span class="lineno"> 2885</span>&#160; <span class="comment">// Returns the name of the model.</span></div><div class="line"><a name="l02886"></a><span class="lineno"> 2886</span>&#160; std::string <a class="code" href="classoperations__research_1_1Solver.html#a6b43cb3f57f637e3c0633bac1d805564">model_name</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l02887"></a><span class="lineno"> 2887</span>&#160; <span class="comment">// Returns the propagation monitor.</span></div><div class="line"><a name="l02888"></a><span class="lineno"> 2888</span>&#160; <a class="code" href="classoperations__research_1_1PropagationMonitor.html">PropagationMonitor</a>* <a class="code" href="classoperations__research_1_1Solver.html#a9c8cdc1822429bc21c4523cee66b730d">GetPropagationMonitor</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l02889"></a><span class="lineno"> 2889</span>&#160; <span class="comment">// Adds the propagation monitor to the solver. This is called internally when</span></div><div class="line"><a name="l02890"></a><span class="lineno"> 2890</span>&#160; <span class="comment">// a propagation monitor is passed to the Solve() or NewSearch() method.</span></div><div class="line"><a name="l02891"></a><span class="lineno"> 2891</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a51c801ef84c5843e4b9a1ba489a15f0f">AddPropagationMonitor</a>(<a class="code" href="classoperations__research_1_1PropagationMonitor.html">PropagationMonitor</a>* <span class="keyword">const</span> monitor);</div><div class="line"><a name="l02892"></a><span class="lineno"> 2892</span>&#160; <span class="comment">// Returns the local search monitor.</span></div><div class="line"><a name="l02893"></a><span class="lineno"> 2893</span>&#160; <a class="code" href="classoperations__research_1_1LocalSearchMonitor.html">LocalSearchMonitor</a>* <a class="code" href="classoperations__research_1_1Solver.html#a1559c74f56ae49a7c49ebe359b3631cf">GetLocalSearchMonitor</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l02894"></a><span class="lineno"> 2894</span>&#160; <span class="comment">// Adds the local search monitor to the solver. This is called internally</span></div><div class="line"><a name="l02895"></a><span class="lineno"> 2895</span>&#160; <span class="comment">// when a propagation monitor is passed to the Solve() or NewSearch() method.</span></div><div class="line"><a name="l02896"></a><span class="lineno"> 2896</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#af723a41e416b056f0ab17c114498e675">AddLocalSearchMonitor</a>(<a class="code" href="classoperations__research_1_1LocalSearchMonitor.html">LocalSearchMonitor</a>* monitor);</div><div class="line"><a name="l02897"></a><span class="lineno"> 2897</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a91ddc514b7b8418b66575323f56ac418">SetSearchContext</a>(Search* search, <span class="keyword">const</span> std::string&amp; search_context);</div><div class="line"><a name="l02898"></a><span class="lineno"> 2898</span>&#160; std::string <a class="code" href="classoperations__research_1_1Solver.html#ab5f100b79eb45ff9d1e65d6743c3724c">SearchContext</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l02899"></a><span class="lineno"> 2899</span>&#160; std::string <a class="code" href="classoperations__research_1_1Solver.html#ab5f100b79eb45ff9d1e65d6743c3724c">SearchContext</a>(<span class="keyword">const</span> Search* search) <span class="keyword">const</span>;</div><div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>&#160; <span class="comment">// Returns (or creates) an assignment representing the state of local search.</span></div><div class="line"><a name="l02901"></a><span class="lineno"> 2901</span>&#160; <span class="comment">// TODO(user): Investigate if this should be moved to Search.</span></div><div class="line"><a name="l02902"></a><span class="lineno"> 2902</span>&#160; <a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>* <a class="code" href="classoperations__research_1_1Solver.html#a3d0f049e3e28448b276346341717d945">GetOrCreateLocalSearchState</a>();</div><div class="line"><a name="l02903"></a><span class="lineno"> 2903</span>&#160; <span class="comment">// Clears the local search state.</span></div><div class="line"><a name="l02904"></a><span class="lineno"> 2904</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#abb7ca3d6a720b538c57845e8573b45a3">ClearLocalSearchState</a>() { local_search_state_.reset(<span class="keyword">nullptr</span>); }</div><div class="line"><a name="l02905"></a><span class="lineno"> 2905</span>&#160;</div><div class="line"><a name="l02906"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#abb7ca3d6a720b538c57845e8573b45a3"> 2906</a></span>&#160; <span class="comment">// Unsafe temporary vector. It is used to avoid leaks in operations</span></div><div class="line"><a name="l02907"></a><span class="lineno"> 2907</span>&#160; <span class="comment">// that need storage and that may fail. See IntVar::SetValues() for</span></div><div class="line"><a name="l02908"></a><span class="lineno"> 2908</span>&#160; <span class="comment">// instance. It is not locked; do not use in a multi-threaded or reentrant</span></div><div class="line"><a name="l02909"></a><span class="lineno"> 2909</span>&#160; <span class="comment">// setup.</span></div><div class="line"><a name="l02910"></a><span class="lineno"> 2910</span>&#160; std::vector&lt;int64&gt; <a class="code" href="classoperations__research_1_1Solver.html#aad709b2db0bb964c2cdeeb0d47414297">tmp_vector_</a>;</div><div class="line"><a name="l02911"></a><span class="lineno"> 2911</span>&#160;</div><div class="line"><a name="l02912"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#aad709b2db0bb964c2cdeeb0d47414297"> 2912</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classoperations__research_1_1BaseIntExpr.html">BaseIntExpr</a>;</div><div class="line"><a name="l02913"></a><span class="lineno"> 2913</span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>;</div><div class="line"><a name="l02914"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a7de3703a8816dad121d3fd166c07a79c"> 2914</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classoperations__research_1_1Solver.html#a17a56adc8ee57642c3f00a1778319192">DemonProfiler</a>;</div><div class="line"><a name="l02915"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a697ed9eaa8955d595a023663ab1e8418"> 2915</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classoperations__research_1_1Solver.html#a68ccd69d2cb81ad9b176a007275fde0b">FindOneNeighbor</a>;</div><div class="line"><a name="l02916"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a17a56adc8ee57642c3f00a1778319192"> 2916</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>;</div><div class="line"><a name="l02917"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a68ccd69d2cb81ad9b176a007275fde0b"> 2917</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classoperations__research_1_1PropagationBaseObject.html">PropagationBaseObject</a>;</div><div class="line"><a name="l02918"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a34419e55556ff4e92b447fe895bdb9c3"> 2918</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classoperations__research_1_1Solver.html#a47dfc6f2bc0d50a6e7c92eb00d97b064">Queue</a>;</div><div class="line"><a name="l02919"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#acd6c49bd62ce1a1777a1c0e644f1186e"> 2919</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>;</div><div class="line"><a name="l02920"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a47dfc6f2bc0d50a6e7c92eb00d97b064"> 2920</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classoperations__research_1_1SearchLimit.html">SearchLimit</a>;</div><div class="line"><a name="l02921"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#aac32a6eabe1d316d7ff5f92fedd1ec5b"> 2921</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classoperations__research_1_1Solver.html#ab7aef297f0c654af26dc7108c9ee6c69">RoutingModel</a>;</div><div class="line"><a name="l02922"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#abb737b44b0a0335d550d2a740ba00236"> 2922</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classoperations__research_1_1Solver.html#a622500a4c7e11bbc4b8a5e5de2c84f13">LocalSearchProfiler</a>;</div><div class="line"><a name="l02923"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ab7aef297f0c654af26dc7108c9ee6c69"> 2923</a></span>&#160;</div><div class="line"><a name="l02924"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a622500a4c7e11bbc4b8a5e5de2c84f13"> 2924</a></span>&#160;<span class="preprocessor">#if !defined(SWIG)</span></div><div class="line"><a name="l02925"></a><span class="lineno"> 2925</span>&#160; <span class="keyword">friend</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a1a981ab215cf0097502d1dd4f3a542ac">InternalSaveBooleanVarValue</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span>, <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span>);</div><div class="line"><a name="l02926"></a><span class="lineno"> 2926</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span>&gt;</div><div class="line"><a name="l02927"></a><span class="lineno"> 2927</span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classoperations__research_1_1SimpleRevFIFO.html">SimpleRevFIFO</a>;</div><div class="line"><a name="l02928"></a><span class="lineno"> 2928</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> K, <span class="keyword">class</span> V&gt;</div><div class="line"><a name="l02929"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a830db5e85473a2e0a7392ac6bbc538d1"> 2929</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classoperations__research_1_1RevImmutableMultiMap.html">RevImmutableMultiMap</a>;</div><div class="line"><a name="l02930"></a><span class="lineno"> 2930</span>&#160;</div><div class="line"><a name="l02931"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a523b4c1786dd34b9d1fa2579b91b4c0d"> 2931</a></span>&#160; <span class="comment">// Returns true if expr represents either boolean_var or 1 -</span></div><div class="line"><a name="l02932"></a><span class="lineno"> 2932</span>&#160; <span class="comment">// boolean_var. In that case, it fills inner_var and is_negated to be</span></div><div class="line"><a name="l02933"></a><span class="lineno"> 2933</span>&#160; <span class="comment">// true if the expression is 1 - boolean_var -- equivalent to</span></div><div class="line"><a name="l02934"></a><span class="lineno"> 2934</span>&#160; <span class="comment">// not(boolean_var).</span></div><div class="line"><a name="l02935"></a><span class="lineno"> 2935</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Solver.html#aea82a4efd98d6523154ab7c8fa9125d3">IsBooleanVar</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>** inner_var,</div><div class="line"><a name="l02936"></a><span class="lineno"> 2936</span>&#160; <span class="keywordtype">bool</span>* is_negated) <span class="keyword">const</span>;</div><div class="line"><a name="l02937"></a><span class="lineno"> 2937</span>&#160;</div><div class="line"><a name="l02938"></a><span class="lineno"> 2938</span>&#160; <span class="comment">// Returns true if expr represents a product of a expr and a</span></div><div class="line"><a name="l02939"></a><span class="lineno"> 2939</span>&#160; <span class="comment">// constant. In that case, it fills inner_expr and coefficient with</span></div><div class="line"><a name="l02940"></a><span class="lineno"> 2940</span>&#160; <span class="comment">// these, and returns true. In the other case, it fills inner_expr</span></div><div class="line"><a name="l02941"></a><span class="lineno"> 2941</span>&#160; <span class="comment">// with expr, coefficient with 1, and returns false.</span></div><div class="line"><a name="l02942"></a><span class="lineno"> 2942</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Solver.html#a763e42ec89318fb1fc36098a60eca516">IsProduct</a>(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr, <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>** inner_expr, int64* coefficient);</div><div class="line"><a name="l02943"></a><span class="lineno"> 2943</span>&#160;<span class="preprocessor">#endif // !defined(SWIG)</span></div><div class="line"><a name="l02944"></a><span class="lineno"> 2944</span>&#160;</div><div class="line"><a name="l02945"></a><span class="lineno"> 2945</span>&#160; <span class="comment">// Internal. If the variables is the result of expr-&gt;Var(), this</span></div><div class="line"><a name="l02946"></a><span class="lineno"> 2946</span>&#160; <span class="comment">// method returns expr, nullptr otherwise.</span></div><div class="line"><a name="l02947"></a><span class="lineno"> 2947</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1Solver.html#a191609e0de3a43db88f862257151974e">CastExpression</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l02948"></a><span class="lineno"> 2948</span>&#160;</div><div class="line"><a name="l02949"></a><span class="lineno"> 2949</span>&#160; <span class="comment">// Tells the solver to kill or restart the current search.</span></div><div class="line"><a name="l02950"></a><span class="lineno"> 2950</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#aa17bdea653a78104b916a01addc085e6">FinishCurrentSearch</a>();</div><div class="line"><a name="l02951"></a><span class="lineno"> 2951</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#ad140a06463178d92b516e34762903b2d">RestartCurrentSearch</a>();</div><div class="line"><a name="l02952"></a><span class="lineno"> 2952</span>&#160;</div><div class="line"><a name="l02953"></a><span class="lineno"> 2953</span>&#160; <span class="comment">// These methods are only useful for the SWIG wrappers, which need a way</span></div><div class="line"><a name="l02954"></a><span class="lineno"> 2954</span>&#160; <span class="comment">// to externally cause the Solver to fail.</span></div><div class="line"><a name="l02955"></a><span class="lineno"> 2955</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#ada8d3fd4401506308d77417b72c66dfe">ShouldFail</a>() { should_fail_ = <span class="keyword">true</span>; }</div><div class="line"><a name="l02956"></a><span class="lineno"> 2956</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a489b5750b870a190187805c835ae9001">CheckFail</a>() {</div><div class="line"><a name="l02957"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#ada8d3fd4401506308d77417b72c66dfe"> 2957</a></span>&#160; <span class="keywordflow">if</span> (!should_fail_) <span class="keywordflow">return</span>;</div><div class="line"><a name="l02958"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Solver.html#a489b5750b870a190187805c835ae9001"> 2958</a></span>&#160; should_fail_ = <span class="keyword">false</span>;</div><div class="line"><a name="l02959"></a><span class="lineno"> 2959</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a45534161a4dda7e1997bc0effd606648">Fail</a>();</div><div class="line"><a name="l02960"></a><span class="lineno"> 2960</span>&#160; }</div><div class="line"><a name="l02961"></a><span class="lineno"> 2961</span>&#160;</div><div class="line"><a name="l02962"></a><span class="lineno"> 2962</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l02963"></a><span class="lineno"> 2963</span>&#160; <span class="keywordtype">void</span> Init(); <span class="comment">// Initialization. To be called by the constructors only.</span></div><div class="line"><a name="l02964"></a><span class="lineno"> 2964</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Solver.html#a6d2ae179cd6e66dc4cfd14307126b2cb">PushState</a>(<a class="code" href="classoperations__research_1_1Solver.html#ae6dee2b402434520635e66e9d58a6215">MarkerType</a> t, <span class="keyword">const</span> StateInfo&amp; info);</div><div class="line"><a name="l02965"></a><span class="lineno"> 2965</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#ae6dee2b402434520635e66e9d58a6215">MarkerType</a> <a class="code" href="classoperations__research_1_1Solver.html#a67a90d3f386c8530100f810ef54a240a">PopState</a>(StateInfo* info);</div><div class="line"><a name="l02966"></a><span class="lineno"> 2966</span>&#160; <span class="keywordtype">void</span> PushSentinel(<span class="keywordtype">int</span> magic_code);</div><div class="line"><a name="l02967"></a><span class="lineno"> 2967</span>&#160; <span class="keywordtype">void</span> BacktrackToSentinel(<span class="keywordtype">int</span> magic_code);</div><div class="line"><a name="l02968"></a><span class="lineno"> 2968</span>&#160; <span class="keywordtype">void</span> ProcessConstraints();</div><div class="line"><a name="l02969"></a><span class="lineno"> 2969</span>&#160; <span class="keywordtype">bool</span> BacktrackOneLevel(<a class="code" href="classoperations__research_1_1Decision.html">Decision</a>** fail_decision);</div><div class="line"><a name="l02970"></a><span class="lineno"> 2970</span>&#160; <span class="keywordtype">void</span> JumpToSentinelWhenNested();</div><div class="line"><a name="l02971"></a><span class="lineno"> 2971</span>&#160; <span class="keywordtype">void</span> JumpToSentinel();</div><div class="line"><a name="l02972"></a><span class="lineno"> 2972</span>&#160; <span class="keywordtype">void</span> check_alloc_state();</div><div class="line"><a name="l02973"></a><span class="lineno"> 2973</span>&#160; <span class="keywordtype">void</span> FreezeQueue();</div><div class="line"><a name="l02974"></a><span class="lineno"> 2974</span>&#160; <span class="keywordtype">void</span> EnqueueVar(<a class="code" href="classoperations__research_1_1Demon.html">Demon</a>* <span class="keyword">const</span> d);</div><div class="line"><a name="l02975"></a><span class="lineno"> 2975</span>&#160; <span class="keywordtype">void</span> EnqueueDelayedDemon(<a class="code" href="classoperations__research_1_1Demon.html">Demon</a>* <span class="keyword">const</span> d);</div><div class="line"><a name="l02976"></a><span class="lineno"> 2976</span>&#160; <span class="keywordtype">void</span> ExecuteAll(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1SimpleRevFIFO.html">SimpleRevFIFO&lt;Demon*&gt;</a>&amp; demons);</div><div class="line"><a name="l02977"></a><span class="lineno"> 2977</span>&#160; <span class="keywordtype">void</span> EnqueueAll(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1SimpleRevFIFO.html">SimpleRevFIFO&lt;Demon*&gt;</a>&amp; demons);</div><div class="line"><a name="l02978"></a><span class="lineno"> 2978</span>&#160; <span class="keywordtype">void</span> UnfreezeQueue();</div><div class="line"><a name="l02979"></a><span class="lineno"> 2979</span>&#160; <span class="keywordtype">void</span> reset_action_on_fail();</div><div class="line"><a name="l02980"></a><span class="lineno"> 2980</span>&#160; <span class="keywordtype">void</span> set_action_on_fail(<a class="code" href="classoperations__research_1_1Solver.html#a87ca0b6abf9c8724900387f5aa557c04">Action</a> a);</div><div class="line"><a name="l02981"></a><span class="lineno"> 2981</span>&#160; <span class="keywordtype">void</span> set_variable_to_clean_on_fail(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* v);</div><div class="line"><a name="l02982"></a><span class="lineno"> 2982</span>&#160; <span class="keywordtype">void</span> IncrementUncheckedSolutionCounter();</div><div class="line"><a name="l02983"></a><span class="lineno"> 2983</span>&#160; <span class="keywordtype">bool</span> IsUncheckedSolutionLimitReached();</div><div class="line"><a name="l02984"></a><span class="lineno"> 2984</span>&#160;</div><div class="line"><a name="l02985"></a><span class="lineno"> 2985</span>&#160; <span class="keywordtype">void</span> InternalSaveValue(<span class="keywordtype">int</span>* valptr);</div><div class="line"><a name="l02986"></a><span class="lineno"> 2986</span>&#160; <span class="keywordtype">void</span> InternalSaveValue(int64* valptr);</div><div class="line"><a name="l02987"></a><span class="lineno"> 2987</span>&#160; <span class="keywordtype">void</span> InternalSaveValue(uint64* valptr);</div><div class="line"><a name="l02988"></a><span class="lineno"> 2988</span>&#160; <span class="keywordtype">void</span> InternalSaveValue(<span class="keywordtype">double</span>* valptr);</div><div class="line"><a name="l02989"></a><span class="lineno"> 2989</span>&#160; <span class="keywordtype">void</span> InternalSaveValue(<span class="keywordtype">bool</span>* valptr);</div><div class="line"><a name="l02990"></a><span class="lineno"> 2990</span>&#160; <span class="keywordtype">void</span> InternalSaveValue(<span class="keywordtype">void</span>** valptr);</div><div class="line"><a name="l02991"></a><span class="lineno"> 2991</span>&#160; <span class="keywordtype">void</span> InternalSaveValue(int64** valptr) {</div><div class="line"><a name="l02992"></a><span class="lineno"> 2992</span>&#160; InternalSaveValue(reinterpret_cast&lt;void**&gt;(valptr));</div><div class="line"><a name="l02993"></a><span class="lineno"> 2993</span>&#160; }</div><div class="line"><a name="l02994"></a><span class="lineno"> 2994</span>&#160;</div><div class="line"><a name="l02995"></a><span class="lineno"> 2995</span>&#160; BaseObject* SafeRevAlloc(BaseObject* ptr);</div><div class="line"><a name="l02996"></a><span class="lineno"> 2996</span>&#160;</div><div class="line"><a name="l02997"></a><span class="lineno"> 2997</span>&#160; <span class="keywordtype">int</span>* SafeRevAllocArray(<span class="keywordtype">int</span>* ptr);</div><div class="line"><a name="l02998"></a><span class="lineno"> 2998</span>&#160; int64* SafeRevAllocArray(int64* ptr);</div><div class="line"><a name="l02999"></a><span class="lineno"> 2999</span>&#160; uint64* SafeRevAllocArray(uint64* ptr);</div><div class="line"><a name="l03000"></a><span class="lineno"> 3000</span>&#160; <span class="keywordtype">double</span>* SafeRevAllocArray(<span class="keywordtype">double</span>* ptr);</div><div class="line"><a name="l03001"></a><span class="lineno"> 3001</span>&#160; BaseObject** SafeRevAllocArray(BaseObject** ptr);</div><div class="line"><a name="l03002"></a><span class="lineno"> 3002</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a34419e55556ff4e92b447fe895bdb9c3">IntVar</a>** SafeRevAllocArray(<a class="code" href="classoperations__research_1_1Solver.html#a34419e55556ff4e92b447fe895bdb9c3">IntVar</a>** ptr);</div><div class="line"><a name="l03003"></a><span class="lineno"> 3003</span>&#160; IntExpr** SafeRevAllocArray(IntExpr** ptr);</div><div class="line"><a name="l03004"></a><span class="lineno"> 3004</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a697ed9eaa8955d595a023663ab1e8418">Constraint</a>** SafeRevAllocArray(<a class="code" href="classoperations__research_1_1Solver.html#a697ed9eaa8955d595a023663ab1e8418">Constraint</a>** ptr);</div><div class="line"><a name="l03005"></a><span class="lineno"> 3005</span>&#160; <span class="comment">// UnsafeRevAlloc is used internally for cells in SimpleRevFIFO</span></div><div class="line"><a name="l03006"></a><span class="lineno"> 3006</span>&#160; <span class="comment">// and other structures like this.</span></div><div class="line"><a name="l03007"></a><span class="lineno"> 3007</span>&#160; <span class="keywordtype">void</span>* UnsafeRevAllocAux(<span class="keywordtype">void</span>* ptr);</div><div class="line"><a name="l03008"></a><span class="lineno"> 3008</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;</div><div class="line"><a name="l03009"></a><span class="lineno"> 3009</span>&#160; T* UnsafeRevAlloc(T* ptr) {</div><div class="line"><a name="l03010"></a><span class="lineno"> 3010</span>&#160; <span class="keywordflow">return</span> reinterpret_cast&lt;T*&gt;(</div><div class="line"><a name="l03011"></a><span class="lineno"> 3011</span>&#160; UnsafeRevAllocAux(reinterpret_cast&lt;void*&gt;(ptr)));</div><div class="line"><a name="l03012"></a><span class="lineno"> 3012</span>&#160; }</div><div class="line"><a name="l03013"></a><span class="lineno"> 3013</span>&#160; <span class="keywordtype">void</span>** UnsafeRevAllocArrayAux(<span class="keywordtype">void</span>** ptr);</div><div class="line"><a name="l03014"></a><span class="lineno"> 3014</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;</div><div class="line"><a name="l03015"></a><span class="lineno"> 3015</span>&#160; T** UnsafeRevAllocArray(T** ptr) {</div><div class="line"><a name="l03016"></a><span class="lineno"> 3016</span>&#160; <span class="keywordflow">return</span> reinterpret_cast&lt;T**&gt;(</div><div class="line"><a name="l03017"></a><span class="lineno"> 3017</span>&#160; UnsafeRevAllocArrayAux(reinterpret_cast&lt;void**&gt;(ptr)));</div><div class="line"><a name="l03018"></a><span class="lineno"> 3018</span>&#160; }</div><div class="line"><a name="l03019"></a><span class="lineno"> 3019</span>&#160;</div><div class="line"><a name="l03020"></a><span class="lineno"> 3020</span>&#160; <span class="keywordtype">void</span> InitCachedIntConstants();</div><div class="line"><a name="l03021"></a><span class="lineno"> 3021</span>&#160; <span class="keywordtype">void</span> InitCachedConstraint();</div><div class="line"><a name="l03022"></a><span class="lineno"> 3022</span>&#160;</div><div class="line"><a name="l03023"></a><span class="lineno"> 3023</span>&#160; <span class="comment">// Returns the Search object that is at the bottom of the search stack.</span></div><div class="line"><a name="l03024"></a><span class="lineno"> 3024</span>&#160; <span class="comment">// Contrast with ActiveSearch(), which returns the search at the</span></div><div class="line"><a name="l03025"></a><span class="lineno"> 3025</span>&#160; <span class="comment">// top of the stack.</span></div><div class="line"><a name="l03026"></a><span class="lineno"> 3026</span>&#160; Search* TopLevelSearch()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> searches_.at(1); }</div><div class="line"><a name="l03027"></a><span class="lineno"> 3027</span>&#160; <span class="comment">// Returns the Search object which is the parent of the active search, i.e.,</span></div><div class="line"><a name="l03028"></a><span class="lineno"> 3028</span>&#160; <span class="comment">// the search below the top of the stack. If the active search is at the</span></div><div class="line"><a name="l03029"></a><span class="lineno"> 3029</span>&#160; <span class="comment">// bottom of the stack, returns the active search.</span></div><div class="line"><a name="l03030"></a><span class="lineno"> 3030</span>&#160; Search* ParentSearch()<span class="keyword"> const </span>{</div><div class="line"><a name="l03031"></a><span class="lineno"> 3031</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> search_size = searches_.size();</div><div class="line"><a name="l03032"></a><span class="lineno"> 3032</span>&#160; DCHECK_GT(search_size, 1);</div><div class="line"><a name="l03033"></a><span class="lineno"> 3033</span>&#160; <span class="keywordflow">return</span> searches_[search_size - 2];</div><div class="line"><a name="l03034"></a><span class="lineno"> 3034</span>&#160; }</div><div class="line"><a name="l03035"></a><span class="lineno"> 3035</span>&#160;</div><div class="line"><a name="l03036"></a><span class="lineno"> 3036</span>&#160; <span class="comment">// Naming</span></div><div class="line"><a name="l03037"></a><span class="lineno"> 3037</span>&#160; std::string GetName(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1Solver.html#acd6c49bd62ce1a1777a1c0e644f1186e">PropagationBaseObject</a>* <span class="keywordtype">object</span>);</div><div class="line"><a name="l03038"></a><span class="lineno"> 3038</span>&#160; <span class="keywordtype">void</span> SetName(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1Solver.html#acd6c49bd62ce1a1777a1c0e644f1186e">PropagationBaseObject</a>* <span class="keywordtype">object</span>, <span class="keyword">const</span> std::string&amp; name);</div><div class="line"><a name="l03039"></a><span class="lineno"> 3039</span>&#160;</div><div class="line"><a name="l03040"></a><span class="lineno"> 3040</span>&#160; <span class="comment">// Variable indexing (note that indexing is not reversible).</span></div><div class="line"><a name="l03041"></a><span class="lineno"> 3041</span>&#160; <span class="comment">// Returns a new index for an IntVar.</span></div><div class="line"><a name="l03042"></a><span class="lineno"> 3042</span>&#160; <span class="keywordtype">int</span> GetNewIntVarIndex() { <span class="keywordflow">return</span> num_int_vars_++; }</div><div class="line"><a name="l03043"></a><span class="lineno"> 3043</span>&#160;</div><div class="line"><a name="l03044"></a><span class="lineno"> 3044</span>&#160; <span class="comment">// Internal.</span></div><div class="line"><a name="l03045"></a><span class="lineno"> 3045</span>&#160; <span class="keywordtype">bool</span> IsADifference(IntExpr* expr, IntExpr** <span class="keyword">const</span> left,</div><div class="line"><a name="l03046"></a><span class="lineno"> 3046</span>&#160; IntExpr** <span class="keyword">const</span> right);</div><div class="line"><a name="l03047"></a><span class="lineno"> 3047</span>&#160;</div><div class="line"><a name="l03048"></a><span class="lineno"> 3048</span>&#160; <span class="keyword">const</span> std::string name_;</div><div class="line"><a name="l03049"></a><span class="lineno"> 3049</span>&#160; <span class="keyword">const</span> ConstraintSolverParameters parameters_;</div><div class="line"><a name="l03050"></a><span class="lineno"> 3050</span>&#160; absl::flat_hash_map&lt;const PropagationBaseObject*, std::string&gt;</div><div class="line"><a name="l03051"></a><span class="lineno"> 3051</span>&#160; propagation_object_names_;</div><div class="line"><a name="l03052"></a><span class="lineno"> 3052</span>&#160; absl::flat_hash_map&lt;const PropagationBaseObject*, IntegerCastInfo&gt;</div><div class="line"><a name="l03053"></a><span class="lineno"> 3053</span>&#160; cast_information_;</div><div class="line"><a name="l03054"></a><span class="lineno"> 3054</span>&#160; absl::flat_hash_set&lt;const Constraint*&gt; cast_constraints_;</div><div class="line"><a name="l03055"></a><span class="lineno"> 3055</span>&#160; <span class="keyword">const</span> std::string empty_name_;</div><div class="line"><a name="l03056"></a><span class="lineno"> 3056</span>&#160; std::unique_ptr&lt;Queue&gt; queue_;</div><div class="line"><a name="l03057"></a><span class="lineno"> 3057</span>&#160; std::unique_ptr&lt;Trail&gt; trail_;</div><div class="line"><a name="l03058"></a><span class="lineno"> 3058</span>&#160; std::vector&lt;Constraint*&gt; constraints_list_;</div><div class="line"><a name="l03059"></a><span class="lineno"> 3059</span>&#160; std::vector&lt;Constraint*&gt; additional_constraints_list_;</div><div class="line"><a name="l03060"></a><span class="lineno"> 3060</span>&#160; std::vector&lt;int&gt; additional_constraints_parent_list_;</div><div class="line"><a name="l03061"></a><span class="lineno"> 3061</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a5b5712802e63dcd3ee5abfd37e0f2a95">SolverState</a> state_;</div><div class="line"><a name="l03062"></a><span class="lineno"> 3062</span>&#160; int64 branches_;</div><div class="line"><a name="l03063"></a><span class="lineno"> 3063</span>&#160; int64 fails_;</div><div class="line"><a name="l03064"></a><span class="lineno"> 3064</span>&#160; int64 decisions_;</div><div class="line"><a name="l03065"></a><span class="lineno"> 3065</span>&#160; int64 demon_runs_[<a class="code" href="classoperations__research_1_1Solver.html#ad4faf53cefb2c2cdb8892b978a4b93a9">kNumPriorities</a>];</div><div class="line"><a name="l03066"></a><span class="lineno"> 3066</span>&#160; int64 neighbors_;</div><div class="line"><a name="l03067"></a><span class="lineno"> 3067</span>&#160; int64 filtered_neighbors_;</div><div class="line"><a name="l03068"></a><span class="lineno"> 3068</span>&#160; int64 accepted_neighbors_;</div><div class="line"><a name="l03069"></a><span class="lineno"> 3069</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a8a00b64c16b54cef4e0467730e171bef">OptimizationDirection</a> optimization_direction_;</div><div class="line"><a name="l03070"></a><span class="lineno"> 3070</span>&#160; std::unique_ptr&lt;ClockTimer&gt; timer_;</div><div class="line"><a name="l03071"></a><span class="lineno"> 3071</span>&#160; std::vector&lt;Search*&gt; searches_;</div><div class="line"><a name="l03072"></a><span class="lineno"> 3072</span>&#160; ACMRandom random_;</div><div class="line"><a name="l03073"></a><span class="lineno"> 3073</span>&#160; uint64 fail_stamp_;</div><div class="line"><a name="l03074"></a><span class="lineno"> 3074</span>&#160; std::unique_ptr&lt;Decision&gt; balancing_decision_;</div><div class="line"><a name="l03075"></a><span class="lineno"> 3075</span>&#160; <span class="comment">// intercept failures</span></div><div class="line"><a name="l03076"></a><span class="lineno"> 3076</span>&#160; std::function&lt;void()&gt; fail_intercept_;</div><div class="line"><a name="l03077"></a><span class="lineno"> 3077</span>&#160; <span class="comment">// Demon monitor</span></div><div class="line"><a name="l03078"></a><span class="lineno"> 3078</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a17a56adc8ee57642c3f00a1778319192">DemonProfiler</a>* <span class="keyword">const</span> demon_profiler_;</div><div class="line"><a name="l03079"></a><span class="lineno"> 3079</span>&#160; <span class="comment">// Local search mode</span></div><div class="line"><a name="l03080"></a><span class="lineno"> 3080</span>&#160; <span class="keywordtype">bool</span> use_fast_local_search_;</div><div class="line"><a name="l03081"></a><span class="lineno"> 3081</span>&#160; <span class="comment">// Local search profiler monitor</span></div><div class="line"><a name="l03082"></a><span class="lineno"> 3082</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a622500a4c7e11bbc4b8a5e5de2c84f13">LocalSearchProfiler</a>* <span class="keyword">const</span> local_search_profiler_;</div><div class="line"><a name="l03083"></a><span class="lineno"> 3083</span>&#160; <span class="comment">// Local search state.</span></div><div class="line"><a name="l03084"></a><span class="lineno"> 3084</span>&#160; std::unique_ptr&lt;Assignment&gt; local_search_state_;</div><div class="line"><a name="l03085"></a><span class="lineno"> 3085</span>&#160;</div><div class="line"><a name="l03086"></a><span class="lineno"> 3086</span>&#160; <span class="comment">// interval of constants cached, inclusive:</span></div><div class="line"><a name="l03087"></a><span class="lineno"> 3087</span>&#160; <span class="keyword">enum</span> { MIN_CACHED_INT_CONST = -8, MAX_CACHED_INT_CONST = 8 };</div><div class="line"><a name="l03088"></a><span class="lineno"> 3088</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a34419e55556ff4e92b447fe895bdb9c3">IntVar</a>* cached_constants_[MAX_CACHED_INT_CONST + 1 - MIN_CACHED_INT_CONST];</div><div class="line"><a name="l03089"></a><span class="lineno"> 3089</span>&#160;</div><div class="line"><a name="l03090"></a><span class="lineno"> 3090</span>&#160; <span class="comment">// Cached constraints.</span></div><div class="line"><a name="l03091"></a><span class="lineno"> 3091</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a697ed9eaa8955d595a023663ab1e8418">Constraint</a>* true_constraint_;</div><div class="line"><a name="l03092"></a><span class="lineno"> 3092</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a697ed9eaa8955d595a023663ab1e8418">Constraint</a>* false_constraint_;</div><div class="line"><a name="l03093"></a><span class="lineno"> 3093</span>&#160;</div><div class="line"><a name="l03094"></a><span class="lineno"> 3094</span>&#160; std::unique_ptr&lt;Decision&gt; fail_decision_;</div><div class="line"><a name="l03095"></a><span class="lineno"> 3095</span>&#160; <span class="keywordtype">int</span> constraint_index_;</div><div class="line"><a name="l03096"></a><span class="lineno"> 3096</span>&#160; <span class="keywordtype">int</span> additional_constraint_index_;</div><div class="line"><a name="l03097"></a><span class="lineno"> 3097</span>&#160; <span class="keywordtype">int</span> num_int_vars_;</div><div class="line"><a name="l03098"></a><span class="lineno"> 3098</span>&#160;</div><div class="line"><a name="l03099"></a><span class="lineno"> 3099</span>&#160; std::unique_ptr&lt;ModelCache&gt; model_cache_;</div><div class="line"><a name="l03100"></a><span class="lineno"> 3100</span>&#160; std::unique_ptr&lt;PropagationMonitor&gt; propagation_monitor_;</div><div class="line"><a name="l03101"></a><span class="lineno"> 3101</span>&#160; PropagationMonitor* print_trace_;</div><div class="line"><a name="l03102"></a><span class="lineno"> 3102</span>&#160; std::unique_ptr&lt;LocalSearchMonitor&gt; local_search_monitor_;</div><div class="line"><a name="l03103"></a><span class="lineno"> 3103</span>&#160; <span class="keywordtype">int</span> anonymous_variable_index_;</div><div class="line"><a name="l03104"></a><span class="lineno"> 3104</span>&#160; <span class="keywordtype">bool</span> should_fail_;</div><div class="line"><a name="l03105"></a><span class="lineno"> 3105</span>&#160;</div><div class="line"><a name="l03106"></a><span class="lineno"> 3106</span>&#160; DISALLOW_COPY_AND_ASSIGN(<a class="code" href="classoperations__research_1_1Solver.html#af4d2c143bd1e769ab96a69a8ab855136">Solver</a>);</div><div class="line"><a name="l03107"></a><span class="lineno"> 3107</span>&#160;};</div><div class="line"><a name="l03108"></a><span class="lineno"> 3108</span>&#160;</div><div class="line"><a name="l03109"></a><span class="lineno"> 3109</span>&#160;std::ostream&amp; <a class="code" href="namespaceoperations__research.html#a316abccdfa41512564d84365ea8f0ead">operator&lt;&lt;</a>(std::ostream&amp; out, <span class="keyword">const</span> Solver* <span class="keyword">const</span> s); <span class="comment">// NOLINT</span></div><div class="line"><a name="l03110"></a><span class="lineno"> 3110</span>&#160;</div><div class="line"><a name="l03111"></a><span class="lineno"> 3111</span>&#160;<span class="comment">// ---------- Misc ----------</span></div><div class="line"><a name="l03112"></a><span class="lineno"> 3112</span>&#160;</div><div class="line"><a name="l03113"></a><span class="lineno"> 3113</span>&#160;<span class="comment">// This method returns 0. It is useful when 0 can be cast either as</span></div><div class="line"><a name="l03114"></a><span class="lineno"> 3114</span>&#160;<span class="comment">// a pointer or as an integer value and thus lead to an ambiguous</span></div><div class="line"><a name="l03115"></a><span class="lineno"> 3115</span>&#160;<span class="comment">// function call.</span></div><div class="line"><a name="l03116"></a><span class="lineno"> 3116</span>&#160;<span class="keyword">inline</span> int64 <a class="code" href="namespaceoperations__research.html#a009f247167f32509baf749083e4bc984">Zero</a>() { <span class="keywordflow">return</span> 0; }</div><div class="line"><a name="l03117"></a><span class="lineno"> 3117</span>&#160;<span class="comment">// This method returns 1</span></div><div class="line"><a name="l03118"></a><span class="lineno"><a class="line" href="namespaceoperations__research.html#a009f247167f32509baf749083e4bc984"> 3118</a></span>&#160;<span class="keyword">inline</span> int64 <a class="code" href="namespaceoperations__research.html#aa96bb5a28dd9c1ccc864b1587e8e1a98">One</a>() { <span class="keywordflow">return</span> 1; }</div><div class="line"><a name="l03119"></a><span class="lineno"> 3119</span>&#160;</div><div class="line"><a name="l03121"></a><span class="lineno"> 3121</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l03122"></a><span class="lineno"> 3122</span>&#160;<span class="comment">// Useful Search and Modeling Objects</span></div><div class="line"><a name="l03123"></a><span class="lineno"> 3123</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l03125"></a><span class="lineno"> 3125</span>&#160;<span class="comment"></span></div><div class="line"><a name="l03126"></a><span class="lineno"> 3126</span>&#160;<span class="comment">// A BaseObject is the root of all reversibly allocated objects.</span></div><div class="line"><a name="l03127"></a><span class="lineno"> 3127</span>&#160;<span class="comment">// A DebugString method and the associated &lt;&lt; operator are implemented</span></div><div class="line"><a name="l03128"></a><span class="lineno"> 3128</span>&#160;<span class="comment">// as a convenience.</span></div><div class="line"><a name="l03129"></a><span class="lineno"> 3129</span>&#160;</div><div class="line"><a name="l03130"></a><span class="lineno"> 3130</span>&#160;<span class="keyword">class </span>BaseObject {</div><div class="line"><a name="l03131"></a><span class="lineno"> 3131</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l03132"></a><span class="lineno"> 3132</span>&#160; <a class="code" href="classoperations__research_1_1BaseObject.html#abcf5669a8a0612adb1665e276efb416f">BaseObject</a>() {}</div><div class="line"><a name="l03133"></a><span class="lineno"> 3133</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classoperations__research_1_1BaseObject.html#a9bd95fcee9e5856c6097b5dfae0b7076">~BaseObject</a>() {}</div><div class="line"><a name="l03134"></a><span class="lineno"><a class="line" href="classoperations__research_1_1BaseObject.html"> 3134</a></span>&#160; <span class="keyword">virtual</span> std::string <a class="code" href="classoperations__research_1_1BaseObject.html#afb3b013c5063d71566d5273793c1d828">DebugString</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="stringliteral">&quot;BaseObject&quot;</span>; }</div><div class="line"><a name="l03135"></a><span class="lineno"> 3135</span>&#160;</div><div class="line"><a name="l03136"></a><span class="lineno"><a class="line" href="classoperations__research_1_1BaseObject.html#abcf5669a8a0612adb1665e276efb416f"> 3136</a></span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l03137"></a><span class="lineno"><a class="line" href="classoperations__research_1_1BaseObject.html#a9bd95fcee9e5856c6097b5dfae0b7076"> 3137</a></span>&#160; DISALLOW_COPY_AND_ASSIGN(<a class="code" href="classoperations__research_1_1BaseObject.html">BaseObject</a>);</div><div class="line"><a name="l03138"></a><span class="lineno"><a class="line" href="classoperations__research_1_1BaseObject.html#afb3b013c5063d71566d5273793c1d828"> 3138</a></span>&#160;};</div><div class="line"><a name="l03139"></a><span class="lineno"> 3139</span>&#160;</div><div class="line"><a name="l03140"></a><span class="lineno"> 3140</span>&#160;std::ostream&amp; <a class="code" href="namespaceoperations__research.html#a316abccdfa41512564d84365ea8f0ead">operator&lt;&lt;</a>(std::ostream&amp; out, <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1BaseObject.html">BaseObject</a>* o); <span class="comment">// NOLINT</span></div><div class="line"><a name="l03141"></a><span class="lineno"> 3141</span>&#160;</div><div class="line"><a name="l03142"></a><span class="lineno"> 3142</span>&#160;<span class="comment">// The PropagationBaseObject is a subclass of BaseObject that is also</span></div><div class="line"><a name="l03143"></a><span class="lineno"> 3143</span>&#160;<span class="comment">// friend to the Solver class. It allows accessing methods useful when</span></div><div class="line"><a name="l03144"></a><span class="lineno"> 3144</span>&#160;<span class="comment">// writing new constraints or new expressions.</span></div><div class="line"><a name="l03145"></a><span class="lineno"> 3145</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1PropagationBaseObject.html">PropagationBaseObject</a> : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1BaseObject.html">BaseObject</a> {</div><div class="line"><a name="l03146"></a><span class="lineno"> 3146</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l03147"></a><span class="lineno"> 3147</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classoperations__research_1_1PropagationBaseObject.html#afa9385e35090e310e58fc4cb6fd5d606">PropagationBaseObject</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> s) : solver_(s) {}</div><div class="line"><a name="l03148"></a><span class="lineno"> 3148</span>&#160; <a class="code" href="classoperations__research_1_1PropagationBaseObject.html#a767a917fc7d9232d121994ae1e124875">~PropagationBaseObject</a>()<span class="keyword"> override </span>{}</div><div class="line"><a name="l03149"></a><span class="lineno"><a class="line" href="classoperations__research_1_1PropagationBaseObject.html"> 3149</a></span>&#160;</div><div class="line"><a name="l03150"></a><span class="lineno"> 3150</span>&#160; std::string <a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ae5b6f8cb73c1b76da152ad612f91c4ce">DebugString</a>()<span class="keyword"> const override </span>{</div><div class="line"><a name="l03151"></a><span class="lineno"><a class="line" href="classoperations__research_1_1PropagationBaseObject.html#afa9385e35090e310e58fc4cb6fd5d606"> 3151</a></span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classoperations__research_1_1PropagationBaseObject.html#a8be8b75223b76744791e48747677cdb6">name</a>().empty()) {</div><div class="line"><a name="l03152"></a><span class="lineno"><a class="line" href="classoperations__research_1_1PropagationBaseObject.html#a767a917fc7d9232d121994ae1e124875"> 3152</a></span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;PropagationBaseObject&quot;</span>;</div><div class="line"><a name="l03153"></a><span class="lineno"> 3153</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l03154"></a><span class="lineno"><a class="line" href="classoperations__research_1_1PropagationBaseObject.html#ae5b6f8cb73c1b76da152ad612f91c4ce"> 3154</a></span>&#160; <span class="keywordflow">return</span> absl::StrFormat(<span class="stringliteral">&quot;PropagationBaseObject: %s&quot;</span>, <a class="code" href="classoperations__research_1_1PropagationBaseObject.html#a8be8b75223b76744791e48747677cdb6">name</a>());</div><div class="line"><a name="l03155"></a><span class="lineno"> 3155</span>&#160; }</div><div class="line"><a name="l03156"></a><span class="lineno"> 3156</span>&#160; }</div><div class="line"><a name="l03157"></a><span class="lineno"> 3157</span>&#160; Solver* <a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">solver</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> solver_; }</div><div class="line"><a name="l03158"></a><span class="lineno"> 3158</span>&#160; <span class="comment">// This method freezes the propagation queue. It is useful when you</span></div><div class="line"><a name="l03159"></a><span class="lineno"> 3159</span>&#160; <span class="comment">// need to apply multiple modifications at once.</span></div><div class="line"><a name="l03160"></a><span class="lineno"> 3160</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1PropagationBaseObject.html#a78b16596f589dd63573a1586f61c2dbd">FreezeQueue</a>() { solver_-&gt;FreezeQueue(); }</div><div class="line"><a name="l03161"></a><span class="lineno"><a class="line" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580"> 3161</a></span>&#160;</div><div class="line"><a name="l03162"></a><span class="lineno"> 3162</span>&#160; <span class="comment">// This method unfreezes the propagation queue. All modifications</span></div><div class="line"><a name="l03163"></a><span class="lineno"> 3163</span>&#160; <span class="comment">// that happened when the queue was frozen will be processed.</span></div><div class="line"><a name="l03164"></a><span class="lineno"><a class="line" href="classoperations__research_1_1PropagationBaseObject.html#a78b16596f589dd63573a1586f61c2dbd"> 3164</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1PropagationBaseObject.html#a97782b79fbcf8043201fefaa7729dcf1">UnfreezeQueue</a>() { solver_-&gt;UnfreezeQueue(); }</div><div class="line"><a name="l03165"></a><span class="lineno"> 3165</span>&#160;</div><div class="line"><a name="l03166"></a><span class="lineno"> 3166</span>&#160; <span class="comment">// This method pushes the demon onto the propagation queue. It will</span></div><div class="line"><a name="l03167"></a><span class="lineno"> 3167</span>&#160; <span class="comment">// be processed directly if the queue is empty. It will be enqueued</span></div><div class="line"><a name="l03168"></a><span class="lineno"><a class="line" href="classoperations__research_1_1PropagationBaseObject.html#a97782b79fbcf8043201fefaa7729dcf1"> 3168</a></span>&#160; <span class="comment">// according to its priority otherwise.</span></div><div class="line"><a name="l03169"></a><span class="lineno"> 3169</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1PropagationBaseObject.html#a5dd87cd906d80738f8727fda04bc5ace">EnqueueDelayedDemon</a>(<a class="code" href="classoperations__research_1_1Demon.html">Demon</a>* <span class="keyword">const</span> d) { solver_-&gt;EnqueueDelayedDemon(d); }</div><div class="line"><a name="l03170"></a><span class="lineno"> 3170</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1PropagationBaseObject.html#a3fe6115081d583d57b6cd8b0dd1783d7">EnqueueVar</a>(<a class="code" href="classoperations__research_1_1Demon.html">Demon</a>* <span class="keyword">const</span> d) { solver_-&gt;EnqueueVar(d); }</div><div class="line"><a name="l03171"></a><span class="lineno"> 3171</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1PropagationBaseObject.html#a4a7285479f5e0fa7663c043cdfc7dd61">ExecuteAll</a>(<span class="keyword">const</span> SimpleRevFIFO&lt;Demon*&gt;&amp; demons);</div><div class="line"><a name="l03172"></a><span class="lineno"> 3172</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1PropagationBaseObject.html#a5975e144479d99ceae4f009472ca5e92">EnqueueAll</a>(<span class="keyword">const</span> SimpleRevFIFO&lt;Demon*&gt;&amp; demons);</div><div class="line"><a name="l03173"></a><span class="lineno"><a class="line" href="classoperations__research_1_1PropagationBaseObject.html#a5dd87cd906d80738f8727fda04bc5ace"> 3173</a></span>&#160;</div><div class="line"><a name="l03174"></a><span class="lineno"><a class="line" href="classoperations__research_1_1PropagationBaseObject.html#a3fe6115081d583d57b6cd8b0dd1783d7"> 3174</a></span>&#160;<span class="preprocessor">#if !defined(SWIG)</span></div><div class="line"><a name="l03175"></a><span class="lineno"> 3175</span>&#160; <span class="comment">// This method sets a callback that will be called if a failure</span></div><div class="line"><a name="l03176"></a><span class="lineno"> 3176</span>&#160; <span class="comment">// happens during the propagation of the queue.</span></div><div class="line"><a name="l03177"></a><span class="lineno"> 3177</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1PropagationBaseObject.html#a5c6bf90bb0b099a2c8f81aaefdfdd46c">set_action_on_fail</a>(<a class="code" href="classoperations__research_1_1Solver.html#a87ca0b6abf9c8724900387f5aa557c04">Solver::Action</a> a) {</div><div class="line"><a name="l03178"></a><span class="lineno"> 3178</span>&#160; solver_-&gt;set_action_on_fail(std::move(a));</div><div class="line"><a name="l03179"></a><span class="lineno"> 3179</span>&#160; }</div><div class="line"><a name="l03180"></a><span class="lineno"> 3180</span>&#160;<span class="preprocessor">#endif // !defined(SWIG)</span></div><div class="line"><a name="l03181"></a><span class="lineno"><a class="line" href="classoperations__research_1_1PropagationBaseObject.html#a5c6bf90bb0b099a2c8f81aaefdfdd46c"> 3181</a></span>&#160;</div><div class="line"><a name="l03182"></a><span class="lineno"> 3182</span>&#160; <span class="comment">// This method clears the failure callback.</span></div><div class="line"><a name="l03183"></a><span class="lineno"> 3183</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ad07aa613bcc8d3896dff3f33520b061c">reset_action_on_fail</a>() { solver_-&gt;reset_action_on_fail(); }</div><div class="line"><a name="l03184"></a><span class="lineno"> 3184</span>&#160;</div><div class="line"><a name="l03185"></a><span class="lineno"> 3185</span>&#160; <span class="comment">// Shortcut for variable cleaner.</span></div><div class="line"><a name="l03186"></a><span class="lineno"> 3186</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1PropagationBaseObject.html#a4d2ccb8a806df14394b3271791c81e61">set_variable_to_clean_on_fail</a>(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* v) {</div><div class="line"><a name="l03187"></a><span class="lineno"><a class="line" href="classoperations__research_1_1PropagationBaseObject.html#ad07aa613bcc8d3896dff3f33520b061c"> 3187</a></span>&#160; solver_-&gt;set_variable_to_clean_on_fail(v);</div><div class="line"><a name="l03188"></a><span class="lineno"> 3188</span>&#160; }</div><div class="line"><a name="l03189"></a><span class="lineno"> 3189</span>&#160;</div><div class="line"><a name="l03190"></a><span class="lineno"><a class="line" href="classoperations__research_1_1PropagationBaseObject.html#a4d2ccb8a806df14394b3271791c81e61"> 3190</a></span>&#160; <span class="comment">// Object naming.</span></div><div class="line"><a name="l03191"></a><span class="lineno"> 3191</span>&#160; <span class="keyword">virtual</span> std::string <a class="code" href="classoperations__research_1_1PropagationBaseObject.html#a8be8b75223b76744791e48747677cdb6">name</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l03192"></a><span class="lineno"> 3192</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1PropagationBaseObject.html#a5d4a4cf402b353ba2908836656cf0c62">set_name</a>(<span class="keyword">const</span> std::string&amp; <a class="code" href="classoperations__research_1_1PropagationBaseObject.html#a8be8b75223b76744791e48747677cdb6">name</a>);</div><div class="line"><a name="l03193"></a><span class="lineno"> 3193</span>&#160; <span class="comment">// Returns whether the object has been named or not.</span></div><div class="line"><a name="l03194"></a><span class="lineno"> 3194</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1PropagationBaseObject.html#af6e627822f954d6072125c1d152c30f8">HasName</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l03195"></a><span class="lineno"> 3195</span>&#160; <span class="comment">// Returns a base name for automatic naming.</span></div><div class="line"><a name="l03196"></a><span class="lineno"> 3196</span>&#160; <span class="keyword">virtual</span> std::string <a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab34671f68433c582260a443f3d15bfae">BaseName</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l03197"></a><span class="lineno"> 3197</span>&#160;</div><div class="line"><a name="l03198"></a><span class="lineno"> 3198</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l03199"></a><span class="lineno"> 3199</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> solver_;</div><div class="line"><a name="l03200"></a><span class="lineno"> 3200</span>&#160; DISALLOW_COPY_AND_ASSIGN(<a class="code" href="classoperations__research_1_1PropagationBaseObject.html">PropagationBaseObject</a>);</div><div class="line"><a name="l03201"></a><span class="lineno"> 3201</span>&#160;};</div><div class="line"><a name="l03202"></a><span class="lineno"> 3202</span>&#160;</div><div class="line"><a name="l03203"></a><span class="lineno"> 3203</span>&#160;<span class="comment">// A Decision represents a choice point in the search tree. The two main</span></div><div class="line"><a name="l03204"></a><span class="lineno"> 3204</span>&#160;<span class="comment">// methods are Apply() to go left, or Refute() to go right.</span></div><div class="line"><a name="l03205"></a><span class="lineno"> 3205</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1Decision.html">Decision</a> : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1BaseObject.html">BaseObject</a> {</div><div class="line"><a name="l03206"></a><span class="lineno"> 3206</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l03207"></a><span class="lineno"> 3207</span>&#160; <a class="code" href="classoperations__research_1_1Decision.html#a20a827cbc3c6cf9ecbef85bc3ba85cdb">Decision</a>() {}</div><div class="line"><a name="l03208"></a><span class="lineno"> 3208</span>&#160; <a class="code" href="classoperations__research_1_1Decision.html#a35ecb2123d8d852154e65847096b3f69">~Decision</a>()<span class="keyword"> override </span>{}</div><div class="line"><a name="l03209"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Decision.html"> 3209</a></span>&#160;</div><div class="line"><a name="l03210"></a><span class="lineno"> 3210</span>&#160; <span class="comment">// Apply will be called first when the decision is executed.</span></div><div class="line"><a name="l03211"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Decision.html#a20a827cbc3c6cf9ecbef85bc3ba85cdb"> 3211</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Decision.html#a88aea04b24727f86d465479464437b2e">Apply</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> s) = 0;</div><div class="line"><a name="l03212"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Decision.html#a35ecb2123d8d852154e65847096b3f69"> 3212</a></span>&#160;</div><div class="line"><a name="l03213"></a><span class="lineno"> 3213</span>&#160; <span class="comment">// Refute will be called after a backtrack.</span></div><div class="line"><a name="l03214"></a><span class="lineno"> 3214</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Decision.html#a04e7498b68e7bfc7caeacad7c4272c1f">Refute</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> s) = 0;</div><div class="line"><a name="l03215"></a><span class="lineno"> 3215</span>&#160;</div><div class="line"><a name="l03216"></a><span class="lineno"> 3216</span>&#160; std::string <a class="code" href="classoperations__research_1_1Decision.html#a8c30db3cf86cc406442a05f5361fe4b9">DebugString</a>()<span class="keyword"> const override </span>{ <span class="keywordflow">return</span> <span class="stringliteral">&quot;Decision&quot;</span>; }</div><div class="line"><a name="l03217"></a><span class="lineno"> 3217</span>&#160; <span class="comment">// Accepts the given visitor.</span></div><div class="line"><a name="l03218"></a><span class="lineno"> 3218</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Decision.html#a5ac1f45476e2b62e48de4798adf8b911">Accept</a>(<a class="code" href="classoperations__research_1_1DecisionVisitor.html">DecisionVisitor</a>* <span class="keyword">const</span> visitor) <span class="keyword">const</span>;</div><div class="line"><a name="l03219"></a><span class="lineno"> 3219</span>&#160;</div><div class="line"><a name="l03220"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Decision.html#a8c30db3cf86cc406442a05f5361fe4b9"> 3220</a></span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l03221"></a><span class="lineno"> 3221</span>&#160; DISALLOW_COPY_AND_ASSIGN(<a class="code" href="classoperations__research_1_1Decision.html">Decision</a>);</div><div class="line"><a name="l03222"></a><span class="lineno"> 3222</span>&#160;};</div><div class="line"><a name="l03223"></a><span class="lineno"> 3223</span>&#160;</div><div class="line"><a name="l03224"></a><span class="lineno"> 3224</span>&#160;<span class="comment">// A DecisionVisitor is used to inspect a decision.</span></div><div class="line"><a name="l03225"></a><span class="lineno"> 3225</span>&#160;<span class="comment">// It contains virtual methods for all type of &#39;declared&#39; decisions.</span></div><div class="line"><a name="l03226"></a><span class="lineno"> 3226</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1DecisionVisitor.html">DecisionVisitor</a> : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1BaseObject.html">BaseObject</a> {</div><div class="line"><a name="l03227"></a><span class="lineno"> 3227</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l03228"></a><span class="lineno"> 3228</span>&#160; <a class="code" href="classoperations__research_1_1DecisionVisitor.html#a67b3034ec90261e392c5a1c4c35303c3">DecisionVisitor</a>() {}</div><div class="line"><a name="l03229"></a><span class="lineno"> 3229</span>&#160; <a class="code" href="classoperations__research_1_1DecisionVisitor.html#a82aadbb02576d33c46f8c2851f455cde">~DecisionVisitor</a>()<span class="keyword"> override </span>{}</div><div class="line"><a name="l03230"></a><span class="lineno"><a class="line" href="classoperations__research_1_1DecisionVisitor.html"> 3230</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1DecisionVisitor.html#ac6e7b0464cdfb0caaac7661366295e65">VisitSetVariableValue</a>(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var, int64 value);</div><div class="line"><a name="l03231"></a><span class="lineno"> 3231</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1DecisionVisitor.html#a8faebc249d15a171102fd56fbe725216">VisitSplitVariableDomain</a>(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var, int64 value,</div><div class="line"><a name="l03232"></a><span class="lineno"><a class="line" href="classoperations__research_1_1DecisionVisitor.html#a67b3034ec90261e392c5a1c4c35303c3"> 3232</a></span>&#160; <span class="keywordtype">bool</span> start_with_lower_half);</div><div class="line"><a name="l03233"></a><span class="lineno"><a class="line" href="classoperations__research_1_1DecisionVisitor.html#a82aadbb02576d33c46f8c2851f455cde"> 3233</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1DecisionVisitor.html#af48323740d18f4059ff01271b50eb9f2">VisitScheduleOrPostpone</a>(<a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var, int64 est);</div><div class="line"><a name="l03234"></a><span class="lineno"> 3234</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1DecisionVisitor.html#a7003dd5f4ff2cf139801866b35d02960">VisitScheduleOrExpedite</a>(<a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var, int64 est);</div><div class="line"><a name="l03235"></a><span class="lineno"> 3235</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1DecisionVisitor.html#a00084fcd22fc7f269b23dbfd5aa1032f">VisitRankFirstInterval</a>(<a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a>* <span class="keyword">const</span> sequence, <span class="keywordtype">int</span> index);</div><div class="line"><a name="l03236"></a><span class="lineno"> 3236</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1DecisionVisitor.html#a771d64a88d1eecc6fcce4a5b39349be8">VisitRankLastInterval</a>(<a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a>* <span class="keyword">const</span> sequence, <span class="keywordtype">int</span> index);</div><div class="line"><a name="l03237"></a><span class="lineno"> 3237</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1DecisionVisitor.html#af93d0ecd1a2cf63364ce9f8e554979cb">VisitUnknownDecision</a>();</div><div class="line"><a name="l03238"></a><span class="lineno"> 3238</span>&#160;</div><div class="line"><a name="l03239"></a><span class="lineno"> 3239</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l03240"></a><span class="lineno"> 3240</span>&#160; DISALLOW_COPY_AND_ASSIGN(<a class="code" href="classoperations__research_1_1DecisionVisitor.html">DecisionVisitor</a>);</div><div class="line"><a name="l03241"></a><span class="lineno"> 3241</span>&#160;};</div><div class="line"><a name="l03242"></a><span class="lineno"> 3242</span>&#160;</div><div class="line"><a name="l03243"></a><span class="lineno"> 3243</span>&#160;<span class="comment">// A DecisionBuilder is responsible for creating the search tree. The</span></div><div class="line"><a name="l03244"></a><span class="lineno"> 3244</span>&#160;<span class="comment">// important method is Next(), which returns the next decision to execute.</span></div><div class="line"><a name="l03245"></a><span class="lineno"> 3245</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a> : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1BaseObject.html">BaseObject</a> {</div><div class="line"><a name="l03246"></a><span class="lineno"> 3246</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l03247"></a><span class="lineno"> 3247</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html#adcbdca02b7495a6f2ffcff7f77e32b1c">DecisionBuilder</a>() {}</div><div class="line"><a name="l03248"></a><span class="lineno"> 3248</span>&#160; <a class="code" href="classoperations__research_1_1DecisionBuilder.html#ae49a9c888745786d48556303451d219d">~DecisionBuilder</a>()<span class="keyword"> override </span>{}</div><div class="line"><a name="l03249"></a><span class="lineno"><a class="line" href="classoperations__research_1_1DecisionBuilder.html"> 3249</a></span>&#160; <span class="comment">// This is the main method of the decision builder class. It must</span></div><div class="line"><a name="l03250"></a><span class="lineno"> 3250</span>&#160; <span class="comment">// return a decision (an instance of the class Decision). If it</span></div><div class="line"><a name="l03251"></a><span class="lineno"><a class="line" href="classoperations__research_1_1DecisionBuilder.html#adcbdca02b7495a6f2ffcff7f77e32b1c"> 3251</a></span>&#160; <span class="comment">// returns nullptr, this means that the decision builder has finished</span></div><div class="line"><a name="l03252"></a><span class="lineno"><a class="line" href="classoperations__research_1_1DecisionBuilder.html#ae49a9c888745786d48556303451d219d"> 3252</a></span>&#160; <span class="comment">// its work.</span></div><div class="line"><a name="l03253"></a><span class="lineno"> 3253</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classoperations__research_1_1Decision.html">Decision</a>* <a class="code" href="classoperations__research_1_1DecisionBuilder.html#a3bcaa4dd991e8ddb4d0e48cfbca58592">Next</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> s) = 0;</div><div class="line"><a name="l03254"></a><span class="lineno"> 3254</span>&#160; std::string <a class="code" href="classoperations__research_1_1DecisionBuilder.html#aca201d99227a6116c62418d28761aa9b">DebugString</a>() <span class="keyword">const override</span>;</div><div class="line"><a name="l03255"></a><span class="lineno"> 3255</span>&#160;<span class="preprocessor">#if !defined(SWIG)</span></div><div class="line"><a name="l03256"></a><span class="lineno"> 3256</span>&#160; <span class="comment">// This method will be called at the start of the search. It asks</span></div><div class="line"><a name="l03257"></a><span class="lineno"> 3257</span>&#160; <span class="comment">// the decision builder if it wants to append search monitors to the</span></div><div class="line"><a name="l03258"></a><span class="lineno"> 3258</span>&#160; <span class="comment">// list of active monitors for this search. Please note there are no</span></div><div class="line"><a name="l03259"></a><span class="lineno"> 3259</span>&#160; <span class="comment">// checks at this point for duplication.</span></div><div class="line"><a name="l03260"></a><span class="lineno"> 3260</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1DecisionBuilder.html#aacc1030d918e7c2b5ba6c5e8a0542746">AppendMonitors</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> <a class="code" href="routing_8h.html#a5f32c22c620c811754ba7b6f977db864">solver</a>,</div><div class="line"><a name="l03261"></a><span class="lineno"> 3261</span>&#160; std::vector&lt;SearchMonitor*&gt;* <span class="keyword">const</span> extras);</div><div class="line"><a name="l03262"></a><span class="lineno"> 3262</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1DecisionBuilder.html#a62372947c9ce93ba28cb636a635433d7">Accept</a>(<a class="code" href="classoperations__research_1_1ModelVisitor.html">ModelVisitor</a>* <span class="keyword">const</span> visitor) <span class="keyword">const</span>;</div><div class="line"><a name="l03263"></a><span class="lineno"> 3263</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l03264"></a><span class="lineno"> 3264</span>&#160;</div><div class="line"><a name="l03265"></a><span class="lineno"> 3265</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l03266"></a><span class="lineno"> 3266</span>&#160; DISALLOW_COPY_AND_ASSIGN(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>);</div><div class="line"><a name="l03267"></a><span class="lineno"> 3267</span>&#160;};</div><div class="line"><a name="l03268"></a><span class="lineno"> 3268</span>&#160;</div><div class="line"><a name="l03269"></a><span class="lineno"> 3269</span>&#160;<span class="comment">// A Demon is the base element of a propagation queue. It is the main</span></div><div class="line"><a name="l03270"></a><span class="lineno"> 3270</span>&#160;<span class="comment">// object responsible for implementing the actual propagation</span></div><div class="line"><a name="l03271"></a><span class="lineno"> 3271</span>&#160;<span class="comment">// of the constraint and pruning the inconsistent values in the domains</span></div><div class="line"><a name="l03272"></a><span class="lineno"> 3272</span>&#160;<span class="comment">// of the variables. The main concept is that demons are listeners that are</span></div><div class="line"><a name="l03273"></a><span class="lineno"> 3273</span>&#160;<span class="comment">// attached to the variables and listen to their modifications.</span></div><div class="line"><a name="l03274"></a><span class="lineno"> 3274</span>&#160;<span class="comment">// There are two methods:</span></div><div class="line"><a name="l03275"></a><span class="lineno"> 3275</span>&#160;<span class="comment">// - Run() is the actual method called when the demon is processed.</span></div><div class="line"><a name="l03276"></a><span class="lineno"> 3276</span>&#160;<span class="comment">// - priority() returns its priority. Standard priorities are slow, normal</span></div><div class="line"><a name="l03277"></a><span class="lineno"> 3277</span>&#160;<span class="comment">// or fast. &quot;immediate&quot; is reserved for variables and is treated separately.</span></div><div class="line"><a name="l03278"></a><span class="lineno"> 3278</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1Demon.html">Demon</a> : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1BaseObject.html">BaseObject</a> {</div><div class="line"><a name="l03279"></a><span class="lineno"> 3279</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l03280"></a><span class="lineno"> 3280</span>&#160; <span class="comment">// This indicates the priority of a demon. Immediate demons are treated</span></div><div class="line"><a name="l03281"></a><span class="lineno"> 3281</span>&#160; <span class="comment">// separately and corresponds to variables.</span></div><div class="line"><a name="l03282"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Demon.html"> 3282</a></span>&#160; <a class="code" href="classoperations__research_1_1Demon.html#ab1cf435bf9f422682783c255027e0570">Demon</a>() : stamp_(GG_ULONGLONG(0)) {}</div><div class="line"><a name="l03283"></a><span class="lineno"> 3283</span>&#160; <a class="code" href="classoperations__research_1_1Demon.html#a6e4c51a92b24c256d889227667175e52">~Demon</a>()<span class="keyword"> override </span>{}</div><div class="line"><a name="l03284"></a><span class="lineno"> 3284</span>&#160;</div><div class="line"><a name="l03285"></a><span class="lineno"> 3285</span>&#160; <span class="comment">// This is the main callback of the demon.</span></div><div class="line"><a name="l03286"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Demon.html#ab1cf435bf9f422682783c255027e0570"> 3286</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Demon.html#a7d3876bb3b369f0ae115e08ce9a6dc72">Run</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> s) = 0;</div><div class="line"><a name="l03287"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Demon.html#a6e4c51a92b24c256d889227667175e52"> 3287</a></span>&#160;</div><div class="line"><a name="l03288"></a><span class="lineno"> 3288</span>&#160; <span class="comment">// This method returns the priority of the demon. Usually a demon is</span></div><div class="line"><a name="l03289"></a><span class="lineno"> 3289</span>&#160; <span class="comment">// fast, slow or normal. Immediate demons are reserved for internal</span></div><div class="line"><a name="l03290"></a><span class="lineno"> 3290</span>&#160; <span class="comment">// use to maintain variables.</span></div><div class="line"><a name="l03291"></a><span class="lineno"> 3291</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classoperations__research_1_1Solver.html#a4b0972c731faf884eba5acab99ebb2b4">Solver::DemonPriority</a> <a class="code" href="classoperations__research_1_1Demon.html#a7ec8db0f9eacea36b80bfacfb1b5af8b">priority</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l03292"></a><span class="lineno"> 3292</span>&#160;</div><div class="line"><a name="l03293"></a><span class="lineno"> 3293</span>&#160; std::string <a class="code" href="classoperations__research_1_1Demon.html#a906a1bd16d33b9b841e68b2a06bbbfd2">DebugString</a>() <span class="keyword">const override</span>;</div><div class="line"><a name="l03294"></a><span class="lineno"> 3294</span>&#160;</div><div class="line"><a name="l03295"></a><span class="lineno"> 3295</span>&#160; <span class="comment">// This method inhibits the demon in the search tree below the</span></div><div class="line"><a name="l03296"></a><span class="lineno"> 3296</span>&#160; <span class="comment">// current position.</span></div><div class="line"><a name="l03297"></a><span class="lineno"> 3297</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Demon.html#a4e51b1b49f9a937b335cd9381f95614d">inhibit</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> s);</div><div class="line"><a name="l03298"></a><span class="lineno"> 3298</span>&#160;</div><div class="line"><a name="l03299"></a><span class="lineno"> 3299</span>&#160; <span class="comment">// This method un-inhibits the demon that was previously inhibited.</span></div><div class="line"><a name="l03300"></a><span class="lineno"> 3300</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Demon.html#ae63a7d849eb2b518ac708c736c670f9c">desinhibit</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> s);</div><div class="line"><a name="l03301"></a><span class="lineno"> 3301</span>&#160;</div><div class="line"><a name="l03302"></a><span class="lineno"> 3302</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l03303"></a><span class="lineno"> 3303</span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classoperations__research_1_1Demon.html#a47dfc6f2bc0d50a6e7c92eb00d97b064">Queue</a>;</div><div class="line"><a name="l03304"></a><span class="lineno"> 3304</span>&#160; <span class="keywordtype">void</span> set_stamp(int64 stamp) { stamp_ = stamp; }</div><div class="line"><a name="l03305"></a><span class="lineno"> 3305</span>&#160; uint64 stamp()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> stamp_; }</div><div class="line"><a name="l03306"></a><span class="lineno"> 3306</span>&#160; uint64 stamp_;</div><div class="line"><a name="l03307"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Demon.html#a47dfc6f2bc0d50a6e7c92eb00d97b064"> 3307</a></span>&#160; DISALLOW_COPY_AND_ASSIGN(<a class="code" href="classoperations__research_1_1Demon.html">Demon</a>);</div><div class="line"><a name="l03308"></a><span class="lineno"> 3308</span>&#160;};</div><div class="line"><a name="l03309"></a><span class="lineno"> 3309</span>&#160;</div><div class="line"><a name="l03310"></a><span class="lineno"> 3310</span>&#160;<span class="comment">// Model visitor.</span></div><div class="line"><a name="l03311"></a><span class="lineno"> 3311</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1ModelVisitor.html">ModelVisitor</a> : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1BaseObject.html">BaseObject</a> {</div><div class="line"><a name="l03312"></a><span class="lineno"> 3312</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l03313"></a><span class="lineno"> 3313</span>&#160; <span class="comment">// Constraint and Expression types.</span></div><div class="line"><a name="l03314"></a><span class="lineno"> 3314</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a124e348117110332cb3e5d460f455e4a">kAbs</a>[];</div><div class="line"><a name="l03315"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html"> 3315</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a253eae82dd0e365d9c49f7e31d0f5f7a">kAbsEqual</a>[];</div><div class="line"><a name="l03316"></a><span class="lineno"> 3316</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#ac050b2f234e7b4deaa197572c1b4cc69">kAllDifferent</a>[];</div><div class="line"><a name="l03317"></a><span class="lineno"> 3317</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#af3f5c65aeb337203e6b0bf80ce2dd09c">kAllowedAssignments</a>[];</div><div class="line"><a name="l03318"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a124e348117110332cb3e5d460f455e4a"> 3318</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a18f81802469559a0e7625b4061b1035b">kAtMost</a>[];</div><div class="line"><a name="l03319"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a253eae82dd0e365d9c49f7e31d0f5f7a"> 3319</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a5dfe92f44918889831f51375e91ffa01">kIndexOf</a>[];</div><div class="line"><a name="l03320"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#ac050b2f234e7b4deaa197572c1b4cc69"> 3320</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a19bcba10f75045499952148742a3cf6f">kBetween</a>[];</div><div class="line"><a name="l03321"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#af3f5c65aeb337203e6b0bf80ce2dd09c"> 3321</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a7353be5c838dbb88fda3b98d378269c3">kConditionalExpr</a>[];</div><div class="line"><a name="l03322"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a18f81802469559a0e7625b4061b1035b"> 3322</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a5e627ed6e6400a344f3191a717b3efe0">kCircuit</a>[];</div><div class="line"><a name="l03323"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a5dfe92f44918889831f51375e91ffa01"> 3323</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#afacadb82186afef92a407c4e39ca0d64">kConvexPiecewise</a>[];</div><div class="line"><a name="l03324"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a19bcba10f75045499952148742a3cf6f"> 3324</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a09fdd4ae9e13607b278e9d472b673c1e">kCountEqual</a>[];</div><div class="line"><a name="l03325"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a7353be5c838dbb88fda3b98d378269c3"> 3325</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a096d24d789eb823876f2288bf15f282e">kCover</a>[];</div><div class="line"><a name="l03326"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a5e627ed6e6400a344f3191a717b3efe0"> 3326</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a68cd7b641db22e66b78e7ff0c059e951">kCumulative</a>[];</div><div class="line"><a name="l03327"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#afacadb82186afef92a407c4e39ca0d64"> 3327</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a956f49ec11b9f98f42ecbfb2c2af1224">kDeviation</a>[];</div><div class="line"><a name="l03328"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a09fdd4ae9e13607b278e9d472b673c1e"> 3328</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a2e3fd9d97bd872ae2dd5f1f9f7e45014">kDifference</a>[];</div><div class="line"><a name="l03329"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a096d24d789eb823876f2288bf15f282e"> 3329</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#ad8e6fc060fea392c9ae52b3102b19bb5">kDisjunctive</a>[];</div><div class="line"><a name="l03330"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a68cd7b641db22e66b78e7ff0c059e951"> 3330</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#ae6c54c4443407469494ea7b5eaa7ebfc">kDistribute</a>[];</div><div class="line"><a name="l03331"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a956f49ec11b9f98f42ecbfb2c2af1224"> 3331</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a68d0ff1edb8a26a4e9ecb7794313298c">kDivide</a>[];</div><div class="line"><a name="l03332"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a2e3fd9d97bd872ae2dd5f1f9f7e45014"> 3332</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a1519f3e29373c86a62a2e946cd699c49">kDurationExpr</a>[];</div><div class="line"><a name="l03333"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#ad8e6fc060fea392c9ae52b3102b19bb5"> 3333</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a1905d71fcbbce31fb70a5457049f1e5c">kElement</a>[];</div><div class="line"><a name="l03334"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#ae6c54c4443407469494ea7b5eaa7ebfc"> 3334</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a23c2fd1ac75c76dff862c8e91572df76">kElementEqual</a>[];</div><div class="line"><a name="l03335"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a68d0ff1edb8a26a4e9ecb7794313298c"> 3335</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a0abcf853d7688095b9280f0797bbb3d7">kEndExpr</a>[];</div><div class="line"><a name="l03336"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a1519f3e29373c86a62a2e946cd699c49"> 3336</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#aa26e4339dae784c7f42929a0a7221b9e">kEquality</a>[];</div><div class="line"><a name="l03337"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a1905d71fcbbce31fb70a5457049f1e5c"> 3337</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#adb508b94e5443a1b074937377dec783e">kFalseConstraint</a>[];</div><div class="line"><a name="l03338"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a23c2fd1ac75c76dff862c8e91572df76"> 3338</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#adbf679024d2686e8f5c750d13b8b58ad">kGlobalCardinality</a>[];</div><div class="line"><a name="l03339"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a0abcf853d7688095b9280f0797bbb3d7"> 3339</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#ad714215e3927f1e0f74381f51af18968">kGreater</a>[];</div><div class="line"><a name="l03340"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#aa26e4339dae784c7f42929a0a7221b9e"> 3340</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a4743a337c35039947c1058086fddf5fd">kGreaterOrEqual</a>[];</div><div class="line"><a name="l03341"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#adb508b94e5443a1b074937377dec783e"> 3341</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a2455aa3a43fa34beadef296168d5c20e">kIntegerVariable</a>[];</div><div class="line"><a name="l03342"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#adbf679024d2686e8f5c750d13b8b58ad"> 3342</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a740a8d0fd961f1d6999e8fff910b1cbb">kIntervalBinaryRelation</a>[];</div><div class="line"><a name="l03343"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#ad714215e3927f1e0f74381f51af18968"> 3343</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a7cc767e828c3681fc2ff98ba83c6919c">kIntervalDisjunction</a>[];</div><div class="line"><a name="l03344"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a4743a337c35039947c1058086fddf5fd"> 3344</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a1d424057a9bb254b68f4462b5ca2affe">kIntervalUnaryRelation</a>[];</div><div class="line"><a name="l03345"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a2455aa3a43fa34beadef296168d5c20e"> 3345</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a42aa572d3afd9564a4b642872b672bcf">kIntervalVariable</a>[];</div><div class="line"><a name="l03346"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a740a8d0fd961f1d6999e8fff910b1cbb"> 3346</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a4e3a54c23e49210c0bd3e0f4d99d19c6">kInversePermutation</a>[];</div><div class="line"><a name="l03347"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a7cc767e828c3681fc2ff98ba83c6919c"> 3347</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#abc81aee53f65168867b3fcff003fd584">kIsBetween</a>[];</div><div class="line"><a name="l03348"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a1d424057a9bb254b68f4462b5ca2affe"> 3348</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a5e302cc44d8ba521da50c0a320a83608">kIsDifferent</a>[];</div><div class="line"><a name="l03349"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a42aa572d3afd9564a4b642872b672bcf"> 3349</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a80075457db431f10ac45ec9d700fa763">kIsEqual</a>[];</div><div class="line"><a name="l03350"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a4e3a54c23e49210c0bd3e0f4d99d19c6"> 3350</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a2b490050360819abe7bb697033db6561">kIsGreater</a>[];</div><div class="line"><a name="l03351"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#abc81aee53f65168867b3fcff003fd584"> 3351</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#accdea325f60eb495ff2ea282aa45376c">kIsGreaterOrEqual</a>[];</div><div class="line"><a name="l03352"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a5e302cc44d8ba521da50c0a320a83608"> 3352</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a2a7061ff47d238c40664f5501b3878b8">kIsLess</a>[];</div><div class="line"><a name="l03353"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a80075457db431f10ac45ec9d700fa763"> 3353</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a8a16cc4af57936ccb4aff6c3a29adcfc">kIsLessOrEqual</a>[];</div><div class="line"><a name="l03354"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a2b490050360819abe7bb697033db6561"> 3354</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a8abd1a6ee2a78ee78c5ee55faaa3d4c6">kIsMember</a>[];</div><div class="line"><a name="l03355"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#accdea325f60eb495ff2ea282aa45376c"> 3355</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#aaa8c4a089360326fa1ca2a31351f52ce">kLess</a>[];</div><div class="line"><a name="l03356"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a2a7061ff47d238c40664f5501b3878b8"> 3356</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a598796842a46e4c0e2a6d6f55ad7f999">kLessOrEqual</a>[];</div><div class="line"><a name="l03357"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a8a16cc4af57936ccb4aff6c3a29adcfc"> 3357</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a1137b3c7b1a1322229ffb6fd6b1ea24c">kLexLess</a>[];</div><div class="line"><a name="l03358"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a8abd1a6ee2a78ee78c5ee55faaa3d4c6"> 3358</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a26698013ea5b05f99adfa8940c3e9652">kLinkExprVar</a>[];</div><div class="line"><a name="l03359"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#aaa8c4a089360326fa1ca2a31351f52ce"> 3359</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#afeade782088a114d35356067be755a3d">kMapDomain</a>[];</div><div class="line"><a name="l03360"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a598796842a46e4c0e2a6d6f55ad7f999"> 3360</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a4f8fbcca399411ad28b7d2130072ee77">kMax</a>[];</div><div class="line"><a name="l03361"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a1137b3c7b1a1322229ffb6fd6b1ea24c"> 3361</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a9812ac2275793bcdd987daae9e0551ad">kMaxEqual</a>[];</div><div class="line"><a name="l03362"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a26698013ea5b05f99adfa8940c3e9652"> 3362</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a8ac9667afec105d8f4ca359160d7245c">kMember</a>[];</div><div class="line"><a name="l03363"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#afeade782088a114d35356067be755a3d"> 3363</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a51c8f21edb373fbfd068b80a6786dd27">kMin</a>[];</div><div class="line"><a name="l03364"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a4f8fbcca399411ad28b7d2130072ee77"> 3364</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a4808668be13f3c213c5494417b5a1b3f">kMinEqual</a>[];</div><div class="line"><a name="l03365"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a9812ac2275793bcdd987daae9e0551ad"> 3365</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a915de6b5bab0757bd033699387a486e2">kModulo</a>[];</div><div class="line"><a name="l03366"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a8ac9667afec105d8f4ca359160d7245c"> 3366</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a528ef45e21c77f33dc2670278f7a4615">kNoCycle</a>[];</div><div class="line"><a name="l03367"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a51c8f21edb373fbfd068b80a6786dd27"> 3367</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a1db3e601f221c9db91c5b47dc9028fd5">kNonEqual</a>[];</div><div class="line"><a name="l03368"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a4808668be13f3c213c5494417b5a1b3f"> 3368</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#afbe02152a0dfa9e9b5bdc60024486bec">kNotBetween</a>[];</div><div class="line"><a name="l03369"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a915de6b5bab0757bd033699387a486e2"> 3369</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a5cedf602d46e984da78cb8862d9e9737">kNotMember</a>[];</div><div class="line"><a name="l03370"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a528ef45e21c77f33dc2670278f7a4615"> 3370</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a9d0e42e2529aa2689695532c52b3c588">kNullIntersect</a>[];</div><div class="line"><a name="l03371"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a1db3e601f221c9db91c5b47dc9028fd5"> 3371</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a7b5480d7ce4e02a3d924c1c07544eb7d">kOpposite</a>[];</div><div class="line"><a name="l03372"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#afbe02152a0dfa9e9b5bdc60024486bec"> 3372</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#adf81a3dd11195fbf357fe5c9f0f9dc2c">kPack</a>[];</div><div class="line"><a name="l03373"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a5cedf602d46e984da78cb8862d9e9737"> 3373</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a1724ad5bbac74b4c99cfc18968debcba">kPathCumul</a>[];</div><div class="line"><a name="l03374"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a9d0e42e2529aa2689695532c52b3c588"> 3374</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#aa820a5c3a3f05b8a3873b752429e559a">kDelayedPathCumul</a>[];</div><div class="line"><a name="l03375"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a7b5480d7ce4e02a3d924c1c07544eb7d"> 3375</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#ae7ca6eb46e7d8d939a22aec0ee528234">kPerformedExpr</a>[];</div><div class="line"><a name="l03376"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#adf81a3dd11195fbf357fe5c9f0f9dc2c"> 3376</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a7af7d40f7324b60dae150e11aaef3b6b">kPower</a>[];</div><div class="line"><a name="l03377"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a1724ad5bbac74b4c99cfc18968debcba"> 3377</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a6008fca0fdf3f753369e587d933fab59">kProduct</a>[];</div><div class="line"><a name="l03378"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#aa820a5c3a3f05b8a3873b752429e559a"> 3378</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#aad1539aca7b4ada550fd75077f060b8d">kScalProd</a>[];</div><div class="line"><a name="l03379"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#ae7ca6eb46e7d8d939a22aec0ee528234"> 3379</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a81bf76a202ed41b7bdcb695fde2d5536">kScalProdEqual</a>[];</div><div class="line"><a name="l03380"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a7af7d40f7324b60dae150e11aaef3b6b"> 3380</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a231e2a22e5b9902b3d659f5cc406eb13">kScalProdGreaterOrEqual</a>[];</div><div class="line"><a name="l03381"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a6008fca0fdf3f753369e587d933fab59"> 3381</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#ab9a4c7d3a86c8bf0d11448239aeb09ca">kScalProdLessOrEqual</a>[];</div><div class="line"><a name="l03382"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#aad1539aca7b4ada550fd75077f060b8d"> 3382</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#abf9e5fc7b45242477e71e8e69e13129a">kSemiContinuous</a>[];</div><div class="line"><a name="l03383"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a81bf76a202ed41b7bdcb695fde2d5536"> 3383</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#ad177c9835c56cfb2472c1834ce468c12">kSequenceVariable</a>[];</div><div class="line"><a name="l03384"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a231e2a22e5b9902b3d659f5cc406eb13"> 3384</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#aab3f00f122b9cf7651d696d78fe36543">kSortingConstraint</a>[];</div><div class="line"><a name="l03385"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#ab9a4c7d3a86c8bf0d11448239aeb09ca"> 3385</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a7d3901dd55a861cbe149a179469cbb46">kSquare</a>[];</div><div class="line"><a name="l03386"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#abf9e5fc7b45242477e71e8e69e13129a"> 3386</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a56a60af43da7618e524355e6b7dcfa18">kStartExpr</a>[];</div><div class="line"><a name="l03387"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#ad177c9835c56cfb2472c1834ce468c12"> 3387</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a6ea132b8530a5b9146a4b0ff6b478163">kSum</a>[];</div><div class="line"><a name="l03388"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#aab3f00f122b9cf7651d696d78fe36543"> 3388</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#ab5cacd4ab0f8a7b5bbedc3eb757281fd">kSumEqual</a>[];</div><div class="line"><a name="l03389"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a7d3901dd55a861cbe149a179469cbb46"> 3389</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#af68303d9fbd37f5bca241917e84d1b85">kSumGreaterOrEqual</a>[];</div><div class="line"><a name="l03390"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a56a60af43da7618e524355e6b7dcfa18"> 3390</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a48fe0b1746eada44912edfc24cb343ff">kSumLessOrEqual</a>[];</div><div class="line"><a name="l03391"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a6ea132b8530a5b9146a4b0ff6b478163"> 3391</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#ad13e04b607579ab1edded8f7bc558da4">kTrace</a>[];</div><div class="line"><a name="l03392"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#ab5cacd4ab0f8a7b5bbedc3eb757281fd"> 3392</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a3cd17736ebef01ece7f1c8acc970819b">kTransition</a>[];</div><div class="line"><a name="l03393"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#af68303d9fbd37f5bca241917e84d1b85"> 3393</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a8cb920443f8846ec2aa7599e61864530">kTrueConstraint</a>[];</div><div class="line"><a name="l03394"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a48fe0b1746eada44912edfc24cb343ff"> 3394</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a56f29d4d46c50ac1dc77475c5718175b">kVarBoundWatcher</a>[];</div><div class="line"><a name="l03395"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#ad13e04b607579ab1edded8f7bc558da4"> 3395</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a1066ef518e2ca9b1c2608a86c7ea32eb">kVarValueWatcher</a>[];</div><div class="line"><a name="l03396"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a3cd17736ebef01ece7f1c8acc970819b"> 3396</a></span>&#160;</div><div class="line"><a name="l03397"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a8cb920443f8846ec2aa7599e61864530"> 3397</a></span>&#160; <span class="comment">// Extension names:</span></div><div class="line"><a name="l03398"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a56f29d4d46c50ac1dc77475c5718175b"> 3398</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#af1eda61c28ecb4c870c47793d708e812">kCountAssignedItemsExtension</a>[];</div><div class="line"><a name="l03399"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a1066ef518e2ca9b1c2608a86c7ea32eb"> 3399</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a5230c251f02f05d4f641e7f159512ae7">kCountUsedBinsExtension</a>[];</div><div class="line"><a name="l03400"></a><span class="lineno"> 3400</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a2ea28ee541988d173f0cb43eb8eed02a">kInt64ToBoolExtension</a>[];</div><div class="line"><a name="l03401"></a><span class="lineno"> 3401</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a6f83fe983be47faffe412c1d3ba85877">kInt64ToInt64Extension</a>[];</div><div class="line"><a name="l03402"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#af1eda61c28ecb4c870c47793d708e812"> 3402</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a7f5ddcad7db239c13bab38ca5f3614bc">kObjectiveExtension</a>[];</div><div class="line"><a name="l03403"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a5230c251f02f05d4f641e7f159512ae7"> 3403</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a4e8bb409ff7303de27d92e7452ff4745">kSearchLimitExtension</a>[];</div><div class="line"><a name="l03404"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a2ea28ee541988d173f0cb43eb8eed02a"> 3404</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a866bf5f6b036757bcdd337ddf5c993d0">kUsageEqualVariableExtension</a>[];</div><div class="line"><a name="l03405"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a6f83fe983be47faffe412c1d3ba85877"> 3405</a></span>&#160;</div><div class="line"><a name="l03406"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a7f5ddcad7db239c13bab38ca5f3614bc"> 3406</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#adc38e544150243bf19864bfe3119d521">kUsageLessConstantExtension</a>[];</div><div class="line"><a name="l03407"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a4e8bb409ff7303de27d92e7452ff4745"> 3407</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a75c6576ece0c576b350705166f6268ae">kVariableGroupExtension</a>[];</div><div class="line"><a name="l03408"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a866bf5f6b036757bcdd337ddf5c993d0"> 3408</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#af1f609953aff475abe227d57735209ce">kVariableUsageLessConstantExtension</a>[];</div><div class="line"><a name="l03409"></a><span class="lineno"> 3409</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a65d5353da6e7922032fa3dbd6e4d7ba8">kWeightedSumOfAssignedEqualVariableExtension</a>[];</div><div class="line"><a name="l03410"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#adc38e544150243bf19864bfe3119d521"> 3410</a></span>&#160;</div><div class="line"><a name="l03411"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a75c6576ece0c576b350705166f6268ae"> 3411</a></span>&#160; <span class="comment">// argument names:</span></div><div class="line"><a name="l03412"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#af1f609953aff475abe227d57735209ce"> 3412</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a3370251672e86a31b98bc2b4f5e483e4">kActiveArgument</a>[];</div><div class="line"><a name="l03413"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a65d5353da6e7922032fa3dbd6e4d7ba8"> 3413</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a584222a6b5e247a6982b99c2b4986536">kAssumePathsArgument</a>[];</div><div class="line"><a name="l03414"></a><span class="lineno"> 3414</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a1906ebb0da0bb2cb8d134e280ae5d1aa">kBranchesLimitArgument</a>[];</div><div class="line"><a name="l03415"></a><span class="lineno"> 3415</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#ac2f6eb8ce25d5e485ef02c13490a0465">kCapacityArgument</a>[];</div><div class="line"><a name="l03416"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a3370251672e86a31b98bc2b4f5e483e4"> 3416</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a9bdd4a47b226bebc9f27469b567e0026">kCardsArgument</a>[];</div><div class="line"><a name="l03417"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a584222a6b5e247a6982b99c2b4986536"> 3417</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#ad7801044121f6bd969c646fa17721eef">kCoefficientsArgument</a>[];</div><div class="line"><a name="l03418"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a1906ebb0da0bb2cb8d134e280ae5d1aa"> 3418</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a74b062753c96d5652f1f0fe4faa2d3a9">kCountArgument</a>[];</div><div class="line"><a name="l03419"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#ac2f6eb8ce25d5e485ef02c13490a0465"> 3419</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a16d65c01260397f78e7df69dc3c2b867">kCumulativeArgument</a>[];</div><div class="line"><a name="l03420"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a9bdd4a47b226bebc9f27469b567e0026"> 3420</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a16f77fba967e59bc3327b4dc2a4460f4">kCumulsArgument</a>[];</div><div class="line"><a name="l03421"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#ad7801044121f6bd969c646fa17721eef"> 3421</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a36d90b47d30362df401823c21106132a">kDemandsArgument</a>[];</div><div class="line"><a name="l03422"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a74b062753c96d5652f1f0fe4faa2d3a9"> 3422</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a205a1ceec0a84172f184a0e5c09439ee">kDurationMaxArgument</a>[];</div><div class="line"><a name="l03423"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a16d65c01260397f78e7df69dc3c2b867"> 3423</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a707803108150b1bd31cb496ac5ce42f2">kDurationMinArgument</a>[];</div><div class="line"><a name="l03424"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a16f77fba967e59bc3327b4dc2a4460f4"> 3424</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a8384251179632a80fdb736377043e829">kEarlyCostArgument</a>[];</div><div class="line"><a name="l03425"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a36d90b47d30362df401823c21106132a"> 3425</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#aad1113636f0ceefbf79a1c1ed0962266">kEarlyDateArgument</a>[];</div><div class="line"><a name="l03426"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a205a1ceec0a84172f184a0e5c09439ee"> 3426</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a7d079adf02e0acbbe26691e8c2e2d26f">kEndMaxArgument</a>[];</div><div class="line"><a name="l03427"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a707803108150b1bd31cb496ac5ce42f2"> 3427</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a9da8bd50488b7bfaf29dafeac488c24e">kEndMinArgument</a>[];</div><div class="line"><a name="l03428"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a8384251179632a80fdb736377043e829"> 3428</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#abe82078ee45c0cb3976f9a648e7e8389">kEndsArgument</a>[];</div><div class="line"><a name="l03429"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#aad1113636f0ceefbf79a1c1ed0962266"> 3429</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a7e316e2c0042d52af11be86b82287718">kExpressionArgument</a>[];</div><div class="line"><a name="l03430"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a7d079adf02e0acbbe26691e8c2e2d26f"> 3430</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a08c349b1aa12d68304581cfea2ad1fae">kFailuresLimitArgument</a>[];</div><div class="line"><a name="l03431"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a9da8bd50488b7bfaf29dafeac488c24e"> 3431</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a62948d17defdef3995eedcf87cefe92b">kFinalStatesArgument</a>[];</div><div class="line"><a name="l03432"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#abe82078ee45c0cb3976f9a648e7e8389"> 3432</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a59d3fe79f6b850edef2a003af69c8c1c">kFixedChargeArgument</a>[];</div><div class="line"><a name="l03433"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a7e316e2c0042d52af11be86b82287718"> 3433</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#af05577d9a8dceaf2f97e3012ce426225">kIndex2Argument</a>[];</div><div class="line"><a name="l03434"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a08c349b1aa12d68304581cfea2ad1fae"> 3434</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a5d5ce8cfe4c9243c9b78d8492668b800">kIndexArgument</a>[];</div><div class="line"><a name="l03435"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a62948d17defdef3995eedcf87cefe92b"> 3435</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a2878986c75516e14680711d3c1e873af">kInitialState</a>[];</div><div class="line"><a name="l03436"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a59d3fe79f6b850edef2a003af69c8c1c"> 3436</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a2ab1cbff58c24dc5017097b6a0a838e7">kIntervalArgument</a>[];</div><div class="line"><a name="l03437"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#af05577d9a8dceaf2f97e3012ce426225"> 3437</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#aed73378373382879db4cc4f42db38784">kIntervalsArgument</a>[];</div><div class="line"><a name="l03438"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a5d5ce8cfe4c9243c9b78d8492668b800"> 3438</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#abb90fd1d87eea297afe95bca09e9235e">kLateCostArgument</a>[];</div><div class="line"><a name="l03439"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a2878986c75516e14680711d3c1e873af"> 3439</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a0f276220863e52aa5b4310e09bca80f0">kLateDateArgument</a>[];</div><div class="line"><a name="l03440"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a2ab1cbff58c24dc5017097b6a0a838e7"> 3440</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a8bef2058a71de8dc9d979cdfee244613">kLeftArgument</a>[];</div><div class="line"><a name="l03441"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#aed73378373382879db4cc4f42db38784"> 3441</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#ad0c35762f9cd7d79b51e6d9ca568f6ec">kMaxArgument</a>[];</div><div class="line"><a name="l03442"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#abb90fd1d87eea297afe95bca09e9235e"> 3442</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#acb394e7169662d9ca957a0affde6220b">kMaximizeArgument</a>[];</div><div class="line"><a name="l03443"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a0f276220863e52aa5b4310e09bca80f0"> 3443</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a36ed7ed8253a439625cec250d3adc514">kMinArgument</a>[];</div><div class="line"><a name="l03444"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a8bef2058a71de8dc9d979cdfee244613"> 3444</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#aaa86204c8336f1b6dc14ae954a361b81">kModuloArgument</a>[];</div><div class="line"><a name="l03445"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#ad0c35762f9cd7d79b51e6d9ca568f6ec"> 3445</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a76e55486b1fb81a4860bd6a2321648d7">kNextsArgument</a>[];</div><div class="line"><a name="l03446"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#acb394e7169662d9ca957a0affde6220b"> 3446</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#ab1f538f44b7fff25ae4761c06301cc9a">kOptionalArgument</a>[];</div><div class="line"><a name="l03447"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a36ed7ed8253a439625cec250d3adc514"> 3447</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a26ba71cb46871a942d7da294eb72df85">kPartialArgument</a>[];</div><div class="line"><a name="l03448"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#aaa86204c8336f1b6dc14ae954a361b81"> 3448</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a698bcc5222b25fdb9b3351b14fa2c94b">kPositionXArgument</a>[];</div><div class="line"><a name="l03449"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a76e55486b1fb81a4860bd6a2321648d7"> 3449</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a6781e6ac22e67a344416110b35252493">kPositionYArgument</a>[];</div><div class="line"><a name="l03450"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#ab1f538f44b7fff25ae4761c06301cc9a"> 3450</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a290a9b9301de6b92f2e0a1f189cf1cd7">kRangeArgument</a>[];</div><div class="line"><a name="l03451"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a26ba71cb46871a942d7da294eb72df85"> 3451</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#af255bb789297ed05a80419f46621fcf7">kRelationArgument</a>[];</div><div class="line"><a name="l03452"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a698bcc5222b25fdb9b3351b14fa2c94b"> 3452</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a1c080372fc528d4951e2411c76696d3f">kRightArgument</a>[];</div><div class="line"><a name="l03453"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a6781e6ac22e67a344416110b35252493"> 3453</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#ac9845229df3d0b0afc7d58f5a37432e8">kSequenceArgument</a>[];</div><div class="line"><a name="l03454"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a290a9b9301de6b92f2e0a1f189cf1cd7"> 3454</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a58a13c5ddb389b3d3ad063013ce18191">kSequencesArgument</a>[];</div><div class="line"><a name="l03455"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#af255bb789297ed05a80419f46621fcf7"> 3455</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a60d008087cac0b0ed36381ffbe5bdbeb">kSizeArgument</a>[];</div><div class="line"><a name="l03456"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a1c080372fc528d4951e2411c76696d3f"> 3456</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#ae649b9555f2b5c6fdad39d5b3adbf1a7">kSizeXArgument</a>[];</div><div class="line"><a name="l03457"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#ac9845229df3d0b0afc7d58f5a37432e8"> 3457</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#ac91fa31e47cb779cb431dea57017983f">kSizeYArgument</a>[];</div><div class="line"><a name="l03458"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a58a13c5ddb389b3d3ad063013ce18191"> 3458</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#ae4f29693e71a4fbed4ad28b041b5c18a">kSmartTimeCheckArgument</a>[];</div><div class="line"><a name="l03459"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a60d008087cac0b0ed36381ffbe5bdbeb"> 3459</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#aae7b2191ec7433b273e1f825213d71a6">kSolutionLimitArgument</a>[];</div><div class="line"><a name="l03460"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#ae649b9555f2b5c6fdad39d5b3adbf1a7"> 3460</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a079c0703e63776a4ad3e53864b486222">kStartMaxArgument</a>[];</div><div class="line"><a name="l03461"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#ac91fa31e47cb779cb431dea57017983f"> 3461</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a7563a86f8f366a85c8f48431c9f982ee">kStartMinArgument</a>[];</div><div class="line"><a name="l03462"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#ae4f29693e71a4fbed4ad28b041b5c18a"> 3462</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#ab793c03904c4ab40135010471187577e">kStartsArgument</a>[];</div><div class="line"><a name="l03463"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#aae7b2191ec7433b273e1f825213d71a6"> 3463</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a9b0ec9bf06a8b303a2402cd55242236d">kStepArgument</a>[];</div><div class="line"><a name="l03464"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a079c0703e63776a4ad3e53864b486222"> 3464</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a1606c56bdbb336ea2fe5b65ba4162d07">kTargetArgument</a>[];</div><div class="line"><a name="l03465"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a7563a86f8f366a85c8f48431c9f982ee"> 3465</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a916b0c8011c6d73e0da63c0de5811735">kTimeLimitArgument</a>[];</div><div class="line"><a name="l03466"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#ab793c03904c4ab40135010471187577e"> 3466</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#ad5d3ccac1c12901e24a9861010c139a9">kTransitsArgument</a>[];</div><div class="line"><a name="l03467"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a9b0ec9bf06a8b303a2402cd55242236d"> 3467</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a77c667f3158b3cb5eb2a06ff4292e00d">kTuplesArgument</a>[];</div><div class="line"><a name="l03468"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a1606c56bdbb336ea2fe5b65ba4162d07"> 3468</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#af9bcfa03b17bfc77afa707f3775ed1fc">kValueArgument</a>[];</div><div class="line"><a name="l03469"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a916b0c8011c6d73e0da63c0de5811735"> 3469</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#ae3e8e37ef2baa38aa0759ce4c8c34924">kValuesArgument</a>[];</div><div class="line"><a name="l03470"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#ad5d3ccac1c12901e24a9861010c139a9"> 3470</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#af63d71fcac04c98d5e774bf36968b8c7">kVariableArgument</a>[];</div><div class="line"><a name="l03471"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a77c667f3158b3cb5eb2a06ff4292e00d"> 3471</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a85f7ae79e747c46b1bb248990403ffd2">kVarsArgument</a>[];</div><div class="line"><a name="l03472"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#af9bcfa03b17bfc77afa707f3775ed1fc"> 3472</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#ac5753868fd49c8d832df129de33814f7">kEvaluatorArgument</a>[];</div><div class="line"><a name="l03473"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#ae3e8e37ef2baa38aa0759ce4c8c34924"> 3473</a></span>&#160;</div><div class="line"><a name="l03474"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#af63d71fcac04c98d5e774bf36968b8c7"> 3474</a></span>&#160; <span class="comment">// Operations.</span></div><div class="line"><a name="l03475"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a85f7ae79e747c46b1bb248990403ffd2"> 3475</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#af598e870cb075900bb601fdbbdca4825">kMirrorOperation</a>[];</div><div class="line"><a name="l03476"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#ac5753868fd49c8d832df129de33814f7"> 3476</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a92a4c3f41d240eae8b123abb2b0360b2">kRelaxedMaxOperation</a>[];</div><div class="line"><a name="l03477"></a><span class="lineno"> 3477</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a8f3e3b37dc7487ff51107da6c9d36776">kRelaxedMinOperation</a>[];</div><div class="line"><a name="l03478"></a><span class="lineno"> 3478</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a326a1e8421f974dc3f48401639313298">kSumOperation</a>[];</div><div class="line"><a name="l03479"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#af598e870cb075900bb601fdbbdca4825"> 3479</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#aee6505d2effca79a716ca26c203f97ae">kDifferenceOperation</a>[];</div><div class="line"><a name="l03480"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a92a4c3f41d240eae8b123abb2b0360b2"> 3480</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a444350f74c54195a017c663fe2b2ca44">kProductOperation</a>[];</div><div class="line"><a name="l03481"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a8f3e3b37dc7487ff51107da6c9d36776"> 3481</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a07ac46ef4c52623df078eb57daf07070">kStartSyncOnStartOperation</a>[];</div><div class="line"><a name="l03482"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a326a1e8421f974dc3f48401639313298"> 3482</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#ad2532beeeeaf7018cab5f3946e604af3">kStartSyncOnEndOperation</a>[];</div><div class="line"><a name="l03483"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#aee6505d2effca79a716ca26c203f97ae"> 3483</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a962d1e2e70b0085fe22e4dc424b27c97">kTraceOperation</a>[];</div><div class="line"><a name="l03484"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a444350f74c54195a017c663fe2b2ca44"> 3484</a></span>&#160;</div><div class="line"><a name="l03485"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a07ac46ef4c52623df078eb57daf07070"> 3485</a></span>&#160; <a class="code" href="classoperations__research_1_1ModelVisitor.html#a651208f79a13e7e47feef0b4d95a8168">~ModelVisitor</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l03486"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#ad2532beeeeaf7018cab5f3946e604af3"> 3486</a></span>&#160;</div><div class="line"><a name="l03487"></a><span class="lineno"><a class="line" href="classoperations__research_1_1ModelVisitor.html#a962d1e2e70b0085fe22e4dc424b27c97"> 3487</a></span>&#160; <span class="comment">// ----- Virtual methods for visitors -----</span></div><div class="line"><a name="l03488"></a><span class="lineno"> 3488</span>&#160;</div><div class="line"><a name="l03489"></a><span class="lineno"> 3489</span>&#160; <span class="comment">// Begin/End visit element.</span></div><div class="line"><a name="l03490"></a><span class="lineno"> 3490</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a71cef740cd200067eadf66d0a9276d69">BeginVisitModel</a>(<span class="keyword">const</span> std::string&amp; solver_name);</div><div class="line"><a name="l03491"></a><span class="lineno"> 3491</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a7640173386e395605d573c94aa5110bc">EndVisitModel</a>(<span class="keyword">const</span> std::string&amp; solver_name);</div><div class="line"><a name="l03492"></a><span class="lineno"> 3492</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#aa9ee3a1781e9969518c2f838f16c1552">BeginVisitConstraint</a>(<span class="keyword">const</span> std::string&amp; type_name,</div><div class="line"><a name="l03493"></a><span class="lineno"> 3493</span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <span class="keyword">const</span> constraint);</div><div class="line"><a name="l03494"></a><span class="lineno"> 3494</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a4e80c7cc39381ccbf5457c83dc75cbb5">EndVisitConstraint</a>(<span class="keyword">const</span> std::string&amp; type_name,</div><div class="line"><a name="l03495"></a><span class="lineno"> 3495</span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>* <span class="keyword">const</span> constraint);</div><div class="line"><a name="l03496"></a><span class="lineno"> 3496</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a0a054848f96f9043dac24dccecb2a47e">BeginVisitExtension</a>(<span class="keyword">const</span> std::string&amp; type);</div><div class="line"><a name="l03497"></a><span class="lineno"> 3497</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a054bb0ce517052aa4d701536cce06748">EndVisitExtension</a>(<span class="keyword">const</span> std::string&amp; type);</div><div class="line"><a name="l03498"></a><span class="lineno"> 3498</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#aac9032d088ad5a8555155a9fbc03d886">BeginVisitIntegerExpression</a>(<span class="keyword">const</span> std::string&amp; type_name,</div><div class="line"><a name="l03499"></a><span class="lineno"> 3499</span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr);</div><div class="line"><a name="l03500"></a><span class="lineno"> 3500</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#aaeb891b509e11395b17691fc257f8430">EndVisitIntegerExpression</a>(<span class="keyword">const</span> std::string&amp; type_name,</div><div class="line"><a name="l03501"></a><span class="lineno"> 3501</span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> expr);</div><div class="line"><a name="l03502"></a><span class="lineno"> 3502</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#ad19c386bb59eb247ae45f5a55c148c98">VisitIntegerVariable</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> variable,</div><div class="line"><a name="l03503"></a><span class="lineno"> 3503</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> delegate);</div><div class="line"><a name="l03504"></a><span class="lineno"> 3504</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#ad19c386bb59eb247ae45f5a55c148c98">VisitIntegerVariable</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> variable,</div><div class="line"><a name="l03505"></a><span class="lineno"> 3505</span>&#160; <span class="keyword">const</span> std::string&amp; operation, int64 value,</div><div class="line"><a name="l03506"></a><span class="lineno"> 3506</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> delegate);</div><div class="line"><a name="l03507"></a><span class="lineno"> 3507</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a008474e94c0f17a270b7e0830758605e">VisitIntervalVariable</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> variable,</div><div class="line"><a name="l03508"></a><span class="lineno"> 3508</span>&#160; <span class="keyword">const</span> std::string&amp; operation, int64 value,</div><div class="line"><a name="l03509"></a><span class="lineno"> 3509</span>&#160; <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> delegate);</div><div class="line"><a name="l03510"></a><span class="lineno"> 3510</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#aa873231c27c0bfa5e9689d3e7d74521d">VisitSequenceVariable</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a>* <span class="keyword">const</span> variable);</div><div class="line"><a name="l03511"></a><span class="lineno"> 3511</span>&#160;</div><div class="line"><a name="l03512"></a><span class="lineno"> 3512</span>&#160; <span class="comment">// Visit integer arguments.</span></div><div class="line"><a name="l03513"></a><span class="lineno"> 3513</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#ad60683aaee8e4a19043476a2bd899d50">VisitIntegerArgument</a>(<span class="keyword">const</span> std::string&amp; arg_name, int64 value);</div><div class="line"><a name="l03514"></a><span class="lineno"> 3514</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#acdde99f804b915fc54e00c182f77d84c">VisitIntegerArrayArgument</a>(<span class="keyword">const</span> std::string&amp; arg_name,</div><div class="line"><a name="l03515"></a><span class="lineno"> 3515</span>&#160; <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; values);</div><div class="line"><a name="l03516"></a><span class="lineno"> 3516</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a10322a6adaa9c514e927c50ebbf15f4a">VisitIntegerMatrixArgument</a>(<span class="keyword">const</span> std::string&amp; arg_name,</div><div class="line"><a name="l03517"></a><span class="lineno"> 3517</span>&#160; <span class="keyword">const</span> IntTupleSet&amp; tuples);</div><div class="line"><a name="l03518"></a><span class="lineno"> 3518</span>&#160;</div><div class="line"><a name="l03519"></a><span class="lineno"> 3519</span>&#160; <span class="comment">// Visit integer expression argument.</span></div><div class="line"><a name="l03520"></a><span class="lineno"> 3520</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#aa3aadae79e53e0d0237126ab4e62b6bd">VisitIntegerExpressionArgument</a>(<span class="keyword">const</span> std::string&amp; arg_name,</div><div class="line"><a name="l03521"></a><span class="lineno"> 3521</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <span class="keyword">const</span> argument);</div><div class="line"><a name="l03522"></a><span class="lineno"> 3522</span>&#160;</div><div class="line"><a name="l03523"></a><span class="lineno"> 3523</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#aa32f0bc3ea5eea881da14daadaa817fc">VisitIntegerVariableArrayArgument</a>(</div><div class="line"><a name="l03524"></a><span class="lineno"> 3524</span>&#160; <span class="keyword">const</span> std::string&amp; arg_name, <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; arguments);</div><div class="line"><a name="l03525"></a><span class="lineno"> 3525</span>&#160;</div><div class="line"><a name="l03526"></a><span class="lineno"> 3526</span>&#160; <span class="comment">// Visit interval argument.</span></div><div class="line"><a name="l03527"></a><span class="lineno"> 3527</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#aa136071473c98731ced9ccf73e9b1f9d">VisitIntervalArgument</a>(<span class="keyword">const</span> std::string&amp; arg_name,</div><div class="line"><a name="l03528"></a><span class="lineno"> 3528</span>&#160; <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> argument);</div><div class="line"><a name="l03529"></a><span class="lineno"> 3529</span>&#160;</div><div class="line"><a name="l03530"></a><span class="lineno"> 3530</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a2b17a924fed9dff78cbd365ccdb5c597">VisitIntervalArrayArgument</a>(</div><div class="line"><a name="l03531"></a><span class="lineno"> 3531</span>&#160; <span class="keyword">const</span> std::string&amp; arg_name, <span class="keyword">const</span> std::vector&lt;IntervalVar*&gt;&amp; arguments);</div><div class="line"><a name="l03532"></a><span class="lineno"> 3532</span>&#160; <span class="comment">// Visit sequence argument.</span></div><div class="line"><a name="l03533"></a><span class="lineno"> 3533</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a95a765a9db2856a8f35b0f3b122a4b2c">VisitSequenceArgument</a>(<span class="keyword">const</span> std::string&amp; arg_name,</div><div class="line"><a name="l03534"></a><span class="lineno"> 3534</span>&#160; <a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a>* <span class="keyword">const</span> argument);</div><div class="line"><a name="l03535"></a><span class="lineno"> 3535</span>&#160;</div><div class="line"><a name="l03536"></a><span class="lineno"> 3536</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a2d319e77b0403d9ad50fc0aacf8b3d71">VisitSequenceArrayArgument</a>(</div><div class="line"><a name="l03537"></a><span class="lineno"> 3537</span>&#160; <span class="keyword">const</span> std::string&amp; arg_name, <span class="keyword">const</span> std::vector&lt;SequenceVar*&gt;&amp; arguments);</div><div class="line"><a name="l03538"></a><span class="lineno"> 3538</span>&#160;<span class="comment">// Helpers.</span></div><div class="line"><a name="l03539"></a><span class="lineno"> 3539</span>&#160;<span class="preprocessor">#if !defined(SWIG)</span></div><div class="line"><a name="l03540"></a><span class="lineno"> 3540</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a4b851543c86a8505832575e0502a3a43">VisitIntegerVariableEvaluatorArgument</a>(</div><div class="line"><a name="l03541"></a><span class="lineno"> 3541</span>&#160; <span class="keyword">const</span> std::string&amp; arg_name, <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1Solver.html#a6183a217e1ddf504a4fd3f49788b73db">Solver::Int64ToIntVar</a>&amp; arguments);</div><div class="line"><a name="l03542"></a><span class="lineno"> 3542</span>&#160;</div><div class="line"><a name="l03543"></a><span class="lineno"> 3543</span>&#160; <span class="comment">// Using SWIG on callbacks is troublesome, so we hide these methods during</span></div><div class="line"><a name="l03544"></a><span class="lineno"> 3544</span>&#160; <span class="comment">// the wrapping.</span></div><div class="line"><a name="l03545"></a><span class="lineno"> 3545</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a526f8541539c9560e826469dc13ddfaf">VisitInt64ToBoolExtension</a>(<a class="code" href="classoperations__research_1_1Solver.html#a7e47d3b978e31e6273a63dc52fcf3379">Solver::IndexFilter1</a> filter, int64 index_min,</div><div class="line"><a name="l03546"></a><span class="lineno"> 3546</span>&#160; int64 index_max);</div><div class="line"><a name="l03547"></a><span class="lineno"> 3547</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a2033f7591e7809c9f3abbbe618a484c7">VisitInt64ToInt64Extension</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1Solver.html#a1040bdf484009e1a00e60ebb055ad1a1">Solver::IndexEvaluator1</a>&amp; eval,</div><div class="line"><a name="l03548"></a><span class="lineno"> 3548</span>&#160; int64 index_min, int64 index_max);</div><div class="line"><a name="l03549"></a><span class="lineno"> 3549</span>&#160; <span class="comment">// Expands function as array when index min is 0.</span></div><div class="line"><a name="l03550"></a><span class="lineno"> 3550</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1ModelVisitor.html#a2ae5d743b7bc3e49c8b8dbc4f105a4cd">VisitInt64ToInt64AsArray</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1Solver.html#a1040bdf484009e1a00e60ebb055ad1a1">Solver::IndexEvaluator1</a>&amp; eval,</div><div class="line"><a name="l03551"></a><span class="lineno"> 3551</span>&#160; <span class="keyword">const</span> std::string&amp; arg_name, int64 index_max);</div><div class="line"><a name="l03552"></a><span class="lineno"> 3552</span>&#160;<span class="preprocessor">#endif // #if !defined(SWIG)</span></div><div class="line"><a name="l03553"></a><span class="lineno"> 3553</span>&#160;};</div><div class="line"><a name="l03554"></a><span class="lineno"> 3554</span>&#160;</div><div class="line"><a name="l03555"></a><span class="lineno"> 3555</span>&#160;<span class="comment">// A constraint is the main modeling object. It provides two methods:</span></div><div class="line"><a name="l03556"></a><span class="lineno"> 3556</span>&#160;<span class="comment">// - Post() is responsible for creating the demons and attaching them to</span></div><div class="line"><a name="l03557"></a><span class="lineno"> 3557</span>&#160;<span class="comment">// immediate demons().</span></div><div class="line"><a name="l03558"></a><span class="lineno"> 3558</span>&#160;<span class="comment">// - InitialPropagate() is called once just after Post and performs</span></div><div class="line"><a name="l03559"></a><span class="lineno"> 3559</span>&#160;<span class="comment">// the initial propagation. The subsequent propagations will be performed</span></div><div class="line"><a name="l03560"></a><span class="lineno"> 3560</span>&#160;<span class="comment">// by the demons Posted during the post() method.</span></div><div class="line"><a name="l03561"></a><span class="lineno"> 3561</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a> : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1PropagationBaseObject.html">PropagationBaseObject</a> {</div><div class="line"><a name="l03562"></a><span class="lineno"> 3562</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l03563"></a><span class="lineno"> 3563</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classoperations__research_1_1Constraint.html#ae4bce2b10b1b0b3f953e356e6a34f339">Constraint</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">solver</a>) : <a class="code" href="classoperations__research_1_1PropagationBaseObject.html">PropagationBaseObject</a>(<a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">solver</a>) {}</div><div class="line"><a name="l03564"></a><span class="lineno"> 3564</span>&#160; <a class="code" href="classoperations__research_1_1Constraint.html#ade8518fb88221d449c6a89f1dc7eac44">~Constraint</a>()<span class="keyword"> override </span>{}</div><div class="line"><a name="l03565"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Constraint.html"> 3565</a></span>&#160;</div><div class="line"><a name="l03566"></a><span class="lineno"> 3566</span>&#160; <span class="comment">// This method is called when the constraint is processed by the</span></div><div class="line"><a name="l03567"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Constraint.html#ae4bce2b10b1b0b3f953e356e6a34f339"> 3567</a></span>&#160; <span class="comment">// solver. Its main usage is to attach demons to variables.</span></div><div class="line"><a name="l03568"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Constraint.html#ade8518fb88221d449c6a89f1dc7eac44"> 3568</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Constraint.html#aaa882d58b5fc0f2e3df6eff957ad4a0d">Post</a>() = 0;</div><div class="line"><a name="l03569"></a><span class="lineno"> 3569</span>&#160;</div><div class="line"><a name="l03570"></a><span class="lineno"> 3570</span>&#160; <span class="comment">// This method performs the initial propagation of the</span></div><div class="line"><a name="l03571"></a><span class="lineno"> 3571</span>&#160; <span class="comment">// constraint. It is called just after the post.</span></div><div class="line"><a name="l03572"></a><span class="lineno"> 3572</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Constraint.html#a64ab23714e57db311ba5b9fe1e742979">InitialPropagate</a>() = 0;</div><div class="line"><a name="l03573"></a><span class="lineno"> 3573</span>&#160; std::string <a class="code" href="classoperations__research_1_1Constraint.html#a443bf6da3f8db15c240cb92d20e37466">DebugString</a>() <span class="keyword">const override</span>;</div><div class="line"><a name="l03574"></a><span class="lineno"> 3574</span>&#160;</div><div class="line"><a name="l03575"></a><span class="lineno"> 3575</span>&#160; <span class="comment">// Calls Post and then Propagate to initialize the constraints. This</span></div><div class="line"><a name="l03576"></a><span class="lineno"> 3576</span>&#160; <span class="comment">// is usually done in the root node.</span></div><div class="line"><a name="l03577"></a><span class="lineno"> 3577</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Constraint.html#a92c3bfe86238b5c95448d4a0384a327f">PostAndPropagate</a>();</div><div class="line"><a name="l03578"></a><span class="lineno"> 3578</span>&#160;</div><div class="line"><a name="l03579"></a><span class="lineno"> 3579</span>&#160; <span class="comment">// Accepts the given visitor.</span></div><div class="line"><a name="l03580"></a><span class="lineno"> 3580</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Constraint.html#a6e3070956af148d6fa0491de1d3cf289">Accept</a>(<a class="code" href="classoperations__research_1_1ModelVisitor.html">ModelVisitor</a>* <span class="keyword">const</span> visitor) <span class="keyword">const</span>;</div><div class="line"><a name="l03581"></a><span class="lineno"> 3581</span>&#160;</div><div class="line"><a name="l03582"></a><span class="lineno"> 3582</span>&#160; <span class="comment">// Is the constraint created by a cast from expression to integer variable?</span></div><div class="line"><a name="l03583"></a><span class="lineno"> 3583</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Constraint.html#a834edc2ae995b866a6aa63e44c242570">IsCastConstraint</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l03584"></a><span class="lineno"> 3584</span>&#160;</div><div class="line"><a name="l03585"></a><span class="lineno"> 3585</span>&#160; <span class="comment">// Creates a Boolean variable representing the status of the constraint (false</span></div><div class="line"><a name="l03586"></a><span class="lineno"> 3586</span>&#160; <span class="comment">// = constraint is violated, true = constraint is satisfied). It returns</span></div><div class="line"><a name="l03587"></a><span class="lineno"> 3587</span>&#160; <span class="comment">// nullptr if the constraint does not support this API.</span></div><div class="line"><a name="l03588"></a><span class="lineno"> 3588</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1Constraint.html#a5606cc31756a1708615d492ab75ba886">Var</a>();</div><div class="line"><a name="l03589"></a><span class="lineno"> 3589</span>&#160;</div><div class="line"><a name="l03590"></a><span class="lineno"> 3590</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l03591"></a><span class="lineno"> 3591</span>&#160; DISALLOW_COPY_AND_ASSIGN(<a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>);</div><div class="line"><a name="l03592"></a><span class="lineno"> 3592</span>&#160;};</div><div class="line"><a name="l03593"></a><span class="lineno"> 3593</span>&#160;</div><div class="line"><a name="l03594"></a><span class="lineno"> 3594</span>&#160;<span class="comment">// Cast constraints are special channeling constraints designed</span></div><div class="line"><a name="l03595"></a><span class="lineno"> 3595</span>&#160;<span class="comment">// to keep a variable in sync with an expression. They are</span></div><div class="line"><a name="l03596"></a><span class="lineno"> 3596</span>&#160;<span class="comment">// created internally when Var() is called on a subclass of IntExpr.</span></div><div class="line"><a name="l03597"></a><span class="lineno"> 3597</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1CastConstraint.html">CastConstraint</a> : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a> {</div><div class="line"><a name="l03598"></a><span class="lineno"> 3598</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l03599"></a><span class="lineno"> 3599</span>&#160; <a class="code" href="classoperations__research_1_1CastConstraint.html#a6d1daffc6d0067731f886641c64de177">CastConstraint</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">solver</a>, <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1CastConstraint.html#a89f0e9f3c52c31eba3759c8c411f792d">target_var</a>)</div><div class="line"><a name="l03600"></a><span class="lineno"> 3600</span>&#160; : <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a>(<a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">solver</a>), <a class="code" href="classoperations__research_1_1CastConstraint.html#afe3c20ec0800b1d344861e783d45be41">target_var_</a>(<a class="code" href="classoperations__research_1_1CastConstraint.html#a89f0e9f3c52c31eba3759c8c411f792d">target_var</a>) {</div><div class="line"><a name="l03601"></a><span class="lineno"><a class="line" href="classoperations__research_1_1CastConstraint.html"> 3601</a></span>&#160; CHECK(<a class="code" href="classoperations__research_1_1CastConstraint.html#a89f0e9f3c52c31eba3759c8c411f792d">target_var</a> != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l03602"></a><span class="lineno"> 3602</span>&#160; }</div><div class="line"><a name="l03603"></a><span class="lineno"><a class="line" href="classoperations__research_1_1CastConstraint.html#a6d1daffc6d0067731f886641c64de177"> 3603</a></span>&#160; <a class="code" href="classoperations__research_1_1CastConstraint.html#abb7d3d824e298a2756e9a74b2163c5e7">~CastConstraint</a>()<span class="keyword"> override </span>{}</div><div class="line"><a name="l03604"></a><span class="lineno"> 3604</span>&#160;</div><div class="line"><a name="l03605"></a><span class="lineno"> 3605</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1CastConstraint.html#a89f0e9f3c52c31eba3759c8c411f792d">target_var</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoperations__research_1_1CastConstraint.html#afe3c20ec0800b1d344861e783d45be41">target_var_</a>; }</div><div class="line"><a name="l03606"></a><span class="lineno"> 3606</span>&#160;</div><div class="line"><a name="l03607"></a><span class="lineno"><a class="line" href="classoperations__research_1_1CastConstraint.html#abb7d3d824e298a2756e9a74b2163c5e7"> 3607</a></span>&#160; <span class="keyword">protected</span>:</div><div class="line"><a name="l03608"></a><span class="lineno"> 3608</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1CastConstraint.html#afe3c20ec0800b1d344861e783d45be41">target_var_</a>;</div><div class="line"><a name="l03609"></a><span class="lineno"><a class="line" href="classoperations__research_1_1CastConstraint.html#a89f0e9f3c52c31eba3759c8c411f792d"> 3609</a></span>&#160;};</div><div class="line"><a name="l03610"></a><span class="lineno"> 3610</span>&#160;</div><div class="line"><a name="l03611"></a><span class="lineno"> 3611</span>&#160;<span class="comment">// A search monitor is a simple set of callbacks to monitor all search events</span></div><div class="line"><a name="l03612"></a><span class="lineno"><a class="line" href="classoperations__research_1_1CastConstraint.html#afe3c20ec0800b1d344861e783d45be41"> 3612</a></span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a> : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1BaseObject.html">BaseObject</a> {</div><div class="line"><a name="l03613"></a><span class="lineno"> 3613</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l03614"></a><span class="lineno"> 3614</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html#aa95b9df4d6eb3b0fabd01d9fee33d25d">kNoProgress</a> = -1;</div><div class="line"><a name="l03615"></a><span class="lineno"> 3615</span>&#160;</div><div class="line"><a name="l03616"></a><span class="lineno"><a class="line" href="classoperations__research_1_1SearchMonitor.html"> 3616</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html#aa13f15c14e3a5237526cf6215f3b3077">SearchMonitor</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> s) : solver_(s) {}</div><div class="line"><a name="l03617"></a><span class="lineno"> 3617</span>&#160; <a class="code" href="classoperations__research_1_1SearchMonitor.html#a10ccf64fe0a40e01816b20818a32b8b6">~SearchMonitor</a>()<span class="keyword"> override </span>{}</div><div class="line"><a name="l03618"></a><span class="lineno"><a class="line" href="classoperations__research_1_1SearchMonitor.html#aa95b9df4d6eb3b0fabd01d9fee33d25d"> 3618</a></span>&#160; <span class="comment">// Beginning of the search.</span></div><div class="line"><a name="l03619"></a><span class="lineno"> 3619</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html#a705ae4bfa396632c23d65f37793391f2">EnterSearch</a>();</div><div class="line"><a name="l03620"></a><span class="lineno"><a class="line" href="classoperations__research_1_1SearchMonitor.html#aa13f15c14e3a5237526cf6215f3b3077"> 3620</a></span>&#160;</div><div class="line"><a name="l03621"></a><span class="lineno"><a class="line" href="classoperations__research_1_1SearchMonitor.html#a10ccf64fe0a40e01816b20818a32b8b6"> 3621</a></span>&#160; <span class="comment">// Restart the search.</span></div><div class="line"><a name="l03622"></a><span class="lineno"> 3622</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html#a681646c2ba21c997eca605387d387cad">RestartSearch</a>();</div><div class="line"><a name="l03623"></a><span class="lineno"> 3623</span>&#160;</div><div class="line"><a name="l03624"></a><span class="lineno"> 3624</span>&#160; <span class="comment">// End of the search.</span></div><div class="line"><a name="l03625"></a><span class="lineno"> 3625</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html#ab98b6cd2d173adb819adff4e1839f10b">ExitSearch</a>();</div><div class="line"><a name="l03626"></a><span class="lineno"> 3626</span>&#160;</div><div class="line"><a name="l03627"></a><span class="lineno"> 3627</span>&#160; <span class="comment">// Before calling DecisionBuilder::Next.</span></div><div class="line"><a name="l03628"></a><span class="lineno"> 3628</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html#a2f3ea4577e11fad619c2d7dcad1617cd">BeginNextDecision</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> b);</div><div class="line"><a name="l03629"></a><span class="lineno"> 3629</span>&#160;</div><div class="line"><a name="l03630"></a><span class="lineno"> 3630</span>&#160; <span class="comment">// After calling DecisionBuilder::Next, along with the returned decision.</span></div><div class="line"><a name="l03631"></a><span class="lineno"> 3631</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html#adc462b9f376d796296bbee05fd44a6ed">EndNextDecision</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> b, <a class="code" href="classoperations__research_1_1Decision.html">Decision</a>* <span class="keyword">const</span> d);</div><div class="line"><a name="l03632"></a><span class="lineno"> 3632</span>&#160;</div><div class="line"><a name="l03633"></a><span class="lineno"> 3633</span>&#160; <span class="comment">// Before applying the decision.</span></div><div class="line"><a name="l03634"></a><span class="lineno"> 3634</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html#a8c745cdd7838067851f65e5ed812ab14">ApplyDecision</a>(<a class="code" href="classoperations__research_1_1Decision.html">Decision</a>* <span class="keyword">const</span> d);</div><div class="line"><a name="l03635"></a><span class="lineno"> 3635</span>&#160;</div><div class="line"><a name="l03636"></a><span class="lineno"> 3636</span>&#160; <span class="comment">// Before refuting the decision.</span></div><div class="line"><a name="l03637"></a><span class="lineno"> 3637</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html#aadfcba48c62683c6d6463a7adb9b0a28">RefuteDecision</a>(<a class="code" href="classoperations__research_1_1Decision.html">Decision</a>* <span class="keyword">const</span> d);</div><div class="line"><a name="l03638"></a><span class="lineno"> 3638</span>&#160;</div><div class="line"><a name="l03639"></a><span class="lineno"> 3639</span>&#160; <span class="comment">// Just after refuting or applying the decision, apply is true after Apply.</span></div><div class="line"><a name="l03640"></a><span class="lineno"> 3640</span>&#160; <span class="comment">// This is called only if the Apply() or Refute() methods have not failed.</span></div><div class="line"><a name="l03641"></a><span class="lineno"> 3641</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html#ab138fa7a0d0f11e57507d9d903729558">AfterDecision</a>(<a class="code" href="classoperations__research_1_1Decision.html">Decision</a>* <span class="keyword">const</span> d, <span class="keywordtype">bool</span> apply);</div><div class="line"><a name="l03642"></a><span class="lineno"> 3642</span>&#160;</div><div class="line"><a name="l03643"></a><span class="lineno"> 3643</span>&#160; <span class="comment">// Just when the failure occurs.</span></div><div class="line"><a name="l03644"></a><span class="lineno"> 3644</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html#a528e028cce317c06203f079dd05635a9">BeginFail</a>();</div><div class="line"><a name="l03645"></a><span class="lineno"> 3645</span>&#160;</div><div class="line"><a name="l03646"></a><span class="lineno"> 3646</span>&#160; <span class="comment">// After completing the backtrack.</span></div><div class="line"><a name="l03647"></a><span class="lineno"> 3647</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html#ad138a0d3337eb1085157f824f946d611">EndFail</a>();</div><div class="line"><a name="l03648"></a><span class="lineno"> 3648</span>&#160;</div><div class="line"><a name="l03649"></a><span class="lineno"> 3649</span>&#160; <span class="comment">// Before the initial propagation.</span></div><div class="line"><a name="l03650"></a><span class="lineno"> 3650</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html#ae08ee7f1dc5f652ee9b55393e0cc3550">BeginInitialPropagation</a>();</div><div class="line"><a name="l03651"></a><span class="lineno"> 3651</span>&#160;</div><div class="line"><a name="l03652"></a><span class="lineno"> 3652</span>&#160; <span class="comment">// After the initial propagation.</span></div><div class="line"><a name="l03653"></a><span class="lineno"> 3653</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html#a95f86eb818555555bfaa50483672a77a">EndInitialPropagation</a>();</div><div class="line"><a name="l03654"></a><span class="lineno"> 3654</span>&#160;</div><div class="line"><a name="l03655"></a><span class="lineno"> 3655</span>&#160; <span class="comment">// This method is called when a solution is found. It asserts whether the</span></div><div class="line"><a name="l03656"></a><span class="lineno"> 3656</span>&#160; <span class="comment">// solution is valid. A value of false indicates that the solution</span></div><div class="line"><a name="l03657"></a><span class="lineno"> 3657</span>&#160; <span class="comment">// should be discarded.</span></div><div class="line"><a name="l03658"></a><span class="lineno"> 3658</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html#a3da80f7b3b108f36ace3e45d1654805b">AcceptSolution</a>();</div><div class="line"><a name="l03659"></a><span class="lineno"> 3659</span>&#160;</div><div class="line"><a name="l03660"></a><span class="lineno"> 3660</span>&#160; <span class="comment">// This method is called when a valid solution is found. If the</span></div><div class="line"><a name="l03661"></a><span class="lineno"> 3661</span>&#160; <span class="comment">// return value is true, then search will resume after. If the result</span></div><div class="line"><a name="l03662"></a><span class="lineno"> 3662</span>&#160; <span class="comment">// is false, then search will stop there.</span></div><div class="line"><a name="l03663"></a><span class="lineno"> 3663</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html#ac4f21fe0c304fc837d903feb65fe858f">AtSolution</a>();</div><div class="line"><a name="l03664"></a><span class="lineno"> 3664</span>&#160;</div><div class="line"><a name="l03665"></a><span class="lineno"> 3665</span>&#160; <span class="comment">// When the search tree is finished.</span></div><div class="line"><a name="l03666"></a><span class="lineno"> 3666</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html#ad73cc7165dba2ee87884286537666ec8">NoMoreSolutions</a>();</div><div class="line"><a name="l03667"></a><span class="lineno"> 3667</span>&#160;</div><div class="line"><a name="l03668"></a><span class="lineno"> 3668</span>&#160; <span class="comment">// When a local optimum is reached. If &#39;true&#39; is returned, the last solution</span></div><div class="line"><a name="l03669"></a><span class="lineno"> 3669</span>&#160; <span class="comment">// is discarded and the search proceeds with the next one.</span></div><div class="line"><a name="l03670"></a><span class="lineno"> 3670</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html#ab412dd0253ec658cd36dbec0c1b9f426">LocalOptimum</a>();</div><div class="line"><a name="l03671"></a><span class="lineno"> 3671</span>&#160;</div><div class="line"><a name="l03672"></a><span class="lineno"> 3672</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l03673"></a><span class="lineno"> 3673</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html#ac14f9c8abd763be08fbb1220b763df2b">AcceptDelta</a>(<a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>* delta, <a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>* deltadelta);</div><div class="line"><a name="l03674"></a><span class="lineno"> 3674</span>&#160;</div><div class="line"><a name="l03675"></a><span class="lineno"> 3675</span>&#160; <span class="comment">// After accepting a neighbor during local search.</span></div><div class="line"><a name="l03676"></a><span class="lineno"> 3676</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html#a04a9e7423ec5aa466b7a7604eb107fbe">AcceptNeighbor</a>();</div><div class="line"><a name="l03677"></a><span class="lineno"> 3677</span>&#160;</div><div class="line"><a name="l03678"></a><span class="lineno"> 3678</span>&#160; <span class="comment">// After accepting an unchecked neighbor during local search.</span></div><div class="line"><a name="l03679"></a><span class="lineno"> 3679</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html#a1bd91b270f903d25e6eb7c252d5cf001">AcceptUncheckedNeighbor</a>();</div><div class="line"><a name="l03680"></a><span class="lineno"> 3680</span>&#160;</div><div class="line"><a name="l03681"></a><span class="lineno"> 3681</span>&#160; <span class="comment">// Returns true if the limit of solutions has been reached including</span></div><div class="line"><a name="l03682"></a><span class="lineno"> 3682</span>&#160; <span class="comment">// unchecked solutions.</span></div><div class="line"><a name="l03683"></a><span class="lineno"> 3683</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html#a913eb75331c00bed226200fd96ee0cb6">IsUncheckedSolutionLimitReached</a>() { <span class="keywordflow">return</span> <span class="keyword">false</span>; }</div><div class="line"><a name="l03684"></a><span class="lineno"> 3684</span>&#160;</div><div class="line"><a name="l03685"></a><span class="lineno"> 3685</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <a class="code" href="classoperations__research_1_1SearchMonitor.html#a6c4b4a82d20104f3ca8729244dd9cc2e">solver</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> solver_; }</div><div class="line"><a name="l03686"></a><span class="lineno"> 3686</span>&#160;</div><div class="line"><a name="l03687"></a><span class="lineno"><a class="line" href="classoperations__research_1_1SearchMonitor.html#a913eb75331c00bed226200fd96ee0cb6"> 3687</a></span>&#160; <span class="comment">// Periodic call to check limits in long running methods.</span></div><div class="line"><a name="l03688"></a><span class="lineno"> 3688</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html#a9cb45d67a60d4729f1e1fd4d0c6442db">PeriodicCheck</a>();</div><div class="line"><a name="l03689"></a><span class="lineno"><a class="line" href="classoperations__research_1_1SearchMonitor.html#a6c4b4a82d20104f3ca8729244dd9cc2e"> 3689</a></span>&#160;</div><div class="line"><a name="l03690"></a><span class="lineno"> 3690</span>&#160; <span class="comment">// Returns a percentage representing the propress of the search before</span></div><div class="line"><a name="l03691"></a><span class="lineno"> 3691</span>&#160; <span class="comment">// reaching limits.</span></div><div class="line"><a name="l03692"></a><span class="lineno"> 3692</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">int</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html#a4e4e007e3de77736cd9d7a3b9df2f5f9">ProgressPercent</a>() { <span class="keywordflow">return</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html#aa95b9df4d6eb3b0fabd01d9fee33d25d">kNoProgress</a>; }</div><div class="line"><a name="l03693"></a><span class="lineno"> 3693</span>&#160;</div><div class="line"><a name="l03694"></a><span class="lineno"> 3694</span>&#160; <span class="comment">// Accepts the given model visitor.</span></div><div class="line"><a name="l03695"></a><span class="lineno"> 3695</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html#a9b300dfb35699cf80504c00f2cbe9153">Accept</a>(<a class="code" href="classoperations__research_1_1ModelVisitor.html">ModelVisitor</a>* <span class="keyword">const</span> visitor) <span class="keyword">const</span>;</div><div class="line"><a name="l03696"></a><span class="lineno"><a class="line" href="classoperations__research_1_1SearchMonitor.html#a4e4e007e3de77736cd9d7a3b9df2f5f9"> 3696</a></span>&#160;</div><div class="line"><a name="l03697"></a><span class="lineno"> 3697</span>&#160; <span class="comment">// Registers itself on the solver such that it gets notified of the search</span></div><div class="line"><a name="l03698"></a><span class="lineno"> 3698</span>&#160; <span class="comment">// and propagation events.</span></div><div class="line"><a name="l03699"></a><span class="lineno"> 3699</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html#a775e4bc59c759621fdb0b6f129744296">Install</a>();</div><div class="line"><a name="l03700"></a><span class="lineno"> 3700</span>&#160;</div><div class="line"><a name="l03701"></a><span class="lineno"> 3701</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l03702"></a><span class="lineno"> 3702</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> solver_;</div><div class="line"><a name="l03703"></a><span class="lineno"> 3703</span>&#160; DISALLOW_COPY_AND_ASSIGN(<a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a>);</div><div class="line"><a name="l03704"></a><span class="lineno"> 3704</span>&#160;};</div><div class="line"><a name="l03705"></a><span class="lineno"> 3705</span>&#160;</div><div class="line"><a name="l03706"></a><span class="lineno"> 3706</span>&#160;<span class="comment">// This class adds reversibility to a POD type.</span></div><div class="line"><a name="l03707"></a><span class="lineno"> 3707</span>&#160;<span class="comment">// It contains the stamp optimization. i.e. the SaveValue call is done</span></div><div class="line"><a name="l03708"></a><span class="lineno"> 3708</span>&#160;<span class="comment">// only once per node of the search tree. Please note that actual</span></div><div class="line"><a name="l03709"></a><span class="lineno"> 3709</span>&#160;<span class="comment">// stamps always starts at 1, thus an initial value of 0 will always</span></div><div class="line"><a name="l03710"></a><span class="lineno"> 3710</span>&#160;<span class="comment">// trigger the first SaveValue.</span></div><div class="line"><a name="l03711"></a><span class="lineno"> 3711</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;</div><div class="line"><a name="l03712"></a><span class="lineno"> 3712</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1Rev.html">Rev</a> {</div><div class="line"><a name="l03713"></a><span class="lineno"> 3713</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l03714"></a><span class="lineno"> 3714</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classoperations__research_1_1Rev.html#a49f4bb1d930408358e5678b01bc5e0c6">Rev</a>(<span class="keyword">const</span> T&amp; val) : stamp_(0), value_(val) {}</div><div class="line"><a name="l03715"></a><span class="lineno"> 3715</span>&#160;</div><div class="line"><a name="l03716"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Rev.html"> 3716</a></span>&#160; <span class="keyword">const</span> T&amp; <a class="code" href="classoperations__research_1_1Rev.html#a612718f3f1f56d8ecce47fae4bc3592c">Value</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_; }</div><div class="line"><a name="l03717"></a><span class="lineno"> 3717</span>&#160;</div><div class="line"><a name="l03718"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Rev.html#a49f4bb1d930408358e5678b01bc5e0c6"> 3718</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Rev.html#a614fdcd3e96dc71b0c580f29026380ec">SetValue</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> s, <span class="keyword">const</span> T&amp; val) {</div><div class="line"><a name="l03719"></a><span class="lineno"> 3719</span>&#160; <span class="keywordflow">if</span> (val != value_) {</div><div class="line"><a name="l03720"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Rev.html#a612718f3f1f56d8ecce47fae4bc3592c"> 3720</a></span>&#160; <span class="keywordflow">if</span> (stamp_ &lt; s-&gt;stamp()) {</div><div class="line"><a name="l03721"></a><span class="lineno"> 3721</span>&#160; s-&gt;<a class="code" href="classoperations__research_1_1Solver.html#add51e06535f44461347658d8ce59979a">SaveValue</a>(&amp;value_);</div><div class="line"><a name="l03722"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Rev.html#a614fdcd3e96dc71b0c580f29026380ec"> 3722</a></span>&#160; stamp_ = s-&gt;<a class="code" href="classoperations__research_1_1Solver.html#af9873f0b909de865b771b6168eafc78b">stamp</a>();</div><div class="line"><a name="l03723"></a><span class="lineno"> 3723</span>&#160; }</div><div class="line"><a name="l03724"></a><span class="lineno"> 3724</span>&#160; value_ = val;</div><div class="line"><a name="l03725"></a><span class="lineno"> 3725</span>&#160; }</div><div class="line"><a name="l03726"></a><span class="lineno"> 3726</span>&#160; }</div><div class="line"><a name="l03727"></a><span class="lineno"> 3727</span>&#160;</div><div class="line"><a name="l03728"></a><span class="lineno"> 3728</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l03729"></a><span class="lineno"> 3729</span>&#160; uint64 stamp_;</div><div class="line"><a name="l03730"></a><span class="lineno"> 3730</span>&#160; T value_;</div><div class="line"><a name="l03731"></a><span class="lineno"> 3731</span>&#160;};</div><div class="line"><a name="l03732"></a><span class="lineno"> 3732</span>&#160;</div><div class="line"><a name="l03733"></a><span class="lineno"> 3733</span>&#160;<span class="comment">// Subclass of Rev&lt;T&gt; which adds numerical operations.</span></div><div class="line"><a name="l03734"></a><span class="lineno"> 3734</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;</div><div class="line"><a name="l03735"></a><span class="lineno"> 3735</span>&#160;<span class="keyword">class </span>NumericalRev : <span class="keyword">public</span> Rev&lt;T&gt; {</div><div class="line"><a name="l03736"></a><span class="lineno"> 3736</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l03737"></a><span class="lineno"> 3737</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classoperations__research_1_1NumericalRev.html#a349aea96aef9e96ecdb1c001e931f75b">NumericalRev</a>(<span class="keyword">const</span> T&amp; val) : Rev&lt;T&gt;(val) {}</div><div class="line"><a name="l03738"></a><span class="lineno"> 3738</span>&#160;</div><div class="line"><a name="l03739"></a><span class="lineno"><a class="line" href="classoperations__research_1_1NumericalRev.html"> 3739</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1NumericalRev.html#ac5b1f44217bbe9914ab5f3bfd8a2c71f">Add</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> s, <span class="keyword">const</span> T&amp; to_add) {</div><div class="line"><a name="l03740"></a><span class="lineno"> 3740</span>&#160; this-&gt;<a class="code" href="classoperations__research_1_1Rev.html#a614fdcd3e96dc71b0c580f29026380ec">SetValue</a>(s, this-&gt;<a class="code" href="classoperations__research_1_1Rev.html#a612718f3f1f56d8ecce47fae4bc3592c">Value</a>() + to_add);</div><div class="line"><a name="l03741"></a><span class="lineno"><a class="line" href="classoperations__research_1_1NumericalRev.html#a349aea96aef9e96ecdb1c001e931f75b"> 3741</a></span>&#160; }</div><div class="line"><a name="l03742"></a><span class="lineno"> 3742</span>&#160;</div><div class="line"><a name="l03743"></a><span class="lineno"><a class="line" href="classoperations__research_1_1NumericalRev.html#ac5b1f44217bbe9914ab5f3bfd8a2c71f"> 3743</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1NumericalRev.html#a5cb75653696c123cfc8dbc5a9e916084">Incr</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> s) { <a class="code" href="classoperations__research_1_1NumericalRev.html#ac5b1f44217bbe9914ab5f3bfd8a2c71f">Add</a>(s, 1); }</div><div class="line"><a name="l03744"></a><span class="lineno"> 3744</span>&#160;</div><div class="line"><a name="l03745"></a><span class="lineno"> 3745</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1NumericalRev.html#a9f28c0cf038c1f5f46a5d823c68b887e">Decr</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> s) { <a class="code" href="classoperations__research_1_1NumericalRev.html#ac5b1f44217bbe9914ab5f3bfd8a2c71f">Add</a>(s, -1); }</div><div class="line"><a name="l03746"></a><span class="lineno"> 3746</span>&#160;};</div><div class="line"><a name="l03747"></a><span class="lineno"><a class="line" href="classoperations__research_1_1NumericalRev.html#a5cb75653696c123cfc8dbc5a9e916084"> 3747</a></span>&#160;</div><div class="line"><a name="l03748"></a><span class="lineno"> 3748</span>&#160;<span class="comment">// Reversible array of POD types.</span></div><div class="line"><a name="l03749"></a><span class="lineno"><a class="line" href="classoperations__research_1_1NumericalRev.html#a9f28c0cf038c1f5f46a5d823c68b887e"> 3749</a></span>&#160;<span class="comment">// It contains the stamp optimization. I.e., the SaveValue call is done only</span></div><div class="line"><a name="l03750"></a><span class="lineno"> 3750</span>&#160;<span class="comment">// once per node of the search tree.</span></div><div class="line"><a name="l03751"></a><span class="lineno"> 3751</span>&#160;<span class="comment">// Please note that actual stamp always starts at 1, thus an initial value of</span></div><div class="line"><a name="l03752"></a><span class="lineno"> 3752</span>&#160;<span class="comment">// 0 always triggers the first SaveValue.</span></div><div class="line"><a name="l03753"></a><span class="lineno"> 3753</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;</div><div class="line"><a name="l03754"></a><span class="lineno"> 3754</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1RevArray.html">RevArray</a> {</div><div class="line"><a name="l03755"></a><span class="lineno"> 3755</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l03756"></a><span class="lineno"> 3756</span>&#160; <a class="code" href="classoperations__research_1_1RevArray.html#a361b6a1085ee10fb94ea8105dbb180a9">RevArray</a>(<span class="keywordtype">int</span> <a class="code" href="classoperations__research_1_1RevArray.html#a0c7349d7ede9ab1e16cff1096d6afe8b">size</a>, <span class="keyword">const</span> T&amp; val)</div><div class="line"><a name="l03757"></a><span class="lineno"> 3757</span>&#160; : stamps_(<span class="keyword">new</span> uint64[<a class="code" href="classoperations__research_1_1RevArray.html#a0c7349d7ede9ab1e16cff1096d6afe8b">size</a>]), values_(<span class="keyword">new</span> T[<a class="code" href="classoperations__research_1_1RevArray.html#a0c7349d7ede9ab1e16cff1096d6afe8b">size</a>]), size_(<a class="code" href="classoperations__research_1_1RevArray.html#a0c7349d7ede9ab1e16cff1096d6afe8b">size</a>) {</div><div class="line"><a name="l03758"></a><span class="lineno"><a class="line" href="classoperations__research_1_1RevArray.html"> 3758</a></span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="classoperations__research_1_1RevArray.html#a0c7349d7ede9ab1e16cff1096d6afe8b">size</a>; ++i) {</div><div class="line"><a name="l03759"></a><span class="lineno"> 3759</span>&#160; stamps_[i] = 0;</div><div class="line"><a name="l03760"></a><span class="lineno"><a class="line" href="classoperations__research_1_1RevArray.html#a361b6a1085ee10fb94ea8105dbb180a9"> 3760</a></span>&#160; values_[i] = val;</div><div class="line"><a name="l03761"></a><span class="lineno"> 3761</span>&#160; }</div><div class="line"><a name="l03762"></a><span class="lineno"> 3762</span>&#160; }</div><div class="line"><a name="l03763"></a><span class="lineno"> 3763</span>&#160;</div><div class="line"><a name="l03764"></a><span class="lineno"> 3764</span>&#160; <a class="code" href="classoperations__research_1_1RevArray.html#ae2f2143174e00f93980d5804d3ff262e">~RevArray</a>() {}</div><div class="line"><a name="l03765"></a><span class="lineno"> 3765</span>&#160;</div><div class="line"><a name="l03766"></a><span class="lineno"> 3766</span>&#160; int64 <a class="code" href="classoperations__research_1_1RevArray.html#a0c7349d7ede9ab1e16cff1096d6afe8b">size</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> size_; }</div><div class="line"><a name="l03767"></a><span class="lineno"> 3767</span>&#160;</div><div class="line"><a name="l03768"></a><span class="lineno"><a class="line" href="classoperations__research_1_1RevArray.html#ae2f2143174e00f93980d5804d3ff262e"> 3768</a></span>&#160; <span class="keyword">const</span> T&amp; <a class="code" href="classoperations__research_1_1RevArray.html#abad018c5f8a0e44bdfd6e17ab59612c7">Value</a>(<span class="keywordtype">int</span> index)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> values_[index]; }</div><div class="line"><a name="l03769"></a><span class="lineno"> 3769</span>&#160;</div><div class="line"><a name="l03770"></a><span class="lineno"><a class="line" href="classoperations__research_1_1RevArray.html#a0c7349d7ede9ab1e16cff1096d6afe8b"> 3770</a></span>&#160;<span class="preprocessor">#if !defined(SWIG)</span></div><div class="line"><a name="l03771"></a><span class="lineno"> 3771</span>&#160; <span class="keyword">const</span> T&amp; <a class="code" href="classoperations__research_1_1RevArray.html#abb88b59866cff9f26ebb6f29e82b777a">operator[]</a>(<span class="keywordtype">int</span> index)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> values_[index]; }</div><div class="line"><a name="l03772"></a><span class="lineno"><a class="line" href="classoperations__research_1_1RevArray.html#abad018c5f8a0e44bdfd6e17ab59612c7"> 3772</a></span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l03773"></a><span class="lineno"> 3773</span>&#160;</div><div class="line"><a name="l03774"></a><span class="lineno"> 3774</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1RevArray.html#a6516d4adeaf28338dbc7ba2584d76919">SetValue</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> s, <span class="keywordtype">int</span> index, <span class="keyword">const</span> T&amp; val) {</div><div class="line"><a name="l03775"></a><span class="lineno"><a class="line" href="classoperations__research_1_1RevArray.html#abb88b59866cff9f26ebb6f29e82b777a"> 3775</a></span>&#160; DCHECK_LT(index, size_);</div><div class="line"><a name="l03776"></a><span class="lineno"> 3776</span>&#160; <span class="keywordflow">if</span> (val != values_[index]) {</div><div class="line"><a name="l03777"></a><span class="lineno"> 3777</span>&#160; <span class="keywordflow">if</span> (stamps_[index] &lt; s-&gt;<a class="code" href="classoperations__research_1_1Solver.html#af9873f0b909de865b771b6168eafc78b">stamp</a>()) {</div><div class="line"><a name="l03778"></a><span class="lineno"><a class="line" href="classoperations__research_1_1RevArray.html#a6516d4adeaf28338dbc7ba2584d76919"> 3778</a></span>&#160; s-&gt;<a class="code" href="classoperations__research_1_1Solver.html#add51e06535f44461347658d8ce59979a">SaveValue</a>(&amp;values_[index]);</div><div class="line"><a name="l03779"></a><span class="lineno"> 3779</span>&#160; stamps_[index] = s-&gt;<a class="code" href="classoperations__research_1_1Solver.html#af9873f0b909de865b771b6168eafc78b">stamp</a>();</div><div class="line"><a name="l03780"></a><span class="lineno"> 3780</span>&#160; }</div><div class="line"><a name="l03781"></a><span class="lineno"> 3781</span>&#160; values_[index] = val;</div><div class="line"><a name="l03782"></a><span class="lineno"> 3782</span>&#160; }</div><div class="line"><a name="l03783"></a><span class="lineno"> 3783</span>&#160; }</div><div class="line"><a name="l03784"></a><span class="lineno"> 3784</span>&#160;</div><div class="line"><a name="l03785"></a><span class="lineno"> 3785</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l03786"></a><span class="lineno"> 3786</span>&#160; std::unique_ptr&lt;uint64[]&gt; stamps_;</div><div class="line"><a name="l03787"></a><span class="lineno"> 3787</span>&#160; std::unique_ptr&lt;T[]&gt; values_;</div><div class="line"><a name="l03788"></a><span class="lineno"> 3788</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> size_;</div><div class="line"><a name="l03789"></a><span class="lineno"> 3789</span>&#160;};</div><div class="line"><a name="l03790"></a><span class="lineno"> 3790</span>&#160;</div><div class="line"><a name="l03791"></a><span class="lineno"> 3791</span>&#160;<span class="comment">// Subclass of RevArray&lt;T&gt; which adds numerical operations.</span></div><div class="line"><a name="l03792"></a><span class="lineno"> 3792</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;</div><div class="line"><a name="l03793"></a><span class="lineno"> 3793</span>&#160;<span class="keyword">class </span>NumericalRevArray : <span class="keyword">public</span> RevArray&lt;T&gt; {</div><div class="line"><a name="l03794"></a><span class="lineno"> 3794</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l03795"></a><span class="lineno"> 3795</span>&#160; <a class="code" href="classoperations__research_1_1NumericalRevArray.html#a837710ab5c022c6ad8d0569847b40f84">NumericalRevArray</a>(<span class="keywordtype">int</span> <a class="code" href="classoperations__research_1_1RevArray.html#a0c7349d7ede9ab1e16cff1096d6afe8b">size</a>, <span class="keyword">const</span> T&amp; val) : RevArray&lt;T&gt;(<a class="code" href="classoperations__research_1_1RevArray.html#a0c7349d7ede9ab1e16cff1096d6afe8b">size</a>, val) {}</div><div class="line"><a name="l03796"></a><span class="lineno"> 3796</span>&#160;</div><div class="line"><a name="l03797"></a><span class="lineno"><a class="line" href="classoperations__research_1_1NumericalRevArray.html"> 3797</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1NumericalRevArray.html#ab4b135d5d6cfb30dbba7df17f1affd32">Add</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> s, <span class="keywordtype">int</span> index, <span class="keyword">const</span> T&amp; to_add) {</div><div class="line"><a name="l03798"></a><span class="lineno"> 3798</span>&#160; this-&gt;<a class="code" href="classoperations__research_1_1RevArray.html#a6516d4adeaf28338dbc7ba2584d76919">SetValue</a>(s, index, this-&gt;<a class="code" href="classoperations__research_1_1RevArray.html#abad018c5f8a0e44bdfd6e17ab59612c7">Value</a>(index) + to_add);</div><div class="line"><a name="l03799"></a><span class="lineno"><a class="line" href="classoperations__research_1_1NumericalRevArray.html#a837710ab5c022c6ad8d0569847b40f84"> 3799</a></span>&#160; }</div><div class="line"><a name="l03800"></a><span class="lineno"> 3800</span>&#160;</div><div class="line"><a name="l03801"></a><span class="lineno"><a class="line" href="classoperations__research_1_1NumericalRevArray.html#ab4b135d5d6cfb30dbba7df17f1affd32"> 3801</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1NumericalRevArray.html#ad69b795e0a7110fe1483711154e74d00">Incr</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> s, <span class="keywordtype">int</span> index) { <a class="code" href="classoperations__research_1_1NumericalRevArray.html#ab4b135d5d6cfb30dbba7df17f1affd32">Add</a>(s, index, 1); }</div><div class="line"><a name="l03802"></a><span class="lineno"> 3802</span>&#160;</div><div class="line"><a name="l03803"></a><span class="lineno"> 3803</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1NumericalRevArray.html#a394cdf85b4442ebcb0b4ea7f29697b5d">Decr</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> s, <span class="keywordtype">int</span> index) { <a class="code" href="classoperations__research_1_1NumericalRevArray.html#ab4b135d5d6cfb30dbba7df17f1affd32">Add</a>(s, index, -1); }</div><div class="line"><a name="l03804"></a><span class="lineno"> 3804</span>&#160;};</div><div class="line"><a name="l03805"></a><span class="lineno"><a class="line" href="classoperations__research_1_1NumericalRevArray.html#ad69b795e0a7110fe1483711154e74d00"> 3805</a></span>&#160;</div><div class="line"><a name="l03806"></a><span class="lineno"> 3806</span>&#160;<span class="comment">// The class IntExpr is the base of all integer expressions in</span></div><div class="line"><a name="l03807"></a><span class="lineno"><a class="line" href="classoperations__research_1_1NumericalRevArray.html#a394cdf85b4442ebcb0b4ea7f29697b5d"> 3807</a></span>&#160;<span class="comment">// constraint programming.</span></div><div class="line"><a name="l03808"></a><span class="lineno"> 3808</span>&#160;<span class="comment">// It contains the basic protocol for an expression:</span></div><div class="line"><a name="l03809"></a><span class="lineno"> 3809</span>&#160;<span class="comment">// - setting and modifying its bound</span></div><div class="line"><a name="l03810"></a><span class="lineno"> 3810</span>&#160;<span class="comment">// - querying if it is bound</span></div><div class="line"><a name="l03811"></a><span class="lineno"> 3811</span>&#160;<span class="comment">// - listening to events modifying its bounds</span></div><div class="line"><a name="l03812"></a><span class="lineno"> 3812</span>&#160;<span class="comment">// - casting it into a variable (instance of IntVar)</span></div><div class="line"><a name="l03813"></a><span class="lineno"> 3813</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a> : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1PropagationBaseObject.html">PropagationBaseObject</a> {</div><div class="line"><a name="l03814"></a><span class="lineno"> 3814</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l03815"></a><span class="lineno"> 3815</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classoperations__research_1_1IntExpr.html#ad8abff4968e302f6a8576a4bdce52a8b">IntExpr</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> s) : <a class="code" href="classoperations__research_1_1PropagationBaseObject.html#afa9385e35090e310e58fc4cb6fd5d606">PropagationBaseObject</a>(s) {}</div><div class="line"><a name="l03816"></a><span class="lineno"> 3816</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html#a6efc4d555955044d64aca04be757e367">~IntExpr</a>()<span class="keyword"> override </span>{}</div><div class="line"><a name="l03817"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntExpr.html"> 3817</a></span>&#160;</div><div class="line"><a name="l03818"></a><span class="lineno"> 3818</span>&#160; <span class="keyword">virtual</span> int64 <a class="code" href="classoperations__research_1_1IntExpr.html#a58d589131cbea30d4826248a2fa06aba">Min</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l03819"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntExpr.html#ad8abff4968e302f6a8576a4bdce52a8b"> 3819</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntExpr.html#afec5a6eea8ee64fbc7fa34d7d28f8d8f">SetMin</a>(int64 m) = 0;</div><div class="line"><a name="l03820"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntExpr.html#a6efc4d555955044d64aca04be757e367"> 3820</a></span>&#160; <span class="keyword">virtual</span> int64 <a class="code" href="classoperations__research_1_1IntExpr.html#a1fb9e08cff06a9a5b5739de4acba587c">Max</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l03821"></a><span class="lineno"> 3821</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntExpr.html#adee9a082160df545671781df47f2b985">SetMax</a>(int64 m) = 0;</div><div class="line"><a name="l03822"></a><span class="lineno"> 3822</span>&#160;</div><div class="line"><a name="l03823"></a><span class="lineno"> 3823</span>&#160; <span class="comment">// By default calls Min() and Max(), but can be redefined when Min and Max</span></div><div class="line"><a name="l03824"></a><span class="lineno"> 3824</span>&#160; <span class="comment">// code can be factorized.</span></div><div class="line"><a name="l03825"></a><span class="lineno"> 3825</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntExpr.html#a07b522d73ebcc17ebc1b480d181627f1">Range</a>(int64* l, int64* u) {</div><div class="line"><a name="l03826"></a><span class="lineno"> 3826</span>&#160; *l = <a class="code" href="classoperations__research_1_1IntExpr.html#a58d589131cbea30d4826248a2fa06aba">Min</a>();</div><div class="line"><a name="l03827"></a><span class="lineno"> 3827</span>&#160; *u = <a class="code" href="classoperations__research_1_1IntExpr.html#a1fb9e08cff06a9a5b5739de4acba587c">Max</a>();</div><div class="line"><a name="l03828"></a><span class="lineno"> 3828</span>&#160; }</div><div class="line"><a name="l03829"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntExpr.html#a07b522d73ebcc17ebc1b480d181627f1"> 3829</a></span>&#160; <span class="comment">// This method sets both the min and the max of the expression.</span></div><div class="line"><a name="l03830"></a><span class="lineno"> 3830</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntExpr.html#a153843dc05670b540a8e83dba2043eb0">SetRange</a>(int64 l, int64 u) {</div><div class="line"><a name="l03831"></a><span class="lineno"> 3831</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html#afec5a6eea8ee64fbc7fa34d7d28f8d8f">SetMin</a>(l);</div><div class="line"><a name="l03832"></a><span class="lineno"> 3832</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html#adee9a082160df545671781df47f2b985">SetMax</a>(u);</div><div class="line"><a name="l03833"></a><span class="lineno"> 3833</span>&#160; }</div><div class="line"><a name="l03834"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntExpr.html#a153843dc05670b540a8e83dba2043eb0"> 3834</a></span>&#160;</div><div class="line"><a name="l03835"></a><span class="lineno"> 3835</span>&#160; <span class="comment">// This method sets the value of the expression.</span></div><div class="line"><a name="l03836"></a><span class="lineno"> 3836</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntExpr.html#a8889930ed76665b0f24f12df2ed4e05c">SetValue</a>(int64 v) { <a class="code" href="classoperations__research_1_1IntExpr.html#a153843dc05670b540a8e83dba2043eb0">SetRange</a>(v, v); }</div><div class="line"><a name="l03837"></a><span class="lineno"> 3837</span>&#160;</div><div class="line"><a name="l03838"></a><span class="lineno"> 3838</span>&#160; <span class="comment">// Returns true if the min and the max of the expression are equal.</span></div><div class="line"><a name="l03839"></a><span class="lineno"> 3839</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1IntExpr.html#a13e126985026936fe8da212d2e377236">Bound</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (<a class="code" href="classoperations__research_1_1IntExpr.html#a58d589131cbea30d4826248a2fa06aba">Min</a>() == <a class="code" href="classoperations__research_1_1IntExpr.html#a1fb9e08cff06a9a5b5739de4acba587c">Max</a>()); }</div><div class="line"><a name="l03840"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntExpr.html#a8889930ed76665b0f24f12df2ed4e05c"> 3840</a></span>&#160;</div><div class="line"><a name="l03841"></a><span class="lineno"> 3841</span>&#160; <span class="comment">// Returns true if the expression is indeed a variable.</span></div><div class="line"><a name="l03842"></a><span class="lineno"> 3842</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1IntExpr.html#a4bb288e8b397020398b1184047587f01">IsVar</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">false</span>; }</div><div class="line"><a name="l03843"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntExpr.html#a13e126985026936fe8da212d2e377236"> 3843</a></span>&#160;</div><div class="line"><a name="l03844"></a><span class="lineno"> 3844</span>&#160; <span class="comment">// Creates a variable from the expression.</span></div><div class="line"><a name="l03845"></a><span class="lineno"> 3845</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1IntExpr.html#a751d151bfe120bc6d378c4570505cbd4">Var</a>() = 0;</div><div class="line"><a name="l03846"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntExpr.html#a4bb288e8b397020398b1184047587f01"> 3846</a></span>&#160;</div><div class="line"><a name="l03847"></a><span class="lineno"> 3847</span>&#160; <span class="comment">// Creates a variable from the expression and set the name of the</span></div><div class="line"><a name="l03848"></a><span class="lineno"> 3848</span>&#160; <span class="comment">// resulting var. If the expression is already a variable, then it</span></div><div class="line"><a name="l03849"></a><span class="lineno"> 3849</span>&#160; <span class="comment">// will set the name of the expression, possibly overwriting it.</span></div><div class="line"><a name="l03850"></a><span class="lineno"> 3850</span>&#160; <span class="comment">// This is just a shortcut to Var() followed by set_name().</span></div><div class="line"><a name="l03851"></a><span class="lineno"> 3851</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1IntExpr.html#a1de04a321f16e9cdc50bbec78e1adbf7">VarWithName</a>(<span class="keyword">const</span> std::string&amp; <a class="code" href="classoperations__research_1_1PropagationBaseObject.html#a8be8b75223b76744791e48747677cdb6">name</a>);</div><div class="line"><a name="l03852"></a><span class="lineno"> 3852</span>&#160;</div><div class="line"><a name="l03853"></a><span class="lineno"> 3853</span>&#160; <span class="comment">// Attach a demon that will watch the min or the max of the expression.</span></div><div class="line"><a name="l03854"></a><span class="lineno"> 3854</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntExpr.html#a845a3c3c71323504f6b59f9c0ea46b08">WhenRange</a>(<a class="code" href="classoperations__research_1_1Demon.html">Demon</a>* d) = 0;</div><div class="line"><a name="l03855"></a><span class="lineno"> 3855</span>&#160; <span class="comment">// Attach a demon that will watch the min or the max of the expression.</span></div><div class="line"><a name="l03856"></a><span class="lineno"> 3856</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntExpr.html#a845a3c3c71323504f6b59f9c0ea46b08">WhenRange</a>(<a class="code" href="classoperations__research_1_1Solver.html#aab58d22b2215e79f8e3a9424fe186239">Solver::Closure</a> closure) {</div><div class="line"><a name="l03857"></a><span class="lineno"> 3857</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html#a845a3c3c71323504f6b59f9c0ea46b08">WhenRange</a>(<a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">solver</a>()-&gt;MakeClosureDemon(std::move(closure)));</div><div class="line"><a name="l03858"></a><span class="lineno"> 3858</span>&#160; }</div><div class="line"><a name="l03859"></a><span class="lineno"> 3859</span>&#160;</div><div class="line"><a name="l03860"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntExpr.html#a4b35ce14dbdbd3df0d20af5b708288f8"> 3860</a></span>&#160;<span class="preprocessor">#if !defined(SWIG)</span></div><div class="line"><a name="l03861"></a><span class="lineno"> 3861</span>&#160; <span class="comment">// Attach a demon that will watch the min or the max of the expression.</span></div><div class="line"><a name="l03862"></a><span class="lineno"> 3862</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntExpr.html#a845a3c3c71323504f6b59f9c0ea46b08">WhenRange</a>(<a class="code" href="classoperations__research_1_1Solver.html#a87ca0b6abf9c8724900387f5aa557c04">Solver::Action</a> action) {</div><div class="line"><a name="l03863"></a><span class="lineno"> 3863</span>&#160; <a class="code" href="classoperations__research_1_1IntExpr.html#a845a3c3c71323504f6b59f9c0ea46b08">WhenRange</a>(<a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">solver</a>()-&gt;MakeActionDemon(std::move(action)));</div><div class="line"><a name="l03864"></a><span class="lineno"> 3864</span>&#160; }</div><div class="line"><a name="l03865"></a><span class="lineno"> 3865</span>&#160;<span class="preprocessor">#endif // SWIG</span></div><div class="line"><a name="l03866"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntExpr.html#a6d21b7e60b50a18a1591de348da6563e"> 3866</a></span>&#160;</div><div class="line"><a name="l03867"></a><span class="lineno"> 3867</span>&#160; <span class="comment">// Accepts the given visitor.</span></div><div class="line"><a name="l03868"></a><span class="lineno"> 3868</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntExpr.html#aa573e0d34def6539f939b4b81d506164">Accept</a>(<a class="code" href="classoperations__research_1_1ModelVisitor.html">ModelVisitor</a>* <span class="keyword">const</span> visitor) <span class="keyword">const</span>;</div><div class="line"><a name="l03869"></a><span class="lineno"> 3869</span>&#160;</div><div class="line"><a name="l03870"></a><span class="lineno"> 3870</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l03871"></a><span class="lineno"> 3871</span>&#160; DISALLOW_COPY_AND_ASSIGN(<a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>);</div><div class="line"><a name="l03872"></a><span class="lineno"> 3872</span>&#160;};</div><div class="line"><a name="l03873"></a><span class="lineno"> 3873</span>&#160;</div><div class="line"><a name="l03874"></a><span class="lineno"> 3874</span>&#160;<span class="comment">// The class Iterator has two direct subclasses. HoleIterators</span></div><div class="line"><a name="l03875"></a><span class="lineno"> 3875</span>&#160;<span class="comment">// iterates over all holes, that is value removed between the</span></div><div class="line"><a name="l03876"></a><span class="lineno"> 3876</span>&#160;<span class="comment">// current min and max of the variable since the last time the</span></div><div class="line"><a name="l03877"></a><span class="lineno"> 3877</span>&#160;<span class="comment">// variable was processed in the queue. DomainIterators iterates</span></div><div class="line"><a name="l03878"></a><span class="lineno"> 3878</span>&#160;<span class="comment">// over all elements of the variable domain. Both iterators are not</span></div><div class="line"><a name="l03879"></a><span class="lineno"> 3879</span>&#160;<span class="comment">// robust to domain changes. Hole iterators can also report values outside</span></div><div class="line"><a name="l03880"></a><span class="lineno"> 3880</span>&#160;<span class="comment">// the current min and max of the variable.</span></div><div class="line"><a name="l03881"></a><span class="lineno"> 3881</span>&#160;</div><div class="line"><a name="l03882"></a><span class="lineno"> 3882</span>&#160;<span class="comment">// HoleIterators should only be called from a demon attached to the</span></div><div class="line"><a name="l03883"></a><span class="lineno"> 3883</span>&#160;<span class="comment">// variable that has created this iterator.</span></div><div class="line"><a name="l03884"></a><span class="lineno"> 3884</span>&#160;</div><div class="line"><a name="l03885"></a><span class="lineno"> 3885</span>&#160;<span class="comment">// IntVar* current_var;</span></div><div class="line"><a name="l03886"></a><span class="lineno"> 3886</span>&#160;<span class="comment">// std::unique_ptr&lt;IntVarIterator&gt; it(current_var-&gt;MakeHoleIterator(false));</span></div><div class="line"><a name="l03887"></a><span class="lineno"> 3887</span>&#160;<span class="comment">// for (const int64 hole : InitAndGetValues(it)) {</span></div><div class="line"><a name="l03888"></a><span class="lineno"> 3888</span>&#160;<span class="comment">// // use the hole</span></div><div class="line"><a name="l03889"></a><span class="lineno"> 3889</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l03890"></a><span class="lineno"> 3890</span>&#160;</div><div class="line"><a name="l03891"></a><span class="lineno"> 3891</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1IntVarIterator.html">IntVarIterator</a> : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1BaseObject.html">BaseObject</a> {</div><div class="line"><a name="l03892"></a><span class="lineno"> 3892</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l03893"></a><span class="lineno"> 3893</span>&#160; <a class="code" href="classoperations__research_1_1IntVarIterator.html#a85fb1088ff1184b4cb867259ee512fc5">~IntVarIterator</a>()<span class="keyword"> override </span>{}</div><div class="line"><a name="l03894"></a><span class="lineno"> 3894</span>&#160;</div><div class="line"><a name="l03895"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntVarIterator.html"> 3895</a></span>&#160; <span class="comment">// This method must be called before each loop.</span></div><div class="line"><a name="l03896"></a><span class="lineno"> 3896</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntVarIterator.html#ac5e717b4d80a83e797fd6f996f040f8c">Init</a>() = 0;</div><div class="line"><a name="l03897"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntVarIterator.html#a85fb1088ff1184b4cb867259ee512fc5"> 3897</a></span>&#160;</div><div class="line"><a name="l03898"></a><span class="lineno"> 3898</span>&#160; <span class="comment">// This method indicates if we can call Value() or not.</span></div><div class="line"><a name="l03899"></a><span class="lineno"> 3899</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1IntVarIterator.html#a35ab3d4e05e41e87312043b3fbb803f4">Ok</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l03900"></a><span class="lineno"> 3900</span>&#160;</div><div class="line"><a name="l03901"></a><span class="lineno"> 3901</span>&#160; <span class="comment">// This method returns the current value of the iterator.</span></div><div class="line"><a name="l03902"></a><span class="lineno"> 3902</span>&#160; <span class="keyword">virtual</span> int64 <a class="code" href="classoperations__research_1_1IntVarIterator.html#a8cd71554efc9460ca2319bbe79574ffa">Value</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l03903"></a><span class="lineno"> 3903</span>&#160;</div><div class="line"><a name="l03904"></a><span class="lineno"> 3904</span>&#160; <span class="comment">// This method moves the iterator to the next value.</span></div><div class="line"><a name="l03905"></a><span class="lineno"> 3905</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntVarIterator.html#a7d3ca63d1636290367162ad3fb4f5157">Next</a>() = 0;</div><div class="line"><a name="l03906"></a><span class="lineno"> 3906</span>&#160;</div><div class="line"><a name="l03907"></a><span class="lineno"> 3907</span>&#160; <span class="comment">// Pretty Print.</span></div><div class="line"><a name="l03908"></a><span class="lineno"> 3908</span>&#160; std::string <a class="code" href="classoperations__research_1_1IntVarIterator.html#afcbc1c1ac6f9230d7037807d3dbd46dc">DebugString</a>()<span class="keyword"> const override </span>{ <span class="keywordflow">return</span> <span class="stringliteral">&quot;IntVar::Iterator&quot;</span>; }</div><div class="line"><a name="l03909"></a><span class="lineno"> 3909</span>&#160;};</div><div class="line"><a name="l03910"></a><span class="lineno"> 3910</span>&#160;</div><div class="line"><a name="l03911"></a><span class="lineno"> 3911</span>&#160;<span class="preprocessor">#ifndef SWIG</span></div><div class="line"><a name="l03912"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntVarIterator.html#afcbc1c1ac6f9230d7037807d3dbd46dc"> 3912</a></span>&#160;<span class="comment">// Utility class to encapsulate an IntVarIterator and use it in a range-based</span></div><div class="line"><a name="l03913"></a><span class="lineno"> 3913</span>&#160;<span class="comment">// loop. See the code snippet above IntVarIterator.</span></div><div class="line"><a name="l03914"></a><span class="lineno"> 3914</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l03915"></a><span class="lineno"> 3915</span>&#160;<span class="comment">// It contains DEBUG_MODE-enabled code that DCHECKs that the</span></div><div class="line"><a name="l03916"></a><span class="lineno"> 3916</span>&#160;<span class="comment">// same iterator instance isn&#39;t being iterated on in multiple places</span></div><div class="line"><a name="l03917"></a><span class="lineno"> 3917</span>&#160;<span class="comment">// simultaneously.</span></div><div class="line"><a name="l03918"></a><span class="lineno"> 3918</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1InitAndGetValues.html">InitAndGetValues</a> {</div><div class="line"><a name="l03919"></a><span class="lineno"> 3919</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l03920"></a><span class="lineno"> 3920</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classoperations__research_1_1InitAndGetValues.html#abb257dd5cc47ff82a1be987c6f0614c7">InitAndGetValues</a>(<a class="code" href="classoperations__research_1_1IntVarIterator.html">IntVarIterator</a>* it)</div><div class="line"><a name="l03921"></a><span class="lineno"> 3921</span>&#160; : it_(it), begin_was_called_(<span class="keyword">false</span>) {</div><div class="line"><a name="l03922"></a><span class="lineno"><a class="line" href="classoperations__research_1_1InitAndGetValues.html"> 3922</a></span>&#160; it_-&gt;<a class="code" href="classoperations__research_1_1IntVarIterator.html#ac5e717b4d80a83e797fd6f996f040f8c">Init</a>();</div><div class="line"><a name="l03923"></a><span class="lineno"> 3923</span>&#160; }</div><div class="line"><a name="l03924"></a><span class="lineno"><a class="line" href="classoperations__research_1_1InitAndGetValues.html#abb257dd5cc47ff82a1be987c6f0614c7"> 3924</a></span>&#160; <span class="keyword">struct </span><a class="code" href="structoperations__research_1_1InitAndGetValues_1_1Iterator.html">Iterator</a>;</div><div class="line"><a name="l03925"></a><span class="lineno"> 3925</span>&#160; <a class="code" href="structoperations__research_1_1InitAndGetValues_1_1Iterator.html">Iterator</a> <a class="code" href="classoperations__research_1_1InitAndGetValues.html#ac8c498a96d19ebb98b44b68b8f6820e8">begin</a>() {</div><div class="line"><a name="l03926"></a><span class="lineno"> 3926</span>&#160; <span class="keywordflow">if</span> (DEBUG_MODE) {</div><div class="line"><a name="l03927"></a><span class="lineno"> 3927</span>&#160; DCHECK(!begin_was_called_);</div><div class="line"><a name="l03928"></a><span class="lineno"> 3928</span>&#160; begin_was_called_ = <span class="keyword">true</span>;</div><div class="line"><a name="l03929"></a><span class="lineno"><a class="line" href="classoperations__research_1_1InitAndGetValues.html#ac8c498a96d19ebb98b44b68b8f6820e8"> 3929</a></span>&#160; }</div><div class="line"><a name="l03930"></a><span class="lineno"> 3930</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structoperations__research_1_1InitAndGetValues_1_1Iterator.html#a62a83485399dc0c4539d8791eb22673b">Iterator::Begin</a>(it_);</div><div class="line"><a name="l03931"></a><span class="lineno"> 3931</span>&#160; }</div><div class="line"><a name="l03932"></a><span class="lineno"> 3932</span>&#160; Iterator <a class="code" href="classoperations__research_1_1InitAndGetValues.html#a56ec665aa9b3314c60e52ab26e8f9fc6">end</a>() { <span class="keywordflow">return</span> <a class="code" href="structoperations__research_1_1InitAndGetValues_1_1Iterator.html#a0b89b39be2a5dbfe5f830521cff2e4bf">Iterator::End</a>(it_); }</div><div class="line"><a name="l03933"></a><span class="lineno"> 3933</span>&#160;</div><div class="line"><a name="l03934"></a><span class="lineno"> 3934</span>&#160; <span class="keyword">struct </span>Iterator {</div><div class="line"><a name="l03935"></a><span class="lineno"> 3935</span>&#160; <span class="comment">// These are the only way to construct an Iterator.</span></div><div class="line"><a name="l03936"></a><span class="lineno"><a class="line" href="classoperations__research_1_1InitAndGetValues.html#a56ec665aa9b3314c60e52ab26e8f9fc6"> 3936</a></span>&#160; <span class="keyword">static</span> <a class="code" href="structoperations__research_1_1InitAndGetValues_1_1Iterator.html">Iterator</a> <a class="code" href="structoperations__research_1_1InitAndGetValues_1_1Iterator.html#a62a83485399dc0c4539d8791eb22673b">Begin</a>(<a class="code" href="classoperations__research_1_1IntVarIterator.html">IntVarIterator</a>* it) {</div><div class="line"><a name="l03937"></a><span class="lineno"> 3937</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structoperations__research_1_1InitAndGetValues_1_1Iterator.html">Iterator</a>(it, <span class="comment">/*is_end=*/</span><span class="keyword">false</span>);</div><div class="line"><a name="l03938"></a><span class="lineno"><a class="line" href="structoperations__research_1_1InitAndGetValues_1_1Iterator.html"> 3938</a></span>&#160; }</div><div class="line"><a name="l03939"></a><span class="lineno"> 3939</span>&#160; <span class="keyword">static</span> <a class="code" href="structoperations__research_1_1InitAndGetValues_1_1Iterator.html">Iterator</a> <a class="code" href="structoperations__research_1_1InitAndGetValues_1_1Iterator.html#a0b89b39be2a5dbfe5f830521cff2e4bf">End</a>(<a class="code" href="classoperations__research_1_1IntVarIterator.html">IntVarIterator</a>* it) {</div><div class="line"><a name="l03940"></a><span class="lineno"><a class="line" href="structoperations__research_1_1InitAndGetValues_1_1Iterator.html#a62a83485399dc0c4539d8791eb22673b"> 3940</a></span>&#160; <span class="keywordflow">return</span> <a class="code" href="structoperations__research_1_1InitAndGetValues_1_1Iterator.html">Iterator</a>(it, <span class="comment">/*is_end=*/</span><span class="keyword">true</span>);</div><div class="line"><a name="l03941"></a><span class="lineno"> 3941</span>&#160; }</div><div class="line"><a name="l03942"></a><span class="lineno"> 3942</span>&#160;</div><div class="line"><a name="l03943"></a><span class="lineno"><a class="line" href="structoperations__research_1_1InitAndGetValues_1_1Iterator.html#a0b89b39be2a5dbfe5f830521cff2e4bf"> 3943</a></span>&#160; int64 <a class="code" href="structoperations__research_1_1InitAndGetValues_1_1Iterator.html#ad89645a8a6fb3eeb636b0ae211ae0ba9">operator*</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l03944"></a><span class="lineno"> 3944</span>&#160; DCHECK(it_-&gt;<a class="code" href="classoperations__research_1_1IntVarIterator.html#a35ab3d4e05e41e87312043b3fbb803f4">Ok</a>());</div><div class="line"><a name="l03945"></a><span class="lineno"> 3945</span>&#160; <span class="keywordflow">return</span> it_-&gt;<a class="code" href="classoperations__research_1_1IntVarIterator.html#a8cd71554efc9460ca2319bbe79574ffa">Value</a>();</div><div class="line"><a name="l03946"></a><span class="lineno"> 3946</span>&#160; }</div><div class="line"><a name="l03947"></a><span class="lineno"><a class="line" href="structoperations__research_1_1InitAndGetValues_1_1Iterator.html#ad89645a8a6fb3eeb636b0ae211ae0ba9"> 3947</a></span>&#160; <a class="code" href="structoperations__research_1_1InitAndGetValues_1_1Iterator.html">Iterator</a>&amp; <a class="code" href="structoperations__research_1_1InitAndGetValues_1_1Iterator.html#a6e4d3225cd724e3e121cdd74dd845d3e">operator++</a>() {</div><div class="line"><a name="l03948"></a><span class="lineno"> 3948</span>&#160; DCHECK(it_-&gt;<a class="code" href="classoperations__research_1_1IntVarIterator.html#a35ab3d4e05e41e87312043b3fbb803f4">Ok</a>());</div><div class="line"><a name="l03949"></a><span class="lineno"> 3949</span>&#160; it_-&gt;<a class="code" href="classoperations__research_1_1IntVarIterator.html#a7d3ca63d1636290367162ad3fb4f5157">Next</a>();</div><div class="line"><a name="l03950"></a><span class="lineno"> 3950</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l03951"></a><span class="lineno"><a class="line" href="structoperations__research_1_1InitAndGetValues_1_1Iterator.html#a6e4d3225cd724e3e121cdd74dd845d3e"> 3951</a></span>&#160; }</div><div class="line"><a name="l03952"></a><span class="lineno"> 3952</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="structoperations__research_1_1InitAndGetValues_1_1Iterator.html#a3122703d46de6eace75a3de40c92aba5">operator!=</a>(<span class="keyword">const</span> <a class="code" href="structoperations__research_1_1InitAndGetValues_1_1Iterator.html">Iterator</a>&amp; other)<span class="keyword"> const </span>{</div><div class="line"><a name="l03953"></a><span class="lineno"> 3953</span>&#160; DCHECK(other.it_ == it_);</div><div class="line"><a name="l03954"></a><span class="lineno"> 3954</span>&#160; DCHECK(other.is_end_);</div><div class="line"><a name="l03955"></a><span class="lineno"> 3955</span>&#160; <span class="keywordflow">return</span> it_-&gt;<a class="code" href="classoperations__research_1_1IntVarIterator.html#a35ab3d4e05e41e87312043b3fbb803f4">Ok</a>();</div><div class="line"><a name="l03956"></a><span class="lineno"><a class="line" href="structoperations__research_1_1InitAndGetValues_1_1Iterator.html#a3122703d46de6eace75a3de40c92aba5"> 3956</a></span>&#160; }</div><div class="line"><a name="l03957"></a><span class="lineno"> 3957</span>&#160;</div><div class="line"><a name="l03958"></a><span class="lineno"> 3958</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l03959"></a><span class="lineno"> 3959</span>&#160; <a class="code" href="structoperations__research_1_1InitAndGetValues_1_1Iterator.html">Iterator</a>(<a class="code" href="classoperations__research_1_1IntVarIterator.html">IntVarIterator</a>* it, <span class="keywordtype">bool</span> is_end) : it_(it), is_end_(is_end) {}</div><div class="line"><a name="l03960"></a><span class="lineno"> 3960</span>&#160;</div><div class="line"><a name="l03961"></a><span class="lineno"> 3961</span>&#160; <a class="code" href="classoperations__research_1_1IntVarIterator.html">IntVarIterator</a>* <span class="keyword">const</span> it_;</div><div class="line"><a name="l03962"></a><span class="lineno"> 3962</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> is_end_;</div><div class="line"><a name="l03963"></a><span class="lineno"> 3963</span>&#160; };</div><div class="line"><a name="l03964"></a><span class="lineno"> 3964</span>&#160;</div><div class="line"><a name="l03965"></a><span class="lineno"> 3965</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l03966"></a><span class="lineno"> 3966</span>&#160; IntVarIterator* <span class="keyword">const</span> it_;</div><div class="line"><a name="l03967"></a><span class="lineno"> 3967</span>&#160; <span class="keywordtype">bool</span> begin_was_called_;</div><div class="line"><a name="l03968"></a><span class="lineno"> 3968</span>&#160;};</div><div class="line"><a name="l03969"></a><span class="lineno"> 3969</span>&#160;<span class="preprocessor">#endif // SWIG</span></div><div class="line"><a name="l03970"></a><span class="lineno"> 3970</span>&#160;</div><div class="line"><a name="l03971"></a><span class="lineno"> 3971</span>&#160;<span class="comment">// The class IntVar is a subset of IntExpr. In addition to the</span></div><div class="line"><a name="l03972"></a><span class="lineno"> 3972</span>&#160;<span class="comment">// IntExpr protocol, it offers persistence, removing values from the domains,</span></div><div class="line"><a name="l03973"></a><span class="lineno"> 3973</span>&#160;<span class="comment">// and a finer model for events.</span></div><div class="line"><a name="l03974"></a><span class="lineno"> 3974</span>&#160;<span class="keyword">class </span>IntVar : <span class="keyword">public</span> IntExpr {</div><div class="line"><a name="l03975"></a><span class="lineno"> 3975</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l03976"></a><span class="lineno"> 3976</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classoperations__research_1_1IntVar.html#a119cae716dbbdaa31b476ef904c99776">IntVar</a>(Solver* <span class="keyword">const</span> s);</div><div class="line"><a name="l03977"></a><span class="lineno"> 3977</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html#a119cae716dbbdaa31b476ef904c99776">IntVar</a>(Solver* <span class="keyword">const</span> s, <span class="keyword">const</span> std::string&amp; <a class="code" href="classoperations__research_1_1PropagationBaseObject.html#a8be8b75223b76744791e48747677cdb6">name</a>);</div><div class="line"><a name="l03978"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntVar.html"> 3978</a></span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html#ab6acebb20eb1a885ca1313d759db0bdb">~IntVar</a>()<span class="keyword"> override </span>{}</div><div class="line"><a name="l03979"></a><span class="lineno"> 3979</span>&#160;</div><div class="line"><a name="l03980"></a><span class="lineno"> 3980</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1IntVar.html#a1e8732e1343228cbe86db9c986aa48d4">IsVar</a>()<span class="keyword"> const override </span>{ <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l03981"></a><span class="lineno"> 3981</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html#a119cae716dbbdaa31b476ef904c99776">IntVar</a>* <a class="code" href="classoperations__research_1_1IntVar.html#ac65d53711c52b0988b7e8fb81e79aeb9">Var</a>()<span class="keyword"> override </span>{ <span class="keywordflow">return</span> <span class="keyword">this</span>; }</div><div class="line"><a name="l03982"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntVar.html#ab6acebb20eb1a885ca1313d759db0bdb"> 3982</a></span>&#160;</div><div class="line"><a name="l03983"></a><span class="lineno"> 3983</span>&#160; <span class="comment">// This method returns the value of the variable. This method checks</span></div><div class="line"><a name="l03984"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntVar.html#a1e8732e1343228cbe86db9c986aa48d4"> 3984</a></span>&#160; <span class="comment">// before that the variable is bound.</span></div><div class="line"><a name="l03985"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntVar.html#ac65d53711c52b0988b7e8fb81e79aeb9"> 3985</a></span>&#160; <span class="keyword">virtual</span> int64 <a class="code" href="classoperations__research_1_1IntVar.html#ab84b786a2128f72fc720ae611e880499">Value</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l03986"></a><span class="lineno"> 3986</span>&#160;</div><div class="line"><a name="l03987"></a><span class="lineno"> 3987</span>&#160; <span class="comment">// This method removes the value &#39;v&#39; from the domain of the variable.</span></div><div class="line"><a name="l03988"></a><span class="lineno"> 3988</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntVar.html#afa4460e0dd9745ad24b99d08d853f3a4">RemoveValue</a>(int64 v) = 0;</div><div class="line"><a name="l03989"></a><span class="lineno"> 3989</span>&#160;</div><div class="line"><a name="l03990"></a><span class="lineno"> 3990</span>&#160; <span class="comment">// This method removes the interval &#39;l&#39; .. &#39;u&#39; from the domain of</span></div><div class="line"><a name="l03991"></a><span class="lineno"> 3991</span>&#160; <span class="comment">// the variable. It assumes that &#39;l&#39; &lt;= &#39;u&#39;.</span></div><div class="line"><a name="l03992"></a><span class="lineno"> 3992</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntVar.html#a3316193a23988b72bd52ada02859efb0">RemoveInterval</a>(int64 l, int64 u) = 0;</div><div class="line"><a name="l03993"></a><span class="lineno"> 3993</span>&#160;</div><div class="line"><a name="l03994"></a><span class="lineno"> 3994</span>&#160; <span class="comment">// This method remove the values from the domain of the variable.</span></div><div class="line"><a name="l03995"></a><span class="lineno"> 3995</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntVar.html#ade36b093f22913a40c24d37575c28f38">RemoveValues</a>(<span class="keyword">const</span> std::vector&lt;int64&gt;&amp; values);</div><div class="line"><a name="l03996"></a><span class="lineno"> 3996</span>&#160;</div><div class="line"><a name="l03997"></a><span class="lineno"> 3997</span>&#160; <span class="comment">// This method intersects the current domain with the values in the array.</span></div><div class="line"><a name="l03998"></a><span class="lineno"> 3998</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntVar.html#a9b3717393d801dc1ca5ce32e55a73622">SetValues</a>(<span class="keyword">const</span> std::vector&lt;int64&gt;&amp; values);</div><div class="line"><a name="l03999"></a><span class="lineno"> 3999</span>&#160;</div><div class="line"><a name="l04000"></a><span class="lineno"> 4000</span>&#160; <span class="comment">// This method attaches a demon that will be awakened when the</span></div><div class="line"><a name="l04001"></a><span class="lineno"> 4001</span>&#160; <span class="comment">// variable is bound.</span></div><div class="line"><a name="l04002"></a><span class="lineno"> 4002</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntVar.html#a1501b060a0ae4f2ae77d8008479944ca">WhenBound</a>(<a class="code" href="classoperations__research_1_1Demon.html">Demon</a>* d) = 0;</div><div class="line"><a name="l04003"></a><span class="lineno"> 4003</span>&#160; <span class="comment">// This method attaches a closure that will be awakened when the</span></div><div class="line"><a name="l04004"></a><span class="lineno"> 4004</span>&#160; <span class="comment">// variable is bound.</span></div><div class="line"><a name="l04005"></a><span class="lineno"> 4005</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntVar.html#a1501b060a0ae4f2ae77d8008479944ca">WhenBound</a>(<a class="code" href="classoperations__research_1_1Solver.html#aab58d22b2215e79f8e3a9424fe186239">Solver::Closure</a> closure) {</div><div class="line"><a name="l04006"></a><span class="lineno"> 4006</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html#a1501b060a0ae4f2ae77d8008479944ca">WhenBound</a>(<a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">solver</a>()-&gt;MakeClosureDemon(std::move(closure)));</div><div class="line"><a name="l04007"></a><span class="lineno"> 4007</span>&#160; }</div><div class="line"><a name="l04008"></a><span class="lineno"> 4008</span>&#160;</div><div class="line"><a name="l04009"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntVar.html#a7b77bca97b9e8c80757ce1f8d3f985a6"> 4009</a></span>&#160;<span class="preprocessor">#if !defined(SWIG)</span></div><div class="line"><a name="l04010"></a><span class="lineno"> 4010</span>&#160; <span class="comment">// This method attaches an action that will be awakened when the</span></div><div class="line"><a name="l04011"></a><span class="lineno"> 4011</span>&#160; <span class="comment">// variable is bound.</span></div><div class="line"><a name="l04012"></a><span class="lineno"> 4012</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntVar.html#a1501b060a0ae4f2ae77d8008479944ca">WhenBound</a>(<a class="code" href="classoperations__research_1_1Solver.html#a87ca0b6abf9c8724900387f5aa557c04">Solver::Action</a> action) {</div><div class="line"><a name="l04013"></a><span class="lineno"> 4013</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html#a1501b060a0ae4f2ae77d8008479944ca">WhenBound</a>(<a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">solver</a>()-&gt;MakeActionDemon(std::move(action)));</div><div class="line"><a name="l04014"></a><span class="lineno"> 4014</span>&#160; }</div><div class="line"><a name="l04015"></a><span class="lineno"> 4015</span>&#160;<span class="preprocessor">#endif // SWIG</span></div><div class="line"><a name="l04016"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntVar.html#a5ed044357d490a6a2fd91b6bc180039e"> 4016</a></span>&#160;</div><div class="line"><a name="l04017"></a><span class="lineno"> 4017</span>&#160; <span class="comment">// This method attaches a demon that will watch any domain</span></div><div class="line"><a name="l04018"></a><span class="lineno"> 4018</span>&#160; <span class="comment">// modification of the domain of the variable.</span></div><div class="line"><a name="l04019"></a><span class="lineno"> 4019</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntVar.html#a16770c4e77b7c3bae7f706661aae94fb">WhenDomain</a>(<a class="code" href="classoperations__research_1_1Demon.html">Demon</a>* d) = 0;</div><div class="line"><a name="l04020"></a><span class="lineno"> 4020</span>&#160; <span class="comment">// This method attaches a closure that will watch any domain</span></div><div class="line"><a name="l04021"></a><span class="lineno"> 4021</span>&#160; <span class="comment">// modification of the domain of the variable.</span></div><div class="line"><a name="l04022"></a><span class="lineno"> 4022</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntVar.html#a16770c4e77b7c3bae7f706661aae94fb">WhenDomain</a>(<a class="code" href="classoperations__research_1_1Solver.html#aab58d22b2215e79f8e3a9424fe186239">Solver::Closure</a> closure) {</div><div class="line"><a name="l04023"></a><span class="lineno"> 4023</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html#a16770c4e77b7c3bae7f706661aae94fb">WhenDomain</a>(<a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">solver</a>()-&gt;MakeClosureDemon(std::move(closure)));</div><div class="line"><a name="l04024"></a><span class="lineno"> 4024</span>&#160; }</div><div class="line"><a name="l04025"></a><span class="lineno"> 4025</span>&#160;<span class="preprocessor">#if !defined(SWIG)</span></div><div class="line"><a name="l04026"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntVar.html#a8540cc984d3c888633b4a741e052260d"> 4026</a></span>&#160; <span class="comment">// This method attaches an action that will watch any domain</span></div><div class="line"><a name="l04027"></a><span class="lineno"> 4027</span>&#160; <span class="comment">// modification of the domain of the variable.</span></div><div class="line"><a name="l04028"></a><span class="lineno"> 4028</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntVar.html#a16770c4e77b7c3bae7f706661aae94fb">WhenDomain</a>(<a class="code" href="classoperations__research_1_1Solver.html#a87ca0b6abf9c8724900387f5aa557c04">Solver::Action</a> action) {</div><div class="line"><a name="l04029"></a><span class="lineno"> 4029</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html#a16770c4e77b7c3bae7f706661aae94fb">WhenDomain</a>(<a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">solver</a>()-&gt;MakeActionDemon(std::move(action)));</div><div class="line"><a name="l04030"></a><span class="lineno"> 4030</span>&#160; }</div><div class="line"><a name="l04031"></a><span class="lineno"> 4031</span>&#160;<span class="preprocessor">#endif // SWIG</span></div><div class="line"><a name="l04032"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntVar.html#a549ce691c8ea0477891f7caf86d8ab37"> 4032</a></span>&#160;</div><div class="line"><a name="l04033"></a><span class="lineno"> 4033</span>&#160; <span class="comment">// This method returns the number of values in the domain of the variable.</span></div><div class="line"><a name="l04034"></a><span class="lineno"> 4034</span>&#160; <span class="keyword">virtual</span> uint64 <a class="code" href="classoperations__research_1_1IntVar.html#a26efd8a51314b318dc14641e90af5c3a">Size</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l04035"></a><span class="lineno"> 4035</span>&#160;</div><div class="line"><a name="l04036"></a><span class="lineno"> 4036</span>&#160; <span class="comment">// This method returns whether the value &#39;v&#39; is in the domain of the variable.</span></div><div class="line"><a name="l04037"></a><span class="lineno"> 4037</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1IntVar.html#a6e297b67956343bed8a4aece6a2c88a3">Contains</a>(int64 v) <span class="keyword">const</span> = 0;</div><div class="line"><a name="l04038"></a><span class="lineno"> 4038</span>&#160;</div><div class="line"><a name="l04039"></a><span class="lineno"> 4039</span>&#160; <span class="comment">// Creates a hole iterator. When &#39;reversible&#39; is false, the returned</span></div><div class="line"><a name="l04040"></a><span class="lineno"> 4040</span>&#160; <span class="comment">// object is created on the normal C++ heap and the solver does NOT</span></div><div class="line"><a name="l04041"></a><span class="lineno"> 4041</span>&#160; <span class="comment">// take ownership of the object.</span></div><div class="line"><a name="l04042"></a><span class="lineno"> 4042</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classoperations__research_1_1IntVarIterator.html">IntVarIterator</a>* <a class="code" href="classoperations__research_1_1IntVar.html#a68e475702b2e14bf968256ec36cccad7">MakeHoleIterator</a>(<span class="keywordtype">bool</span> reversible) <span class="keyword">const</span> = 0;</div><div class="line"><a name="l04043"></a><span class="lineno"> 4043</span>&#160;</div><div class="line"><a name="l04044"></a><span class="lineno"> 4044</span>&#160; <span class="comment">// Creates a domain iterator. When &#39;reversible&#39; is false, the</span></div><div class="line"><a name="l04045"></a><span class="lineno"> 4045</span>&#160; <span class="comment">// returned object is created on the normal C++ heap and the solver</span></div><div class="line"><a name="l04046"></a><span class="lineno"> 4046</span>&#160; <span class="comment">// does NOT take ownership of the object.</span></div><div class="line"><a name="l04047"></a><span class="lineno"> 4047</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classoperations__research_1_1IntVarIterator.html">IntVarIterator</a>* <a class="code" href="classoperations__research_1_1IntVar.html#ad371f5411c3f0aa0424181fc9936a2fb">MakeDomainIterator</a>(<span class="keywordtype">bool</span> reversible) <span class="keyword">const</span> = 0;</div><div class="line"><a name="l04048"></a><span class="lineno"> 4048</span>&#160;</div><div class="line"><a name="l04049"></a><span class="lineno"> 4049</span>&#160; <span class="comment">// Returns the previous min.</span></div><div class="line"><a name="l04050"></a><span class="lineno"> 4050</span>&#160; <span class="keyword">virtual</span> int64 <a class="code" href="classoperations__research_1_1IntVar.html#a894ecb1c102fa7fca59661a215f14d50">OldMin</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l04051"></a><span class="lineno"> 4051</span>&#160;</div><div class="line"><a name="l04052"></a><span class="lineno"> 4052</span>&#160; <span class="comment">// Returns the previous max.</span></div><div class="line"><a name="l04053"></a><span class="lineno"> 4053</span>&#160; <span class="keyword">virtual</span> int64 <a class="code" href="classoperations__research_1_1IntVar.html#a619ac58213bbff56398934e76dd1079f">OldMax</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l04054"></a><span class="lineno"> 4054</span>&#160;</div><div class="line"><a name="l04055"></a><span class="lineno"> 4055</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">int</span> <a class="code" href="classoperations__research_1_1IntVar.html#a53bfcce0b60a6c491992811a8453aa86">VarType</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l04056"></a><span class="lineno"> 4056</span>&#160;</div><div class="line"><a name="l04057"></a><span class="lineno"> 4057</span>&#160; <span class="comment">// Accepts the given visitor.</span></div><div class="line"><a name="l04058"></a><span class="lineno"> 4058</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntVar.html#a6d8841341ab21ef119c0b7df02785a48">Accept</a>(<a class="code" href="classoperations__research_1_1ModelVisitor.html">ModelVisitor</a>* <span class="keyword">const</span> visitor) <span class="keyword">const override</span>;</div><div class="line"><a name="l04059"></a><span class="lineno"> 4059</span>&#160;</div><div class="line"><a name="l04060"></a><span class="lineno"> 4060</span>&#160; <span class="comment">// IsEqual</span></div><div class="line"><a name="l04061"></a><span class="lineno"> 4061</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1IntVar.html#adf461eaaf6bcf01239e77fa8ed407ff0">IsEqual</a>(int64 constant) = 0;</div><div class="line"><a name="l04062"></a><span class="lineno"> 4062</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1IntVar.html#a791449c48c24075f82b47848038b5ffd">IsDifferent</a>(int64 constant) = 0;</div><div class="line"><a name="l04063"></a><span class="lineno"> 4063</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1IntVar.html#a4566c3b4fe20baa14354525be9b31bca">IsGreaterOrEqual</a>(int64 constant) = 0;</div><div class="line"><a name="l04064"></a><span class="lineno"> 4064</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1IntVar.html#af5197b4635e1581a9bdecdfba44d2428">IsLessOrEqual</a>(int64 constant) = 0;</div><div class="line"><a name="l04065"></a><span class="lineno"> 4065</span>&#160;</div><div class="line"><a name="l04066"></a><span class="lineno"> 4066</span>&#160; <span class="comment">// Returns the index of the variable.</span></div><div class="line"><a name="l04067"></a><span class="lineno"> 4067</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classoperations__research_1_1IntVar.html#a49fb18ac443f329969336d1d685269ed">index</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> index_; }</div><div class="line"><a name="l04068"></a><span class="lineno"> 4068</span>&#160;</div><div class="line"><a name="l04069"></a><span class="lineno"> 4069</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l04070"></a><span class="lineno"> 4070</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> index_;</div><div class="line"><a name="l04071"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntVar.html#a49fb18ac443f329969336d1d685269ed"> 4071</a></span>&#160; DISALLOW_COPY_AND_ASSIGN(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>);</div><div class="line"><a name="l04072"></a><span class="lineno"> 4072</span>&#160;};</div><div class="line"><a name="l04073"></a><span class="lineno"> 4073</span>&#160;</div><div class="line"><a name="l04074"></a><span class="lineno"> 4074</span>&#160;<span class="comment">// ---------- Solution Collectors ----------</span></div><div class="line"><a name="l04075"></a><span class="lineno"> 4075</span>&#160;</div><div class="line"><a name="l04076"></a><span class="lineno"> 4076</span>&#160;<span class="comment">// This class is the root class of all solution collectors.</span></div><div class="line"><a name="l04077"></a><span class="lineno"> 4077</span>&#160;<span class="comment">// It implements a basic query API to be used independently</span></div><div class="line"><a name="l04078"></a><span class="lineno"> 4078</span>&#160;<span class="comment">// of the collector used.</span></div><div class="line"><a name="l04079"></a><span class="lineno"> 4079</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1SolutionCollector.html">SolutionCollector</a> : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a> {</div><div class="line"><a name="l04080"></a><span class="lineno"> 4080</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l04081"></a><span class="lineno"> 4081</span>&#160; <a class="code" href="classoperations__research_1_1SolutionCollector.html#a9e64163be6305d1ff5330b472f70a7bb">SolutionCollector</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html#a6c4b4a82d20104f3ca8729244dd9cc2e">solver</a>, <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>* assignment);</div><div class="line"><a name="l04082"></a><span class="lineno"> 4082</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classoperations__research_1_1SolutionCollector.html#a9e64163be6305d1ff5330b472f70a7bb">SolutionCollector</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html#a6c4b4a82d20104f3ca8729244dd9cc2e">solver</a>);</div><div class="line"><a name="l04083"></a><span class="lineno"><a class="line" href="classoperations__research_1_1SolutionCollector.html"> 4083</a></span>&#160; <a class="code" href="classoperations__research_1_1SolutionCollector.html#a3497b80aeb8089fd23eff150d1ca832d">~SolutionCollector</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l04084"></a><span class="lineno"> 4084</span>&#160; std::string <a class="code" href="classoperations__research_1_1SolutionCollector.html#a13b2487c422d35cd36e9bfbc2810c652">DebugString</a>()<span class="keyword"> const override </span>{ <span class="keywordflow">return</span> <span class="stringliteral">&quot;SolutionCollector&quot;</span>; }</div><div class="line"><a name="l04085"></a><span class="lineno"> 4085</span>&#160;</div><div class="line"><a name="l04086"></a><span class="lineno"> 4086</span>&#160; <span class="comment">// Add API.</span></div><div class="line"><a name="l04087"></a><span class="lineno"> 4087</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SolutionCollector.html#a9f32dc165d6a4c1c09121ecd666a85b2">Add</a>(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var);</div><div class="line"><a name="l04088"></a><span class="lineno"><a class="line" href="classoperations__research_1_1SolutionCollector.html#a13b2487c422d35cd36e9bfbc2810c652"> 4088</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SolutionCollector.html#a9f32dc165d6a4c1c09121ecd666a85b2">Add</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars);</div><div class="line"><a name="l04089"></a><span class="lineno"> 4089</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SolutionCollector.html#a9f32dc165d6a4c1c09121ecd666a85b2">Add</a>(<a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var);</div><div class="line"><a name="l04090"></a><span class="lineno"> 4090</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SolutionCollector.html#a9f32dc165d6a4c1c09121ecd666a85b2">Add</a>(<span class="keyword">const</span> std::vector&lt;IntervalVar*&gt;&amp; vars);</div><div class="line"><a name="l04091"></a><span class="lineno"> 4091</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SolutionCollector.html#a9f32dc165d6a4c1c09121ecd666a85b2">Add</a>(<a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a>* <span class="keyword">const</span> var);</div><div class="line"><a name="l04092"></a><span class="lineno"> 4092</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SolutionCollector.html#a9f32dc165d6a4c1c09121ecd666a85b2">Add</a>(<span class="keyword">const</span> std::vector&lt;SequenceVar*&gt;&amp; vars);</div><div class="line"><a name="l04093"></a><span class="lineno"> 4093</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SolutionCollector.html#a9661ec736470edba26f92dfac906a114">AddObjective</a>(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> objective);</div><div class="line"><a name="l04094"></a><span class="lineno"> 4094</span>&#160;</div><div class="line"><a name="l04095"></a><span class="lineno"> 4095</span>&#160; <span class="comment">// Beginning of the search.</span></div><div class="line"><a name="l04096"></a><span class="lineno"> 4096</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SolutionCollector.html#a3e34da6922cd5c7c03ef9186de8fcf36">EnterSearch</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l04097"></a><span class="lineno"> 4097</span>&#160;</div><div class="line"><a name="l04098"></a><span class="lineno"> 4098</span>&#160; <span class="comment">// Returns how many solutions were stored during the search.</span></div><div class="line"><a name="l04099"></a><span class="lineno"> 4099</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classoperations__research_1_1SolutionCollector.html#a7e431c9d2ecc17d670c7d39ae12dbb1f">solution_count</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l04100"></a><span class="lineno"> 4100</span>&#160;</div><div class="line"><a name="l04101"></a><span class="lineno"> 4101</span>&#160; <span class="comment">// Returns the nth solution.</span></div><div class="line"><a name="l04102"></a><span class="lineno"> 4102</span>&#160; <a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>* <a class="code" href="classoperations__research_1_1SolutionCollector.html#ae8960240e82f61c3f93c1a81842d29f0">solution</a>(<span class="keywordtype">int</span> n) <span class="keyword">const</span>;</div><div class="line"><a name="l04103"></a><span class="lineno"> 4103</span>&#160;</div><div class="line"><a name="l04104"></a><span class="lineno"> 4104</span>&#160; <span class="comment">// Returns the wall time in ms for the nth solution.</span></div><div class="line"><a name="l04105"></a><span class="lineno"> 4105</span>&#160; int64 <a class="code" href="classoperations__research_1_1SolutionCollector.html#a6705ad4a1718e453d0f969901cd77cea">wall_time</a>(<span class="keywordtype">int</span> n) <span class="keyword">const</span>;</div><div class="line"><a name="l04106"></a><span class="lineno"> 4106</span>&#160;</div><div class="line"><a name="l04107"></a><span class="lineno"> 4107</span>&#160; <span class="comment">// Returns the number of branches when the nth solution was found.</span></div><div class="line"><a name="l04108"></a><span class="lineno"> 4108</span>&#160; int64 <a class="code" href="classoperations__research_1_1SolutionCollector.html#a44ccf194f93a5b1fb2dd15f821d070a1">branches</a>(<span class="keywordtype">int</span> n) <span class="keyword">const</span>;</div><div class="line"><a name="l04109"></a><span class="lineno"> 4109</span>&#160;</div><div class="line"><a name="l04110"></a><span class="lineno"> 4110</span>&#160; <span class="comment">// Returns the number of failures encountered at the time of the nth</span></div><div class="line"><a name="l04111"></a><span class="lineno"> 4111</span>&#160; <span class="comment">// solution.</span></div><div class="line"><a name="l04112"></a><span class="lineno"> 4112</span>&#160; int64 <a class="code" href="classoperations__research_1_1SolutionCollector.html#a17269925652c762db15e61d86b2d9b72">failures</a>(<span class="keywordtype">int</span> n) <span class="keyword">const</span>;</div><div class="line"><a name="l04113"></a><span class="lineno"> 4113</span>&#160;</div><div class="line"><a name="l04114"></a><span class="lineno"> 4114</span>&#160; <span class="comment">// Returns the objective value of the nth solution.</span></div><div class="line"><a name="l04115"></a><span class="lineno"> 4115</span>&#160; int64 <a class="code" href="classoperations__research_1_1SolutionCollector.html#a99f5a376a7479ced58f234f6d696094f">objective_value</a>(<span class="keywordtype">int</span> n) <span class="keyword">const</span>;</div><div class="line"><a name="l04116"></a><span class="lineno"> 4116</span>&#160;</div><div class="line"><a name="l04117"></a><span class="lineno"> 4117</span>&#160; <span class="comment">// This is a shortcut to get the Value of &#39;var&#39; in the nth solution.</span></div><div class="line"><a name="l04118"></a><span class="lineno"> 4118</span>&#160; int64 <a class="code" href="classoperations__research_1_1SolutionCollector.html#a78e202559c958cf7249d3e8ce6ab1b27">Value</a>(<span class="keywordtype">int</span> n, <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l04119"></a><span class="lineno"> 4119</span>&#160;</div><div class="line"><a name="l04120"></a><span class="lineno"> 4120</span>&#160; <span class="comment">// This is a shortcut to get the StartValue of &#39;var&#39; in the nth solution.</span></div><div class="line"><a name="l04121"></a><span class="lineno"> 4121</span>&#160; int64 <a class="code" href="classoperations__research_1_1SolutionCollector.html#a5f3395e17a51ad230b73c965e4387d39">StartValue</a>(<span class="keywordtype">int</span> n, <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l04122"></a><span class="lineno"> 4122</span>&#160;</div><div class="line"><a name="l04123"></a><span class="lineno"> 4123</span>&#160; <span class="comment">// This is a shortcut to get the EndValue of &#39;var&#39; in the nth solution.</span></div><div class="line"><a name="l04124"></a><span class="lineno"> 4124</span>&#160; int64 <a class="code" href="classoperations__research_1_1SolutionCollector.html#a5014e4129cfdbc7b0f7f6c06b0283fd2">EndValue</a>(<span class="keywordtype">int</span> n, <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l04125"></a><span class="lineno"> 4125</span>&#160;</div><div class="line"><a name="l04126"></a><span class="lineno"> 4126</span>&#160; <span class="comment">// This is a shortcut to get the DurationValue of &#39;var&#39; in the nth solution.</span></div><div class="line"><a name="l04127"></a><span class="lineno"> 4127</span>&#160; int64 <a class="code" href="classoperations__research_1_1SolutionCollector.html#ae6465359ff5ec74c5f4dcbc0d6e4a3df">DurationValue</a>(<span class="keywordtype">int</span> n, <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l04128"></a><span class="lineno"> 4128</span>&#160;</div><div class="line"><a name="l04129"></a><span class="lineno"> 4129</span>&#160; <span class="comment">// This is a shortcut to get the PerformedValue of &#39;var&#39; in the nth solution.</span></div><div class="line"><a name="l04130"></a><span class="lineno"> 4130</span>&#160; int64 <a class="code" href="classoperations__research_1_1SolutionCollector.html#ae47681f11a043b56dab58e533f017cef">PerformedValue</a>(<span class="keywordtype">int</span> n, <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l04131"></a><span class="lineno"> 4131</span>&#160;</div><div class="line"><a name="l04132"></a><span class="lineno"> 4132</span>&#160; <span class="comment">// This is a shortcut to get the ForwardSequence of &#39;var&#39; in the</span></div><div class="line"><a name="l04133"></a><span class="lineno"> 4133</span>&#160; <span class="comment">// nth solution. The forward sequence is the list of ranked interval</span></div><div class="line"><a name="l04134"></a><span class="lineno"> 4134</span>&#160; <span class="comment">// variables starting from the start of the sequence.</span></div><div class="line"><a name="l04135"></a><span class="lineno"> 4135</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; <a class="code" href="classoperations__research_1_1SolutionCollector.html#a02862f4b1f6f2c81e51e1d54da1a8533">ForwardSequence</a>(<span class="keywordtype">int</span> n, <a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l04136"></a><span class="lineno"> 4136</span>&#160; <span class="comment">// This is a shortcut to get the BackwardSequence of &#39;var&#39; in the</span></div><div class="line"><a name="l04137"></a><span class="lineno"> 4137</span>&#160; <span class="comment">// nth solution. The backward sequence is the list of ranked interval</span></div><div class="line"><a name="l04138"></a><span class="lineno"> 4138</span>&#160; <span class="comment">// variables starting from the end of the sequence.</span></div><div class="line"><a name="l04139"></a><span class="lineno"> 4139</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; <a class="code" href="classoperations__research_1_1SolutionCollector.html#ad5f73f593628e7d72088fb9e3b5a369d">BackwardSequence</a>(<span class="keywordtype">int</span> n, <a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l04140"></a><span class="lineno"> 4140</span>&#160; <span class="comment">// This is a shortcut to get the list of unperformed of &#39;var&#39; in the</span></div><div class="line"><a name="l04141"></a><span class="lineno"> 4141</span>&#160; <span class="comment">// nth solution.</span></div><div class="line"><a name="l04142"></a><span class="lineno"> 4142</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; <a class="code" href="classoperations__research_1_1SolutionCollector.html#ab70120f761b82d383eb431bc1cff51b6">Unperformed</a>(<span class="keywordtype">int</span> n, <a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l04143"></a><span class="lineno"> 4143</span>&#160;</div><div class="line"><a name="l04144"></a><span class="lineno"> 4144</span>&#160; <span class="keyword">protected</span>:</div><div class="line"><a name="l04145"></a><span class="lineno"> 4145</span>&#160; <span class="keyword">struct </span><a class="code" href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html">SolutionData</a> {</div><div class="line"><a name="l04146"></a><span class="lineno"> 4146</span>&#160; <a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>* <a class="code" href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html#a0e535f078ff1680ca4c2610d3d0c2afc">solution</a>;</div><div class="line"><a name="l04147"></a><span class="lineno"> 4147</span>&#160; int64 <a class="code" href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html#ae5d1c739b13b73a1975928b4d184807b">time</a>;</div><div class="line"><a name="l04148"></a><span class="lineno"> 4148</span>&#160; int64 <a class="code" href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html#ad72f24766540ebd09df0a41869945bf0">branches</a>;</div><div class="line"><a name="l04149"></a><span class="lineno"><a class="line" href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html"> 4149</a></span>&#160; int64 <a class="code" href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html#a40ee8d9d06d28d7e8c6c63b2a7b407fd">failures</a>;</div><div class="line"><a name="l04150"></a><span class="lineno"><a class="line" href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html#a0e535f078ff1680ca4c2610d3d0c2afc"> 4150</a></span>&#160; int64 <a class="code" href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html#affb63b3dbea54e1f5445aef70012f935">objective_value</a>;</div><div class="line"><a name="l04151"></a><span class="lineno"><a class="line" href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html#ae5d1c739b13b73a1975928b4d184807b"> 4151</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html#a4fd4a3e7f39bccab9df8deac462048b9">operator&lt;</a>(<span class="keyword">const</span> <a class="code" href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html">SolutionData</a>&amp; other)<span class="keyword"> const </span>{</div><div class="line"><a name="l04152"></a><span class="lineno"><a class="line" href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html#ad72f24766540ebd09df0a41869945bf0"> 4152</a></span>&#160; <span class="keywordflow">return</span> std::tie(<a class="code" href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html#a0e535f078ff1680ca4c2610d3d0c2afc">solution</a>, <a class="code" href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html#ae5d1c739b13b73a1975928b4d184807b">time</a>, <a class="code" href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html#ad72f24766540ebd09df0a41869945bf0">branches</a>, <a class="code" href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html#a40ee8d9d06d28d7e8c6c63b2a7b407fd">failures</a>, <a class="code" href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html#affb63b3dbea54e1f5445aef70012f935">objective_value</a>) &lt;</div><div class="line"><a name="l04153"></a><span class="lineno"><a class="line" href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html#a40ee8d9d06d28d7e8c6c63b2a7b407fd"> 4153</a></span>&#160; std::tie(other.<a class="code" href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html#a0e535f078ff1680ca4c2610d3d0c2afc">solution</a>, other.<a class="code" href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html#ae5d1c739b13b73a1975928b4d184807b">time</a>, other.<a class="code" href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html#ad72f24766540ebd09df0a41869945bf0">branches</a>,</div><div class="line"><a name="l04154"></a><span class="lineno"><a class="line" href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html#affb63b3dbea54e1f5445aef70012f935"> 4154</a></span>&#160; other.<a class="code" href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html#a40ee8d9d06d28d7e8c6c63b2a7b407fd">failures</a>, other.<a class="code" href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html#affb63b3dbea54e1f5445aef70012f935">objective_value</a>);</div><div class="line"><a name="l04155"></a><span class="lineno"><a class="line" href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html#a4fd4a3e7f39bccab9df8deac462048b9"> 4155</a></span>&#160; }</div><div class="line"><a name="l04156"></a><span class="lineno"> 4156</span>&#160; };</div><div class="line"><a name="l04157"></a><span class="lineno"> 4157</span>&#160;</div><div class="line"><a name="l04158"></a><span class="lineno"> 4158</span>&#160; <span class="comment">// Push the current state as a new solution.</span></div><div class="line"><a name="l04159"></a><span class="lineno"> 4159</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SolutionCollector.html#a917706361bb737a32be97259dae4c3f4">PushSolution</a>();</div><div class="line"><a name="l04160"></a><span class="lineno"> 4160</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SolutionCollector.html#a424f3f1c33e8a55ec2ad31d66b4fa226">Push</a>(<span class="keyword">const</span> SolutionData&amp; data) { <a class="code" href="classoperations__research_1_1SolutionCollector.html#ae4523b9fc891602c62af24e4961dfe74">solution_data_</a>.push_back(data); }</div><div class="line"><a name="l04161"></a><span class="lineno"> 4161</span>&#160; <span class="comment">// Remove and delete the last popped solution.</span></div><div class="line"><a name="l04162"></a><span class="lineno"> 4162</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SolutionCollector.html#a467ca023ad6d3a5c4ffbdba1391f80cb">PopSolution</a>();</div><div class="line"><a name="l04163"></a><span class="lineno"> 4163</span>&#160; SolutionData <a class="code" href="classoperations__research_1_1SolutionCollector.html#a4a8231d856858b0158109777f3ae57df">BuildSolutionDataForCurrentState</a>();</div><div class="line"><a name="l04164"></a><span class="lineno"><a class="line" href="classoperations__research_1_1SolutionCollector.html#a424f3f1c33e8a55ec2ad31d66b4fa226"> 4164</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SolutionCollector.html#a40ada0142b3eb38469bea03d0b9d51d4">FreeSolution</a>(<a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>* <a class="code" href="classoperations__research_1_1SolutionCollector.html#ae8960240e82f61c3f93c1a81842d29f0">solution</a>);</div><div class="line"><a name="l04165"></a><span class="lineno"> 4165</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SolutionCollector.html#a5cc8f57cec90beaa0f351e63f1fb24d9">check_index</a>(<span class="keywordtype">int</span> n) <span class="keyword">const</span>;</div><div class="line"><a name="l04166"></a><span class="lineno"> 4166</span>&#160;</div><div class="line"><a name="l04167"></a><span class="lineno"> 4167</span>&#160; std::unique_ptr&lt;Assignment&gt; <a class="code" href="classoperations__research_1_1SolutionCollector.html#ae75c29baf023cfde70a58b085efecf5f">prototype_</a>;</div><div class="line"><a name="l04168"></a><span class="lineno"> 4168</span>&#160; std::vector&lt;SolutionData&gt; <a class="code" href="classoperations__research_1_1SolutionCollector.html#ae4523b9fc891602c62af24e4961dfe74">solution_data_</a>;</div><div class="line"><a name="l04169"></a><span class="lineno"> 4169</span>&#160; std::vector&lt;Assignment*&gt; <a class="code" href="classoperations__research_1_1SolutionCollector.html#ad6d087dbee567cc2bf17ee84424a85fc">recycle_solutions_</a>;</div><div class="line"><a name="l04170"></a><span class="lineno"> 4170</span>&#160;</div><div class="line"><a name="l04171"></a><span class="lineno"><a class="line" href="classoperations__research_1_1SolutionCollector.html#ae75c29baf023cfde70a58b085efecf5f"> 4171</a></span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l04172"></a><span class="lineno"><a class="line" href="classoperations__research_1_1SolutionCollector.html#ae4523b9fc891602c62af24e4961dfe74"> 4172</a></span>&#160; DISALLOW_COPY_AND_ASSIGN(<a class="code" href="classoperations__research_1_1SolutionCollector.html">SolutionCollector</a>);</div><div class="line"><a name="l04173"></a><span class="lineno"><a class="line" href="classoperations__research_1_1SolutionCollector.html#ad6d087dbee567cc2bf17ee84424a85fc"> 4173</a></span>&#160;};</div><div class="line"><a name="l04174"></a><span class="lineno"> 4174</span>&#160;</div><div class="line"><a name="l04175"></a><span class="lineno"> 4175</span>&#160;<span class="comment">// TODO(user): Refactor this into an Objective class:</span></div><div class="line"><a name="l04176"></a><span class="lineno"> 4176</span>&#160;<span class="comment">// - print methods for AtNode and AtSolution.</span></div><div class="line"><a name="l04177"></a><span class="lineno"> 4177</span>&#160;<span class="comment">// - support for weighted objective and lexicographical objective.</span></div><div class="line"><a name="l04178"></a><span class="lineno"> 4178</span>&#160;</div><div class="line"><a name="l04179"></a><span class="lineno"> 4179</span>&#160;<span class="comment">// ---------- Objective Management ----------</span></div><div class="line"><a name="l04180"></a><span class="lineno"> 4180</span>&#160;</div><div class="line"><a name="l04181"></a><span class="lineno"> 4181</span>&#160;<span class="comment">// This class encapsulates an objective. It requires the direction</span></div><div class="line"><a name="l04182"></a><span class="lineno"> 4182</span>&#160;<span class="comment">// (minimize or maximize), the variable to optimize, and the</span></div><div class="line"><a name="l04183"></a><span class="lineno"> 4183</span>&#160;<span class="comment">// improvement step.</span></div><div class="line"><a name="l04184"></a><span class="lineno"> 4184</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1OptimizeVar.html">OptimizeVar</a> : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a> {</div><div class="line"><a name="l04185"></a><span class="lineno"> 4185</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l04186"></a><span class="lineno"> 4186</span>&#160; <a class="code" href="classoperations__research_1_1OptimizeVar.html#a869a6765e20963972d8bc3dd11645f33">OptimizeVar</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> s, <span class="keywordtype">bool</span> maximize, <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> a, int64 step);</div><div class="line"><a name="l04187"></a><span class="lineno"> 4187</span>&#160; <a class="code" href="classoperations__research_1_1OptimizeVar.html#a5f4f2dec1c3aaaac9f795c2b90023dcc">~OptimizeVar</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l04188"></a><span class="lineno"><a class="line" href="classoperations__research_1_1OptimizeVar.html"> 4188</a></span>&#160;</div><div class="line"><a name="l04189"></a><span class="lineno"> 4189</span>&#160; <span class="comment">// Returns the best value found during search.</span></div><div class="line"><a name="l04190"></a><span class="lineno"> 4190</span>&#160; int64 <a class="code" href="classoperations__research_1_1OptimizeVar.html#aecf2e4a608fd1836c0ebac6d7ee0d0ce">best</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoperations__research_1_1OptimizeVar.html#ac7b6348e2752a940f527c428636a977b">best_</a>; }</div><div class="line"><a name="l04191"></a><span class="lineno"> 4191</span>&#160;</div><div class="line"><a name="l04192"></a><span class="lineno"> 4192</span>&#160; <span class="comment">// Returns the variable that is optimized.</span></div><div class="line"><a name="l04193"></a><span class="lineno"> 4193</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1OptimizeVar.html#ac567620867f5e875168966d1c5abde7d">Var</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoperations__research_1_1OptimizeVar.html#a229d2a4ba25ff904b6504ba41161721a">var_</a>; }</div><div class="line"><a name="l04194"></a><span class="lineno"><a class="line" href="classoperations__research_1_1OptimizeVar.html#aecf2e4a608fd1836c0ebac6d7ee0d0ce"> 4194</a></span>&#160; <span class="comment">// Internal methods.</span></div><div class="line"><a name="l04195"></a><span class="lineno"> 4195</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1OptimizeVar.html#a964aef312aae5df04e7d0fe12060e614">AcceptDelta</a>(<a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>* delta, <a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>* deltadelta) <span class="keyword">override</span>;</div><div class="line"><a name="l04196"></a><span class="lineno"> 4196</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1OptimizeVar.html#ad003866ff381968298a0ebf83f1b18f0">EnterSearch</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l04197"></a><span class="lineno"><a class="line" href="classoperations__research_1_1OptimizeVar.html#ac567620867f5e875168966d1c5abde7d"> 4197</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1OptimizeVar.html#a046594f08d57c33248ac77101184e66c">BeginNextDecision</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> db) <span class="keyword">override</span>;</div><div class="line"><a name="l04198"></a><span class="lineno"> 4198</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1OptimizeVar.html#a56122e1a51788c21cba4fd3211e93084">RefuteDecision</a>(<a class="code" href="classoperations__research_1_1Decision.html">Decision</a>* <span class="keyword">const</span> d) <span class="keyword">override</span>;</div><div class="line"><a name="l04199"></a><span class="lineno"> 4199</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1OptimizeVar.html#ab50cd48d312f0e20afcd77b1bf1e94cb">AtSolution</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l04200"></a><span class="lineno"> 4200</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1OptimizeVar.html#aed1aff1da93b7d6ef67c9433a56e311a">AcceptSolution</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l04201"></a><span class="lineno"> 4201</span>&#160; <span class="keyword">virtual</span> std::string <a class="code" href="classoperations__research_1_1OptimizeVar.html#a6efc7277ebe0c6a15dd35687d9863017">Print</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l04202"></a><span class="lineno"> 4202</span>&#160; std::string <a class="code" href="classoperations__research_1_1OptimizeVar.html#ae2a7ca2a1d7ffb879e2d7794aa3875dc">DebugString</a>() <span class="keyword">const override</span>;</div><div class="line"><a name="l04203"></a><span class="lineno"> 4203</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1OptimizeVar.html#adcfad0327a52f24042b49aadb09f1b4d">Accept</a>(<a class="code" href="classoperations__research_1_1ModelVisitor.html">ModelVisitor</a>* <span class="keyword">const</span> visitor) <span class="keyword">const override</span>;</div><div class="line"><a name="l04204"></a><span class="lineno"> 4204</span>&#160;</div><div class="line"><a name="l04205"></a><span class="lineno"> 4205</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1OptimizeVar.html#a0a7e487cd5bdc3fa3a515765bb007fdd">ApplyBound</a>();</div><div class="line"><a name="l04206"></a><span class="lineno"> 4206</span>&#160;</div><div class="line"><a name="l04207"></a><span class="lineno"> 4207</span>&#160; <span class="keyword">protected</span>:</div><div class="line"><a name="l04208"></a><span class="lineno"> 4208</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1OptimizeVar.html#a229d2a4ba25ff904b6504ba41161721a">var_</a>;</div><div class="line"><a name="l04209"></a><span class="lineno"> 4209</span>&#160; int64 <a class="code" href="classoperations__research_1_1OptimizeVar.html#a0f1b41f6ab20eaf58d9c44340620b04e">step_</a>;</div><div class="line"><a name="l04210"></a><span class="lineno"> 4210</span>&#160; int64 <a class="code" href="classoperations__research_1_1OptimizeVar.html#ac7b6348e2752a940f527c428636a977b">best_</a>;</div><div class="line"><a name="l04211"></a><span class="lineno"> 4211</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1OptimizeVar.html#a7a8a943a24864d59725e423490e86dfb">maximize_</a>;</div><div class="line"><a name="l04212"></a><span class="lineno"><a class="line" href="classoperations__research_1_1OptimizeVar.html#a229d2a4ba25ff904b6504ba41161721a"> 4212</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1OptimizeVar.html#abc92b023a2273899160c0997007c6ca8">found_initial_solution_</a>;</div><div class="line"><a name="l04213"></a><span class="lineno"><a class="line" href="classoperations__research_1_1OptimizeVar.html#a0f1b41f6ab20eaf58d9c44340620b04e"> 4213</a></span>&#160;</div><div class="line"><a name="l04214"></a><span class="lineno"><a class="line" href="classoperations__research_1_1OptimizeVar.html#ac7b6348e2752a940f527c428636a977b"> 4214</a></span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l04215"></a><span class="lineno"><a class="line" href="classoperations__research_1_1OptimizeVar.html#a7a8a943a24864d59725e423490e86dfb"> 4215</a></span>&#160; DISALLOW_COPY_AND_ASSIGN(<a class="code" href="classoperations__research_1_1OptimizeVar.html">OptimizeVar</a>);</div><div class="line"><a name="l04216"></a><span class="lineno"><a class="line" href="classoperations__research_1_1OptimizeVar.html#abc92b023a2273899160c0997007c6ca8"> 4216</a></span>&#160;};</div><div class="line"><a name="l04217"></a><span class="lineno"> 4217</span>&#160;</div><div class="line"><a name="l04218"></a><span class="lineno"> 4218</span>&#160;<span class="comment">// ---------- Search Limits ----------</span></div><div class="line"><a name="l04219"></a><span class="lineno"> 4219</span>&#160;</div><div class="line"><a name="l04220"></a><span class="lineno"> 4220</span>&#160;<span class="comment">// Base class of all search limits.</span></div><div class="line"><a name="l04221"></a><span class="lineno"> 4221</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1SearchLimit.html">SearchLimit</a> : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1SearchMonitor.html">SearchMonitor</a> {</div><div class="line"><a name="l04222"></a><span class="lineno"> 4222</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l04223"></a><span class="lineno"> 4223</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classoperations__research_1_1SearchLimit.html#ae853c8ceb480c9d8e8ba355108c9b816">SearchLimit</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> s) : <a class="code" href="classoperations__research_1_1SearchMonitor.html#aa13f15c14e3a5237526cf6215f3b3077">SearchMonitor</a>(s), crossed_(<span class="keyword">false</span>) {}</div><div class="line"><a name="l04224"></a><span class="lineno"> 4224</span>&#160; <a class="code" href="classoperations__research_1_1SearchLimit.html#a0fe1a712b9cd0ea7dbb96a590d1684f7">~SearchLimit</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l04225"></a><span class="lineno"><a class="line" href="classoperations__research_1_1SearchLimit.html"> 4225</a></span>&#160;</div><div class="line"><a name="l04226"></a><span class="lineno"> 4226</span>&#160; <span class="comment">// Returns true if the limit has been crossed.</span></div><div class="line"><a name="l04227"></a><span class="lineno"><a class="line" href="classoperations__research_1_1SearchLimit.html#ae853c8ceb480c9d8e8ba355108c9b816"> 4227</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1SearchLimit.html#a5fce652e4e80c2ac089bdd70281feeb8">crossed</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> crossed_; }</div><div class="line"><a name="l04228"></a><span class="lineno"> 4228</span>&#160;</div><div class="line"><a name="l04229"></a><span class="lineno"> 4229</span>&#160; <span class="comment">// This method is called to check the status of the limit. A return</span></div><div class="line"><a name="l04230"></a><span class="lineno"> 4230</span>&#160; <span class="comment">// value of true indicates that we have indeed crossed the limit. In</span></div><div class="line"><a name="l04231"></a><span class="lineno"><a class="line" href="classoperations__research_1_1SearchLimit.html#a5fce652e4e80c2ac089bdd70281feeb8"> 4231</a></span>&#160; <span class="comment">// that case, this method will not be called again and the remaining</span></div><div class="line"><a name="l04232"></a><span class="lineno"> 4232</span>&#160; <span class="comment">// search will be discarded.</span></div><div class="line"><a name="l04233"></a><span class="lineno"> 4233</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1SearchLimit.html#a1cfadc6db5f71ebf750ab119a110d9f0">Check</a>() = 0;</div><div class="line"><a name="l04234"></a><span class="lineno"> 4234</span>&#160;</div><div class="line"><a name="l04235"></a><span class="lineno"> 4235</span>&#160; <span class="comment">// This method is called when the search limit is initialized.</span></div><div class="line"><a name="l04236"></a><span class="lineno"> 4236</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SearchLimit.html#aabfdc25c6657291757a2230513d51162">Init</a>() = 0;</div><div class="line"><a name="l04237"></a><span class="lineno"> 4237</span>&#160;</div><div class="line"><a name="l04238"></a><span class="lineno"> 4238</span>&#160; <span class="comment">// Copy a limit. Warning: leads to a direct (no check) downcasting of &#39;limit&#39;</span></div><div class="line"><a name="l04239"></a><span class="lineno"> 4239</span>&#160; <span class="comment">// so one needs to be sure both SearchLimits are of the same type.</span></div><div class="line"><a name="l04240"></a><span class="lineno"> 4240</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SearchLimit.html#a8f26a36c2c4d7738c37eba2ae7e26f3e">Copy</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1SearchLimit.html">SearchLimit</a>* <span class="keyword">const</span> limit) = 0;</div><div class="line"><a name="l04241"></a><span class="lineno"> 4241</span>&#160;</div><div class="line"><a name="l04242"></a><span class="lineno"> 4242</span>&#160; <span class="comment">// Allocates a clone of the limit.</span></div><div class="line"><a name="l04243"></a><span class="lineno"> 4243</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classoperations__research_1_1SearchLimit.html">SearchLimit</a>* <a class="code" href="classoperations__research_1_1SearchLimit.html#a011a3a7171696f1f440d753dcd5a1136">MakeClone</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l04244"></a><span class="lineno"> 4244</span>&#160;</div><div class="line"><a name="l04245"></a><span class="lineno"> 4245</span>&#160; <span class="comment">// Internal methods.</span></div><div class="line"><a name="l04246"></a><span class="lineno"> 4246</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SearchLimit.html#aa184196d0761829d7df21643bc498a01">EnterSearch</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l04247"></a><span class="lineno"> 4247</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SearchLimit.html#a4d58c37975405a86ef02fd0fdd7ed34f">BeginNextDecision</a>(<a class="code" href="classoperations__research_1_1DecisionBuilder.html">DecisionBuilder</a>* <span class="keyword">const</span> b) <span class="keyword">override</span>;</div><div class="line"><a name="l04248"></a><span class="lineno"> 4248</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SearchLimit.html#a5e78de48144b2c4446fb2847a525a061">PeriodicCheck</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l04249"></a><span class="lineno"> 4249</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SearchLimit.html#a3ce36720ef2cd8490199ac815d07a1d1">RefuteDecision</a>(<a class="code" href="classoperations__research_1_1Decision.html">Decision</a>* <span class="keyword">const</span> d) <span class="keyword">override</span>;</div><div class="line"><a name="l04250"></a><span class="lineno"> 4250</span>&#160; std::string <a class="code" href="classoperations__research_1_1SearchLimit.html#a1e65e704ea5249bc9c346b46449ff1ba">DebugString</a>()<span class="keyword"> const override </span>{</div><div class="line"><a name="l04251"></a><span class="lineno"> 4251</span>&#160; <span class="keywordflow">return</span> absl::StrFormat(<span class="stringliteral">&quot;SearchLimit(crossed = %i)&quot;</span>, crossed_);</div><div class="line"><a name="l04252"></a><span class="lineno"> 4252</span>&#160; }</div><div class="line"><a name="l04253"></a><span class="lineno"> 4253</span>&#160;</div><div class="line"><a name="l04254"></a><span class="lineno"><a class="line" href="classoperations__research_1_1SearchLimit.html#a1e65e704ea5249bc9c346b46449ff1ba"> 4254</a></span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l04255"></a><span class="lineno"> 4255</span>&#160; <span class="keywordtype">void</span> TopPeriodicCheck();</div><div class="line"><a name="l04256"></a><span class="lineno"> 4256</span>&#160;</div><div class="line"><a name="l04257"></a><span class="lineno"> 4257</span>&#160; <span class="keywordtype">bool</span> crossed_;</div><div class="line"><a name="l04258"></a><span class="lineno"> 4258</span>&#160; DISALLOW_COPY_AND_ASSIGN(<a class="code" href="classoperations__research_1_1SearchLimit.html">SearchLimit</a>);</div><div class="line"><a name="l04259"></a><span class="lineno"> 4259</span>&#160;};</div><div class="line"><a name="l04260"></a><span class="lineno"> 4260</span>&#160;</div><div class="line"><a name="l04261"></a><span class="lineno"> 4261</span>&#160;<span class="comment">// ----- Regular Limit -----</span></div><div class="line"><a name="l04262"></a><span class="lineno"> 4262</span>&#160;</div><div class="line"><a name="l04263"></a><span class="lineno"> 4263</span>&#160;<span class="comment">// Usual limit based on wall_time, number of explored branches and</span></div><div class="line"><a name="l04264"></a><span class="lineno"> 4264</span>&#160;<span class="comment">// number of failures in the search tree</span></div><div class="line"><a name="l04265"></a><span class="lineno"> 4265</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1RegularLimit.html">RegularLimit</a> : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1SearchLimit.html">SearchLimit</a> {</div><div class="line"><a name="l04266"></a><span class="lineno"> 4266</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l04267"></a><span class="lineno"> 4267</span>&#160; <a class="code" href="classoperations__research_1_1RegularLimit.html#ab40802726cee8567662a01a9ca06af97">RegularLimit</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> s, int64 time, int64 <a class="code" href="classoperations__research_1_1RegularLimit.html#a7c7b7fcaac46d6e0677703e92bf53bb0">branches</a>, int64 <a class="code" href="classoperations__research_1_1RegularLimit.html#a742f9399433cea90ac80e40b7a7cbf4c">failures</a>,</div><div class="line"><a name="l04268"></a><span class="lineno"> 4268</span>&#160; int64 <a class="code" href="classoperations__research_1_1RegularLimit.html#a96a95361f128c6725b5d76ba09239293">solutions</a>, <span class="keywordtype">bool</span> smart_time_check, <span class="keywordtype">bool</span> cumulative);</div><div class="line"><a name="l04269"></a><span class="lineno"><a class="line" href="classoperations__research_1_1RegularLimit.html"> 4269</a></span>&#160; <a class="code" href="classoperations__research_1_1RegularLimit.html#a549c9e71214a87f6a4ab59b113933721">~RegularLimit</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l04270"></a><span class="lineno"> 4270</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1RegularLimit.html#a255302e173fe3765a12bdac8cc893d89">Copy</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1SearchLimit.html">SearchLimit</a>* <span class="keyword">const</span> limit) <span class="keyword">override</span>;</div><div class="line"><a name="l04271"></a><span class="lineno"> 4271</span>&#160; <a class="code" href="classoperations__research_1_1SearchLimit.html">SearchLimit</a>* <a class="code" href="classoperations__research_1_1RegularLimit.html#a5c46712d4c0f5a5259111c343a084313">MakeClone</a>() <span class="keyword">const override</span>;</div><div class="line"><a name="l04272"></a><span class="lineno"> 4272</span>&#160; <a class="code" href="classoperations__research_1_1RegularLimit.html">RegularLimit</a>* <a class="code" href="classoperations__research_1_1RegularLimit.html#a8d79675478e6f3bc3536e278f71ab507">MakeIdenticalClone</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l04273"></a><span class="lineno"> 4273</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1RegularLimit.html#a19509391e38443b1bc38c5847125ff3d">Check</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l04274"></a><span class="lineno"> 4274</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1RegularLimit.html#a57e044adfe2b59e031d3772fc218eef7">Init</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l04275"></a><span class="lineno"> 4275</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1RegularLimit.html#a895d84c05da5c98c72e3662bf83ecc86">ExitSearch</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l04276"></a><span class="lineno"> 4276</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1RegularLimit.html#ae4077e4ee25c40a40eb2c320d916250d">UpdateLimits</a>(int64 time, int64 <a class="code" href="classoperations__research_1_1RegularLimit.html#a7c7b7fcaac46d6e0677703e92bf53bb0">branches</a>, int64 <a class="code" href="classoperations__research_1_1RegularLimit.html#a742f9399433cea90ac80e40b7a7cbf4c">failures</a>,</div><div class="line"><a name="l04277"></a><span class="lineno"> 4277</span>&#160; int64 <a class="code" href="classoperations__research_1_1RegularLimit.html#a96a95361f128c6725b5d76ba09239293">solutions</a>);</div><div class="line"><a name="l04278"></a><span class="lineno"> 4278</span>&#160; absl::Duration <a class="code" href="classoperations__research_1_1RegularLimit.html#a034b9632ef4574d05aa150cd7a0c613c">duration_limit</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> duration_limit_; }</div><div class="line"><a name="l04279"></a><span class="lineno"> 4279</span>&#160; int64 <a class="code" href="classoperations__research_1_1RegularLimit.html#a0ece3bd1f5a6a419a1c30fba713c6c8b">wall_time</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l04280"></a><span class="lineno"> 4280</span>&#160; <span class="keywordflow">return</span> duration_limit_ == absl::InfiniteDuration()</div><div class="line"><a name="l04281"></a><span class="lineno"> 4281</span>&#160; ? kint64max</div><div class="line"><a name="l04282"></a><span class="lineno"><a class="line" href="classoperations__research_1_1RegularLimit.html#a034b9632ef4574d05aa150cd7a0c613c"> 4282</a></span>&#160; : absl::ToInt64Milliseconds(<a class="code" href="classoperations__research_1_1RegularLimit.html#a034b9632ef4574d05aa150cd7a0c613c">duration_limit</a>());</div><div class="line"><a name="l04283"></a><span class="lineno"><a class="line" href="classoperations__research_1_1RegularLimit.html#a0ece3bd1f5a6a419a1c30fba713c6c8b"> 4283</a></span>&#160; }</div><div class="line"><a name="l04284"></a><span class="lineno"> 4284</span>&#160; int64 <a class="code" href="classoperations__research_1_1RegularLimit.html#a7c7b7fcaac46d6e0677703e92bf53bb0">branches</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> branches_; }</div><div class="line"><a name="l04285"></a><span class="lineno"> 4285</span>&#160; int64 <a class="code" href="classoperations__research_1_1RegularLimit.html#a742f9399433cea90ac80e40b7a7cbf4c">failures</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> failures_; }</div><div class="line"><a name="l04286"></a><span class="lineno"> 4286</span>&#160; int64 <a class="code" href="classoperations__research_1_1RegularLimit.html#a96a95361f128c6725b5d76ba09239293">solutions</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> solutions_; }</div><div class="line"><a name="l04287"></a><span class="lineno"> 4287</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1RegularLimit.html#a370e4934f9963fa9a440d0f8086a66a8">IsUncheckedSolutionLimitReached</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l04288"></a><span class="lineno"><a class="line" href="classoperations__research_1_1RegularLimit.html#a7c7b7fcaac46d6e0677703e92bf53bb0"> 4288</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classoperations__research_1_1RegularLimit.html#a71e06768288b2fd36acf28a435744d51">ProgressPercent</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l04289"></a><span class="lineno"><a class="line" href="classoperations__research_1_1RegularLimit.html#a742f9399433cea90ac80e40b7a7cbf4c"> 4289</a></span>&#160; std::string <a class="code" href="classoperations__research_1_1RegularLimit.html#a7a6e185350eade19733138b3d054bba9">DebugString</a>() <span class="keyword">const override</span>;</div><div class="line"><a name="l04290"></a><span class="lineno"><a class="line" href="classoperations__research_1_1RegularLimit.html#a96a95361f128c6725b5d76ba09239293"> 4290</a></span>&#160;</div><div class="line"><a name="l04291"></a><span class="lineno"> 4291</span>&#160; absl::Time <a class="code" href="classoperations__research_1_1RegularLimit.html#ab78472fc60e6e9f3a7920cba49f6cc72">AbsoluteSolverDeadline</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l04292"></a><span class="lineno"> 4292</span>&#160; <span class="keywordflow">return</span> solver_time_at_limit_start_ + duration_limit_;</div><div class="line"><a name="l04293"></a><span class="lineno"> 4293</span>&#160; }</div><div class="line"><a name="l04294"></a><span class="lineno"> 4294</span>&#160;</div><div class="line"><a name="l04295"></a><span class="lineno"><a class="line" href="classoperations__research_1_1RegularLimit.html#ab78472fc60e6e9f3a7920cba49f6cc72"> 4295</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1RegularLimit.html#a5971e2a299e94cd43e5aaf6675cf9dc7">Accept</a>(<a class="code" href="classoperations__research_1_1ModelVisitor.html">ModelVisitor</a>* <span class="keyword">const</span> visitor) <span class="keyword">const override</span>;</div><div class="line"><a name="l04296"></a><span class="lineno"> 4296</span>&#160;</div><div class="line"><a name="l04297"></a><span class="lineno"> 4297</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l04298"></a><span class="lineno"> 4298</span>&#160; <span class="keywordtype">bool</span> CheckTime();</div><div class="line"><a name="l04299"></a><span class="lineno"> 4299</span>&#160; absl::Duration TimeElapsed();</div><div class="line"><a name="l04300"></a><span class="lineno"> 4300</span>&#160; <span class="keyword">static</span> int64 GetPercent(int64 value, int64 offset, int64 total) {</div><div class="line"><a name="l04301"></a><span class="lineno"> 4301</span>&#160; <span class="keywordflow">return</span> (total &gt; 0 &amp;&amp; total &lt; kint64max) ? 100 * (value - offset) / total</div><div class="line"><a name="l04302"></a><span class="lineno"> 4302</span>&#160; : -1;</div><div class="line"><a name="l04303"></a><span class="lineno"> 4303</span>&#160; }</div><div class="line"><a name="l04304"></a><span class="lineno"> 4304</span>&#160;</div><div class="line"><a name="l04305"></a><span class="lineno"> 4305</span>&#160; absl::Duration duration_limit_;</div><div class="line"><a name="l04306"></a><span class="lineno"> 4306</span>&#160; absl::Time solver_time_at_limit_start_;</div><div class="line"><a name="l04307"></a><span class="lineno"> 4307</span>&#160; absl::Duration last_time_elapsed_;</div><div class="line"><a name="l04308"></a><span class="lineno"> 4308</span>&#160; int64 check_count_;</div><div class="line"><a name="l04309"></a><span class="lineno"> 4309</span>&#160; int64 next_check_;</div><div class="line"><a name="l04310"></a><span class="lineno"> 4310</span>&#160; <span class="keywordtype">bool</span> smart_time_check_;</div><div class="line"><a name="l04311"></a><span class="lineno"> 4311</span>&#160; int64 branches_;</div><div class="line"><a name="l04312"></a><span class="lineno"> 4312</span>&#160; int64 branches_offset_;</div><div class="line"><a name="l04313"></a><span class="lineno"> 4313</span>&#160; int64 failures_;</div><div class="line"><a name="l04314"></a><span class="lineno"> 4314</span>&#160; int64 failures_offset_;</div><div class="line"><a name="l04315"></a><span class="lineno"> 4315</span>&#160; int64 solutions_;</div><div class="line"><a name="l04316"></a><span class="lineno"> 4316</span>&#160; int64 solutions_offset_;</div><div class="line"><a name="l04317"></a><span class="lineno"> 4317</span>&#160; <span class="comment">// If cumulative if false, then the limit applies to each search</span></div><div class="line"><a name="l04318"></a><span class="lineno"> 4318</span>&#160; <span class="comment">// independently. If it&#39;s true, the limit applies globally to all search for</span></div><div class="line"><a name="l04319"></a><span class="lineno"> 4319</span>&#160; <span class="comment">// which this monitor is used.</span></div><div class="line"><a name="l04320"></a><span class="lineno"> 4320</span>&#160; <span class="comment">// When cumulative is true, the offset fields have two different meanings</span></div><div class="line"><a name="l04321"></a><span class="lineno"> 4321</span>&#160; <span class="comment">// depending on context:</span></div><div class="line"><a name="l04322"></a><span class="lineno"> 4322</span>&#160; <span class="comment">// - within a search, it&#39;s an offset to be subtracted from the current value</span></div><div class="line"><a name="l04323"></a><span class="lineno"> 4323</span>&#160; <span class="comment">// - outside of search, it&#39;s the amount consumed in previous searches</span></div><div class="line"><a name="l04324"></a><span class="lineno"> 4324</span>&#160; <span class="keywordtype">bool</span> cumulative_;</div><div class="line"><a name="l04325"></a><span class="lineno"> 4325</span>&#160;};</div><div class="line"><a name="l04326"></a><span class="lineno"> 4326</span>&#160;</div><div class="line"><a name="l04327"></a><span class="lineno"> 4327</span>&#160;<span class="comment">// ---------- Interval Var ----------</span></div><div class="line"><a name="l04328"></a><span class="lineno"> 4328</span>&#160;</div><div class="line"><a name="l04329"></a><span class="lineno"> 4329</span>&#160;<span class="comment">// Interval variables are often used in scheduling. The main characteristics</span></div><div class="line"><a name="l04330"></a><span class="lineno"> 4330</span>&#160;<span class="comment">// of an IntervalVar are the start position, duration, and end</span></div><div class="line"><a name="l04331"></a><span class="lineno"> 4331</span>&#160;<span class="comment">// date. All these characteristics can be queried and set, and demons can</span></div><div class="line"><a name="l04332"></a><span class="lineno"> 4332</span>&#160;<span class="comment">// be posted on their modifications.</span></div><div class="line"><a name="l04333"></a><span class="lineno"> 4333</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l04334"></a><span class="lineno"> 4334</span>&#160;<span class="comment">// An important aspect is optionality: an IntervalVar can be performed or not.</span></div><div class="line"><a name="l04335"></a><span class="lineno"> 4335</span>&#160;<span class="comment">// If unperformed, then it simply does not exist, and its characteristics</span></div><div class="line"><a name="l04336"></a><span class="lineno"> 4336</span>&#160;<span class="comment">// cannot be accessed any more. An interval var is automatically marked</span></div><div class="line"><a name="l04337"></a><span class="lineno"> 4337</span>&#160;<span class="comment">// as unperformed when it is not consistent anymore (start greater</span></div><div class="line"><a name="l04338"></a><span class="lineno"> 4338</span>&#160;<span class="comment">// than end, duration &lt; 0...)</span></div><div class="line"><a name="l04339"></a><span class="lineno"> 4339</span>&#160;<span class="keyword">class </span>IntervalVar : <span class="keyword">public</span> PropagationBaseObject {</div><div class="line"><a name="l04340"></a><span class="lineno"> 4340</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l04341"></a><span class="lineno"> 4341</span>&#160; <span class="comment">// The smallest acceptable value to be returned by StartMin()</span></div><div class="line"><a name="l04342"></a><span class="lineno"> 4342</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> int64 <a class="code" href="classoperations__research_1_1IntervalVar.html#a052180d41b28201b81b1c1695f65bcca">kMinValidValue</a>;</div><div class="line"><a name="l04343"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVar.html"> 4343</a></span>&#160; <span class="comment">// The largest acceptable value to be returned by EndMax()</span></div><div class="line"><a name="l04344"></a><span class="lineno"> 4344</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> int64 <a class="code" href="classoperations__research_1_1IntervalVar.html#a081aea5d03ea8531476f5e51174b3d55">kMaxValidValue</a>;</div><div class="line"><a name="l04345"></a><span class="lineno"> 4345</span>&#160; <a class="code" href="classoperations__research_1_1IntervalVar.html#aeb43b24cad9ab5cae8741d69e1c6c9e0">IntervalVar</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">solver</a>, <span class="keyword">const</span> std::string&amp; <a class="code" href="classoperations__research_1_1PropagationBaseObject.html#a8be8b75223b76744791e48747677cdb6">name</a>)</div><div class="line"><a name="l04346"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVar.html#a052180d41b28201b81b1c1695f65bcca"> 4346</a></span>&#160; : <a class="code" href="classoperations__research_1_1PropagationBaseObject.html">PropagationBaseObject</a>(<a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">solver</a>) {</div><div class="line"><a name="l04347"></a><span class="lineno"> 4347</span>&#160; <a class="code" href="classoperations__research_1_1PropagationBaseObject.html#a5d4a4cf402b353ba2908836656cf0c62">set_name</a>(<a class="code" href="classoperations__research_1_1PropagationBaseObject.html#a8be8b75223b76744791e48747677cdb6">name</a>);</div><div class="line"><a name="l04348"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVar.html#a081aea5d03ea8531476f5e51174b3d55"> 4348</a></span>&#160; }</div><div class="line"><a name="l04349"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVar.html#aeb43b24cad9ab5cae8741d69e1c6c9e0"> 4349</a></span>&#160; <a class="code" href="classoperations__research_1_1IntervalVar.html#a5416b468bd7fa583482aa3a5affe906c">~IntervalVar</a>()<span class="keyword"> override </span>{}</div><div class="line"><a name="l04350"></a><span class="lineno"> 4350</span>&#160;</div><div class="line"><a name="l04351"></a><span class="lineno"> 4351</span>&#160; <span class="comment">// These methods query, set, and watch the start position of the</span></div><div class="line"><a name="l04352"></a><span class="lineno"> 4352</span>&#160; <span class="comment">// interval var.</span></div><div class="line"><a name="l04353"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVar.html#a5416b468bd7fa583482aa3a5affe906c"> 4353</a></span>&#160; <span class="keyword">virtual</span> int64 <a class="code" href="classoperations__research_1_1IntervalVar.html#acf6f5c6a44c14d6197701c450457d5bf">StartMin</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l04354"></a><span class="lineno"> 4354</span>&#160; <span class="keyword">virtual</span> int64 <a class="code" href="classoperations__research_1_1IntervalVar.html#a627e898b1125c5dd6a2fb41551d2af5f">StartMax</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l04355"></a><span class="lineno"> 4355</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#aee80fc5cd33bc3ea9d99ec892ad9d610">SetStartMin</a>(int64 m) = 0;</div><div class="line"><a name="l04356"></a><span class="lineno"> 4356</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#a9b5eb53cf394f0ba2c29332b7f9d60d4">SetStartMax</a>(int64 m) = 0;</div><div class="line"><a name="l04357"></a><span class="lineno"> 4357</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#aa4372845801e7c83acbdfc7fa59d2fb2">SetStartRange</a>(int64 mi, int64 ma) = 0;</div><div class="line"><a name="l04358"></a><span class="lineno"> 4358</span>&#160; <span class="keyword">virtual</span> int64 <a class="code" href="classoperations__research_1_1IntervalVar.html#a2774c028f0464596c6767565cee80ff0">OldStartMin</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l04359"></a><span class="lineno"> 4359</span>&#160; <span class="keyword">virtual</span> int64 <a class="code" href="classoperations__research_1_1IntervalVar.html#aaca17b1e75c4e46f2efb5973e470561e">OldStartMax</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l04360"></a><span class="lineno"> 4360</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#aa109772cea3713098a40a645509f7566">WhenStartRange</a>(<a class="code" href="classoperations__research_1_1Demon.html">Demon</a>* <span class="keyword">const</span> d) = 0;</div><div class="line"><a name="l04361"></a><span class="lineno"> 4361</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#aa109772cea3713098a40a645509f7566">WhenStartRange</a>(<a class="code" href="classoperations__research_1_1Solver.html#aab58d22b2215e79f8e3a9424fe186239">Solver::Closure</a> closure) {</div><div class="line"><a name="l04362"></a><span class="lineno"> 4362</span>&#160; <a class="code" href="classoperations__research_1_1IntervalVar.html#aa109772cea3713098a40a645509f7566">WhenStartRange</a>(<a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">solver</a>()-&gt;MakeClosureDemon(std::move(closure)));</div><div class="line"><a name="l04363"></a><span class="lineno"> 4363</span>&#160; }</div><div class="line"><a name="l04364"></a><span class="lineno"> 4364</span>&#160;<span class="preprocessor">#if !defined(SWIG)</span></div><div class="line"><a name="l04365"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVar.html#a7e7c95e3ec16dc6bcb54997bde754620"> 4365</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#a7e7c95e3ec16dc6bcb54997bde754620">WhenStartRange</a>(<a class="code" href="classoperations__research_1_1Solver.html#a87ca0b6abf9c8724900387f5aa557c04">Solver::Action</a> action) {</div><div class="line"><a name="l04366"></a><span class="lineno"> 4366</span>&#160; <a class="code" href="classoperations__research_1_1IntervalVar.html#aa109772cea3713098a40a645509f7566">WhenStartRange</a>(<a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">solver</a>()-&gt;MakeActionDemon(std::move(action)));</div><div class="line"><a name="l04367"></a><span class="lineno"> 4367</span>&#160; }</div><div class="line"><a name="l04368"></a><span class="lineno"> 4368</span>&#160;<span class="preprocessor">#endif // SWIG</span></div><div class="line"><a name="l04369"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVar.html#abaebc975bdd1226b8cca61b566d19fb3"> 4369</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#ab5842069b663df27c9b6b86dd2033025">WhenStartBound</a>(<a class="code" href="classoperations__research_1_1Demon.html">Demon</a>* <span class="keyword">const</span> d) = 0;</div><div class="line"><a name="l04370"></a><span class="lineno"> 4370</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#ab5842069b663df27c9b6b86dd2033025">WhenStartBound</a>(<a class="code" href="classoperations__research_1_1Solver.html#aab58d22b2215e79f8e3a9424fe186239">Solver::Closure</a> closure) {</div><div class="line"><a name="l04371"></a><span class="lineno"> 4371</span>&#160; <a class="code" href="classoperations__research_1_1IntervalVar.html#ab5842069b663df27c9b6b86dd2033025">WhenStartBound</a>(<a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">solver</a>()-&gt;MakeClosureDemon(std::move(closure)));</div><div class="line"><a name="l04372"></a><span class="lineno"> 4372</span>&#160; }</div><div class="line"><a name="l04373"></a><span class="lineno"> 4373</span>&#160;<span class="preprocessor">#if !defined(SWIG)</span></div><div class="line"><a name="l04374"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVar.html#aa979715aea2878211bcf0b1db4c62793"> 4374</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#aa979715aea2878211bcf0b1db4c62793">WhenStartBound</a>(<a class="code" href="classoperations__research_1_1Solver.html#a87ca0b6abf9c8724900387f5aa557c04">Solver::Action</a> action) {</div><div class="line"><a name="l04375"></a><span class="lineno"> 4375</span>&#160; <a class="code" href="classoperations__research_1_1IntervalVar.html#ab5842069b663df27c9b6b86dd2033025">WhenStartBound</a>(<a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">solver</a>()-&gt;MakeActionDemon(std::move(action)));</div><div class="line"><a name="l04376"></a><span class="lineno"> 4376</span>&#160; }</div><div class="line"><a name="l04377"></a><span class="lineno"> 4377</span>&#160;<span class="preprocessor">#endif // SWIG</span></div><div class="line"><a name="l04378"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVar.html#a12f7a9d665836a2f5b0c1ae5ea6bfde0"> 4378</a></span>&#160;</div><div class="line"><a name="l04379"></a><span class="lineno"> 4379</span>&#160; <span class="comment">// These methods query, set, and watch the duration of the interval var.</span></div><div class="line"><a name="l04380"></a><span class="lineno"> 4380</span>&#160; <span class="keyword">virtual</span> int64 <a class="code" href="classoperations__research_1_1IntervalVar.html#a23709f68a0b309e7ba3329c0e4775d07">DurationMin</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l04381"></a><span class="lineno"> 4381</span>&#160; <span class="keyword">virtual</span> int64 <a class="code" href="classoperations__research_1_1IntervalVar.html#a11247af5621b85588f22a7948ad25ed0">DurationMax</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l04382"></a><span class="lineno"> 4382</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#ac074bf0a3f7086df10faa9bca6a42004">SetDurationMin</a>(int64 m) = 0;</div><div class="line"><a name="l04383"></a><span class="lineno"> 4383</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#a34c44801edcbe3195f161f7769d1cb0a">SetDurationMax</a>(int64 m) = 0;</div><div class="line"><a name="l04384"></a><span class="lineno"> 4384</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#a9bfcdbd186adf792ef57bac57a3809b0">SetDurationRange</a>(int64 mi, int64 ma) = 0;</div><div class="line"><a name="l04385"></a><span class="lineno"> 4385</span>&#160; <span class="keyword">virtual</span> int64 <a class="code" href="classoperations__research_1_1IntervalVar.html#a5d83388a399fb4f4e44e4054d1fda341">OldDurationMin</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l04386"></a><span class="lineno"> 4386</span>&#160; <span class="keyword">virtual</span> int64 <a class="code" href="classoperations__research_1_1IntervalVar.html#a097e1714e012247ef87ba3cb18297609">OldDurationMax</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l04387"></a><span class="lineno"> 4387</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#af95b1b5fb7a1ff5818d7eabaafdf8408">WhenDurationRange</a>(<a class="code" href="classoperations__research_1_1Demon.html">Demon</a>* <span class="keyword">const</span> d) = 0;</div><div class="line"><a name="l04388"></a><span class="lineno"> 4388</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#af95b1b5fb7a1ff5818d7eabaafdf8408">WhenDurationRange</a>(<a class="code" href="classoperations__research_1_1Solver.html#aab58d22b2215e79f8e3a9424fe186239">Solver::Closure</a> closure) {</div><div class="line"><a name="l04389"></a><span class="lineno"> 4389</span>&#160; <a class="code" href="classoperations__research_1_1IntervalVar.html#af95b1b5fb7a1ff5818d7eabaafdf8408">WhenDurationRange</a>(<a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">solver</a>()-&gt;MakeClosureDemon(std::move(closure)));</div><div class="line"><a name="l04390"></a><span class="lineno"> 4390</span>&#160; }</div><div class="line"><a name="l04391"></a><span class="lineno"> 4391</span>&#160;<span class="preprocessor">#if !defined(SWIG)</span></div><div class="line"><a name="l04392"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVar.html#ad5216b1374b28aefa97ec71dd2938d91"> 4392</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#ad5216b1374b28aefa97ec71dd2938d91">WhenDurationRange</a>(<a class="code" href="classoperations__research_1_1Solver.html#a87ca0b6abf9c8724900387f5aa557c04">Solver::Action</a> action) {</div><div class="line"><a name="l04393"></a><span class="lineno"> 4393</span>&#160; <a class="code" href="classoperations__research_1_1IntervalVar.html#af95b1b5fb7a1ff5818d7eabaafdf8408">WhenDurationRange</a>(<a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">solver</a>()-&gt;MakeActionDemon(std::move(action)));</div><div class="line"><a name="l04394"></a><span class="lineno"> 4394</span>&#160; }</div><div class="line"><a name="l04395"></a><span class="lineno"> 4395</span>&#160;<span class="preprocessor">#endif // SWIG</span></div><div class="line"><a name="l04396"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVar.html#a2579d6d4646bfa4b5125283fcc03414a"> 4396</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#a6f2f9c44d5e8efa05a0c142310fbcd71">WhenDurationBound</a>(<a class="code" href="classoperations__research_1_1Demon.html">Demon</a>* <span class="keyword">const</span> d) = 0;</div><div class="line"><a name="l04397"></a><span class="lineno"> 4397</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#a6f2f9c44d5e8efa05a0c142310fbcd71">WhenDurationBound</a>(<a class="code" href="classoperations__research_1_1Solver.html#aab58d22b2215e79f8e3a9424fe186239">Solver::Closure</a> closure) {</div><div class="line"><a name="l04398"></a><span class="lineno"> 4398</span>&#160; <a class="code" href="classoperations__research_1_1IntervalVar.html#a6f2f9c44d5e8efa05a0c142310fbcd71">WhenDurationBound</a>(<a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">solver</a>()-&gt;MakeClosureDemon(std::move(closure)));</div><div class="line"><a name="l04399"></a><span class="lineno"> 4399</span>&#160; }</div><div class="line"><a name="l04400"></a><span class="lineno"> 4400</span>&#160;<span class="preprocessor">#if !defined(SWIG)</span></div><div class="line"><a name="l04401"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVar.html#ad2a1dd4393008af0667d4101826f61b7"> 4401</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#ad2a1dd4393008af0667d4101826f61b7">WhenDurationBound</a>(<a class="code" href="classoperations__research_1_1Solver.html#a87ca0b6abf9c8724900387f5aa557c04">Solver::Action</a> action) {</div><div class="line"><a name="l04402"></a><span class="lineno"> 4402</span>&#160; <a class="code" href="classoperations__research_1_1IntervalVar.html#a6f2f9c44d5e8efa05a0c142310fbcd71">WhenDurationBound</a>(<a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">solver</a>()-&gt;MakeActionDemon(std::move(action)));</div><div class="line"><a name="l04403"></a><span class="lineno"> 4403</span>&#160; }</div><div class="line"><a name="l04404"></a><span class="lineno"> 4404</span>&#160;<span class="preprocessor">#endif // SWIG</span></div><div class="line"><a name="l04405"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVar.html#ab3b3530eb945e58d94d203f2b0d5a79c"> 4405</a></span>&#160;</div><div class="line"><a name="l04406"></a><span class="lineno"> 4406</span>&#160; <span class="comment">// These methods query, set, and watch the end position of the interval var.</span></div><div class="line"><a name="l04407"></a><span class="lineno"> 4407</span>&#160; <span class="keyword">virtual</span> int64 <a class="code" href="classoperations__research_1_1IntervalVar.html#a337babca836e2eff4e67adb0e141f82d">EndMin</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l04408"></a><span class="lineno"> 4408</span>&#160; <span class="keyword">virtual</span> int64 <a class="code" href="classoperations__research_1_1IntervalVar.html#af5257fef12cc50e0551dfcddf1ce1b67">EndMax</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l04409"></a><span class="lineno"> 4409</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#aab465f88252c7db74615834bfe9c95fb">SetEndMin</a>(int64 m) = 0;</div><div class="line"><a name="l04410"></a><span class="lineno"> 4410</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#add69e5d253a42a328478f6797711abda">SetEndMax</a>(int64 m) = 0;</div><div class="line"><a name="l04411"></a><span class="lineno"> 4411</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#a0020fd38cc76fc9c2ad20ef40e2ab182">SetEndRange</a>(int64 mi, int64 ma) = 0;</div><div class="line"><a name="l04412"></a><span class="lineno"> 4412</span>&#160; <span class="keyword">virtual</span> int64 <a class="code" href="classoperations__research_1_1IntervalVar.html#afeff6d108db59ec38fad9a2fa144a6a8">OldEndMin</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l04413"></a><span class="lineno"> 4413</span>&#160; <span class="keyword">virtual</span> int64 <a class="code" href="classoperations__research_1_1IntervalVar.html#af78a648a227858b30ec2a379c0d67fbf">OldEndMax</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l04414"></a><span class="lineno"> 4414</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#a46f1c758e6201e2606cb3561c16c9e3d">WhenEndRange</a>(<a class="code" href="classoperations__research_1_1Demon.html">Demon</a>* <span class="keyword">const</span> d) = 0;</div><div class="line"><a name="l04415"></a><span class="lineno"> 4415</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#a46f1c758e6201e2606cb3561c16c9e3d">WhenEndRange</a>(<a class="code" href="classoperations__research_1_1Solver.html#aab58d22b2215e79f8e3a9424fe186239">Solver::Closure</a> closure) {</div><div class="line"><a name="l04416"></a><span class="lineno"> 4416</span>&#160; <a class="code" href="classoperations__research_1_1IntervalVar.html#a46f1c758e6201e2606cb3561c16c9e3d">WhenEndRange</a>(<a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">solver</a>()-&gt;MakeClosureDemon(std::move(closure)));</div><div class="line"><a name="l04417"></a><span class="lineno"> 4417</span>&#160; }</div><div class="line"><a name="l04418"></a><span class="lineno"> 4418</span>&#160;<span class="preprocessor">#if !defined(SWIG)</span></div><div class="line"><a name="l04419"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVar.html#a7151316c7367456c2bccac197ac78e07"> 4419</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#a7151316c7367456c2bccac197ac78e07">WhenEndRange</a>(<a class="code" href="classoperations__research_1_1Solver.html#a87ca0b6abf9c8724900387f5aa557c04">Solver::Action</a> action) {</div><div class="line"><a name="l04420"></a><span class="lineno"> 4420</span>&#160; <a class="code" href="classoperations__research_1_1IntervalVar.html#a46f1c758e6201e2606cb3561c16c9e3d">WhenEndRange</a>(<a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">solver</a>()-&gt;MakeActionDemon(std::move(action)));</div><div class="line"><a name="l04421"></a><span class="lineno"> 4421</span>&#160; }</div><div class="line"><a name="l04422"></a><span class="lineno"> 4422</span>&#160;<span class="preprocessor">#endif // SWIG</span></div><div class="line"><a name="l04423"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVar.html#a9bee30b653a37961c313f8bcb3ffd930"> 4423</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#a51aa4ca92209f593a3b458247642987d">WhenEndBound</a>(<a class="code" href="classoperations__research_1_1Demon.html">Demon</a>* <span class="keyword">const</span> d) = 0;</div><div class="line"><a name="l04424"></a><span class="lineno"> 4424</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#a51aa4ca92209f593a3b458247642987d">WhenEndBound</a>(<a class="code" href="classoperations__research_1_1Solver.html#aab58d22b2215e79f8e3a9424fe186239">Solver::Closure</a> closure) {</div><div class="line"><a name="l04425"></a><span class="lineno"> 4425</span>&#160; <a class="code" href="classoperations__research_1_1IntervalVar.html#a51aa4ca92209f593a3b458247642987d">WhenEndBound</a>(<a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">solver</a>()-&gt;MakeClosureDemon(std::move(closure)));</div><div class="line"><a name="l04426"></a><span class="lineno"> 4426</span>&#160; }</div><div class="line"><a name="l04427"></a><span class="lineno"> 4427</span>&#160;<span class="preprocessor">#if !defined(SWIG)</span></div><div class="line"><a name="l04428"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVar.html#af244626a5557c4f0addd20548d76fadc"> 4428</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#af244626a5557c4f0addd20548d76fadc">WhenEndBound</a>(<a class="code" href="classoperations__research_1_1Solver.html#a87ca0b6abf9c8724900387f5aa557c04">Solver::Action</a> action) {</div><div class="line"><a name="l04429"></a><span class="lineno"> 4429</span>&#160; <a class="code" href="classoperations__research_1_1IntervalVar.html#a51aa4ca92209f593a3b458247642987d">WhenEndBound</a>(<a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">solver</a>()-&gt;MakeActionDemon(std::move(action)));</div><div class="line"><a name="l04430"></a><span class="lineno"> 4430</span>&#160; }</div><div class="line"><a name="l04431"></a><span class="lineno"> 4431</span>&#160;<span class="preprocessor">#endif // SWIG</span></div><div class="line"><a name="l04432"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVar.html#a11d562e27b9c5af69d8425a84ca46af3"> 4432</a></span>&#160;</div><div class="line"><a name="l04433"></a><span class="lineno"> 4433</span>&#160; <span class="comment">// These methods query, set, and watch the performed status of the</span></div><div class="line"><a name="l04434"></a><span class="lineno"> 4434</span>&#160; <span class="comment">// interval var.</span></div><div class="line"><a name="l04435"></a><span class="lineno"> 4435</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#aef9101d29cf50c67521b105947f8fdcd">MustBePerformed</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l04436"></a><span class="lineno"> 4436</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#a8e2f5e7fed94b846d1f53c1ca8e9fa9f">MayBePerformed</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l04437"></a><span class="lineno"> 4437</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#a7240f2caf6bf198514219a78d6dd11f1">CannotBePerformed</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> !<a class="code" href="classoperations__research_1_1IntervalVar.html#a8e2f5e7fed94b846d1f53c1ca8e9fa9f">MayBePerformed</a>(); }</div><div class="line"><a name="l04438"></a><span class="lineno"> 4438</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#a1785a9adf70ca36c826a2039f8fb998e">IsPerformedBound</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l04439"></a><span class="lineno"> 4439</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#aef9101d29cf50c67521b105947f8fdcd">MustBePerformed</a>() || !<a class="code" href="classoperations__research_1_1IntervalVar.html#a8e2f5e7fed94b846d1f53c1ca8e9fa9f">MayBePerformed</a>();</div><div class="line"><a name="l04440"></a><span class="lineno"> 4440</span>&#160; }</div><div class="line"><a name="l04441"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVar.html#a7240f2caf6bf198514219a78d6dd11f1"> 4441</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#a4c1f66539cdb6258a67e4543a08d8a76">SetPerformed</a>(<span class="keywordtype">bool</span> val) = 0;</div><div class="line"><a name="l04442"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVar.html#a1785a9adf70ca36c826a2039f8fb998e"> 4442</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#a1deb0c244aeb417d3746d0b12fc17914">WasPerformedBound</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l04443"></a><span class="lineno"> 4443</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#a216609be9e8d0b595ce401ca5c2d86b0">WhenPerformedBound</a>(<a class="code" href="classoperations__research_1_1Demon.html">Demon</a>* <span class="keyword">const</span> d) = 0;</div><div class="line"><a name="l04444"></a><span class="lineno"> 4444</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#a216609be9e8d0b595ce401ca5c2d86b0">WhenPerformedBound</a>(<a class="code" href="classoperations__research_1_1Solver.html#aab58d22b2215e79f8e3a9424fe186239">Solver::Closure</a> closure) {</div><div class="line"><a name="l04445"></a><span class="lineno"> 4445</span>&#160; <a class="code" href="classoperations__research_1_1IntervalVar.html#a216609be9e8d0b595ce401ca5c2d86b0">WhenPerformedBound</a>(<a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">solver</a>()-&gt;MakeClosureDemon(std::move(closure)));</div><div class="line"><a name="l04446"></a><span class="lineno"> 4446</span>&#160; }</div><div class="line"><a name="l04447"></a><span class="lineno"> 4447</span>&#160;<span class="preprocessor">#if !defined(SWIG)</span></div><div class="line"><a name="l04448"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVar.html#ad226ec1e7d6474e9ceab1048be743eb5"> 4448</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#ad226ec1e7d6474e9ceab1048be743eb5">WhenPerformedBound</a>(<a class="code" href="classoperations__research_1_1Solver.html#a87ca0b6abf9c8724900387f5aa557c04">Solver::Action</a> action) {</div><div class="line"><a name="l04449"></a><span class="lineno"> 4449</span>&#160; <a class="code" href="classoperations__research_1_1IntervalVar.html#a216609be9e8d0b595ce401ca5c2d86b0">WhenPerformedBound</a>(<a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">solver</a>()-&gt;MakeActionDemon(std::move(action)));</div><div class="line"><a name="l04450"></a><span class="lineno"> 4450</span>&#160; }</div><div class="line"><a name="l04451"></a><span class="lineno"> 4451</span>&#160;<span class="preprocessor">#endif // SWIG</span></div><div class="line"><a name="l04452"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVar.html#aeecdccd02e6618a869a968daaf919d10"> 4452</a></span>&#160;</div><div class="line"><a name="l04453"></a><span class="lineno"> 4453</span>&#160; <span class="comment">// Attaches a demon awakened when anything about this interval changes.</span></div><div class="line"><a name="l04454"></a><span class="lineno"> 4454</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#a031d97f0c0940a75d32debe1e7c16c43">WhenAnything</a>(<a class="code" href="classoperations__research_1_1Demon.html">Demon</a>* <span class="keyword">const</span> d);</div><div class="line"><a name="l04455"></a><span class="lineno"> 4455</span>&#160; <span class="comment">// Attaches a closure awakened when anything about this interval changes.</span></div><div class="line"><a name="l04456"></a><span class="lineno"> 4456</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#a031d97f0c0940a75d32debe1e7c16c43">WhenAnything</a>(<a class="code" href="classoperations__research_1_1Solver.html#aab58d22b2215e79f8e3a9424fe186239">Solver::Closure</a> closure) {</div><div class="line"><a name="l04457"></a><span class="lineno"> 4457</span>&#160; <a class="code" href="classoperations__research_1_1IntervalVar.html#a031d97f0c0940a75d32debe1e7c16c43">WhenAnything</a>(<a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">solver</a>()-&gt;MakeClosureDemon(std::move(closure)));</div><div class="line"><a name="l04458"></a><span class="lineno"> 4458</span>&#160; }</div><div class="line"><a name="l04459"></a><span class="lineno"> 4459</span>&#160;<span class="preprocessor">#if !defined(SWIG)</span></div><div class="line"><a name="l04460"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVar.html#a71e1a2d992370030d20b6d7324b9ca43"> 4460</a></span>&#160; <span class="comment">// Attaches an action awakened when anything about this interval changes.</span></div><div class="line"><a name="l04461"></a><span class="lineno"> 4461</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#a031d97f0c0940a75d32debe1e7c16c43">WhenAnything</a>(<a class="code" href="classoperations__research_1_1Solver.html#a87ca0b6abf9c8724900387f5aa557c04">Solver::Action</a> action) {</div><div class="line"><a name="l04462"></a><span class="lineno"> 4462</span>&#160; <a class="code" href="classoperations__research_1_1IntervalVar.html#a031d97f0c0940a75d32debe1e7c16c43">WhenAnything</a>(<a class="code" href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">solver</a>()-&gt;MakeActionDemon(std::move(action)));</div><div class="line"><a name="l04463"></a><span class="lineno"> 4463</span>&#160; }</div><div class="line"><a name="l04464"></a><span class="lineno"> 4464</span>&#160;<span class="preprocessor">#endif // SWIG</span></div><div class="line"><a name="l04465"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVar.html#ae606415b9cb84abf4b2a5da2e74e2ec3"> 4465</a></span>&#160;</div><div class="line"><a name="l04466"></a><span class="lineno"> 4466</span>&#160; <span class="comment">// These methods create expressions encapsulating the start, end</span></div><div class="line"><a name="l04467"></a><span class="lineno"> 4467</span>&#160; <span class="comment">// and duration of the interval var. Please note that these must not</span></div><div class="line"><a name="l04468"></a><span class="lineno"> 4468</span>&#160; <span class="comment">// be used if the interval var is unperformed.</span></div><div class="line"><a name="l04469"></a><span class="lineno"> 4469</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1IntervalVar.html#ad6271b4de12918697520817944165462">StartExpr</a>() = 0;</div><div class="line"><a name="l04470"></a><span class="lineno"> 4470</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1IntervalVar.html#a147203cf742a1daac8b1af0be03b1b92">DurationExpr</a>() = 0;</div><div class="line"><a name="l04471"></a><span class="lineno"> 4471</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1IntervalVar.html#a0a81be75dfa5f8c28ff444864d255fb1">EndExpr</a>() = 0;</div><div class="line"><a name="l04472"></a><span class="lineno"> 4472</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1IntervalVar.html#a2cd12d6edf03cb5b85cc14536e77a4a5">PerformedExpr</a>() = 0;</div><div class="line"><a name="l04473"></a><span class="lineno"> 4473</span>&#160; <span class="comment">// These methods create expressions encapsulating the start, end</span></div><div class="line"><a name="l04474"></a><span class="lineno"> 4474</span>&#160; <span class="comment">// and duration of the interval var. If the interval var is</span></div><div class="line"><a name="l04475"></a><span class="lineno"> 4475</span>&#160; <span class="comment">// unperformed, they will return the unperformed_value.</span></div><div class="line"><a name="l04476"></a><span class="lineno"> 4476</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1IntervalVar.html#ac14b8b5751c3b224067530d0a82ed56f">SafeStartExpr</a>(int64 unperformed_value) = 0;</div><div class="line"><a name="l04477"></a><span class="lineno"> 4477</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1IntervalVar.html#a70158d7ac7a7d59a1ca07f3e8656b67c">SafeDurationExpr</a>(int64 unperformed_value) = 0;</div><div class="line"><a name="l04478"></a><span class="lineno"> 4478</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classoperations__research_1_1IntExpr.html">IntExpr</a>* <a class="code" href="classoperations__research_1_1IntervalVar.html#ad27a5fbdd24135dd54498db87feee98e">SafeEndExpr</a>(int64 unperformed_value) = 0;</div><div class="line"><a name="l04479"></a><span class="lineno"> 4479</span>&#160;</div><div class="line"><a name="l04480"></a><span class="lineno"> 4480</span>&#160; <span class="comment">// Accepts the given visitor.</span></div><div class="line"><a name="l04481"></a><span class="lineno"> 4481</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVar.html#a4a625f0d15b94c92546d05bee7c8b554">Accept</a>(<a class="code" href="classoperations__research_1_1ModelVisitor.html">ModelVisitor</a>* <span class="keyword">const</span> visitor) <span class="keyword">const</span> = 0;</div><div class="line"><a name="l04482"></a><span class="lineno"> 4482</span>&#160;</div><div class="line"><a name="l04483"></a><span class="lineno"> 4483</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l04484"></a><span class="lineno"> 4484</span>&#160; DISALLOW_COPY_AND_ASSIGN(<a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>);</div><div class="line"><a name="l04485"></a><span class="lineno"> 4485</span>&#160;};</div><div class="line"><a name="l04486"></a><span class="lineno"> 4486</span>&#160;</div><div class="line"><a name="l04487"></a><span class="lineno"> 4487</span>&#160;<span class="comment">// ----- SequenceVar -----</span></div><div class="line"><a name="l04488"></a><span class="lineno"> 4488</span>&#160;</div><div class="line"><a name="l04489"></a><span class="lineno"> 4489</span>&#160;<span class="comment">// A sequence variable is a variable whose domain is a set of possible</span></div><div class="line"><a name="l04490"></a><span class="lineno"> 4490</span>&#160;<span class="comment">// orderings of the interval variables. It allows ordering of tasks. It</span></div><div class="line"><a name="l04491"></a><span class="lineno"> 4491</span>&#160;<span class="comment">// has two sets of methods: ComputePossibleFirstsAndLasts(), which</span></div><div class="line"><a name="l04492"></a><span class="lineno"> 4492</span>&#160;<span class="comment">// returns the list of interval variables that can be ranked first or</span></div><div class="line"><a name="l04493"></a><span class="lineno"> 4493</span>&#160;<span class="comment">// last; and RankFirst/RankNotFirst/RankLast/RankNotLast, which can be</span></div><div class="line"><a name="l04494"></a><span class="lineno"> 4494</span>&#160;<span class="comment">// used to create the search decision.</span></div><div class="line"><a name="l04495"></a><span class="lineno"> 4495</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a> : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1PropagationBaseObject.html">PropagationBaseObject</a> {</div><div class="line"><a name="l04496"></a><span class="lineno"> 4496</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l04497"></a><span class="lineno"> 4497</span>&#160; <a class="code" href="classoperations__research_1_1SequenceVar.html#a5cd7df5031e4b9e89532c03f542078aa">SequenceVar</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> s, <span class="keyword">const</span> std::vector&lt;IntervalVar*&gt;&amp; intervals,</div><div class="line"><a name="l04498"></a><span class="lineno"> 4498</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; nexts, <span class="keyword">const</span> std::string&amp; <a class="code" href="classoperations__research_1_1PropagationBaseObject.html#a8be8b75223b76744791e48747677cdb6">name</a>);</div><div class="line"><a name="l04499"></a><span class="lineno"><a class="line" href="classoperations__research_1_1SequenceVar.html"> 4499</a></span>&#160;</div><div class="line"><a name="l04500"></a><span class="lineno"> 4500</span>&#160; <a class="code" href="classoperations__research_1_1SequenceVar.html#a280b3b63fee8247cc2b89a5ec877497b">~SequenceVar</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l04501"></a><span class="lineno"> 4501</span>&#160;</div><div class="line"><a name="l04502"></a><span class="lineno"> 4502</span>&#160; std::string <a class="code" href="classoperations__research_1_1SequenceVar.html#af92814129c466409ff4c004002c2034d">DebugString</a>() <span class="keyword">const override</span>;</div><div class="line"><a name="l04503"></a><span class="lineno"> 4503</span>&#160;</div><div class="line"><a name="l04504"></a><span class="lineno"> 4504</span>&#160;<span class="preprocessor">#if !defined(SWIG)</span></div><div class="line"><a name="l04505"></a><span class="lineno"> 4505</span>&#160; <span class="comment">// Returns the minimum and maximum duration of combined interval</span></div><div class="line"><a name="l04506"></a><span class="lineno"> 4506</span>&#160; <span class="comment">// vars in the sequence.</span></div><div class="line"><a name="l04507"></a><span class="lineno"> 4507</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SequenceVar.html#a12e4526c316b3d49b8cd8cb91a037118">DurationRange</a>(int64* <span class="keyword">const</span> dmin, int64* <span class="keyword">const</span> dmax) <span class="keyword">const</span>;</div><div class="line"><a name="l04508"></a><span class="lineno"> 4508</span>&#160;</div><div class="line"><a name="l04509"></a><span class="lineno"> 4509</span>&#160; <span class="comment">// Returns the minimum start min and the maximum end max of all</span></div><div class="line"><a name="l04510"></a><span class="lineno"> 4510</span>&#160; <span class="comment">// interval vars in the sequence.</span></div><div class="line"><a name="l04511"></a><span class="lineno"> 4511</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SequenceVar.html#a55eba26b207c5fda44e8b94baa6d9d26">HorizonRange</a>(int64* <span class="keyword">const</span> hmin, int64* <span class="keyword">const</span> hmax) <span class="keyword">const</span>;</div><div class="line"><a name="l04512"></a><span class="lineno"> 4512</span>&#160;</div><div class="line"><a name="l04513"></a><span class="lineno"> 4513</span>&#160; <span class="comment">// Returns the minimum start min and the maximum end max of all</span></div><div class="line"><a name="l04514"></a><span class="lineno"> 4514</span>&#160; <span class="comment">// unranked interval vars in the sequence.</span></div><div class="line"><a name="l04515"></a><span class="lineno"> 4515</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SequenceVar.html#a281b19bdc37eed61de45be3ad8745550">ActiveHorizonRange</a>(int64* <span class="keyword">const</span> hmin, int64* <span class="keyword">const</span> hmax) <span class="keyword">const</span>;</div><div class="line"><a name="l04516"></a><span class="lineno"> 4516</span>&#160;</div><div class="line"><a name="l04517"></a><span class="lineno"> 4517</span>&#160; <span class="comment">// Compute statistics on the sequence.</span></div><div class="line"><a name="l04518"></a><span class="lineno"> 4518</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SequenceVar.html#aad89b1d091262e23caf515cae51ba10c">ComputeStatistics</a>(<span class="keywordtype">int</span>* <span class="keyword">const</span> ranked, <span class="keywordtype">int</span>* <span class="keyword">const</span> not_ranked,</div><div class="line"><a name="l04519"></a><span class="lineno"> 4519</span>&#160; <span class="keywordtype">int</span>* <span class="keyword">const</span> unperformed) <span class="keyword">const</span>;</div><div class="line"><a name="l04520"></a><span class="lineno"> 4520</span>&#160;<span class="preprocessor">#endif // !defined(SWIG)</span></div><div class="line"><a name="l04521"></a><span class="lineno"> 4521</span>&#160;</div><div class="line"><a name="l04522"></a><span class="lineno"> 4522</span>&#160; <span class="comment">// Ranks the index_th interval var first of all unranked interval</span></div><div class="line"><a name="l04523"></a><span class="lineno"> 4523</span>&#160; <span class="comment">// vars. After that, it will no longer be considered ranked.</span></div><div class="line"><a name="l04524"></a><span class="lineno"> 4524</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SequenceVar.html#ae44ab42e06f43ced3bd04b251965b73f">RankFirst</a>(<span class="keywordtype">int</span> index);</div><div class="line"><a name="l04525"></a><span class="lineno"> 4525</span>&#160;</div><div class="line"><a name="l04526"></a><span class="lineno"> 4526</span>&#160; <span class="comment">// Indicates that the index_th interval var will not be ranked first</span></div><div class="line"><a name="l04527"></a><span class="lineno"> 4527</span>&#160; <span class="comment">// of all currently unranked interval vars.</span></div><div class="line"><a name="l04528"></a><span class="lineno"> 4528</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SequenceVar.html#a245d9693519203fc1a9d406684829812">RankNotFirst</a>(<span class="keywordtype">int</span> index);</div><div class="line"><a name="l04529"></a><span class="lineno"> 4529</span>&#160;</div><div class="line"><a name="l04530"></a><span class="lineno"> 4530</span>&#160; <span class="comment">// Ranks the index_th interval var first of all unranked interval</span></div><div class="line"><a name="l04531"></a><span class="lineno"> 4531</span>&#160; <span class="comment">// vars. After that, it will no longer be considered ranked.</span></div><div class="line"><a name="l04532"></a><span class="lineno"> 4532</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SequenceVar.html#aa0e28d22da71b3976d56f59a14e08854">RankLast</a>(<span class="keywordtype">int</span> index);</div><div class="line"><a name="l04533"></a><span class="lineno"> 4533</span>&#160;</div><div class="line"><a name="l04534"></a><span class="lineno"> 4534</span>&#160; <span class="comment">// Indicates that the index_th interval var will not be ranked first</span></div><div class="line"><a name="l04535"></a><span class="lineno"> 4535</span>&#160; <span class="comment">// of all currently unranked interval vars.</span></div><div class="line"><a name="l04536"></a><span class="lineno"> 4536</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SequenceVar.html#a4e4a8cbd11cbf363fe073dca6e757b37">RankNotLast</a>(<span class="keywordtype">int</span> index);</div><div class="line"><a name="l04537"></a><span class="lineno"> 4537</span>&#160;</div><div class="line"><a name="l04538"></a><span class="lineno"> 4538</span>&#160; <span class="comment">// Computes the set of indices of interval variables that can be</span></div><div class="line"><a name="l04539"></a><span class="lineno"> 4539</span>&#160; <span class="comment">// ranked first in the set of unranked activities.</span></div><div class="line"><a name="l04540"></a><span class="lineno"> 4540</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SequenceVar.html#ac8f9d8f2220c77dd4f79a652e6aa7b88">ComputePossibleFirstsAndLasts</a>(std::vector&lt;int&gt;* <span class="keyword">const</span> possible_firsts,</div><div class="line"><a name="l04541"></a><span class="lineno"> 4541</span>&#160; std::vector&lt;int&gt;* <span class="keyword">const</span> possible_lasts);</div><div class="line"><a name="l04542"></a><span class="lineno"> 4542</span>&#160;</div><div class="line"><a name="l04543"></a><span class="lineno"> 4543</span>&#160; <span class="comment">// Applies the following sequence of ranks, ranks first, then rank</span></div><div class="line"><a name="l04544"></a><span class="lineno"> 4544</span>&#160; <span class="comment">// last. rank_first and rank_last represents different directions.</span></div><div class="line"><a name="l04545"></a><span class="lineno"> 4545</span>&#160; <span class="comment">// rank_first[0] corresponds to the first interval of the sequence.</span></div><div class="line"><a name="l04546"></a><span class="lineno"> 4546</span>&#160; <span class="comment">// rank_last[0] corresponds to the last interval of the sequence.</span></div><div class="line"><a name="l04547"></a><span class="lineno"> 4547</span>&#160; <span class="comment">// All intervals in the unperformed vector will be marked as such.</span></div><div class="line"><a name="l04548"></a><span class="lineno"> 4548</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SequenceVar.html#a6993f8721564fc5be685998aa3e4ed47">RankSequence</a>(<span class="keyword">const</span> std::vector&lt;int&gt;&amp; rank_first,</div><div class="line"><a name="l04549"></a><span class="lineno"> 4549</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; rank_last,</div><div class="line"><a name="l04550"></a><span class="lineno"> 4550</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; unperformed);</div><div class="line"><a name="l04551"></a><span class="lineno"> 4551</span>&#160;</div><div class="line"><a name="l04552"></a><span class="lineno"> 4552</span>&#160; <span class="comment">// Clears &#39;rank_first&#39; and &#39;rank_last&#39;, and fills them with the</span></div><div class="line"><a name="l04553"></a><span class="lineno"> 4553</span>&#160; <span class="comment">// intervals in the order of the ranks. If all variables are ranked,</span></div><div class="line"><a name="l04554"></a><span class="lineno"> 4554</span>&#160; <span class="comment">// &#39;rank_first&#39; will contain all variables, and &#39;rank_last&#39; will</span></div><div class="line"><a name="l04555"></a><span class="lineno"> 4555</span>&#160; <span class="comment">// contain none.</span></div><div class="line"><a name="l04556"></a><span class="lineno"> 4556</span>&#160; <span class="comment">// &#39;unperformed&#39; will contains all such interval variables.</span></div><div class="line"><a name="l04557"></a><span class="lineno"> 4557</span>&#160; <span class="comment">// rank_first and rank_last represents different directions.</span></div><div class="line"><a name="l04558"></a><span class="lineno"> 4558</span>&#160; <span class="comment">// rank_first[0] corresponds to the first interval of the sequence.</span></div><div class="line"><a name="l04559"></a><span class="lineno"> 4559</span>&#160; <span class="comment">// rank_last[0] corresponds to the last interval of the sequence.</span></div><div class="line"><a name="l04560"></a><span class="lineno"> 4560</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SequenceVar.html#a9af118a9bace50fc7a94224578757a32">FillSequence</a>(std::vector&lt;int&gt;* <span class="keyword">const</span> rank_first,</div><div class="line"><a name="l04561"></a><span class="lineno"> 4561</span>&#160; std::vector&lt;int&gt;* <span class="keyword">const</span> rank_last,</div><div class="line"><a name="l04562"></a><span class="lineno"> 4562</span>&#160; std::vector&lt;int&gt;* <span class="keyword">const</span> unperformed) <span class="keyword">const</span>;</div><div class="line"><a name="l04563"></a><span class="lineno"> 4563</span>&#160;</div><div class="line"><a name="l04564"></a><span class="lineno"> 4564</span>&#160; <span class="comment">// Returns the index_th interval of the sequence.</span></div><div class="line"><a name="l04565"></a><span class="lineno"> 4565</span>&#160; <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <a class="code" href="classoperations__research_1_1SequenceVar.html#adcef8966bcacea28d9ad6e554bd92a4f">Interval</a>(<span class="keywordtype">int</span> index) <span class="keyword">const</span>;</div><div class="line"><a name="l04566"></a><span class="lineno"> 4566</span>&#160;</div><div class="line"><a name="l04567"></a><span class="lineno"> 4567</span>&#160; <span class="comment">// Returns the next of the index_th interval of the sequence.</span></div><div class="line"><a name="l04568"></a><span class="lineno"> 4568</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1SequenceVar.html#ae6327825d9ed07ea7e97ac731e4d6ff8">Next</a>(<span class="keywordtype">int</span> index) <span class="keyword">const</span>;</div><div class="line"><a name="l04569"></a><span class="lineno"> 4569</span>&#160;</div><div class="line"><a name="l04570"></a><span class="lineno"> 4570</span>&#160; <span class="comment">// Returns the number of interval vars in the sequence.</span></div><div class="line"><a name="l04571"></a><span class="lineno"> 4571</span>&#160; int64 <a class="code" href="classoperations__research_1_1SequenceVar.html#a80930826abef932c86f9f751daa04ab2">size</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> intervals_.size(); }</div><div class="line"><a name="l04572"></a><span class="lineno"> 4572</span>&#160;</div><div class="line"><a name="l04573"></a><span class="lineno"> 4573</span>&#160; <span class="comment">// Accepts the given visitor.</span></div><div class="line"><a name="l04574"></a><span class="lineno"> 4574</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SequenceVar.html#a7004fb329da93aea538284d1213d0cc3">Accept</a>(<a class="code" href="classoperations__research_1_1ModelVisitor.html">ModelVisitor</a>* <span class="keyword">const</span> visitor) <span class="keyword">const</span>;</div><div class="line"><a name="l04575"></a><span class="lineno"><a class="line" href="classoperations__research_1_1SequenceVar.html#a80930826abef932c86f9f751daa04ab2"> 4575</a></span>&#160;</div><div class="line"><a name="l04576"></a><span class="lineno"> 4576</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l04577"></a><span class="lineno"> 4577</span>&#160; <span class="keywordtype">int</span> ComputeForwardFrontier();</div><div class="line"><a name="l04578"></a><span class="lineno"> 4578</span>&#160; <span class="keywordtype">int</span> ComputeBackwardFrontier();</div><div class="line"><a name="l04579"></a><span class="lineno"> 4579</span>&#160; <span class="keywordtype">void</span> UpdatePrevious() <span class="keyword">const</span>;</div><div class="line"><a name="l04580"></a><span class="lineno"> 4580</span>&#160;</div><div class="line"><a name="l04581"></a><span class="lineno"> 4581</span>&#160; <span class="keyword">const</span> std::vector&lt;IntervalVar*&gt; intervals_;</div><div class="line"><a name="l04582"></a><span class="lineno"> 4582</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt; nexts_;</div><div class="line"><a name="l04583"></a><span class="lineno"> 4583</span>&#160; <span class="keyword">mutable</span> std::vector&lt;int&gt; previous_;</div><div class="line"><a name="l04584"></a><span class="lineno"> 4584</span>&#160;};</div><div class="line"><a name="l04585"></a><span class="lineno"> 4585</span>&#160;</div><div class="line"><a name="l04586"></a><span class="lineno"> 4586</span>&#160;<span class="comment">// --------- Assignments ----------------------------</span></div><div class="line"><a name="l04587"></a><span class="lineno"> 4587</span>&#160;</div><div class="line"><a name="l04588"></a><span class="lineno"> 4588</span>&#160;<span class="comment">// ---------- Assignment Elements ----------</span></div><div class="line"><a name="l04589"></a><span class="lineno"> 4589</span>&#160;</div><div class="line"><a name="l04590"></a><span class="lineno"> 4590</span>&#160;<span class="comment">// ----- AssignmentElement -----</span></div><div class="line"><a name="l04591"></a><span class="lineno"> 4591</span>&#160;</div><div class="line"><a name="l04592"></a><span class="lineno"> 4592</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1AssignmentElement.html">AssignmentElement</a> {</div><div class="line"><a name="l04593"></a><span class="lineno"> 4593</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l04594"></a><span class="lineno"> 4594</span>&#160; <a class="code" href="classoperations__research_1_1AssignmentElement.html#a72b7c59e2cb99e623dff415ad129aa07">AssignmentElement</a>() : activated_(true) {}</div><div class="line"><a name="l04595"></a><span class="lineno"> 4595</span>&#160;</div><div class="line"><a name="l04596"></a><span class="lineno"><a class="line" href="classoperations__research_1_1AssignmentElement.html"> 4596</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1AssignmentElement.html#a065f45865ec10318174fad87f6b00075">Activate</a>() { activated_ = <span class="keyword">true</span>; }</div><div class="line"><a name="l04597"></a><span class="lineno"> 4597</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1AssignmentElement.html#a878af7bb76cdf04d84eb523d6deeb696">Deactivate</a>() { activated_ = <span class="keyword">false</span>; }</div><div class="line"><a name="l04598"></a><span class="lineno"><a class="line" href="classoperations__research_1_1AssignmentElement.html#a72b7c59e2cb99e623dff415ad129aa07"> 4598</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1AssignmentElement.html#aaa91977feff42f876d7cd00556ab94f7">Activated</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> activated_; }</div><div class="line"><a name="l04599"></a><span class="lineno"> 4599</span>&#160;</div><div class="line"><a name="l04600"></a><span class="lineno"><a class="line" href="classoperations__research_1_1AssignmentElement.html#a065f45865ec10318174fad87f6b00075"> 4600</a></span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l04601"></a><span class="lineno"><a class="line" href="classoperations__research_1_1AssignmentElement.html#a878af7bb76cdf04d84eb523d6deeb696"> 4601</a></span>&#160; <span class="keywordtype">bool</span> activated_;</div><div class="line"><a name="l04602"></a><span class="lineno"><a class="line" href="classoperations__research_1_1AssignmentElement.html#aaa91977feff42f876d7cd00556ab94f7"> 4602</a></span>&#160;};</div><div class="line"><a name="l04603"></a><span class="lineno"> 4603</span>&#160;</div><div class="line"><a name="l04604"></a><span class="lineno"> 4604</span>&#160;<span class="comment">// ----- IntVarElement -----</span></div><div class="line"><a name="l04605"></a><span class="lineno"> 4605</span>&#160;</div><div class="line"><a name="l04606"></a><span class="lineno"> 4606</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1IntVarElement.html">IntVarElement</a> : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1AssignmentElement.html">AssignmentElement</a> {</div><div class="line"><a name="l04607"></a><span class="lineno"> 4607</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l04608"></a><span class="lineno"> 4608</span>&#160; <a class="code" href="classoperations__research_1_1IntVarElement.html#a7c4b5dea7c81f6ffeeab2d8144a1c7db">IntVarElement</a>();</div><div class="line"><a name="l04609"></a><span class="lineno"> 4609</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classoperations__research_1_1IntVarElement.html#a7c4b5dea7c81f6ffeeab2d8144a1c7db">IntVarElement</a>(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var);</div><div class="line"><a name="l04610"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntVarElement.html"> 4610</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntVarElement.html#aee7b64f549193b551ca2cdcc5230e37d">Reset</a>(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var);</div><div class="line"><a name="l04611"></a><span class="lineno"> 4611</span>&#160; <a class="code" href="classoperations__research_1_1IntVarElement.html">IntVarElement</a>* <a class="code" href="classoperations__research_1_1IntVarElement.html#a86c83c81ce35a6100adf1790419977ef">Clone</a>();</div><div class="line"><a name="l04612"></a><span class="lineno"> 4612</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntVarElement.html#ab75541e5c6fe6f193f5cf94d8b12f5a4">Copy</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntVarElement.html">IntVarElement</a>&amp; element);</div><div class="line"><a name="l04613"></a><span class="lineno"> 4613</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1IntVarElement.html#a42e51fe336885a70673cbd4f473790b4">Var</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> var_; }</div><div class="line"><a name="l04614"></a><span class="lineno"> 4614</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntVarElement.html#a8e83db9b01afab0172f195f110406008">Store</a>() {</div><div class="line"><a name="l04615"></a><span class="lineno"> 4615</span>&#160; min_ = var_-&gt;<a class="code" href="classoperations__research_1_1IntExpr.html#a58d589131cbea30d4826248a2fa06aba">Min</a>();</div><div class="line"><a name="l04616"></a><span class="lineno"> 4616</span>&#160; max_ = var_-&gt;<a class="code" href="classoperations__research_1_1IntExpr.html#a1fb9e08cff06a9a5b5739de4acba587c">Max</a>();</div><div class="line"><a name="l04617"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntVarElement.html#a42e51fe336885a70673cbd4f473790b4"> 4617</a></span>&#160; }</div><div class="line"><a name="l04618"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntVarElement.html#a8e83db9b01afab0172f195f110406008"> 4618</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntVarElement.html#a11ad56c03b156e52ac092191a81d278e">Restore</a>() {</div><div class="line"><a name="l04619"></a><span class="lineno"> 4619</span>&#160; <span class="keywordflow">if</span> (var_ != <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l04620"></a><span class="lineno"> 4620</span>&#160; var_-&gt;<a class="code" href="classoperations__research_1_1IntExpr.html#a153843dc05670b540a8e83dba2043eb0">SetRange</a>(min_, max_);</div><div class="line"><a name="l04621"></a><span class="lineno"> 4621</span>&#160; }</div><div class="line"><a name="l04622"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntVarElement.html#a11ad56c03b156e52ac092191a81d278e"> 4622</a></span>&#160; }</div><div class="line"><a name="l04623"></a><span class="lineno"> 4623</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntVarElement.html#aea590b57d46c0ca3aca92adc3ce82b3a">LoadFromProto</a>(<span class="keyword">const</span> IntVarAssignment&amp; int_var_assignment_proto);</div><div class="line"><a name="l04624"></a><span class="lineno"> 4624</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntVarElement.html#abdc5b135e3b0c58d93a2beeb6c46791b">WriteToProto</a>(IntVarAssignment* int_var_assignment_proto) <span class="keyword">const</span>;</div><div class="line"><a name="l04625"></a><span class="lineno"> 4625</span>&#160;</div><div class="line"><a name="l04626"></a><span class="lineno"> 4626</span>&#160; int64 <a class="code" href="classoperations__research_1_1IntVarElement.html#a1295db3bf37f2183eb7a466f6b1207fa">Min</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> min_; }</div><div class="line"><a name="l04627"></a><span class="lineno"> 4627</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntVarElement.html#a5377e53fa0dc99d944ecc88e20e5f130">SetMin</a>(int64 m) { min_ = m; }</div><div class="line"><a name="l04628"></a><span class="lineno"> 4628</span>&#160; int64 <a class="code" href="classoperations__research_1_1IntVarElement.html#aea2fc7d2679592fdd9e07b2ae8fb58f0">Max</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> max_; }</div><div class="line"><a name="l04629"></a><span class="lineno"> 4629</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntVarElement.html#adee444dbad18f8db71cbe93e54678f85">SetMax</a>(int64 m) { max_ = m; }</div><div class="line"><a name="l04630"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntVarElement.html#a1295db3bf37f2183eb7a466f6b1207fa"> 4630</a></span>&#160; int64 <a class="code" href="classoperations__research_1_1IntVarElement.html#a015a145792a6224c450259afe9d0b035">Value</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l04631"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntVarElement.html#a5377e53fa0dc99d944ecc88e20e5f130"> 4631</a></span>&#160; DCHECK_EQ(min_, max_);</div><div class="line"><a name="l04632"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntVarElement.html#aea2fc7d2679592fdd9e07b2ae8fb58f0"> 4632</a></span>&#160; <span class="comment">// Get the value from an unbound int var assignment element.</span></div><div class="line"><a name="l04633"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntVarElement.html#adee444dbad18f8db71cbe93e54678f85"> 4633</a></span>&#160; <span class="keywordflow">return</span> min_;</div><div class="line"><a name="l04634"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntVarElement.html#a015a145792a6224c450259afe9d0b035"> 4634</a></span>&#160; }</div><div class="line"><a name="l04635"></a><span class="lineno"> 4635</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1IntVarElement.html#a4205abd38e203b570f9ff6b49d351a06">Bound</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (max_ == min_); }</div><div class="line"><a name="l04636"></a><span class="lineno"> 4636</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntVarElement.html#a8d25f09aa43ef6ea5fe8dd622f6552b2">SetRange</a>(int64 l, int64 u) {</div><div class="line"><a name="l04637"></a><span class="lineno"> 4637</span>&#160; min_ = l;</div><div class="line"><a name="l04638"></a><span class="lineno"> 4638</span>&#160; max_ = u;</div><div class="line"><a name="l04639"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntVarElement.html#a4205abd38e203b570f9ff6b49d351a06"> 4639</a></span>&#160; }</div><div class="line"><a name="l04640"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntVarElement.html#a8d25f09aa43ef6ea5fe8dd622f6552b2"> 4640</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntVarElement.html#ab5fde53ca39720061f5684e7d472cdd3">SetValue</a>(int64 v) {</div><div class="line"><a name="l04641"></a><span class="lineno"> 4641</span>&#160; min_ = v;</div><div class="line"><a name="l04642"></a><span class="lineno"> 4642</span>&#160; max_ = v;</div><div class="line"><a name="l04643"></a><span class="lineno"> 4643</span>&#160; }</div><div class="line"><a name="l04644"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntVarElement.html#ab5fde53ca39720061f5684e7d472cdd3"> 4644</a></span>&#160; std::string <a class="code" href="classoperations__research_1_1IntVarElement.html#a9683993188d5a63cad067a6a1891aaa7">DebugString</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l04645"></a><span class="lineno"> 4645</span>&#160;</div><div class="line"><a name="l04646"></a><span class="lineno"> 4646</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1IntVarElement.html#a3dd7107f6d77ddb44ebf38053b72137e">operator==</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntVarElement.html">IntVarElement</a>&amp; element) <span class="keyword">const</span>;</div><div class="line"><a name="l04647"></a><span class="lineno"> 4647</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1IntVarElement.html#a65504db21d71ae343eeb6371555a15fa">operator!=</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntVarElement.html">IntVarElement</a>&amp; element)<span class="keyword"> const </span>{</div><div class="line"><a name="l04648"></a><span class="lineno"> 4648</span>&#160; <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == element);</div><div class="line"><a name="l04649"></a><span class="lineno"> 4649</span>&#160; }</div><div class="line"><a name="l04650"></a><span class="lineno"> 4650</span>&#160;</div><div class="line"><a name="l04651"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntVarElement.html#a65504db21d71ae343eeb6371555a15fa"> 4651</a></span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l04652"></a><span class="lineno"> 4652</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* var_;</div><div class="line"><a name="l04653"></a><span class="lineno"> 4653</span>&#160; int64 min_;</div><div class="line"><a name="l04654"></a><span class="lineno"> 4654</span>&#160; int64 max_;</div><div class="line"><a name="l04655"></a><span class="lineno"> 4655</span>&#160;};</div><div class="line"><a name="l04656"></a><span class="lineno"> 4656</span>&#160;</div><div class="line"><a name="l04657"></a><span class="lineno"> 4657</span>&#160;<span class="comment">// ----- IntervalVarElement -----</span></div><div class="line"><a name="l04658"></a><span class="lineno"> 4658</span>&#160;</div><div class="line"><a name="l04659"></a><span class="lineno"> 4659</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1IntervalVarElement.html">IntervalVarElement</a> : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1AssignmentElement.html">AssignmentElement</a> {</div><div class="line"><a name="l04660"></a><span class="lineno"> 4660</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l04661"></a><span class="lineno"> 4661</span>&#160; <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a9d7357754c1a7c8bfa9cc1af03a3909d">IntervalVarElement</a>();</div><div class="line"><a name="l04662"></a><span class="lineno"> 4662</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a9d7357754c1a7c8bfa9cc1af03a3909d">IntervalVarElement</a>(<a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var);</div><div class="line"><a name="l04663"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html"> 4663</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a3bfef48731f4ef14fead2f6c34f26aa0">Reset</a>(<a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var);</div><div class="line"><a name="l04664"></a><span class="lineno"> 4664</span>&#160; <a class="code" href="classoperations__research_1_1IntervalVarElement.html">IntervalVarElement</a>* <a class="code" href="classoperations__research_1_1IntervalVarElement.html#afe3dbddb20591c19ba69dcaad778f0f6">Clone</a>();</div><div class="line"><a name="l04665"></a><span class="lineno"> 4665</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a85c8f2f11b9c5c13eefcc20778340555">Copy</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVarElement.html">IntervalVarElement</a>&amp; element);</div><div class="line"><a name="l04666"></a><span class="lineno"> 4666</span>&#160; <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a9f3bd3b96c814e46db080a7870e441be">Var</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> var_; }</div><div class="line"><a name="l04667"></a><span class="lineno"> 4667</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVarElement.html#aba7b84e96bed12bb02d0c69e702d65f3">Store</a>();</div><div class="line"><a name="l04668"></a><span class="lineno"> 4668</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVarElement.html#ae749b38bd428fb00435ada66bd0b13de">Restore</a>();</div><div class="line"><a name="l04669"></a><span class="lineno"> 4669</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVarElement.html#ac7e5aa5ca9abcfa7d8ab76fa081d9d09">LoadFromProto</a>(</div><div class="line"><a name="l04670"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#a9f3bd3b96c814e46db080a7870e441be"> 4670</a></span>&#160; <span class="keyword">const</span> IntervalVarAssignment&amp; interval_var_assignment_proto);</div><div class="line"><a name="l04671"></a><span class="lineno"> 4671</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a66b960e2914e177ee0be5c4c9b62f933">WriteToProto</a>(IntervalVarAssignment* interval_var_assignment_proto) <span class="keyword">const</span>;</div><div class="line"><a name="l04672"></a><span class="lineno"> 4672</span>&#160;</div><div class="line"><a name="l04673"></a><span class="lineno"> 4673</span>&#160; int64 <a class="code" href="classoperations__research_1_1IntervalVarElement.html#acef5ab6c453ebd47d42f76e326c15290">StartMin</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> start_min_; }</div><div class="line"><a name="l04674"></a><span class="lineno"> 4674</span>&#160; int64 <a class="code" href="classoperations__research_1_1IntervalVarElement.html#ac7f4610bf9ddd8a02c4df0e389fda3ca">StartMax</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> start_max_; }</div><div class="line"><a name="l04675"></a><span class="lineno"> 4675</span>&#160; int64 <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a2894c06ec30527c1810666cb9a47bc76">StartValue</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l04676"></a><span class="lineno"> 4676</span>&#160; CHECK_EQ(start_max_, start_min_);</div><div class="line"><a name="l04677"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#acef5ab6c453ebd47d42f76e326c15290"> 4677</a></span>&#160; <span class="keywordflow">return</span> start_max_;</div><div class="line"><a name="l04678"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#ac7f4610bf9ddd8a02c4df0e389fda3ca"> 4678</a></span>&#160; }</div><div class="line"><a name="l04679"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#a2894c06ec30527c1810666cb9a47bc76"> 4679</a></span>&#160; int64 <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a7d9e6870b3d7d594cbcef37f57b088e0">DurationMin</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> duration_min_; }</div><div class="line"><a name="l04680"></a><span class="lineno"> 4680</span>&#160; int64 <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a107e6b7d51fa279dcd5516aff5cd05ee">DurationMax</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> duration_max_; }</div><div class="line"><a name="l04681"></a><span class="lineno"> 4681</span>&#160; int64 <a class="code" href="classoperations__research_1_1IntervalVarElement.html#acd30ddafdc9f5f26a950470d1f3edeed">DurationValue</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l04682"></a><span class="lineno"> 4682</span>&#160; CHECK_EQ(duration_max_, duration_min_);</div><div class="line"><a name="l04683"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#a7d9e6870b3d7d594cbcef37f57b088e0"> 4683</a></span>&#160; <span class="keywordflow">return</span> duration_max_;</div><div class="line"><a name="l04684"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#a107e6b7d51fa279dcd5516aff5cd05ee"> 4684</a></span>&#160; }</div><div class="line"><a name="l04685"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#acd30ddafdc9f5f26a950470d1f3edeed"> 4685</a></span>&#160; int64 <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a036f95ee32fc4ea98e986d6f866cb524">EndMin</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> end_min_; }</div><div class="line"><a name="l04686"></a><span class="lineno"> 4686</span>&#160; int64 <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a57a113de1e0491feccba9b08b905a968">EndMax</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> end_max_; }</div><div class="line"><a name="l04687"></a><span class="lineno"> 4687</span>&#160; int64 <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a9b3e359361ec1c033611c5ae5252e9f9">EndValue</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l04688"></a><span class="lineno"> 4688</span>&#160; CHECK_EQ(end_max_, end_min_);</div><div class="line"><a name="l04689"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#a036f95ee32fc4ea98e986d6f866cb524"> 4689</a></span>&#160; <span class="keywordflow">return</span> end_max_;</div><div class="line"><a name="l04690"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#a57a113de1e0491feccba9b08b905a968"> 4690</a></span>&#160; }</div><div class="line"><a name="l04691"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#a9b3e359361ec1c033611c5ae5252e9f9"> 4691</a></span>&#160; int64 <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a2a559271f39b8afbd1c292ffa94880ef">PerformedMin</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> performed_min_; }</div><div class="line"><a name="l04692"></a><span class="lineno"> 4692</span>&#160; int64 <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a0a085373190322c6e03e1a07fe26634f">PerformedMax</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> performed_max_; }</div><div class="line"><a name="l04693"></a><span class="lineno"> 4693</span>&#160; int64 <a class="code" href="classoperations__research_1_1IntervalVarElement.html#ad161fede703fc4b4ebb688b2198a2108">PerformedValue</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l04694"></a><span class="lineno"> 4694</span>&#160; CHECK_EQ(performed_max_, performed_min_);</div><div class="line"><a name="l04695"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#a2a559271f39b8afbd1c292ffa94880ef"> 4695</a></span>&#160; <span class="keywordflow">return</span> performed_max_;</div><div class="line"><a name="l04696"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#a0a085373190322c6e03e1a07fe26634f"> 4696</a></span>&#160; }</div><div class="line"><a name="l04697"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#ad161fede703fc4b4ebb688b2198a2108"> 4697</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a8133ba700bcd64e1f180a01cc9664bc3">SetStartMin</a>(int64 m) { start_min_ = m; }</div><div class="line"><a name="l04698"></a><span class="lineno"> 4698</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVarElement.html#aad27176c06a3aa80de553a72014346d4">SetStartMax</a>(int64 m) { start_max_ = m; }</div><div class="line"><a name="l04699"></a><span class="lineno"> 4699</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a9b887d862bb4540be60a9f4c726854b7">SetStartRange</a>(int64 mi, int64 ma) {</div><div class="line"><a name="l04700"></a><span class="lineno"> 4700</span>&#160; start_min_ = mi;</div><div class="line"><a name="l04701"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#a8133ba700bcd64e1f180a01cc9664bc3"> 4701</a></span>&#160; start_max_ = ma;</div><div class="line"><a name="l04702"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#aad27176c06a3aa80de553a72014346d4"> 4702</a></span>&#160; }</div><div class="line"><a name="l04703"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#a9b887d862bb4540be60a9f4c726854b7"> 4703</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVarElement.html#afb060e70086680308813304d51bd2160">SetStartValue</a>(int64 v) {</div><div class="line"><a name="l04704"></a><span class="lineno"> 4704</span>&#160; start_min_ = v;</div><div class="line"><a name="l04705"></a><span class="lineno"> 4705</span>&#160; start_max_ = v;</div><div class="line"><a name="l04706"></a><span class="lineno"> 4706</span>&#160; }</div><div class="line"><a name="l04707"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#afb060e70086680308813304d51bd2160"> 4707</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a0b9ab438454cb14dcaf13085d853a8a6">SetDurationMin</a>(int64 m) { duration_min_ = m; }</div><div class="line"><a name="l04708"></a><span class="lineno"> 4708</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a2b51c61059210e6b8a6f3bbde76b53b1">SetDurationMax</a>(int64 m) { duration_max_ = m; }</div><div class="line"><a name="l04709"></a><span class="lineno"> 4709</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a5cf2a7affce14a52c72a234f9623ca2b">SetDurationRange</a>(int64 mi, int64 ma) {</div><div class="line"><a name="l04710"></a><span class="lineno"> 4710</span>&#160; duration_min_ = mi;</div><div class="line"><a name="l04711"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#a0b9ab438454cb14dcaf13085d853a8a6"> 4711</a></span>&#160; duration_max_ = ma;</div><div class="line"><a name="l04712"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#a2b51c61059210e6b8a6f3bbde76b53b1"> 4712</a></span>&#160; }</div><div class="line"><a name="l04713"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#a5cf2a7affce14a52c72a234f9623ca2b"> 4713</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a0a5d158cc83a4b454daad3d2925d4d38">SetDurationValue</a>(int64 v) {</div><div class="line"><a name="l04714"></a><span class="lineno"> 4714</span>&#160; duration_min_ = v;</div><div class="line"><a name="l04715"></a><span class="lineno"> 4715</span>&#160; duration_max_ = v;</div><div class="line"><a name="l04716"></a><span class="lineno"> 4716</span>&#160; }</div><div class="line"><a name="l04717"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#a0a5d158cc83a4b454daad3d2925d4d38"> 4717</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a63fec77c7b642a175000409de73b6374">SetEndMin</a>(int64 m) { end_min_ = m; }</div><div class="line"><a name="l04718"></a><span class="lineno"> 4718</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a14813a4a823ce91c390aff2477cbb435">SetEndMax</a>(int64 m) { end_max_ = m; }</div><div class="line"><a name="l04719"></a><span class="lineno"> 4719</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a8fadec579649e0012765f94d99eaf598">SetEndRange</a>(int64 mi, int64 ma) {</div><div class="line"><a name="l04720"></a><span class="lineno"> 4720</span>&#160; end_min_ = mi;</div><div class="line"><a name="l04721"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#a63fec77c7b642a175000409de73b6374"> 4721</a></span>&#160; end_max_ = ma;</div><div class="line"><a name="l04722"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#a14813a4a823ce91c390aff2477cbb435"> 4722</a></span>&#160; }</div><div class="line"><a name="l04723"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#a8fadec579649e0012765f94d99eaf598"> 4723</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a9faf5408c656a03df7409463db6e97a3">SetEndValue</a>(int64 v) {</div><div class="line"><a name="l04724"></a><span class="lineno"> 4724</span>&#160; end_min_ = v;</div><div class="line"><a name="l04725"></a><span class="lineno"> 4725</span>&#160; end_max_ = v;</div><div class="line"><a name="l04726"></a><span class="lineno"> 4726</span>&#160; }</div><div class="line"><a name="l04727"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#a9faf5408c656a03df7409463db6e97a3"> 4727</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a65d8115573c692d5ff5afc12748ea592">SetPerformedMin</a>(int64 m) { performed_min_ = m; }</div><div class="line"><a name="l04728"></a><span class="lineno"> 4728</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a4972b271ad222d388f9bf89ad5db017e">SetPerformedMax</a>(int64 m) { performed_max_ = m; }</div><div class="line"><a name="l04729"></a><span class="lineno"> 4729</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a31c0e8c0739a67e401a41b93ce0cf055">SetPerformedRange</a>(int64 mi, int64 ma) {</div><div class="line"><a name="l04730"></a><span class="lineno"> 4730</span>&#160; performed_min_ = mi;</div><div class="line"><a name="l04731"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#a65d8115573c692d5ff5afc12748ea592"> 4731</a></span>&#160; performed_max_ = ma;</div><div class="line"><a name="l04732"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#a4972b271ad222d388f9bf89ad5db017e"> 4732</a></span>&#160; }</div><div class="line"><a name="l04733"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#a31c0e8c0739a67e401a41b93ce0cf055"> 4733</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1IntervalVarElement.html#af46311d9a91a9c985ed30bb560c5353b">SetPerformedValue</a>(int64 v) {</div><div class="line"><a name="l04734"></a><span class="lineno"> 4734</span>&#160; performed_min_ = v;</div><div class="line"><a name="l04735"></a><span class="lineno"> 4735</span>&#160; performed_max_ = v;</div><div class="line"><a name="l04736"></a><span class="lineno"> 4736</span>&#160; }</div><div class="line"><a name="l04737"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#af46311d9a91a9c985ed30bb560c5353b"> 4737</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a20ff4a7e8f872abc11d9c0a619f8c671">Bound</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l04738"></a><span class="lineno"> 4738</span>&#160; <span class="keywordflow">return</span> (start_min_ == start_max_ &amp;&amp; duration_min_ == duration_max_ &amp;&amp;</div><div class="line"><a name="l04739"></a><span class="lineno"> 4739</span>&#160; end_min_ == end_max_ &amp;&amp; performed_min_ == performed_max_);</div><div class="line"><a name="l04740"></a><span class="lineno"> 4740</span>&#160; }</div><div class="line"><a name="l04741"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#a20ff4a7e8f872abc11d9c0a619f8c671"> 4741</a></span>&#160; std::string <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a4aa969469e93c0b17054adb0072afae1">DebugString</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l04742"></a><span class="lineno"> 4742</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1IntervalVarElement.html#aaccf9ecedf3ef182e9d293c7561b9ff8">operator==</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVarElement.html">IntervalVarElement</a>&amp; element) <span class="keyword">const</span>;</div><div class="line"><a name="l04743"></a><span class="lineno"> 4743</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1IntervalVarElement.html#a80614d155acba1d61ff322283c4ce2ca">operator!=</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVarElement.html">IntervalVarElement</a>&amp; element)<span class="keyword"> const </span>{</div><div class="line"><a name="l04744"></a><span class="lineno"> 4744</span>&#160; <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == element);</div><div class="line"><a name="l04745"></a><span class="lineno"> 4745</span>&#160; }</div><div class="line"><a name="l04746"></a><span class="lineno"> 4746</span>&#160;</div><div class="line"><a name="l04747"></a><span class="lineno"><a class="line" href="classoperations__research_1_1IntervalVarElement.html#a80614d155acba1d61ff322283c4ce2ca"> 4747</a></span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l04748"></a><span class="lineno"> 4748</span>&#160; int64 start_min_;</div><div class="line"><a name="l04749"></a><span class="lineno"> 4749</span>&#160; int64 start_max_;</div><div class="line"><a name="l04750"></a><span class="lineno"> 4750</span>&#160; int64 duration_min_;</div><div class="line"><a name="l04751"></a><span class="lineno"> 4751</span>&#160; int64 duration_max_;</div><div class="line"><a name="l04752"></a><span class="lineno"> 4752</span>&#160; int64 end_min_;</div><div class="line"><a name="l04753"></a><span class="lineno"> 4753</span>&#160; int64 end_max_;</div><div class="line"><a name="l04754"></a><span class="lineno"> 4754</span>&#160; int64 performed_min_;</div><div class="line"><a name="l04755"></a><span class="lineno"> 4755</span>&#160; int64 performed_max_;</div><div class="line"><a name="l04756"></a><span class="lineno"> 4756</span>&#160; <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* var_;</div><div class="line"><a name="l04757"></a><span class="lineno"> 4757</span>&#160;};</div><div class="line"><a name="l04758"></a><span class="lineno"> 4758</span>&#160;</div><div class="line"><a name="l04759"></a><span class="lineno"> 4759</span>&#160;<span class="comment">// ----- SequenceVarElement -----</span></div><div class="line"><a name="l04760"></a><span class="lineno"> 4760</span>&#160;</div><div class="line"><a name="l04761"></a><span class="lineno"> 4761</span>&#160;<span class="comment">// The SequenceVarElement stores a partial representation of ranked</span></div><div class="line"><a name="l04762"></a><span class="lineno"> 4762</span>&#160;<span class="comment">// interval variables in the underlying sequence variable.</span></div><div class="line"><a name="l04763"></a><span class="lineno"> 4763</span>&#160;<span class="comment">// This representation consists of three vectors:</span></div><div class="line"><a name="l04764"></a><span class="lineno"> 4764</span>&#160;<span class="comment">// - the forward sequence. That is the list of interval variables</span></div><div class="line"><a name="l04765"></a><span class="lineno"> 4765</span>&#160;<span class="comment">// ranked first in the sequence. The first element of the backward</span></div><div class="line"><a name="l04766"></a><span class="lineno"> 4766</span>&#160;<span class="comment">// sequence is the first interval in the sequence variable.</span></div><div class="line"><a name="l04767"></a><span class="lineno"> 4767</span>&#160;<span class="comment">// - the backward sequence. That is the list of interval variables</span></div><div class="line"><a name="l04768"></a><span class="lineno"> 4768</span>&#160;<span class="comment">// ranked last in the sequence. The first element of the backward</span></div><div class="line"><a name="l04769"></a><span class="lineno"> 4769</span>&#160;<span class="comment">// sequence is the last interval in the sequence variable.</span></div><div class="line"><a name="l04770"></a><span class="lineno"> 4770</span>&#160;<span class="comment">// - The list of unperformed interval variables.</span></div><div class="line"><a name="l04771"></a><span class="lineno"> 4771</span>&#160;<span class="comment">// Furthermore, if all performed variables are ranked, then by</span></div><div class="line"><a name="l04772"></a><span class="lineno"> 4772</span>&#160;<span class="comment">// convention, the forward_sequence will contain all such variables</span></div><div class="line"><a name="l04773"></a><span class="lineno"> 4773</span>&#160;<span class="comment">// and the backward_sequence will be empty.</span></div><div class="line"><a name="l04774"></a><span class="lineno"> 4774</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1SequenceVarElement.html">SequenceVarElement</a> : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1AssignmentElement.html">AssignmentElement</a> {</div><div class="line"><a name="l04775"></a><span class="lineno"> 4775</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l04776"></a><span class="lineno"> 4776</span>&#160; <a class="code" href="classoperations__research_1_1SequenceVarElement.html#a40179b14fb9451e5d8f6fc3666a6caa9">SequenceVarElement</a>();</div><div class="line"><a name="l04777"></a><span class="lineno"> 4777</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classoperations__research_1_1SequenceVarElement.html#a40179b14fb9451e5d8f6fc3666a6caa9">SequenceVarElement</a>(<a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a>* <span class="keyword">const</span> var);</div><div class="line"><a name="l04778"></a><span class="lineno"><a class="line" href="classoperations__research_1_1SequenceVarElement.html"> 4778</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SequenceVarElement.html#a7aad1cd8d56d5d85aaad8face6643e64">Reset</a>(<a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a>* <span class="keyword">const</span> var);</div><div class="line"><a name="l04779"></a><span class="lineno"> 4779</span>&#160; <a class="code" href="classoperations__research_1_1SequenceVarElement.html">SequenceVarElement</a>* <a class="code" href="classoperations__research_1_1SequenceVarElement.html#a6f2f3905bb0616011690eca0f83dd589">Clone</a>();</div><div class="line"><a name="l04780"></a><span class="lineno"> 4780</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SequenceVarElement.html#a6459f3a116d5253c4080fd2a3d52585b">Copy</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1SequenceVarElement.html">SequenceVarElement</a>&amp; element);</div><div class="line"><a name="l04781"></a><span class="lineno"> 4781</span>&#160; <a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a>* <a class="code" href="classoperations__research_1_1SequenceVarElement.html#a88093f53d27e3a7a7a183a615223ab54">Var</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> var_; }</div><div class="line"><a name="l04782"></a><span class="lineno"> 4782</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SequenceVarElement.html#a4019a1b4cf9db5ed6885421d9e038c41">Store</a>();</div><div class="line"><a name="l04783"></a><span class="lineno"> 4783</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SequenceVarElement.html#a136038294620a9a9d575eae64a3019eb">Restore</a>();</div><div class="line"><a name="l04784"></a><span class="lineno"> 4784</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SequenceVarElement.html#af1c4120e8b1b34d629b0b2fae26e2b26">LoadFromProto</a>(</div><div class="line"><a name="l04785"></a><span class="lineno"><a class="line" href="classoperations__research_1_1SequenceVarElement.html#a88093f53d27e3a7a7a183a615223ab54"> 4785</a></span>&#160; <span class="keyword">const</span> SequenceVarAssignment&amp; sequence_var_assignment_proto);</div><div class="line"><a name="l04786"></a><span class="lineno"> 4786</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SequenceVarElement.html#a25c73fd837475a0ae2ca740a1eb4d0aa">WriteToProto</a>(SequenceVarAssignment* sequence_var_assignment_proto) <span class="keyword">const</span>;</div><div class="line"><a name="l04787"></a><span class="lineno"> 4787</span>&#160;</div><div class="line"><a name="l04788"></a><span class="lineno"> 4788</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; <a class="code" href="classoperations__research_1_1SequenceVarElement.html#a4c16de890c82a38ac4d26499a2617a74">ForwardSequence</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l04789"></a><span class="lineno"> 4789</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; <a class="code" href="classoperations__research_1_1SequenceVarElement.html#a752ba08cda16ac39c27e6e110e76e7f9">BackwardSequence</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l04790"></a><span class="lineno"> 4790</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; <a class="code" href="classoperations__research_1_1SequenceVarElement.html#a23bf65206e3c559e50748433229155bf">Unperformed</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l04791"></a><span class="lineno"> 4791</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SequenceVarElement.html#a9240cc020d1d179aeb4ff57993ac822a">SetSequence</a>(<span class="keyword">const</span> std::vector&lt;int&gt;&amp; forward_sequence,</div><div class="line"><a name="l04792"></a><span class="lineno"> 4792</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; backward_sequence,</div><div class="line"><a name="l04793"></a><span class="lineno"> 4793</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; unperformed);</div><div class="line"><a name="l04794"></a><span class="lineno"> 4794</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SequenceVarElement.html#aa416720977aa00d0f25d352166f4f005">SetForwardSequence</a>(<span class="keyword">const</span> std::vector&lt;int&gt;&amp; forward_sequence);</div><div class="line"><a name="l04795"></a><span class="lineno"> 4795</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SequenceVarElement.html#a7296d95d6ce7890ff1ace7779dee8755">SetBackwardSequence</a>(<span class="keyword">const</span> std::vector&lt;int&gt;&amp; backward_sequence);</div><div class="line"><a name="l04796"></a><span class="lineno"> 4796</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SequenceVarElement.html#a60768b9a65cc2b1f9b22dded7572556d">SetUnperformed</a>(<span class="keyword">const</span> std::vector&lt;int&gt;&amp; unperformed);</div><div class="line"><a name="l04797"></a><span class="lineno"> 4797</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1SequenceVarElement.html#a5439b37d5c44ae4c1b22b85073a82d6c">Bound</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l04798"></a><span class="lineno"> 4798</span>&#160; <span class="keywordflow">return</span> forward_sequence_.size() + unperformed_.size() == var_-&gt;<a class="code" href="classoperations__research_1_1SequenceVar.html#a80930826abef932c86f9f751daa04ab2">size</a>();</div><div class="line"><a name="l04799"></a><span class="lineno"> 4799</span>&#160; }</div><div class="line"><a name="l04800"></a><span class="lineno"> 4800</span>&#160;</div><div class="line"><a name="l04801"></a><span class="lineno"><a class="line" href="classoperations__research_1_1SequenceVarElement.html#a5439b37d5c44ae4c1b22b85073a82d6c"> 4801</a></span>&#160; std::string <a class="code" href="classoperations__research_1_1SequenceVarElement.html#a363efa1fc4e42a235e80aa881aa56dd5">DebugString</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l04802"></a><span class="lineno"> 4802</span>&#160;</div><div class="line"><a name="l04803"></a><span class="lineno"> 4803</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1SequenceVarElement.html#a2dde19669941089f5262965a4de3fb8a">operator==</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1SequenceVarElement.html">SequenceVarElement</a>&amp; element) <span class="keyword">const</span>;</div><div class="line"><a name="l04804"></a><span class="lineno"> 4804</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1SequenceVarElement.html#a41b758288965e16fa33baf041c7d981b">operator!=</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1SequenceVarElement.html">SequenceVarElement</a>&amp; element)<span class="keyword"> const </span>{</div><div class="line"><a name="l04805"></a><span class="lineno"> 4805</span>&#160; <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == element);</div><div class="line"><a name="l04806"></a><span class="lineno"> 4806</span>&#160; }</div><div class="line"><a name="l04807"></a><span class="lineno"> 4807</span>&#160;</div><div class="line"><a name="l04808"></a><span class="lineno"><a class="line" href="classoperations__research_1_1SequenceVarElement.html#a41b758288965e16fa33baf041c7d981b"> 4808</a></span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l04809"></a><span class="lineno"> 4809</span>&#160; <span class="keywordtype">bool</span> CheckClassInvariants();</div><div class="line"><a name="l04810"></a><span class="lineno"> 4810</span>&#160;</div><div class="line"><a name="l04811"></a><span class="lineno"> 4811</span>&#160; <a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a>* var_;</div><div class="line"><a name="l04812"></a><span class="lineno"> 4812</span>&#160; std::vector&lt;int&gt; forward_sequence_;</div><div class="line"><a name="l04813"></a><span class="lineno"> 4813</span>&#160; std::vector&lt;int&gt; backward_sequence_;</div><div class="line"><a name="l04814"></a><span class="lineno"> 4814</span>&#160; std::vector&lt;int&gt; unperformed_;</div><div class="line"><a name="l04815"></a><span class="lineno"> 4815</span>&#160;};</div><div class="line"><a name="l04816"></a><span class="lineno"> 4816</span>&#160;</div><div class="line"><a name="l04817"></a><span class="lineno"> 4817</span>&#160;<span class="comment">// ----- Assignment element container -----</span></div><div class="line"><a name="l04818"></a><span class="lineno"> 4818</span>&#160;</div><div class="line"><a name="l04819"></a><span class="lineno"> 4819</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> V, <span class="keyword">class</span> E&gt;</div><div class="line"><a name="l04820"></a><span class="lineno"> 4820</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1AssignmentContainer.html">AssignmentContainer</a> {</div><div class="line"><a name="l04821"></a><span class="lineno"> 4821</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l04822"></a><span class="lineno"> 4822</span>&#160; <a class="code" href="classoperations__research_1_1AssignmentContainer.html#af793fb6edd1488935eabba836ee8a76b">AssignmentContainer</a>() {}</div><div class="line"><a name="l04823"></a><span class="lineno"> 4823</span>&#160; E* <a class="code" href="classoperations__research_1_1AssignmentContainer.html#ab4270afda9d688e9132eb95fc9207ae2">Add</a>(V* var) {</div><div class="line"><a name="l04824"></a><span class="lineno"><a class="line" href="classoperations__research_1_1AssignmentContainer.html"> 4824</a></span>&#160; CHECK(var != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l04825"></a><span class="lineno"> 4825</span>&#160; <span class="keywordtype">int</span> index = -1;</div><div class="line"><a name="l04826"></a><span class="lineno"><a class="line" href="classoperations__research_1_1AssignmentContainer.html#af793fb6edd1488935eabba836ee8a76b"> 4826</a></span>&#160; <span class="keywordflow">if</span> (!Find(var, &amp;index)) {</div><div class="line"><a name="l04827"></a><span class="lineno"><a class="line" href="classoperations__research_1_1AssignmentContainer.html#ab4270afda9d688e9132eb95fc9207ae2"> 4827</a></span>&#160; <span class="keywordflow">return</span> <a class="code" href="classoperations__research_1_1AssignmentContainer.html#aa162c36af0d0d536c3cda267a2dac1cc">FastAdd</a>(var);</div><div class="line"><a name="l04828"></a><span class="lineno"> 4828</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l04829"></a><span class="lineno"> 4829</span>&#160; <span class="keywordflow">return</span> &amp;elements_[index];</div><div class="line"><a name="l04830"></a><span class="lineno"> 4830</span>&#160; }</div><div class="line"><a name="l04831"></a><span class="lineno"> 4831</span>&#160; }</div><div class="line"><a name="l04832"></a><span class="lineno"> 4832</span>&#160; <span class="comment">// Adds element without checking its presence in the container.</span></div><div class="line"><a name="l04833"></a><span class="lineno"> 4833</span>&#160; E* <a class="code" href="classoperations__research_1_1AssignmentContainer.html#aa162c36af0d0d536c3cda267a2dac1cc">FastAdd</a>(V* var) {</div><div class="line"><a name="l04834"></a><span class="lineno"> 4834</span>&#160; DCHECK(var != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l04835"></a><span class="lineno"> 4835</span>&#160; elements_.emplace_back(var);</div><div class="line"><a name="l04836"></a><span class="lineno"> 4836</span>&#160; <span class="keywordflow">return</span> &amp;elements_.back();</div><div class="line"><a name="l04837"></a><span class="lineno"><a class="line" href="classoperations__research_1_1AssignmentContainer.html#aa162c36af0d0d536c3cda267a2dac1cc"> 4837</a></span>&#160; }</div><div class="line"><a name="l04838"></a><span class="lineno"> 4838</span>&#160; <span class="comment">// Advanced usage: Adds element at a given position; position has to have</span></div><div class="line"><a name="l04839"></a><span class="lineno"> 4839</span>&#160; <span class="comment">// been allocated with AssignmentContainer::Resize() beforehand.</span></div><div class="line"><a name="l04840"></a><span class="lineno"> 4840</span>&#160; E* <a class="code" href="classoperations__research_1_1AssignmentContainer.html#a45d4fca065881a70fe4598dd5f91094c">AddAtPosition</a>(V* var, <span class="keywordtype">int</span> position) {</div><div class="line"><a name="l04841"></a><span class="lineno"> 4841</span>&#160; elements_[position].Reset(var);</div><div class="line"><a name="l04842"></a><span class="lineno"> 4842</span>&#160; <span class="keywordflow">return</span> &amp;elements_[position];</div><div class="line"><a name="l04843"></a><span class="lineno"> 4843</span>&#160; }</div><div class="line"><a name="l04844"></a><span class="lineno"><a class="line" href="classoperations__research_1_1AssignmentContainer.html#a45d4fca065881a70fe4598dd5f91094c"> 4844</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1AssignmentContainer.html#aae1c4d5b0bb21f3f53d7bd5f06635bfa">Clear</a>() {</div><div class="line"><a name="l04845"></a><span class="lineno"> 4845</span>&#160; elements_.clear();</div><div class="line"><a name="l04846"></a><span class="lineno"> 4846</span>&#160; <span class="keywordflow">if</span> (!elements_map_.empty()) { <span class="comment">// 2x speedup on OR-tools.</span></div><div class="line"><a name="l04847"></a><span class="lineno"> 4847</span>&#160; elements_map_.clear();</div><div class="line"><a name="l04848"></a><span class="lineno"><a class="line" href="classoperations__research_1_1AssignmentContainer.html#aae1c4d5b0bb21f3f53d7bd5f06635bfa"> 4848</a></span>&#160; }</div><div class="line"><a name="l04849"></a><span class="lineno"> 4849</span>&#160; }</div><div class="line"><a name="l04850"></a><span class="lineno"> 4850</span>&#160; <span class="comment">// Advanced usage: Resizes the container, potentially adding elements with</span></div><div class="line"><a name="l04851"></a><span class="lineno"> 4851</span>&#160; <span class="comment">// null variables.</span></div><div class="line"><a name="l04852"></a><span class="lineno"> 4852</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1AssignmentContainer.html#a144d9ee58d069b6f1863b2827085143f">Resize</a>(<span class="keywordtype">size_t</span> size) { elements_.resize(size); }</div><div class="line"><a name="l04853"></a><span class="lineno"> 4853</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1AssignmentContainer.html#a877eabf96eaacfd5acee79411af3de22">Empty</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> elements_.empty(); }</div><div class="line"><a name="l04854"></a><span class="lineno"> 4854</span>&#160; <span class="comment">// Copies the elements of &#39;container&#39; which are already in the calling</span></div><div class="line"><a name="l04855"></a><span class="lineno"> 4855</span>&#160; <span class="comment">// container.</span></div><div class="line"><a name="l04856"></a><span class="lineno"><a class="line" href="classoperations__research_1_1AssignmentContainer.html#a144d9ee58d069b6f1863b2827085143f"> 4856</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1AssignmentContainer.html#a716629cdc52bf32755b737c4ab1b1cad">CopyIntersection</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1AssignmentContainer.html">AssignmentContainer&lt;V, E&gt;</a>&amp; container) {</div><div class="line"><a name="l04857"></a><span class="lineno"><a class="line" href="classoperations__research_1_1AssignmentContainer.html#a877eabf96eaacfd5acee79411af3de22"> 4857</a></span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; container.elements_.size(); ++i) {</div><div class="line"><a name="l04858"></a><span class="lineno"> 4858</span>&#160; <span class="keyword">const</span> E&amp; element = container.elements_[i];</div><div class="line"><a name="l04859"></a><span class="lineno"> 4859</span>&#160; <span class="keyword">const</span> V* <span class="keyword">const</span> var = element.Var();</div><div class="line"><a name="l04860"></a><span class="lineno"><a class="line" href="classoperations__research_1_1AssignmentContainer.html#a716629cdc52bf32755b737c4ab1b1cad"> 4860</a></span>&#160; <span class="keywordtype">int</span> index = -1;</div><div class="line"><a name="l04861"></a><span class="lineno"> 4861</span>&#160; <span class="keywordflow">if</span> (i &lt; elements_.size() &amp;&amp; elements_[i].Var() == var) {</div><div class="line"><a name="l04862"></a><span class="lineno"> 4862</span>&#160; index = i;</div><div class="line"><a name="l04863"></a><span class="lineno"> 4863</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!Find(var, &amp;index)) {</div><div class="line"><a name="l04864"></a><span class="lineno"> 4864</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l04865"></a><span class="lineno"> 4865</span>&#160; }</div><div class="line"><a name="l04866"></a><span class="lineno"> 4866</span>&#160; DCHECK_GE(index, 0);</div><div class="line"><a name="l04867"></a><span class="lineno"> 4867</span>&#160; E* <span class="keyword">const</span> local_element = &amp;elements_[index];</div><div class="line"><a name="l04868"></a><span class="lineno"> 4868</span>&#160; local_element-&gt;Copy(element);</div><div class="line"><a name="l04869"></a><span class="lineno"> 4869</span>&#160; <span class="keywordflow">if</span> (element.Activated()) {</div><div class="line"><a name="l04870"></a><span class="lineno"> 4870</span>&#160; local_element-&gt;Activate();</div><div class="line"><a name="l04871"></a><span class="lineno"> 4871</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l04872"></a><span class="lineno"> 4872</span>&#160; local_element-&gt;Deactivate();</div><div class="line"><a name="l04873"></a><span class="lineno"> 4873</span>&#160; }</div><div class="line"><a name="l04874"></a><span class="lineno"> 4874</span>&#160; }</div><div class="line"><a name="l04875"></a><span class="lineno"> 4875</span>&#160; }</div><div class="line"><a name="l04876"></a><span class="lineno"> 4876</span>&#160; <span class="comment">// Copies all the elements of &#39;container&#39; to this container, clearing its</span></div><div class="line"><a name="l04877"></a><span class="lineno"> 4877</span>&#160; <span class="comment">// previous content.</span></div><div class="line"><a name="l04878"></a><span class="lineno"> 4878</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1AssignmentContainer.html#a3e1c65f80f5da3371c10938c120fb984">Copy</a>(<span class="keyword">const</span> AssignmentContainer&lt;V, E&gt;&amp; container) {</div><div class="line"><a name="l04879"></a><span class="lineno"> 4879</span>&#160; <a class="code" href="classoperations__research_1_1AssignmentContainer.html#aae1c4d5b0bb21f3f53d7bd5f06635bfa">Clear</a>();</div><div class="line"><a name="l04880"></a><span class="lineno"> 4880</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; container.elements_.size(); ++i) {</div><div class="line"><a name="l04881"></a><span class="lineno"> 4881</span>&#160; <span class="keyword">const</span> E&amp; element = container.elements_[i];</div><div class="line"><a name="l04882"></a><span class="lineno"><a class="line" href="classoperations__research_1_1AssignmentContainer.html#a3e1c65f80f5da3371c10938c120fb984"> 4882</a></span>&#160; <a class="code" href="classoperations__research_1_1AssignmentContainer.html#aa162c36af0d0d536c3cda267a2dac1cc">FastAdd</a>(element.Var())-&gt;<a class="code" href="classoperations__research_1_1AssignmentContainer.html#a3e1c65f80f5da3371c10938c120fb984">Copy</a>(element);</div><div class="line"><a name="l04883"></a><span class="lineno"> 4883</span>&#160; }</div><div class="line"><a name="l04884"></a><span class="lineno"> 4884</span>&#160; }</div><div class="line"><a name="l04885"></a><span class="lineno"> 4885</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1AssignmentContainer.html#ab5bed5190537df6740bef2bede2814e6">Contains</a>(<span class="keyword">const</span> V* <span class="keyword">const</span> var)<span class="keyword"> const </span>{</div><div class="line"><a name="l04886"></a><span class="lineno"> 4886</span>&#160; <span class="keywordtype">int</span> index;</div><div class="line"><a name="l04887"></a><span class="lineno"> 4887</span>&#160; <span class="keywordflow">return</span> Find(var, &amp;index);</div><div class="line"><a name="l04888"></a><span class="lineno"> 4888</span>&#160; }</div><div class="line"><a name="l04889"></a><span class="lineno"><a class="line" href="classoperations__research_1_1AssignmentContainer.html#ab5bed5190537df6740bef2bede2814e6"> 4889</a></span>&#160; E* <a class="code" href="classoperations__research_1_1AssignmentContainer.html#a2f617e7ec317b5dab5b29213dd48950f">MutableElement</a>(<span class="keyword">const</span> V* <span class="keyword">const</span> var) {</div><div class="line"><a name="l04890"></a><span class="lineno"> 4890</span>&#160; E* <span class="keyword">const</span> element = <a class="code" href="classoperations__research_1_1AssignmentContainer.html#a0f61a14dec7c5c955e2ec624a099d3ec">MutableElementOrNull</a>(var);</div><div class="line"><a name="l04891"></a><span class="lineno"> 4891</span>&#160; DCHECK(element != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l04892"></a><span class="lineno"> 4892</span>&#160; &lt;&lt; <span class="stringliteral">&quot;Unknown variable &quot;</span> &lt;&lt; var-&gt;DebugString() &lt;&lt; <span class="stringliteral">&quot; in solution&quot;</span>;</div><div class="line"><a name="l04893"></a><span class="lineno"><a class="line" href="classoperations__research_1_1AssignmentContainer.html#a2f617e7ec317b5dab5b29213dd48950f"> 4893</a></span>&#160; <span class="keywordflow">return</span> element;</div><div class="line"><a name="l04894"></a><span class="lineno"> 4894</span>&#160; }</div><div class="line"><a name="l04895"></a><span class="lineno"> 4895</span>&#160; E* <a class="code" href="classoperations__research_1_1AssignmentContainer.html#a0f61a14dec7c5c955e2ec624a099d3ec">MutableElementOrNull</a>(<span class="keyword">const</span> V* <span class="keyword">const</span> var) {</div><div class="line"><a name="l04896"></a><span class="lineno"> 4896</span>&#160; <span class="keywordtype">int</span> index = -1;</div><div class="line"><a name="l04897"></a><span class="lineno"> 4897</span>&#160; <span class="keywordflow">if</span> (Find(var, &amp;index)) {</div><div class="line"><a name="l04898"></a><span class="lineno"> 4898</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classoperations__research_1_1AssignmentContainer.html#a2f617e7ec317b5dab5b29213dd48950f">MutableElement</a>(index);</div><div class="line"><a name="l04899"></a><span class="lineno"><a class="line" href="classoperations__research_1_1AssignmentContainer.html#a0f61a14dec7c5c955e2ec624a099d3ec"> 4899</a></span>&#160; }</div><div class="line"><a name="l04900"></a><span class="lineno"> 4900</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l04901"></a><span class="lineno"> 4901</span>&#160; }</div><div class="line"><a name="l04902"></a><span class="lineno"> 4902</span>&#160; <span class="keyword">const</span> E&amp; <a class="code" href="classoperations__research_1_1AssignmentContainer.html#aaf8cce923cb7cfc1aa15c6f0b0f7820e">Element</a>(<span class="keyword">const</span> V* <span class="keyword">const</span> var)<span class="keyword"> const </span>{</div><div class="line"><a name="l04903"></a><span class="lineno"> 4903</span>&#160; <span class="keyword">const</span> E* <span class="keyword">const</span> element = <a class="code" href="classoperations__research_1_1AssignmentContainer.html#a4d04b95d5dd08e9c6466eea81801d931">ElementPtrOrNull</a>(var);</div><div class="line"><a name="l04904"></a><span class="lineno"> 4904</span>&#160; DCHECK(element != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l04905"></a><span class="lineno"> 4905</span>&#160; &lt;&lt; <span class="stringliteral">&quot;Unknown variable &quot;</span> &lt;&lt; var-&gt;DebugString() &lt;&lt; <span class="stringliteral">&quot; in solution&quot;</span>;</div><div class="line"><a name="l04906"></a><span class="lineno"><a class="line" href="classoperations__research_1_1AssignmentContainer.html#aaf8cce923cb7cfc1aa15c6f0b0f7820e"> 4906</a></span>&#160; <span class="keywordflow">return</span> *element;</div><div class="line"><a name="l04907"></a><span class="lineno"> 4907</span>&#160; }</div><div class="line"><a name="l04908"></a><span class="lineno"> 4908</span>&#160; <span class="keyword">const</span> E* <a class="code" href="classoperations__research_1_1AssignmentContainer.html#a4d04b95d5dd08e9c6466eea81801d931">ElementPtrOrNull</a>(<span class="keyword">const</span> V* <span class="keyword">const</span> var)<span class="keyword"> const </span>{</div><div class="line"><a name="l04909"></a><span class="lineno"> 4909</span>&#160; <span class="keywordtype">int</span> index = -1;</div><div class="line"><a name="l04910"></a><span class="lineno"> 4910</span>&#160; <span class="keywordflow">if</span> (Find(var, &amp;index)) {</div><div class="line"><a name="l04911"></a><span class="lineno"> 4911</span>&#160; <span class="keywordflow">return</span> &amp;<a class="code" href="classoperations__research_1_1AssignmentContainer.html#aaf8cce923cb7cfc1aa15c6f0b0f7820e">Element</a>(index);</div><div class="line"><a name="l04912"></a><span class="lineno"><a class="line" href="classoperations__research_1_1AssignmentContainer.html#a4d04b95d5dd08e9c6466eea81801d931"> 4912</a></span>&#160; }</div><div class="line"><a name="l04913"></a><span class="lineno"> 4913</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l04914"></a><span class="lineno"> 4914</span>&#160; }</div><div class="line"><a name="l04915"></a><span class="lineno"> 4915</span>&#160; <span class="keyword">const</span> std::vector&lt;E&gt;&amp; <a class="code" href="classoperations__research_1_1AssignmentContainer.html#ae5f07b17110a4860e1801c0f6254e4a6">elements</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> elements_; }</div><div class="line"><a name="l04916"></a><span class="lineno"> 4916</span>&#160; E* <a class="code" href="classoperations__research_1_1AssignmentContainer.html#a2f617e7ec317b5dab5b29213dd48950f">MutableElement</a>(<span class="keywordtype">int</span> index) { <span class="keywordflow">return</span> &amp;elements_[index]; }</div><div class="line"><a name="l04917"></a><span class="lineno"> 4917</span>&#160; <span class="keyword">const</span> E&amp; <a class="code" href="classoperations__research_1_1AssignmentContainer.html#aaf8cce923cb7cfc1aa15c6f0b0f7820e">Element</a>(<span class="keywordtype">int</span> index)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> elements_[index]; }</div><div class="line"><a name="l04918"></a><span class="lineno"> 4918</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classoperations__research_1_1AssignmentContainer.html#a088429aaba219da2c92f9abbdaaa906d">Size</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> elements_.size(); }</div><div class="line"><a name="l04919"></a><span class="lineno"><a class="line" href="classoperations__research_1_1AssignmentContainer.html#ae5f07b17110a4860e1801c0f6254e4a6"> 4919</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1AssignmentContainer.html#ac4fc0cfe7060f5cf2e37c03b7b9a0b7f">Store</a>() {</div><div class="line"><a name="l04920"></a><span class="lineno"><a class="line" href="classoperations__research_1_1AssignmentContainer.html#a252f023ff4bc155319812ef86b5356a4"> 4920</a></span>&#160; <span class="keywordflow">for</span> (E&amp; element : elements_) {</div><div class="line"><a name="l04921"></a><span class="lineno"><a class="line" href="classoperations__research_1_1AssignmentContainer.html#aabf4caa6a1427778f66aafbfea546b43"> 4921</a></span>&#160; element.Store();</div><div class="line"><a name="l04922"></a><span class="lineno"><a class="line" href="classoperations__research_1_1AssignmentContainer.html#a088429aaba219da2c92f9abbdaaa906d"> 4922</a></span>&#160; }</div><div class="line"><a name="l04923"></a><span class="lineno"><a class="line" href="classoperations__research_1_1AssignmentContainer.html#ac4fc0cfe7060f5cf2e37c03b7b9a0b7f"> 4923</a></span>&#160; }</div><div class="line"><a name="l04924"></a><span class="lineno"> 4924</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1AssignmentContainer.html#ac376aeb350b04f9b4876dfd9284a2c70">Restore</a>() {</div><div class="line"><a name="l04925"></a><span class="lineno"> 4925</span>&#160; <span class="keywordflow">for</span> (E&amp; element : elements_) {</div><div class="line"><a name="l04926"></a><span class="lineno"> 4926</span>&#160; <span class="keywordflow">if</span> (element.Activated()) {</div><div class="line"><a name="l04927"></a><span class="lineno"> 4927</span>&#160; element.Restore();</div><div class="line"><a name="l04928"></a><span class="lineno"><a class="line" href="classoperations__research_1_1AssignmentContainer.html#ac376aeb350b04f9b4876dfd9284a2c70"> 4928</a></span>&#160; }</div><div class="line"><a name="l04929"></a><span class="lineno"> 4929</span>&#160; }</div><div class="line"><a name="l04930"></a><span class="lineno"> 4930</span>&#160; }</div><div class="line"><a name="l04931"></a><span class="lineno"> 4931</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1AssignmentContainer.html#a37197e2028382d8987a41c9ac84ed7f5">AreAllElementsBound</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l04932"></a><span class="lineno"> 4932</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> E&amp; element : elements_) {</div><div class="line"><a name="l04933"></a><span class="lineno"> 4933</span>&#160; <span class="keywordflow">if</span> (!element.Bound()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l04934"></a><span class="lineno"> 4934</span>&#160; }</div><div class="line"><a name="l04935"></a><span class="lineno"><a class="line" href="classoperations__research_1_1AssignmentContainer.html#a37197e2028382d8987a41c9ac84ed7f5"> 4935</a></span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l04936"></a><span class="lineno"> 4936</span>&#160; }</div><div class="line"><a name="l04937"></a><span class="lineno"> 4937</span>&#160;</div><div class="line"><a name="l04938"></a><span class="lineno"> 4938</span>&#160; <span class="comment">// Returns true if this and &#39;container&#39; both represent the same V* -&gt; E map.</span></div><div class="line"><a name="l04939"></a><span class="lineno"> 4939</span>&#160; <span class="comment">// Runs in linear time; requires that the == operator on the type E is well</span></div><div class="line"><a name="l04940"></a><span class="lineno"> 4940</span>&#160; <span class="comment">// defined.</span></div><div class="line"><a name="l04941"></a><span class="lineno"> 4941</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1AssignmentContainer.html#a6a50632530dfd8c9a55a5134bdee9cb4">operator==</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1AssignmentContainer.html">AssignmentContainer&lt;V, E&gt;</a>&amp; container)<span class="keyword"> const </span>{</div><div class="line"><a name="l04942"></a><span class="lineno"> 4942</span>&#160; <span class="comment">// We may not have any work to do</span></div><div class="line"><a name="l04943"></a><span class="lineno"> 4943</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classoperations__research_1_1AssignmentContainer.html#a088429aaba219da2c92f9abbdaaa906d">Size</a>() != container.<a class="code" href="classoperations__research_1_1AssignmentContainer.html#a088429aaba219da2c92f9abbdaaa906d">Size</a>()) {</div><div class="line"><a name="l04944"></a><span class="lineno"> 4944</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l04945"></a><span class="lineno"><a class="line" href="classoperations__research_1_1AssignmentContainer.html#a6a50632530dfd8c9a55a5134bdee9cb4"> 4945</a></span>&#160; }</div><div class="line"><a name="l04946"></a><span class="lineno"> 4946</span>&#160; <span class="comment">// The == should be order-independent</span></div><div class="line"><a name="l04947"></a><span class="lineno"> 4947</span>&#160; EnsureMapIsUpToDate();</div><div class="line"><a name="l04948"></a><span class="lineno"> 4948</span>&#160; <span class="comment">// Do not use the hash_map::== operator! It</span></div><div class="line"><a name="l04949"></a><span class="lineno"> 4949</span>&#160; <span class="comment">// compares both content and how the map is hashed (e.g., number of</span></div><div class="line"><a name="l04950"></a><span class="lineno"> 4950</span>&#160; <span class="comment">// buckets). This is not what we want.</span></div><div class="line"><a name="l04951"></a><span class="lineno"> 4951</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> E&amp; element : container.elements_) {</div><div class="line"><a name="l04952"></a><span class="lineno"> 4952</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> position =</div><div class="line"><a name="l04953"></a><span class="lineno"> 4953</span>&#160; gtl::FindWithDefault(elements_map_, element.Var(), -1);</div><div class="line"><a name="l04954"></a><span class="lineno"> 4954</span>&#160; <span class="keywordflow">if</span> (position &lt; 0 || elements_[position] != element) {</div><div class="line"><a name="l04955"></a><span class="lineno"> 4955</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l04956"></a><span class="lineno"> 4956</span>&#160; }</div><div class="line"><a name="l04957"></a><span class="lineno"> 4957</span>&#160; }</div><div class="line"><a name="l04958"></a><span class="lineno"> 4958</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l04959"></a><span class="lineno"> 4959</span>&#160; }</div><div class="line"><a name="l04960"></a><span class="lineno"> 4960</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1AssignmentContainer.html#a5750f450575a30e8a539ecf7b2e89f18">operator!=</a>(<span class="keyword">const</span> AssignmentContainer&lt;V, E&gt;&amp; container)<span class="keyword"> const </span>{</div><div class="line"><a name="l04961"></a><span class="lineno"> 4961</span>&#160; <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == container);</div><div class="line"><a name="l04962"></a><span class="lineno"> 4962</span>&#160; }</div><div class="line"><a name="l04963"></a><span class="lineno"> 4963</span>&#160;</div><div class="line"><a name="l04964"></a><span class="lineno"><a class="line" href="classoperations__research_1_1AssignmentContainer.html#a5750f450575a30e8a539ecf7b2e89f18"> 4964</a></span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l04965"></a><span class="lineno"> 4965</span>&#160; <span class="keywordtype">void</span> EnsureMapIsUpToDate()<span class="keyword"> const </span>{</div><div class="line"><a name="l04966"></a><span class="lineno"> 4966</span>&#160; absl::flat_hash_map&lt;const V*, int&gt;* map =</div><div class="line"><a name="l04967"></a><span class="lineno"> 4967</span>&#160; <span class="keyword">const_cast&lt;</span>absl::flat_hash_map&lt;const V*, int&gt;*<span class="keyword">&gt;</span>(&amp;elements_map_);</div><div class="line"><a name="l04968"></a><span class="lineno"> 4968</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = map-&gt;size(); i &lt; elements_.size(); ++i) {</div><div class="line"><a name="l04969"></a><span class="lineno"> 4969</span>&#160; (*map)[elements_[i].Var()] = i;</div><div class="line"><a name="l04970"></a><span class="lineno"> 4970</span>&#160; }</div><div class="line"><a name="l04971"></a><span class="lineno"> 4971</span>&#160; }</div><div class="line"><a name="l04972"></a><span class="lineno"> 4972</span>&#160; <span class="keywordtype">bool</span> Find(<span class="keyword">const</span> V* <span class="keyword">const</span> var, <span class="keywordtype">int</span>* index)<span class="keyword"> const </span>{</div><div class="line"><a name="l04973"></a><span class="lineno"> 4973</span>&#160; <span class="comment">// This threshold was determined from microbenchmarks on Nehalem platform.</span></div><div class="line"><a name="l04974"></a><span class="lineno"> 4974</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> kMaxSizeForLinearAccess = 11;</div><div class="line"><a name="l04975"></a><span class="lineno"> 4975</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classoperations__research_1_1AssignmentContainer.html#a088429aaba219da2c92f9abbdaaa906d">Size</a>() &lt;= kMaxSizeForLinearAccess) {</div><div class="line"><a name="l04976"></a><span class="lineno"> 4976</span>&#160; <span class="comment">// Look for &#39;var&#39; in the container by performing a linear</span></div><div class="line"><a name="l04977"></a><span class="lineno"> 4977</span>&#160; <span class="comment">// search, avoiding the access to (and creation of) the elements</span></div><div class="line"><a name="l04978"></a><span class="lineno"> 4978</span>&#160; <span class="comment">// hash table.</span></div><div class="line"><a name="l04979"></a><span class="lineno"> 4979</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; elements_.size(); ++i) {</div><div class="line"><a name="l04980"></a><span class="lineno"> 4980</span>&#160; <span class="keywordflow">if</span> (var == elements_[i].Var()) {</div><div class="line"><a name="l04981"></a><span class="lineno"> 4981</span>&#160; *index = i;</div><div class="line"><a name="l04982"></a><span class="lineno"> 4982</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l04983"></a><span class="lineno"> 4983</span>&#160; }</div><div class="line"><a name="l04984"></a><span class="lineno"> 4984</span>&#160; }</div><div class="line"><a name="l04985"></a><span class="lineno"> 4985</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l04986"></a><span class="lineno"> 4986</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l04987"></a><span class="lineno"> 4987</span>&#160; EnsureMapIsUpToDate();</div><div class="line"><a name="l04988"></a><span class="lineno"> 4988</span>&#160; DCHECK_EQ(elements_map_.size(), elements_.size());</div><div class="line"><a name="l04989"></a><span class="lineno"> 4989</span>&#160; <span class="keywordflow">return</span> gtl::FindCopy(elements_map_, var, index);</div><div class="line"><a name="l04990"></a><span class="lineno"> 4990</span>&#160; }</div><div class="line"><a name="l04991"></a><span class="lineno"> 4991</span>&#160; }</div><div class="line"><a name="l04992"></a><span class="lineno"> 4992</span>&#160;</div><div class="line"><a name="l04993"></a><span class="lineno"> 4993</span>&#160; std::vector&lt;E&gt; elements_;</div><div class="line"><a name="l04994"></a><span class="lineno"> 4994</span>&#160; absl::flat_hash_map&lt;const V*, int&gt; elements_map_;</div><div class="line"><a name="l04995"></a><span class="lineno"> 4995</span>&#160;};</div><div class="line"><a name="l04996"></a><span class="lineno"> 4996</span>&#160;</div><div class="line"><a name="l04997"></a><span class="lineno"> 4997</span>&#160;<span class="comment">// ----- Assignment -----</span></div><div class="line"><a name="l04998"></a><span class="lineno"> 4998</span>&#160;</div><div class="line"><a name="l04999"></a><span class="lineno"> 4999</span>&#160;<span class="comment">// An Assignment is a variable -&gt; domains mapping, used</span></div><div class="line"><a name="l05000"></a><span class="lineno"> 5000</span>&#160;<span class="comment">// to report solutions to the user.</span></div><div class="line"><a name="l05001"></a><span class="lineno"> 5001</span>&#160;<span class="keyword">class </span>Assignment : <span class="keyword">public</span> PropagationBaseObject {</div><div class="line"><a name="l05002"></a><span class="lineno"> 5002</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l05003"></a><span class="lineno"> 5003</span>&#160; <span class="keyword">typedef</span> AssignmentContainer&lt;IntVar, IntVarElement&gt; <a class="code" href="classoperations__research_1_1Assignment.html#a8f1f48670d847343b04f8bacd77686e8">IntContainer</a>;</div><div class="line"><a name="l05004"></a><span class="lineno"> 5004</span>&#160; <span class="keyword">typedef</span> AssignmentContainer&lt;IntervalVar, IntervalVarElement&gt;</div><div class="line"><a name="l05005"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Assignment.html"> 5005</a></span>&#160; <a class="code" href="classoperations__research_1_1Assignment.html#ab8f7d613cbf4ee63e39460698d3a46b5">IntervalContainer</a>;</div><div class="line"><a name="l05006"></a><span class="lineno"> 5006</span>&#160; <span class="keyword">typedef</span> <a class="code" href="classoperations__research_1_1AssignmentContainer.html">AssignmentContainer&lt;SequenceVar, SequenceVarElement&gt;</a></div><div class="line"><a name="l05007"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Assignment.html#a8f1f48670d847343b04f8bacd77686e8"> 5007</a></span>&#160; <a class="code" href="classoperations__research_1_1Assignment.html#a094bbb476dd216af27921dcb30ee5303">SequenceContainer</a>;</div><div class="line"><a name="l05008"></a><span class="lineno"> 5008</span>&#160;</div><div class="line"><a name="l05009"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Assignment.html#ab8f7d613cbf4ee63e39460698d3a46b5"> 5009</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classoperations__research_1_1Assignment.html#a54a6c970300c41c108c0ea9634d6cfa7">Assignment</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> s);</div><div class="line"><a name="l05010"></a><span class="lineno"> 5010</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classoperations__research_1_1Assignment.html#a54a6c970300c41c108c0ea9634d6cfa7">Assignment</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>* <span class="keyword">const</span> copy);</div><div class="line"><a name="l05011"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Assignment.html#a094bbb476dd216af27921dcb30ee5303"> 5011</a></span>&#160; <a class="code" href="classoperations__research_1_1Assignment.html#a676bfc6bcaf0a4866b511c82fd47c420">~Assignment</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l05012"></a><span class="lineno"> 5012</span>&#160;</div><div class="line"><a name="l05013"></a><span class="lineno"> 5013</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#a95769d12b65e9e41966f082e6be717e3">Clear</a>();</div><div class="line"><a name="l05014"></a><span class="lineno"> 5014</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Assignment.html#ad89ba9e1f4d98d3a3b2bb5d97bd1e8bd">Empty</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l05015"></a><span class="lineno"> 5015</span>&#160; <span class="keywordflow">return</span> int_var_container_.<a class="code" href="classoperations__research_1_1AssignmentContainer.html#a877eabf96eaacfd5acee79411af3de22">Empty</a>() &amp;&amp; interval_var_container_.<a class="code" href="classoperations__research_1_1AssignmentContainer.html#a877eabf96eaacfd5acee79411af3de22">Empty</a>() &amp;&amp;</div><div class="line"><a name="l05016"></a><span class="lineno"> 5016</span>&#160; sequence_var_container_.<a class="code" href="classoperations__research_1_1AssignmentContainer.html#a877eabf96eaacfd5acee79411af3de22">Empty</a>();</div><div class="line"><a name="l05017"></a><span class="lineno"> 5017</span>&#160; }</div><div class="line"><a name="l05018"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Assignment.html#ad89ba9e1f4d98d3a3b2bb5d97bd1e8bd"> 5018</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classoperations__research_1_1Assignment.html#a8c6ea345dae471d30d83faeef85f61cf">Size</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l05019"></a><span class="lineno"> 5019</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classoperations__research_1_1Assignment.html#a607ab1726c4a6ae603e3645084ae96b3">NumIntVars</a>() + <a class="code" href="classoperations__research_1_1Assignment.html#a8341278b341fb7888adf8cdde439dfa2">NumIntervalVars</a>() + <a class="code" href="classoperations__research_1_1Assignment.html#abc1a433b3e54e2fa0aef6925f83d43b4">NumSequenceVars</a>();</div><div class="line"><a name="l05020"></a><span class="lineno"> 5020</span>&#160; }</div><div class="line"><a name="l05021"></a><span class="lineno"> 5021</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classoperations__research_1_1Assignment.html#a607ab1726c4a6ae603e3645084ae96b3">NumIntVars</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> int_var_container_.<a class="code" href="classoperations__research_1_1AssignmentContainer.html#a088429aaba219da2c92f9abbdaaa906d">Size</a>(); }</div><div class="line"><a name="l05022"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Assignment.html#a8c6ea345dae471d30d83faeef85f61cf"> 5022</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classoperations__research_1_1Assignment.html#a8341278b341fb7888adf8cdde439dfa2">NumIntervalVars</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> interval_var_container_.<a class="code" href="classoperations__research_1_1AssignmentContainer.html#a088429aaba219da2c92f9abbdaaa906d">Size</a>(); }</div><div class="line"><a name="l05023"></a><span class="lineno"> 5023</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classoperations__research_1_1Assignment.html#abc1a433b3e54e2fa0aef6925f83d43b4">NumSequenceVars</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> sequence_var_container_.<a class="code" href="classoperations__research_1_1AssignmentContainer.html#a088429aaba219da2c92f9abbdaaa906d">Size</a>(); }</div><div class="line"><a name="l05024"></a><span class="lineno"> 5024</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#a7eb289b0a73f7cdb6296c26f485eb69e">Store</a>();</div><div class="line"><a name="l05025"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Assignment.html#a607ab1726c4a6ae603e3645084ae96b3"> 5025</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#a17a5e13f2f630fd1566794ac31087fb1">Restore</a>();</div><div class="line"><a name="l05026"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Assignment.html#a8341278b341fb7888adf8cdde439dfa2"> 5026</a></span>&#160;</div><div class="line"><a name="l05027"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Assignment.html#abc1a433b3e54e2fa0aef6925f83d43b4"> 5027</a></span>&#160; <span class="comment">// Loads an assignment from a file; does not add variables to the</span></div><div class="line"><a name="l05028"></a><span class="lineno"> 5028</span>&#160; <span class="comment">// assignment (only the variables contained in the assignment are modified).</span></div><div class="line"><a name="l05029"></a><span class="lineno"> 5029</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Assignment.html#a3b43a5bec63b40d16227469fa213cb18">Load</a>(<span class="keyword">const</span> std::string&amp; filename);</div><div class="line"><a name="l05030"></a><span class="lineno"> 5030</span>&#160;<span class="preprocessor">#if !defined(SWIG)</span></div><div class="line"><a name="l05031"></a><span class="lineno"> 5031</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Assignment.html#a3b43a5bec63b40d16227469fa213cb18">Load</a>(File* file);</div><div class="line"><a name="l05032"></a><span class="lineno"> 5032</span>&#160;<span class="preprocessor">#endif // #if !defined(SWIG)</span></div><div class="line"><a name="l05033"></a><span class="lineno"> 5033</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#a3b43a5bec63b40d16227469fa213cb18">Load</a>(<span class="keyword">const</span> AssignmentProto&amp; assignment_proto);</div><div class="line"><a name="l05034"></a><span class="lineno"> 5034</span>&#160; <span class="comment">// Saves the assignment to a file.</span></div><div class="line"><a name="l05035"></a><span class="lineno"> 5035</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Assignment.html#af0aa8d715cd8daf2fdc0dc6ebd1f5abb">Save</a>(<span class="keyword">const</span> std::string&amp; filename) <span class="keyword">const</span>;</div><div class="line"><a name="l05036"></a><span class="lineno"> 5036</span>&#160;<span class="preprocessor">#if !defined(SWIG)</span></div><div class="line"><a name="l05037"></a><span class="lineno"> 5037</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Assignment.html#af0aa8d715cd8daf2fdc0dc6ebd1f5abb">Save</a>(File* file) <span class="keyword">const</span>;</div><div class="line"><a name="l05038"></a><span class="lineno"> 5038</span>&#160;<span class="preprocessor">#endif // #if !defined(SWIG)</span></div><div class="line"><a name="l05039"></a><span class="lineno"> 5039</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#af0aa8d715cd8daf2fdc0dc6ebd1f5abb">Save</a>(AssignmentProto* <span class="keyword">const</span> assignment_proto) <span class="keyword">const</span>;</div><div class="line"><a name="l05040"></a><span class="lineno"> 5040</span>&#160;</div><div class="line"><a name="l05041"></a><span class="lineno"> 5041</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#adae0600f8be577e57febc34f92d59203">AddObjective</a>(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> v);</div><div class="line"><a name="l05042"></a><span class="lineno"> 5042</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#ae2c61aed5346bd04a91421c70861d918">ClearObjective</a>() { objective_element_.<a class="code" href="classoperations__research_1_1IntVarElement.html#aee7b64f549193b551ca2cdcc5230e37d">Reset</a>(<span class="keyword">nullptr</span>); }</div><div class="line"><a name="l05043"></a><span class="lineno"> 5043</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1Assignment.html#a507e861514fe3fdc9313406ba25b7443">Objective</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l05044"></a><span class="lineno"> 5044</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Assignment.html#a31c577d3e5dbbf7a90f5b1955660642c">HasObjective</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (objective_element_.<a class="code" href="classoperations__research_1_1IntVarElement.html#a42e51fe336885a70673cbd4f473790b4">Var</a>() != <span class="keyword">nullptr</span>); }</div><div class="line"><a name="l05045"></a><span class="lineno"> 5045</span>&#160; int64 <a class="code" href="classoperations__research_1_1Assignment.html#a51dadd0690d4db9d75d1f8616f2742d8">ObjectiveMin</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l05046"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Assignment.html#ae2c61aed5346bd04a91421c70861d918"> 5046</a></span>&#160; int64 <a class="code" href="classoperations__research_1_1Assignment.html#a47d98f9809485d149e9537e1afb1d6fa">ObjectiveMax</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l05047"></a><span class="lineno"> 5047</span>&#160; int64 <a class="code" href="classoperations__research_1_1Assignment.html#a6eb497a20a19617c926afffe531654b0">ObjectiveValue</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l05048"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Assignment.html#a31c577d3e5dbbf7a90f5b1955660642c"> 5048</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Assignment.html#a57610548a8daffff880539eec24df109">ObjectiveBound</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l05049"></a><span class="lineno"> 5049</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#a5dbf21225962af3db13d216174989608">SetObjectiveMin</a>(int64 m);</div><div class="line"><a name="l05050"></a><span class="lineno"> 5050</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#a95bd74b66ab1626c7d7cb8b4c083463f">SetObjectiveMax</a>(int64 m);</div><div class="line"><a name="l05051"></a><span class="lineno"> 5051</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#ab9f7970e317fa45b497c484a00485b1f">SetObjectiveValue</a>(int64 value);</div><div class="line"><a name="l05052"></a><span class="lineno"> 5052</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#a403ddf341e288433672bedb08c322963">SetObjectiveRange</a>(int64 l, int64 u);</div><div class="line"><a name="l05053"></a><span class="lineno"> 5053</span>&#160;</div><div class="line"><a name="l05054"></a><span class="lineno"> 5054</span>&#160; <a class="code" href="classoperations__research_1_1IntVarElement.html">IntVarElement</a>* <a class="code" href="classoperations__research_1_1Assignment.html#ad71780560faa8a12413e6007c636c104">Add</a>(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var);</div><div class="line"><a name="l05055"></a><span class="lineno"> 5055</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#ad71780560faa8a12413e6007c636c104">Add</a>(<span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars);</div><div class="line"><a name="l05056"></a><span class="lineno"> 5056</span>&#160; <span class="comment">// Adds without checking if variable has been previously added.</span></div><div class="line"><a name="l05057"></a><span class="lineno"> 5057</span>&#160; <a class="code" href="classoperations__research_1_1IntVarElement.html">IntVarElement</a>* <a class="code" href="classoperations__research_1_1Assignment.html#a11c9545171ef35516112a3f9b49484b7">FastAdd</a>(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var);</div><div class="line"><a name="l05058"></a><span class="lineno"> 5058</span>&#160; int64 <a class="code" href="classoperations__research_1_1Assignment.html#a272ed05b871564c3ab8034010901d068">Min</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l05059"></a><span class="lineno"> 5059</span>&#160; int64 <a class="code" href="classoperations__research_1_1Assignment.html#aadef912e9222db3003405f7b60492dce">Max</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l05060"></a><span class="lineno"> 5060</span>&#160; int64 <a class="code" href="classoperations__research_1_1Assignment.html#a91dba370f181ba0f0ca98992aaeb59d6">Value</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l05061"></a><span class="lineno"> 5061</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Assignment.html#a0e75f7efda75c27cdec0baa19c2803d1">Bound</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l05062"></a><span class="lineno"> 5062</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#a117e51bab95cb5e42af11f97448c6d29">SetMin</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var, int64 m);</div><div class="line"><a name="l05063"></a><span class="lineno"> 5063</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#a5c741487249c9eb1805e33285873c240">SetMax</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var, int64 m);</div><div class="line"><a name="l05064"></a><span class="lineno"> 5064</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#ac0c8bfa3cf5460476327b1360783e29d">SetRange</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var, int64 l, int64 u);</div><div class="line"><a name="l05065"></a><span class="lineno"> 5065</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#ad98cd25d71c9c8c2e98aab3866372a85">SetValue</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var, int64 value);</div><div class="line"><a name="l05066"></a><span class="lineno"> 5066</span>&#160;</div><div class="line"><a name="l05067"></a><span class="lineno"> 5067</span>&#160; <a class="code" href="classoperations__research_1_1IntervalVarElement.html">IntervalVarElement</a>* <a class="code" href="classoperations__research_1_1Assignment.html#ad71780560faa8a12413e6007c636c104">Add</a>(<a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var);</div><div class="line"><a name="l05068"></a><span class="lineno"> 5068</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#ad71780560faa8a12413e6007c636c104">Add</a>(<span class="keyword">const</span> std::vector&lt;IntervalVar*&gt;&amp; vars);</div><div class="line"><a name="l05069"></a><span class="lineno"> 5069</span>&#160; <span class="comment">// Adds without checking if variable has been previously added.</span></div><div class="line"><a name="l05070"></a><span class="lineno"> 5070</span>&#160; <a class="code" href="classoperations__research_1_1IntervalVarElement.html">IntervalVarElement</a>* <a class="code" href="classoperations__research_1_1Assignment.html#a11c9545171ef35516112a3f9b49484b7">FastAdd</a>(<a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var);</div><div class="line"><a name="l05071"></a><span class="lineno"> 5071</span>&#160; int64 <a class="code" href="classoperations__research_1_1Assignment.html#a06215150a658d6f23e352df8e2edadc5">StartMin</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l05072"></a><span class="lineno"> 5072</span>&#160; int64 <a class="code" href="classoperations__research_1_1Assignment.html#a6e45377849d24ceb498ec05f3bb146e1">StartMax</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l05073"></a><span class="lineno"> 5073</span>&#160; int64 <a class="code" href="classoperations__research_1_1Assignment.html#a7530f8bd8c4e7153cae4e5245b28b0d9">StartValue</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l05074"></a><span class="lineno"> 5074</span>&#160; int64 <a class="code" href="classoperations__research_1_1Assignment.html#a95e429f9bc2b17b436f68f16bd184a4c">DurationMin</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l05075"></a><span class="lineno"> 5075</span>&#160; int64 <a class="code" href="classoperations__research_1_1Assignment.html#abf92c871da428f03cd4ad14853860721">DurationMax</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l05076"></a><span class="lineno"> 5076</span>&#160; int64 <a class="code" href="classoperations__research_1_1Assignment.html#a0fc43c0f1a567725de7ac83cc86bde8f">DurationValue</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l05077"></a><span class="lineno"> 5077</span>&#160; int64 <a class="code" href="classoperations__research_1_1Assignment.html#ab8d2e00eb03cec613c05eaf9ad6da646">EndMin</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l05078"></a><span class="lineno"> 5078</span>&#160; int64 <a class="code" href="classoperations__research_1_1Assignment.html#aaee3eb3af912875dc367679f64d65a3b">EndMax</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l05079"></a><span class="lineno"> 5079</span>&#160; int64 <a class="code" href="classoperations__research_1_1Assignment.html#a5251224150b99f3458c7bc494ba9d193">EndValue</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l05080"></a><span class="lineno"> 5080</span>&#160; int64 <a class="code" href="classoperations__research_1_1Assignment.html#a02f7cd678fb793a4cedbaa11f1904e32">PerformedMin</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l05081"></a><span class="lineno"> 5081</span>&#160; int64 <a class="code" href="classoperations__research_1_1Assignment.html#a6e3a7428eea94e102ed7c7335f551b52">PerformedMax</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l05082"></a><span class="lineno"> 5082</span>&#160; int64 <a class="code" href="classoperations__research_1_1Assignment.html#ac3cbe166fe2619e72c729e18ee245eac">PerformedValue</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l05083"></a><span class="lineno"> 5083</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#ae6f3b7ad8f6360c12d1b459cb5cefe59">SetStartMin</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var, int64 m);</div><div class="line"><a name="l05084"></a><span class="lineno"> 5084</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#a8898f5457ee277d6365c9d01ef6e66ab">SetStartMax</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var, int64 m);</div><div class="line"><a name="l05085"></a><span class="lineno"> 5085</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#a846c66e60add2d3116f6080694492c55">SetStartRange</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var, int64 mi, int64 ma);</div><div class="line"><a name="l05086"></a><span class="lineno"> 5086</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#af77457fc093a5cca3be6a1b56e2bc028">SetStartValue</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var, int64 value);</div><div class="line"><a name="l05087"></a><span class="lineno"> 5087</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#a470a8ff6d426b41ce7b4cefbd7de8d6d">SetDurationMin</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var, int64 m);</div><div class="line"><a name="l05088"></a><span class="lineno"> 5088</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#aa52aacc34b2380d2b649983ac5c1c7fd">SetDurationMax</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var, int64 m);</div><div class="line"><a name="l05089"></a><span class="lineno"> 5089</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#a514977300d99309ea09e80365ce54dca">SetDurationRange</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var, int64 mi, int64 ma);</div><div class="line"><a name="l05090"></a><span class="lineno"> 5090</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#a3388a6269c91d6ec8b8edc5556d5a544">SetDurationValue</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var, int64 value);</div><div class="line"><a name="l05091"></a><span class="lineno"> 5091</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#a7e88fb7a9da71421cb4a67eb1f81a24e">SetEndMin</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var, int64 m);</div><div class="line"><a name="l05092"></a><span class="lineno"> 5092</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#a157b6b9a936699c80f515accdf1bd422">SetEndMax</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var, int64 m);</div><div class="line"><a name="l05093"></a><span class="lineno"> 5093</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#a77552a8028118507b948e06dd8d5e879">SetEndRange</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var, int64 mi, int64 ma);</div><div class="line"><a name="l05094"></a><span class="lineno"> 5094</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#ae52a3d79c5e89b8661928c6439d9e107">SetEndValue</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var, int64 value);</div><div class="line"><a name="l05095"></a><span class="lineno"> 5095</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#a93c0e33825a1d8ef903b34a443b281b2">SetPerformedMin</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var, int64 m);</div><div class="line"><a name="l05096"></a><span class="lineno"> 5096</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#a866caecff7e07d15a7771d26fcb3b995">SetPerformedMax</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var, int64 m);</div><div class="line"><a name="l05097"></a><span class="lineno"> 5097</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#ab74b8ac19e3a0c418636b841ba551c1a">SetPerformedRange</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var, int64 mi, int64 ma);</div><div class="line"><a name="l05098"></a><span class="lineno"> 5098</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#addd13c37ed68173aab91b87925f76e61">SetPerformedValue</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var, int64 value);</div><div class="line"><a name="l05099"></a><span class="lineno"> 5099</span>&#160;</div><div class="line"><a name="l05100"></a><span class="lineno"> 5100</span>&#160; <a class="code" href="classoperations__research_1_1SequenceVarElement.html">SequenceVarElement</a>* <a class="code" href="classoperations__research_1_1Assignment.html#ad71780560faa8a12413e6007c636c104">Add</a>(<a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a>* <span class="keyword">const</span> var);</div><div class="line"><a name="l05101"></a><span class="lineno"> 5101</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#ad71780560faa8a12413e6007c636c104">Add</a>(<span class="keyword">const</span> std::vector&lt;SequenceVar*&gt;&amp; vars);</div><div class="line"><a name="l05102"></a><span class="lineno"> 5102</span>&#160; <span class="comment">// Adds without checking if the variable had been previously added.</span></div><div class="line"><a name="l05103"></a><span class="lineno"> 5103</span>&#160; <a class="code" href="classoperations__research_1_1SequenceVarElement.html">SequenceVarElement</a>* <a class="code" href="classoperations__research_1_1Assignment.html#a11c9545171ef35516112a3f9b49484b7">FastAdd</a>(<a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a>* <span class="keyword">const</span> var);</div><div class="line"><a name="l05104"></a><span class="lineno"> 5104</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; <a class="code" href="classoperations__research_1_1Assignment.html#a240108b6b72b6f8ea4a479095b36504b">ForwardSequence</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l05105"></a><span class="lineno"> 5105</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; <a class="code" href="classoperations__research_1_1Assignment.html#ab4a9176237aaf2e3b50196cf4726757a">BackwardSequence</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l05106"></a><span class="lineno"> 5106</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; <a class="code" href="classoperations__research_1_1Assignment.html#a47c48e2669dce44002b0c618273bddfe">Unperformed</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l05107"></a><span class="lineno"> 5107</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#ab6d8cf1dcb0f18656622e325be57e9e8">SetSequence</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a>* <span class="keyword">const</span> var,</div><div class="line"><a name="l05108"></a><span class="lineno"> 5108</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; forward_sequence,</div><div class="line"><a name="l05109"></a><span class="lineno"> 5109</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; backward_sequence,</div><div class="line"><a name="l05110"></a><span class="lineno"> 5110</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; unperformed);</div><div class="line"><a name="l05111"></a><span class="lineno"> 5111</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#ad613991e451593b83b35081635d1fca6">SetForwardSequence</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a>* <span class="keyword">const</span> var,</div><div class="line"><a name="l05112"></a><span class="lineno"> 5112</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; forward_sequence);</div><div class="line"><a name="l05113"></a><span class="lineno"> 5113</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#ad1746f20b39f1db633bb4781bedf05b7">SetBackwardSequence</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a>* <span class="keyword">const</span> var,</div><div class="line"><a name="l05114"></a><span class="lineno"> 5114</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; backward_sequence);</div><div class="line"><a name="l05115"></a><span class="lineno"> 5115</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#ab9ab90406aa4d66b882c1e873ce76c48">SetUnperformed</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a>* <span class="keyword">const</span> var,</div><div class="line"><a name="l05116"></a><span class="lineno"> 5116</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; unperformed);</div><div class="line"><a name="l05117"></a><span class="lineno"> 5117</span>&#160;</div><div class="line"><a name="l05118"></a><span class="lineno"> 5118</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#af6e5490427e0fba93541ce64812af7ff">Activate</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var);</div><div class="line"><a name="l05119"></a><span class="lineno"> 5119</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#a7d783636fe1d998f40ef05ac2b007f77">Deactivate</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var);</div><div class="line"><a name="l05120"></a><span class="lineno"> 5120</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Assignment.html#a2ae9fa6611914148091bc9088fbd14e6">Activated</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l05121"></a><span class="lineno"> 5121</span>&#160;</div><div class="line"><a name="l05122"></a><span class="lineno"> 5122</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#af6e5490427e0fba93541ce64812af7ff">Activate</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var);</div><div class="line"><a name="l05123"></a><span class="lineno"> 5123</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#a7d783636fe1d998f40ef05ac2b007f77">Deactivate</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var);</div><div class="line"><a name="l05124"></a><span class="lineno"> 5124</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Assignment.html#a2ae9fa6611914148091bc9088fbd14e6">Activated</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l05125"></a><span class="lineno"> 5125</span>&#160;</div><div class="line"><a name="l05126"></a><span class="lineno"> 5126</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#af6e5490427e0fba93541ce64812af7ff">Activate</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a>* <span class="keyword">const</span> var);</div><div class="line"><a name="l05127"></a><span class="lineno"> 5127</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#a7d783636fe1d998f40ef05ac2b007f77">Deactivate</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a>* <span class="keyword">const</span> var);</div><div class="line"><a name="l05128"></a><span class="lineno"> 5128</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Assignment.html#a2ae9fa6611914148091bc9088fbd14e6">Activated</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l05129"></a><span class="lineno"> 5129</span>&#160;</div><div class="line"><a name="l05130"></a><span class="lineno"> 5130</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#add93a1a7265307e0915276d5d3645a5e">ActivateObjective</a>();</div><div class="line"><a name="l05131"></a><span class="lineno"> 5131</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#ab5bba882c8c44098d624f9c17b3dc0b9">DeactivateObjective</a>();</div><div class="line"><a name="l05132"></a><span class="lineno"> 5132</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Assignment.html#a808d1e2da8133bc44f693e87e5584bfc">ActivatedObjective</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l05133"></a><span class="lineno"> 5133</span>&#160;</div><div class="line"><a name="l05134"></a><span class="lineno"> 5134</span>&#160; std::string <a class="code" href="classoperations__research_1_1Assignment.html#a709bad20694c9c117a3abfff24a60d03">DebugString</a>() <span class="keyword">const override</span>;</div><div class="line"><a name="l05135"></a><span class="lineno"> 5135</span>&#160;</div><div class="line"><a name="l05136"></a><span class="lineno"> 5136</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Assignment.html#a75637e828b93b922f924b532c6bdf980">AreAllElementsBound</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l05137"></a><span class="lineno"> 5137</span>&#160; <span class="keywordflow">return</span> int_var_container_.<a class="code" href="classoperations__research_1_1AssignmentContainer.html#a37197e2028382d8987a41c9ac84ed7f5">AreAllElementsBound</a>() &amp;&amp;</div><div class="line"><a name="l05138"></a><span class="lineno"> 5138</span>&#160; interval_var_container_.<a class="code" href="classoperations__research_1_1AssignmentContainer.html#a37197e2028382d8987a41c9ac84ed7f5">AreAllElementsBound</a>() &amp;&amp;</div><div class="line"><a name="l05139"></a><span class="lineno"> 5139</span>&#160; sequence_var_container_.<a class="code" href="classoperations__research_1_1AssignmentContainer.html#a37197e2028382d8987a41c9ac84ed7f5">AreAllElementsBound</a>();</div><div class="line"><a name="l05140"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Assignment.html#a75637e828b93b922f924b532c6bdf980"> 5140</a></span>&#160; }</div><div class="line"><a name="l05141"></a><span class="lineno"> 5141</span>&#160;</div><div class="line"><a name="l05142"></a><span class="lineno"> 5142</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Assignment.html#a7ac7a68050caf1046a8f299d597e85b1">Contains</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l05143"></a><span class="lineno"> 5143</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Assignment.html#a7ac7a68050caf1046a8f299d597e85b1">Contains</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1IntervalVar.html">IntervalVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l05144"></a><span class="lineno"> 5144</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Assignment.html#a7ac7a68050caf1046a8f299d597e85b1">Contains</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a>* <span class="keyword">const</span> var) <span class="keyword">const</span>;</div><div class="line"><a name="l05145"></a><span class="lineno"> 5145</span>&#160; <span class="comment">// Copies the intersection of the two assignments to the current assignment.</span></div><div class="line"><a name="l05146"></a><span class="lineno"> 5146</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#ad6ab5aff03cb66b05fcbdff43dde169a">CopyIntersection</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>* assignment);</div><div class="line"><a name="l05147"></a><span class="lineno"> 5147</span>&#160; <span class="comment">// Copies &#39;assignment&#39; to the current assignment, clearing its previous</span></div><div class="line"><a name="l05148"></a><span class="lineno"> 5148</span>&#160; <span class="comment">// content.</span></div><div class="line"><a name="l05149"></a><span class="lineno"> 5149</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Assignment.html#a8640e47c57ef2d95a6c94d383a9641a4">Copy</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>* assignment);</div><div class="line"><a name="l05150"></a><span class="lineno"> 5150</span>&#160;</div><div class="line"><a name="l05151"></a><span class="lineno"> 5151</span>&#160; <span class="comment">// TODO(user): Add element iterators to avoid exposing container class.</span></div><div class="line"><a name="l05152"></a><span class="lineno"> 5152</span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1Assignment.html#a8f1f48670d847343b04f8bacd77686e8">IntContainer</a>&amp; <a class="code" href="classoperations__research_1_1Assignment.html#ae8af25911cdd4091cd6a0ec08c9a38c7">IntVarContainer</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> int_var_container_; }</div><div class="line"><a name="l05153"></a><span class="lineno"> 5153</span>&#160; <a class="code" href="classoperations__research_1_1Assignment.html#a8f1f48670d847343b04f8bacd77686e8">IntContainer</a>* <a class="code" href="classoperations__research_1_1Assignment.html#ae51ad783156fb9ec65af38a8d234a0b8">MutableIntVarContainer</a>() { <span class="keywordflow">return</span> &amp;int_var_container_; }</div><div class="line"><a name="l05154"></a><span class="lineno"> 5154</span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1Assignment.html#ab8f7d613cbf4ee63e39460698d3a46b5">IntervalContainer</a>&amp; <a class="code" href="classoperations__research_1_1Assignment.html#ad18a61ff8de4c3e7ec78a7e12a480af3">IntervalVarContainer</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l05155"></a><span class="lineno"> 5155</span>&#160; <span class="keywordflow">return</span> interval_var_container_;</div><div class="line"><a name="l05156"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Assignment.html#ae8af25911cdd4091cd6a0ec08c9a38c7"> 5156</a></span>&#160; }</div><div class="line"><a name="l05157"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Assignment.html#ae51ad783156fb9ec65af38a8d234a0b8"> 5157</a></span>&#160; <a class="code" href="classoperations__research_1_1AssignmentContainer.html">IntervalContainer</a>* <a class="code" href="classoperations__research_1_1Assignment.html#a9ffb2e99804d31214d9d23e1f200e85c">MutableIntervalVarContainer</a>() {</div><div class="line"><a name="l05158"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Assignment.html#ad18a61ff8de4c3e7ec78a7e12a480af3"> 5158</a></span>&#160; <span class="keywordflow">return</span> &amp;interval_var_container_;</div><div class="line"><a name="l05159"></a><span class="lineno"> 5159</span>&#160; }</div><div class="line"><a name="l05160"></a><span class="lineno"> 5160</span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1Assignment.html#a094bbb476dd216af27921dcb30ee5303">SequenceContainer</a>&amp; <a class="code" href="classoperations__research_1_1Assignment.html#a40c0b89a06e6341fe2155f38ac1ceede">SequenceVarContainer</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l05161"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Assignment.html#a9ffb2e99804d31214d9d23e1f200e85c"> 5161</a></span>&#160; <span class="keywordflow">return</span> sequence_var_container_;</div><div class="line"><a name="l05162"></a><span class="lineno"> 5162</span>&#160; }</div><div class="line"><a name="l05163"></a><span class="lineno"> 5163</span>&#160; <a class="code" href="classoperations__research_1_1Assignment.html#a094bbb476dd216af27921dcb30ee5303">SequenceContainer</a>* <a class="code" href="classoperations__research_1_1Assignment.html#a8c613fab3bb57fb3ec18a55a11eee8b5">MutableSequenceVarContainer</a>() {</div><div class="line"><a name="l05164"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Assignment.html#a40c0b89a06e6341fe2155f38ac1ceede"> 5164</a></span>&#160; <span class="keywordflow">return</span> &amp;sequence_var_container_;</div><div class="line"><a name="l05165"></a><span class="lineno"> 5165</span>&#160; }</div><div class="line"><a name="l05166"></a><span class="lineno"> 5166</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Assignment.html#a481f3887a70f86eb37968ee8909267f4">operator==</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>&amp; assignment)<span class="keyword"> const </span>{</div><div class="line"><a name="l05167"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Assignment.html#a8c613fab3bb57fb3ec18a55a11eee8b5"> 5167</a></span>&#160; <span class="keywordflow">return</span> int_var_container_ == assignment.int_var_container_ &amp;&amp;</div><div class="line"><a name="l05168"></a><span class="lineno"> 5168</span>&#160; interval_var_container_ == assignment.interval_var_container_ &amp;&amp;</div><div class="line"><a name="l05169"></a><span class="lineno"> 5169</span>&#160; sequence_var_container_ == assignment.sequence_var_container_ &amp;&amp;</div><div class="line"><a name="l05170"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Assignment.html#a481f3887a70f86eb37968ee8909267f4"> 5170</a></span>&#160; objective_element_ == assignment.objective_element_;</div><div class="line"><a name="l05171"></a><span class="lineno"> 5171</span>&#160; }</div><div class="line"><a name="l05172"></a><span class="lineno"> 5172</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Assignment.html#ae285dcf4a5f8b6a28a9a6f5ed7b3e93d">operator!=</a>(<span class="keyword">const</span> <a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>&amp; assignment)<span class="keyword"> const </span>{</div><div class="line"><a name="l05173"></a><span class="lineno"> 5173</span>&#160; <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == assignment);</div><div class="line"><a name="l05174"></a><span class="lineno"> 5174</span>&#160; }</div><div class="line"><a name="l05175"></a><span class="lineno"> 5175</span>&#160;</div><div class="line"><a name="l05176"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Assignment.html#ae285dcf4a5f8b6a28a9a6f5ed7b3e93d"> 5176</a></span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l05177"></a><span class="lineno"> 5177</span>&#160; <a class="code" href="classoperations__research_1_1AssignmentContainer.html">IntContainer</a> int_var_container_;</div><div class="line"><a name="l05178"></a><span class="lineno"> 5178</span>&#160; <a class="code" href="classoperations__research_1_1AssignmentContainer.html">IntervalContainer</a> interval_var_container_;</div><div class="line"><a name="l05179"></a><span class="lineno"> 5179</span>&#160; <a class="code" href="classoperations__research_1_1AssignmentContainer.html">SequenceContainer</a> sequence_var_container_;</div><div class="line"><a name="l05180"></a><span class="lineno"> 5180</span>&#160; <a class="code" href="classoperations__research_1_1IntVarElement.html">IntVarElement</a> objective_element_;</div><div class="line"><a name="l05181"></a><span class="lineno"> 5181</span>&#160; DISALLOW_COPY_AND_ASSIGN(<a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>);</div><div class="line"><a name="l05182"></a><span class="lineno"> 5182</span>&#160;};</div><div class="line"><a name="l05183"></a><span class="lineno"> 5183</span>&#160;</div><div class="line"><a name="l05184"></a><span class="lineno"> 5184</span>&#160;std::ostream&amp; <a class="code" href="namespaceoperations__research.html#a316abccdfa41512564d84365ea8f0ead">operator&lt;&lt;</a>(std::ostream&amp; out,</div><div class="line"><a name="l05185"></a><span class="lineno"> 5185</span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>&amp; assignment); <span class="comment">// NOLINT</span></div><div class="line"><a name="l05186"></a><span class="lineno"> 5186</span>&#160;</div><div class="line"><a name="l05187"></a><span class="lineno"> 5187</span>&#160;<span class="comment">// Given a &quot;source_assignment&quot;, clears the &quot;target_assignment&quot; and adds</span></div><div class="line"><a name="l05188"></a><span class="lineno"> 5188</span>&#160;<span class="comment">// all IntVars in &quot;target_vars&quot;, with the values of the variables set according</span></div><div class="line"><a name="l05189"></a><span class="lineno"> 5189</span>&#160;<span class="comment">// to the corresponding values of &quot;source_vars&quot; in &quot;source_assignment&quot;.</span></div><div class="line"><a name="l05190"></a><span class="lineno"> 5190</span>&#160;<span class="comment">// source_vars and target_vars must have the same number of elements.</span></div><div class="line"><a name="l05191"></a><span class="lineno"> 5191</span>&#160;<span class="comment">// The source and target assignments can belong to different Solvers.</span></div><div class="line"><a name="l05192"></a><span class="lineno"> 5192</span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespaceoperations__research.html#aea2bf322fab4e2319a23ad22acf8ccf8">SetAssignmentFromAssignment</a>(<a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>* target_assignment,</div><div class="line"><a name="l05193"></a><span class="lineno"> 5193</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; target_vars,</div><div class="line"><a name="l05194"></a><span class="lineno"> 5194</span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>* source_assignment,</div><div class="line"><a name="l05195"></a><span class="lineno"> 5195</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; source_vars);</div><div class="line"><a name="l05196"></a><span class="lineno"> 5196</span>&#160;</div><div class="line"><a name="l05197"></a><span class="lineno"> 5197</span>&#160;<span class="comment">// ---------- Pack Constraint ----------</span></div><div class="line"><a name="l05198"></a><span class="lineno"> 5198</span>&#160;</div><div class="line"><a name="l05199"></a><span class="lineno"> 5199</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1Pack.html">Pack</a> : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a> {</div><div class="line"><a name="l05200"></a><span class="lineno"> 5200</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l05201"></a><span class="lineno"> 5201</span>&#160; <a class="code" href="classoperations__research_1_1Pack.html#a94969a5d7e604ccba7e5b515424a246e">Pack</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> s, <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; vars, <span class="keywordtype">int</span> number_of_bins);</div><div class="line"><a name="l05202"></a><span class="lineno"> 5202</span>&#160;</div><div class="line"><a name="l05203"></a><span class="lineno"><a class="line" href="classoperations__research_1_1Pack.html"> 5203</a></span>&#160; <a class="code" href="classoperations__research_1_1Pack.html#ac41b9dfede7920f5baadea90cddc72ea">~Pack</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l05204"></a><span class="lineno"> 5204</span>&#160;</div><div class="line"><a name="l05205"></a><span class="lineno"> 5205</span>&#160; <span class="comment">// ----- Public API -----</span></div><div class="line"><a name="l05206"></a><span class="lineno"> 5206</span>&#160;</div><div class="line"><a name="l05207"></a><span class="lineno"> 5207</span>&#160; <span class="comment">// Dimensions are additional constraints than can restrict what is</span></div><div class="line"><a name="l05208"></a><span class="lineno"> 5208</span>&#160; <span class="comment">// possible with the pack constraint. It can be used to set capacity</span></div><div class="line"><a name="l05209"></a><span class="lineno"> 5209</span>&#160; <span class="comment">// limits, to count objects per bin, to compute unassigned</span></div><div class="line"><a name="l05210"></a><span class="lineno"> 5210</span>&#160; <span class="comment">// penalties...</span></div><div class="line"><a name="l05211"></a><span class="lineno"> 5211</span>&#160;</div><div class="line"><a name="l05212"></a><span class="lineno"> 5212</span>&#160; <span class="comment">// This dimension imposes that for all bins b, the weighted sum</span></div><div class="line"><a name="l05213"></a><span class="lineno"> 5213</span>&#160; <span class="comment">// (weights[i]) of all objects i assigned to &#39;b&#39; is less or equal</span></div><div class="line"><a name="l05214"></a><span class="lineno"> 5214</span>&#160; <span class="comment">// &#39;bounds[b]&#39;.</span></div><div class="line"><a name="l05215"></a><span class="lineno"> 5215</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Pack.html#af69fc8b35affb174b5e47fbee6de9772">AddWeightedSumLessOrEqualConstantDimension</a>(</div><div class="line"><a name="l05216"></a><span class="lineno"> 5216</span>&#160; <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; weights, <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; bounds);</div><div class="line"><a name="l05217"></a><span class="lineno"> 5217</span>&#160;</div><div class="line"><a name="l05218"></a><span class="lineno"> 5218</span>&#160; <span class="comment">// This dimension imposes that for all bins b, the weighted sum</span></div><div class="line"><a name="l05219"></a><span class="lineno"> 5219</span>&#160; <span class="comment">// (weights-&gt;Run(i)) of all objects i assigned to &#39;b&#39; is less or</span></div><div class="line"><a name="l05220"></a><span class="lineno"> 5220</span>&#160; <span class="comment">// equal to &#39;bounds[b]&#39;. Ownership of the callback is transferred to</span></div><div class="line"><a name="l05221"></a><span class="lineno"> 5221</span>&#160; <span class="comment">// the pack constraint.</span></div><div class="line"><a name="l05222"></a><span class="lineno"> 5222</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Pack.html#af69fc8b35affb174b5e47fbee6de9772">AddWeightedSumLessOrEqualConstantDimension</a>(</div><div class="line"><a name="l05223"></a><span class="lineno"> 5223</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a1040bdf484009e1a00e60ebb055ad1a1">Solver::IndexEvaluator1</a> weights, <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; bounds);</div><div class="line"><a name="l05224"></a><span class="lineno"> 5224</span>&#160;</div><div class="line"><a name="l05225"></a><span class="lineno"> 5225</span>&#160; <span class="comment">// This dimension imposes that for all bins b, the weighted sum</span></div><div class="line"><a name="l05226"></a><span class="lineno"> 5226</span>&#160; <span class="comment">// (weights-&gt;Run(i, b) of all objects i assigned to &#39;b&#39; is less or</span></div><div class="line"><a name="l05227"></a><span class="lineno"> 5227</span>&#160; <span class="comment">// equal to &#39;bounds[b]&#39;. Ownership of the callback is transferred to</span></div><div class="line"><a name="l05228"></a><span class="lineno"> 5228</span>&#160; <span class="comment">// the pack constraint.</span></div><div class="line"><a name="l05229"></a><span class="lineno"> 5229</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Pack.html#af69fc8b35affb174b5e47fbee6de9772">AddWeightedSumLessOrEqualConstantDimension</a>(</div><div class="line"><a name="l05230"></a><span class="lineno"> 5230</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a0243986dd2db4b6e1bda331329ae529b">Solver::IndexEvaluator2</a> weights, <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; bounds);</div><div class="line"><a name="l05231"></a><span class="lineno"> 5231</span>&#160;</div><div class="line"><a name="l05232"></a><span class="lineno"> 5232</span>&#160; <span class="comment">// This dimension imposes that for all bins b, the weighted sum</span></div><div class="line"><a name="l05233"></a><span class="lineno"> 5233</span>&#160; <span class="comment">// (weights[i]) of all objects i assigned to &#39;b&#39; is equal to loads[b].</span></div><div class="line"><a name="l05234"></a><span class="lineno"> 5234</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Pack.html#ae82f80cca2acf98982b3c0eb5cc96d03">AddWeightedSumEqualVarDimension</a>(<span class="keyword">const</span> std::vector&lt;int64&gt;&amp; weights,</div><div class="line"><a name="l05235"></a><span class="lineno"> 5235</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; loads);</div><div class="line"><a name="l05236"></a><span class="lineno"> 5236</span>&#160;</div><div class="line"><a name="l05237"></a><span class="lineno"> 5237</span>&#160; <span class="comment">// This dimension imposes that for all bins b, the weighted sum</span></div><div class="line"><a name="l05238"></a><span class="lineno"> 5238</span>&#160; <span class="comment">// (weights-&gt;Run(i, b)) of all objects i assigned to &#39;b&#39; is equal to</span></div><div class="line"><a name="l05239"></a><span class="lineno"> 5239</span>&#160; <span class="comment">// loads[b].</span></div><div class="line"><a name="l05240"></a><span class="lineno"> 5240</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Pack.html#ae82f80cca2acf98982b3c0eb5cc96d03">AddWeightedSumEqualVarDimension</a>(<a class="code" href="classoperations__research_1_1Solver.html#a0243986dd2db4b6e1bda331329ae529b">Solver::IndexEvaluator2</a> weights,</div><div class="line"><a name="l05241"></a><span class="lineno"> 5241</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; loads);</div><div class="line"><a name="l05242"></a><span class="lineno"> 5242</span>&#160;</div><div class="line"><a name="l05243"></a><span class="lineno"> 5243</span>&#160; <span class="comment">// This dimension imposes:</span></div><div class="line"><a name="l05244"></a><span class="lineno"> 5244</span>&#160; <span class="comment">// forall b in bins,</span></div><div class="line"><a name="l05245"></a><span class="lineno"> 5245</span>&#160; <span class="comment">// sum (i in items: usage[i] * is_assigned(i, b)) &lt;= capacity[b]</span></div><div class="line"><a name="l05246"></a><span class="lineno"> 5246</span>&#160; <span class="comment">// where is_assigned(i, b) is true if and only if item i is assigned</span></div><div class="line"><a name="l05247"></a><span class="lineno"> 5247</span>&#160; <span class="comment">// to the bin b.</span></div><div class="line"><a name="l05248"></a><span class="lineno"> 5248</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l05249"></a><span class="lineno"> 5249</span>&#160; <span class="comment">// This can be used to model shapes of items by linking variables of</span></div><div class="line"><a name="l05250"></a><span class="lineno"> 5250</span>&#160; <span class="comment">// the same item on parallel dimensions with an allowed assignment</span></div><div class="line"><a name="l05251"></a><span class="lineno"> 5251</span>&#160; <span class="comment">// constraint.</span></div><div class="line"><a name="l05252"></a><span class="lineno"> 5252</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Pack.html#a92da0e27853c3c611f0384457e1fcdb2">AddSumVariableWeightsLessOrEqualConstantDimension</a>(</div><div class="line"><a name="l05253"></a><span class="lineno"> 5253</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; usage, <span class="keyword">const</span> std::vector&lt;int64&gt;&amp; capacity);</div><div class="line"><a name="l05254"></a><span class="lineno"> 5254</span>&#160;</div><div class="line"><a name="l05255"></a><span class="lineno"> 5255</span>&#160; <span class="comment">// This dimension enforces that cost_var == sum of weights[i] for</span></div><div class="line"><a name="l05256"></a><span class="lineno"> 5256</span>&#160; <span class="comment">// all objects &#39;i&#39; assigned to a bin.</span></div><div class="line"><a name="l05257"></a><span class="lineno"> 5257</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Pack.html#acbb9380640b30f024e9986f96d5fe582">AddWeightedSumOfAssignedDimension</a>(<span class="keyword">const</span> std::vector&lt;int64&gt;&amp; weights,</div><div class="line"><a name="l05258"></a><span class="lineno"> 5258</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> cost_var);</div><div class="line"><a name="l05259"></a><span class="lineno"> 5259</span>&#160;</div><div class="line"><a name="l05260"></a><span class="lineno"> 5260</span>&#160; <span class="comment">// This dimension links &#39;count_var&#39; to the actual number of bins used in the</span></div><div class="line"><a name="l05261"></a><span class="lineno"> 5261</span>&#160; <span class="comment">// pack.</span></div><div class="line"><a name="l05262"></a><span class="lineno"> 5262</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Pack.html#a3030c379670033531aab20df788376ed">AddCountUsedBinDimension</a>(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> count_var);</div><div class="line"><a name="l05263"></a><span class="lineno"> 5263</span>&#160;</div><div class="line"><a name="l05264"></a><span class="lineno"> 5264</span>&#160; <span class="comment">// This dimension links &#39;count_var&#39; to the actual number of items</span></div><div class="line"><a name="l05265"></a><span class="lineno"> 5265</span>&#160; <span class="comment">// assigned to a bin in the pack.</span></div><div class="line"><a name="l05266"></a><span class="lineno"> 5266</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Pack.html#aa8c9281df8ab547dbed84de1364267d4">AddCountAssignedItemsDimension</a>(<a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <span class="keyword">const</span> count_var);</div><div class="line"><a name="l05267"></a><span class="lineno"> 5267</span>&#160; <span class="comment">// ----- Internal API -----</span></div><div class="line"><a name="l05268"></a><span class="lineno"> 5268</span>&#160;</div><div class="line"><a name="l05269"></a><span class="lineno"> 5269</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Pack.html#a22f97f40518e3d2f565d78f7ef6f3b56">Post</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l05270"></a><span class="lineno"> 5270</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Pack.html#af10aa93a14a72df0bd8b5c7143c6648e">ClearAll</a>();</div><div class="line"><a name="l05271"></a><span class="lineno"> 5271</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Pack.html#ac2a200cf86dc0fa3b6a7905971ad88e6">PropagateDelayed</a>();</div><div class="line"><a name="l05272"></a><span class="lineno"> 5272</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Pack.html#adac62b65b527aa23434dd7d1fdba3b14">InitialPropagate</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l05273"></a><span class="lineno"> 5273</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Pack.html#a29f65d45d0fefbab371c7265572d54f4">Propagate</a>();</div><div class="line"><a name="l05274"></a><span class="lineno"> 5274</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Pack.html#af13898c8553d217fa3d52c6e2b504f8d">OneDomain</a>(<span class="keywordtype">int</span> var_index);</div><div class="line"><a name="l05275"></a><span class="lineno"> 5275</span>&#160; std::string <a class="code" href="classoperations__research_1_1Pack.html#a494cf6256ff568544390e507a6943112">DebugString</a>() <span class="keyword">const override</span>;</div><div class="line"><a name="l05276"></a><span class="lineno"> 5276</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Pack.html#afc53068cf76b2865a10fafd410da228e">IsUndecided</a>(<span class="keywordtype">int</span> var_index, <span class="keywordtype">int</span> bin_index) <span class="keyword">const</span>;</div><div class="line"><a name="l05277"></a><span class="lineno"> 5277</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Pack.html#ae7875687d4d252d247a0c4c7b78a0326">SetImpossible</a>(<span class="keywordtype">int</span> var_index, <span class="keywordtype">int</span> bin_index);</div><div class="line"><a name="l05278"></a><span class="lineno"> 5278</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Pack.html#a15e81047afe54184915345326a7cdaa6">Assign</a>(<span class="keywordtype">int</span> var_index, <span class="keywordtype">int</span> bin_index);</div><div class="line"><a name="l05279"></a><span class="lineno"> 5279</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Pack.html#a6dc7ba8d99e3f6cc958125cbfaf22293">IsAssignedStatusKnown</a>(<span class="keywordtype">int</span> var_index) <span class="keyword">const</span>;</div><div class="line"><a name="l05280"></a><span class="lineno"> 5280</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1Pack.html#a21511d7769c6d0d590e3e8a02892052f">IsPossible</a>(<span class="keywordtype">int</span> var_index, <span class="keywordtype">int</span> bin_index) <span class="keyword">const</span>;</div><div class="line"><a name="l05281"></a><span class="lineno"> 5281</span>&#160; <a class="code" href="classoperations__research_1_1IntVar.html">IntVar</a>* <a class="code" href="classoperations__research_1_1Pack.html#ae7c46b011db8d3382e6b370bbdeaca4f">AssignVar</a>(<span class="keywordtype">int</span> var_index, <span class="keywordtype">int</span> bin_index) <span class="keyword">const</span>;</div><div class="line"><a name="l05282"></a><span class="lineno"> 5282</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Pack.html#a104bd60ce9672f53c0539dac7daec58f">SetAssigned</a>(<span class="keywordtype">int</span> var_index);</div><div class="line"><a name="l05283"></a><span class="lineno"> 5283</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Pack.html#a0c9c26b5eef0f2a6bc5c29a6cd193cac">SetUnassigned</a>(<span class="keywordtype">int</span> var_index);</div><div class="line"><a name="l05284"></a><span class="lineno"> 5284</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Pack.html#ab4e8efc23e9db0d7d793ca7697e89e05">RemoveAllPossibleFromBin</a>(<span class="keywordtype">int</span> bin_index);</div><div class="line"><a name="l05285"></a><span class="lineno"> 5285</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Pack.html#a4c3227b06d52ecdb2f09dccc01baa347">AssignAllPossibleToBin</a>(<span class="keywordtype">int</span> bin_index);</div><div class="line"><a name="l05286"></a><span class="lineno"> 5286</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Pack.html#a7406f484f98fd83e408ffae60895905c">AssignFirstPossibleToBin</a>(<span class="keywordtype">int</span> bin_index);</div><div class="line"><a name="l05287"></a><span class="lineno"> 5287</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Pack.html#a48b59d1fd372a5f0657774bf83acf847">AssignAllRemainingItems</a>();</div><div class="line"><a name="l05288"></a><span class="lineno"> 5288</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Pack.html#a43b6922981e5f524b4cd259cc4538336">UnassignAllRemainingItems</a>();</div><div class="line"><a name="l05289"></a><span class="lineno"> 5289</span>&#160; <span class="comment">// Accepts the given visitor.</span></div><div class="line"><a name="l05290"></a><span class="lineno"> 5290</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1Pack.html#ad7fda9d44f000fcb907d2bdeec845423">Accept</a>(<a class="code" href="classoperations__research_1_1ModelVisitor.html">ModelVisitor</a>* <span class="keyword">const</span> visitor) <span class="keyword">const override</span>;</div><div class="line"><a name="l05291"></a><span class="lineno"> 5291</span>&#160;</div><div class="line"><a name="l05292"></a><span class="lineno"> 5292</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l05293"></a><span class="lineno"> 5293</span>&#160; <span class="keywordtype">bool</span> IsInProcess() <span class="keyword">const</span>;</div><div class="line"><a name="l05294"></a><span class="lineno"> 5294</span>&#160; <span class="keyword">const</span> std::vector&lt;IntVar*&gt; vars_;</div><div class="line"><a name="l05295"></a><span class="lineno"> 5295</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> bins_;</div><div class="line"><a name="l05296"></a><span class="lineno"> 5296</span>&#160; std::vector&lt;Dimension*&gt; dims_;</div><div class="line"><a name="l05297"></a><span class="lineno"> 5297</span>&#160; std::unique_ptr&lt;RevBitMatrix&gt; unprocessed_;</div><div class="line"><a name="l05298"></a><span class="lineno"> 5298</span>&#160; std::vector&lt;std::vector&lt;int&gt;&gt; forced_;</div><div class="line"><a name="l05299"></a><span class="lineno"> 5299</span>&#160; std::vector&lt;std::vector&lt;int&gt;&gt; removed_;</div><div class="line"><a name="l05300"></a><span class="lineno"> 5300</span>&#160; std::vector&lt;IntVarIterator*&gt; holes_;</div><div class="line"><a name="l05301"></a><span class="lineno"> 5301</span>&#160; uint64 stamp_;</div><div class="line"><a name="l05302"></a><span class="lineno"> 5302</span>&#160; <a class="code" href="classoperations__research_1_1Demon.html">Demon</a>* demon_;</div><div class="line"><a name="l05303"></a><span class="lineno"> 5303</span>&#160; std::vector&lt;std::pair&lt;int, int&gt;&gt; to_set_;</div><div class="line"><a name="l05304"></a><span class="lineno"> 5304</span>&#160; std::vector&lt;std::pair&lt;int, int&gt;&gt; to_unset_;</div><div class="line"><a name="l05305"></a><span class="lineno"> 5305</span>&#160; <span class="keywordtype">bool</span> in_process_;</div><div class="line"><a name="l05306"></a><span class="lineno"> 5306</span>&#160;};</div><div class="line"><a name="l05307"></a><span class="lineno"> 5307</span>&#160;</div><div class="line"><a name="l05308"></a><span class="lineno"> 5308</span>&#160;<span class="comment">// ----- Disjunctive Constraint -----</span></div><div class="line"><a name="l05309"></a><span class="lineno"> 5309</span>&#160;</div><div class="line"><a name="l05310"></a><span class="lineno"> 5310</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1DisjunctiveConstraint.html">DisjunctiveConstraint</a> : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1Constraint.html">Constraint</a> {</div><div class="line"><a name="l05311"></a><span class="lineno"> 5311</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l05312"></a><span class="lineno"> 5312</span>&#160; <a class="code" href="classoperations__research_1_1DisjunctiveConstraint.html#a204df98d042e4eb2954aea4563a950e9">DisjunctiveConstraint</a>(<a class="code" href="classoperations__research_1_1Solver.html">Solver</a>* <span class="keyword">const</span> s,</div><div class="line"><a name="l05313"></a><span class="lineno"> 5313</span>&#160; <span class="keyword">const</span> std::vector&lt;IntervalVar*&gt;&amp; intervals,</div><div class="line"><a name="l05314"></a><span class="lineno"><a class="line" href="classoperations__research_1_1DisjunctiveConstraint.html"> 5314</a></span>&#160; <span class="keyword">const</span> std::string&amp; <a class="code" href="classoperations__research_1_1PropagationBaseObject.html#a8be8b75223b76744791e48747677cdb6">name</a>);</div><div class="line"><a name="l05315"></a><span class="lineno"> 5315</span>&#160; <a class="code" href="classoperations__research_1_1DisjunctiveConstraint.html#adc7d8ad50b0d9c98c59f7f9c3f6bda6c">~DisjunctiveConstraint</a>() <span class="keyword">override</span>;</div><div class="line"><a name="l05316"></a><span class="lineno"> 5316</span>&#160;</div><div class="line"><a name="l05317"></a><span class="lineno"> 5317</span>&#160; <span class="comment">// Creates a sequence variable from the constraint.</span></div><div class="line"><a name="l05318"></a><span class="lineno"> 5318</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classoperations__research_1_1SequenceVar.html">SequenceVar</a>* <a class="code" href="classoperations__research_1_1DisjunctiveConstraint.html#a4b4ead77ac71b5c23fc1dc2871407d8d">MakeSequenceVar</a>() = 0;</div><div class="line"><a name="l05319"></a><span class="lineno"> 5319</span>&#160;</div><div class="line"><a name="l05320"></a><span class="lineno"> 5320</span>&#160; <span class="comment">// Add a transition time between intervals. It forces the distance between</span></div><div class="line"><a name="l05321"></a><span class="lineno"> 5321</span>&#160; <span class="comment">// the end of interval a and start of interval b that follows it to be at</span></div><div class="line"><a name="l05322"></a><span class="lineno"> 5322</span>&#160; <span class="comment">// least transition_time(a, b). This function must always return</span></div><div class="line"><a name="l05323"></a><span class="lineno"> 5323</span>&#160; <span class="comment">// a positive or null value.</span></div><div class="line"><a name="l05324"></a><span class="lineno"> 5324</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1DisjunctiveConstraint.html#af80d78dab69e2420e5df2acd13be698e">SetTransitionTime</a>(<a class="code" href="classoperations__research_1_1Solver.html#a0243986dd2db4b6e1bda331329ae529b">Solver::IndexEvaluator2</a> transition_time);</div><div class="line"><a name="l05325"></a><span class="lineno"> 5325</span>&#160;</div><div class="line"><a name="l05326"></a><span class="lineno"> 5326</span>&#160; int64 <a class="code" href="classoperations__research_1_1DisjunctiveConstraint.html#a8fa126c7081c99d91c347cb82ab16326">TransitionTime</a>(<span class="keywordtype">int</span> before_index, <span class="keywordtype">int</span> after_index) {</div><div class="line"><a name="l05327"></a><span class="lineno"> 5327</span>&#160; DCHECK(<a class="code" href="classoperations__research_1_1DisjunctiveConstraint.html#a9b6d60ebdbacdb0e3910b3c9ccd4d1fa">transition_time_</a>);</div><div class="line"><a name="l05328"></a><span class="lineno"> 5328</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classoperations__research_1_1DisjunctiveConstraint.html#a9b6d60ebdbacdb0e3910b3c9ccd4d1fa">transition_time_</a>(before_index, after_index);</div><div class="line"><a name="l05329"></a><span class="lineno"> 5329</span>&#160; }</div><div class="line"><a name="l05330"></a><span class="lineno"><a class="line" href="classoperations__research_1_1DisjunctiveConstraint.html#a8fa126c7081c99d91c347cb82ab16326"> 5330</a></span>&#160;</div><div class="line"><a name="l05331"></a><span class="lineno"> 5331</span>&#160;<span class="preprocessor">#if !defined(SWIG)</span></div><div class="line"><a name="l05332"></a><span class="lineno"> 5332</span>&#160; <span class="keyword">virtual</span> <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; <a class="code" href="classoperations__research_1_1DisjunctiveConstraint.html#aacb295c42edd50d5fc0dc3f009fb0a81">nexts</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l05333"></a><span class="lineno"> 5333</span>&#160; <span class="keyword">virtual</span> <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; <a class="code" href="classoperations__research_1_1DisjunctiveConstraint.html#ae2b4ffa19747b4205f3dff8e91424e1c">actives</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l05334"></a><span class="lineno"> 5334</span>&#160; <span class="keyword">virtual</span> <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; <a class="code" href="classoperations__research_1_1DisjunctiveConstraint.html#a487094cee9f08d7d6d7f4e8642d0579d">time_cumuls</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l05335"></a><span class="lineno"> 5335</span>&#160; <span class="keyword">virtual</span> <span class="keyword">const</span> std::vector&lt;IntVar*&gt;&amp; <a class="code" href="classoperations__research_1_1DisjunctiveConstraint.html#a125375a3e7f2593d1934d1b2f1a928e9">time_slacks</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l05336"></a><span class="lineno"> 5336</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l05337"></a><span class="lineno"> 5337</span>&#160;</div><div class="line"><a name="l05338"></a><span class="lineno"> 5338</span>&#160; <span class="keyword">protected</span>:</div><div class="line"><a name="l05339"></a><span class="lineno"> 5339</span>&#160; <span class="keyword">const</span> std::vector&lt;IntervalVar*&gt; <a class="code" href="classoperations__research_1_1DisjunctiveConstraint.html#ac51ca0d886882db6afc2814bb91d4f05">intervals_</a>;</div><div class="line"><a name="l05340"></a><span class="lineno"> 5340</span>&#160; <a class="code" href="classoperations__research_1_1Solver.html#a0243986dd2db4b6e1bda331329ae529b">Solver::IndexEvaluator2</a> <a class="code" href="classoperations__research_1_1DisjunctiveConstraint.html#a9b6d60ebdbacdb0e3910b3c9ccd4d1fa">transition_time_</a>;</div><div class="line"><a name="l05341"></a><span class="lineno"> 5341</span>&#160;</div><div class="line"><a name="l05342"></a><span class="lineno"> 5342</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l05343"></a><span class="lineno"><a class="line" href="classoperations__research_1_1DisjunctiveConstraint.html#ac51ca0d886882db6afc2814bb91d4f05"> 5343</a></span>&#160; DISALLOW_COPY_AND_ASSIGN(<a class="code" href="classoperations__research_1_1DisjunctiveConstraint.html">DisjunctiveConstraint</a>);</div><div class="line"><a name="l05344"></a><span class="lineno"><a class="line" href="classoperations__research_1_1DisjunctiveConstraint.html#a9b6d60ebdbacdb0e3910b3c9ccd4d1fa"> 5344</a></span>&#160;};</div><div class="line"><a name="l05345"></a><span class="lineno"> 5345</span>&#160;</div><div class="line"><a name="l05346"></a><span class="lineno"> 5346</span>&#160;<span class="comment">// ----- SolutionPool -----</span></div><div class="line"><a name="l05347"></a><span class="lineno"> 5347</span>&#160;</div><div class="line"><a name="l05348"></a><span class="lineno"> 5348</span>&#160;<span class="comment">// This class is used to manage a pool of solutions. It can transform</span></div><div class="line"><a name="l05349"></a><span class="lineno"> 5349</span>&#160;<span class="comment">// a single point local search into a multipoint local search.</span></div><div class="line"><a name="l05350"></a><span class="lineno"> 5350</span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1SolutionPool.html">SolutionPool</a> : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1BaseObject.html">BaseObject</a> {</div><div class="line"><a name="l05351"></a><span class="lineno"> 5351</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l05352"></a><span class="lineno"> 5352</span>&#160; <a class="code" href="classoperations__research_1_1SolutionPool.html#a0c1b8aceb7d2732914ade32de14cfc41">SolutionPool</a>() {}</div><div class="line"><a name="l05353"></a><span class="lineno"> 5353</span>&#160; <a class="code" href="classoperations__research_1_1SolutionPool.html#acfd2afc60305bddd7927b7f406dce492">~SolutionPool</a>()<span class="keyword"> override </span>{}</div><div class="line"><a name="l05354"></a><span class="lineno"><a class="line" href="classoperations__research_1_1SolutionPool.html"> 5354</a></span>&#160;</div><div class="line"><a name="l05355"></a><span class="lineno"> 5355</span>&#160; <span class="comment">// This method is called to initialize the solution pool with the assignment</span></div><div class="line"><a name="l05356"></a><span class="lineno"><a class="line" href="classoperations__research_1_1SolutionPool.html#a0c1b8aceb7d2732914ade32de14cfc41"> 5356</a></span>&#160; <span class="comment">// from the local search.</span></div><div class="line"><a name="l05357"></a><span class="lineno"><a class="line" href="classoperations__research_1_1SolutionPool.html#acfd2afc60305bddd7927b7f406dce492"> 5357</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SolutionPool.html#a9fb836da69e3c48b8ea240c0aee64d61">Initialize</a>(<a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>* <span class="keyword">const</span> assignment) = 0;</div><div class="line"><a name="l05358"></a><span class="lineno"> 5358</span>&#160;</div><div class="line"><a name="l05359"></a><span class="lineno"> 5359</span>&#160; <span class="comment">// This method is called when a new solution has been accepted by the local</span></div><div class="line"><a name="l05360"></a><span class="lineno"> 5360</span>&#160; <span class="comment">// search.</span></div><div class="line"><a name="l05361"></a><span class="lineno"> 5361</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SolutionPool.html#a2e49e36a6c729756e59287fb8a3a3bcd">RegisterNewSolution</a>(<a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>* <span class="keyword">const</span> assignment) = 0;</div><div class="line"><a name="l05362"></a><span class="lineno"> 5362</span>&#160;</div><div class="line"><a name="l05363"></a><span class="lineno"> 5363</span>&#160; <span class="comment">// This method is called when the local search starts a new neighborhood to</span></div><div class="line"><a name="l05364"></a><span class="lineno"> 5364</span>&#160; <span class="comment">// initialize the default assignment.</span></div><div class="line"><a name="l05365"></a><span class="lineno"> 5365</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1SolutionPool.html#a695368c209531f7ae73419543a3d63cd">GetNextSolution</a>(<a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>* <span class="keyword">const</span> assignment) = 0;</div><div class="line"><a name="l05366"></a><span class="lineno"> 5366</span>&#160;</div><div class="line"><a name="l05367"></a><span class="lineno"> 5367</span>&#160; <span class="comment">// This method checks if the local solution needs to be updated with</span></div><div class="line"><a name="l05368"></a><span class="lineno"> 5368</span>&#160; <span class="comment">// an external one.</span></div><div class="line"><a name="l05369"></a><span class="lineno"> 5369</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1SolutionPool.html#ab71086e9d6cbca14023cd54a03bd1eff">SyncNeeded</a>(<a class="code" href="classoperations__research_1_1Assignment.html">Assignment</a>* <span class="keyword">const</span> local_assignment) = 0;</div><div class="line"><a name="l05370"></a><span class="lineno"> 5370</span>&#160;};</div><div class="line"><a name="l05371"></a><span class="lineno"> 5371</span>&#160;} <span class="comment">// namespace operations_research</span></div><div class="line"><a name="l05372"></a><span class="lineno"> 5372</span>&#160;<span class="preprocessor">#endif // OR_TOOLS_CONSTRAINT_SOLVER_CONSTRAINT_SOLVER_H_</span></div><div class="ttc" id="classoperations__research_1_1ModelCache_html"><div class="ttname"><a href="classoperations__research_1_1ModelCache.html">operations_research::ModelCache</a></div><div class="ttdoc">Implements a complete cache for model elements: expressions and constraints.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solveri_8h_source.html#l01864">constraint_solveri.h:1864</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a403ddf341e288433672bedb08c322963"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a403ddf341e288433672bedb08c322963">operations_research::Assignment::SetObjectiveRange</a></div><div class="ttdeci">void SetObjectiveRange(int64 l, int64 u)</div></div>
<div class="ttc" id="classoperations__research_1_1IntVar_html_a119cae716dbbdaa31b476ef904c99776"><div class="ttname"><a href="classoperations__research_1_1IntVar.html#a119cae716dbbdaa31b476ef904c99776">operations_research::IntVar::IntVar</a></div><div class="ttdeci">IntVar(Solver *const s)</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a0abcf853d7688095b9280f0797bbb3d7"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a0abcf853d7688095b9280f0797bbb3d7">operations_research::ModelVisitor::kEndExpr</a></div><div class="ttdeci">static const char kEndExpr[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03339">constraint_solver.h:3339</a></div></div>
<div class="ttc" id="classoperations__research_1_1RevArray_html_abb88b59866cff9f26ebb6f29e82b777a"><div class="ttname"><a href="classoperations__research_1_1RevArray.html#abb88b59866cff9f26ebb6f29e82b777a">operations_research::RevArray::operator[]</a></div><div class="ttdeci">const T &amp; operator[](int index) const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03775">constraint_solver.h:3775</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a4b851543c86a8505832575e0502a3a43"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a4b851543c86a8505832575e0502a3a43">operations_research::ModelVisitor::VisitIntegerVariableEvaluatorArgument</a></div><div class="ttdeci">virtual void VisitIntegerVariableEvaluatorArgument(const std::string &amp;arg_name, const Solver::Int64ToIntVar &amp;arguments)</div><div class="ttdoc">Helpers.</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a6eb497a20a19617c926afffe531654b0"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a6eb497a20a19617c926afffe531654b0">operations_research::Assignment::ObjectiveValue</a></div><div class="ttdeci">int64 ObjectiveValue() const</div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html_ad7fda9d44f000fcb907d2bdeec845423"><div class="ttname"><a href="classoperations__research_1_1Pack.html#ad7fda9d44f000fcb907d2bdeec845423">operations_research::Pack::Accept</a></div><div class="ttdeci">void Accept(ModelVisitor *const visitor) const override</div><div class="ttdoc">Accepts the given visitor.</div></div>
<div class="ttc" id="structoperations__research_1_1SolutionCollector_1_1SolutionData_html_ae5d1c739b13b73a1975928b4d184807b"><div class="ttname"><a href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html#ae5d1c739b13b73a1975928b4d184807b">operations_research::SolutionCollector::SolutionData::time</a></div><div class="ttdeci">int64 time</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04151">constraint_solver.h:4151</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a2455aa3a43fa34beadef296168d5c20e"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a2455aa3a43fa34beadef296168d5c20e">operations_research::ModelVisitor::kIntegerVariable</a></div><div class="ttdeci">static const char kIntegerVariable[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03345">constraint_solver.h:3345</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a93c0e33825a1d8ef903b34a443b281b2"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a93c0e33825a1d8ef903b34a443b281b2">operations_research::Assignment::SetPerformedMin</a></div><div class="ttdeci">void SetPerformedMin(const IntervalVar *const var, int64 m)</div></div>
<div class="ttc" id="classoperations__research_1_1RegularLimit_html_a370e4934f9963fa9a440d0f8086a66a8"><div class="ttname"><a href="classoperations__research_1_1RegularLimit.html#a370e4934f9963fa9a440d0f8086a66a8">operations_research::RegularLimit::IsUncheckedSolutionLimitReached</a></div><div class="ttdeci">bool IsUncheckedSolutionLimitReached() override</div><div class="ttdoc">Returns true if the limit of solutions has been reached including unchecked solutions.</div></div>
<div class="ttc" id="structoperations__research_1_1DefaultPhaseParameters_html_a052e4d8daedbab3afea9d53868b00161"><div class="ttname"><a href="structoperations__research_1_1DefaultPhaseParameters.html#a052e4d8daedbab3afea9d53868b00161">operations_research::DefaultPhaseParameters::run_all_heuristics</a></div><div class="ttdeci">bool run_all_heuristics</div><div class="ttdoc">The default phase will run heuristics periodically.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00185">constraint_solver.h:185</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_aaa86204c8336f1b6dc14ae954a361b81"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#aaa86204c8336f1b6dc14ae954a361b81">operations_research::ModelVisitor::kModuloArgument</a></div><div class="ttdeci">static const char kModuloArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03448">constraint_solver.h:3448</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ac3c5b22fad8060ca1a66bd928182d8a4a99c891d39d424a087b7fd551b27906ec"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a99c891d39d424a087b7fd551b27906ec">operations_research::Solver::EXTENDEDSWAPACTIVE</a></div><div class="ttdoc">Operator which makes an inactive node active and an active one inactive.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00510">constraint_solver.h:510</a></div></div>
<div class="ttc" id="classoperations__research_1_1Decision_html_a88aea04b24727f86d465479464437b2e"><div class="ttname"><a href="classoperations__research_1_1Decision.html#a88aea04b24727f86d465479464437b2e">operations_research::Decision::Apply</a></div><div class="ttdeci">virtual void Apply(Solver *const s)=0</div><div class="ttdoc">Apply will be called first when the decision is executed.</div></div>
<div class="ttc" id="classoperations__research_1_1IntVarElement_html_a7c4b5dea7c81f6ffeeab2d8144a1c7db"><div class="ttname"><a href="classoperations__research_1_1IntVarElement.html#a7c4b5dea7c81f6ffeeab2d8144a1c7db">operations_research::IntVarElement::IntVarElement</a></div><div class="ttdeci">IntVarElement()</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_aea8c7f5b1272ab68b5cb2f864029a233"><div class="ttname"><a href="classoperations__research_1_1Solver.html#aea8c7f5b1272ab68b5cb2f864029a233">operations_research::Solver::MakeDecisionBuilderFromAssignment</a></div><div class="ttdeci">DecisionBuilder * MakeDecisionBuilderFromAssignment(Assignment *const assignment, DecisionBuilder *const db, const std::vector&lt; IntVar * &gt; &amp;vars)</div><div class="ttdoc">Returns a decision builder for which the left-most leaf corresponds to assignment,...</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_ab1f538f44b7fff25ae4761c06301cc9a"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#ab1f538f44b7fff25ae4761c06301cc9a">operations_research::ModelVisitor::kOptionalArgument</a></div><div class="ttdeci">static const char kOptionalArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03450">constraint_solver.h:3450</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_a5cf2a7affce14a52c72a234f9623ca2b"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#a5cf2a7affce14a52c72a234f9623ca2b">operations_research::IntervalVarElement::SetDurationRange</a></div><div class="ttdeci">void SetDurationRange(int64 mi, int64 ma)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04713">constraint_solver.h:4713</a></div></div>
<div class="ttc" id="classoperations__research_1_1Rev_html_a612718f3f1f56d8ecce47fae4bc3592c"><div class="ttname"><a href="classoperations__research_1_1Rev.html#a612718f3f1f56d8ecce47fae4bc3592c">operations_research::Rev::Value</a></div><div class="ttdeci">const T &amp; Value() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03720">constraint_solver.h:3720</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ac3c5b22fad8060ca1a66bd928182d8a4ae38682b404f0255b45c6c5a3d4d31399"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4ae38682b404f0255b45c6c5a3d4d31399">operations_research::Solver::RELOCATE</a></div><div class="ttdoc">Relocate neighborhood with length of 1 (see OROPT comment).</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00448">constraint_solver.h:448</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_ad177c9835c56cfb2472c1834ce468c12"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#ad177c9835c56cfb2472c1834ce468c12">operations_research::ModelVisitor::kSequenceVariable</a></div><div class="ttdeci">static const char kSequenceVariable[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03387">constraint_solver.h:3387</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a7c32391ccea4cf45797ccb99d3b4ea2f"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a7c32391ccea4cf45797ccb99d3b4ea2f">operations_research::Solver::MakeConstraintInitialPropagateCallback</a></div><div class="ttdeci">Demon * MakeConstraintInitialPropagateCallback(Constraint *const ct)</div><div class="ttdoc">This method is a specialized case of the MakeConstraintDemon method to call the InitiatePropagate of ...</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a0a81be75dfa5f8c28ff444864d255fb1"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a0a81be75dfa5f8c28ff444864d255fb1">operations_research::IntervalVar::EndExpr</a></div><div class="ttdeci">virtual IntExpr * EndExpr()=0</div></div>
<div class="ttc" id="structoperations__research_1_1DefaultPhaseParameters_html_a6938c08fc955872a3b8da845c8ad4e16"><div class="ttname"><a href="structoperations__research_1_1DefaultPhaseParameters.html#a6938c08fc955872a3b8da845c8ad4e16">operations_research::DefaultPhaseParameters::ValueSelection</a></div><div class="ttdeci">ValueSelection</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00164">constraint_solver.h:164</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a85f7ae79e747c46b1bb248990403ffd2"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a85f7ae79e747c46b1bb248990403ffd2">operations_research::ModelVisitor::kVarsArgument</a></div><div class="ttdeci">static const char kVarsArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03475">constraint_solver.h:3475</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a1785a9adf70ca36c826a2039f8fb998e"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a1785a9adf70ca36c826a2039f8fb998e">operations_research::IntervalVar::IsPerformedBound</a></div><div class="ttdeci">bool IsPerformedBound() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04442">constraint_solver.h:4442</a></div></div>
<div class="ttc" id="classoperations__research_1_1SearchMonitor_html_a10ccf64fe0a40e01816b20818a32b8b6"><div class="ttname"><a href="classoperations__research_1_1SearchMonitor.html#a10ccf64fe0a40e01816b20818a32b8b6">operations_research::SearchMonitor::~SearchMonitor</a></div><div class="ttdeci">~SearchMonitor() override</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03621">constraint_solver.h:3621</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntExpr_html_a07b522d73ebcc17ebc1b480d181627f1"><div class="ttname"><a href="classoperations__research_1_1IntExpr.html#a07b522d73ebcc17ebc1b480d181627f1">operations_research::IntExpr::Range</a></div><div class="ttdeci">virtual void Range(int64 *l, int64 *u)</div><div class="ttdoc">By default calls Min() and Max(), but can be redefined when Min and Max code can be factorized.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03829">constraint_solver.h:3829</a></div></div>
<div class="ttc" id="structoperations__research_1_1DefaultPhaseParameters_html_a76d1de2961308e35a45663d9af88c78c"><div class="ttname"><a href="structoperations__research_1_1DefaultPhaseParameters.html#a76d1de2961308e35a45663d9af88c78c">operations_research::DefaultPhaseParameters::DefaultPhaseParameters</a></div><div class="ttdeci">DefaultPhaseParameters()</div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html_ab70120f761b82d383eb431bc1cff51b6"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html#ab70120f761b82d383eb431bc1cff51b6">operations_research::SolutionCollector::Unperformed</a></div><div class="ttdeci">const std::vector&lt; int &gt; &amp; Unperformed(int n, SequenceVar *const var) const</div><div class="ttdoc">This is a shortcut to get the list of unperformed of 'var' in the nth solution.</div></div>
<div class="ttc" id="classoperations__research_1_1IntVar_html_a1501b060a0ae4f2ae77d8008479944ca"><div class="ttname"><a href="classoperations__research_1_1IntVar.html#a1501b060a0ae4f2ae77d8008479944ca">operations_research::IntVar::WhenBound</a></div><div class="ttdeci">virtual void WhenBound(Demon *d)=0</div><div class="ttdoc">This method attaches a demon that will be awakened when the variable is bound.</div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html_a48b59d1fd372a5f0657774bf83acf847"><div class="ttname"><a href="classoperations__research_1_1Pack.html#a48b59d1fd372a5f0657774bf83acf847">operations_research::Pack::AssignAllRemainingItems</a></div><div class="ttdeci">void AssignAllRemainingItems()</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a57875170b22abd8ca8c499be11659af1"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a57875170b22abd8ca8c499be11659af1">operations_research::Solver::MakeAbs</a></div><div class="ttdeci">IntExpr * MakeAbs(IntExpr *const expr)</div><div class="ttdoc">expr</div></div>
<div class="ttc" id="namespaceoperations__research_html_aea2bf322fab4e2319a23ad22acf8ccf8"><div class="ttname"><a href="namespaceoperations__research.html#aea2bf322fab4e2319a23ad22acf8ccf8">operations_research::SetAssignmentFromAssignment</a></div><div class="ttdeci">void SetAssignmentFromAssignment(Assignment *target_assignment, const std::vector&lt; IntVar * &gt; &amp;target_vars, const Assignment *source_assignment, const std::vector&lt; IntVar * &gt; &amp;source_vars)</div><div class="ttdoc">Given a &quot;source_assignment&quot;, clears the &quot;target_assignment&quot; and adds all IntVars in &quot;target_vars&quot;,...</div></div>
<div class="ttc" id="structoperations__research_1_1DefaultPhaseParameters_html_a6e1093d6bf5e0301b6a7372b2a5fa119"><div class="ttname"><a href="structoperations__research_1_1DefaultPhaseParameters.html#a6e1093d6bf5e0301b6a7372b2a5fa119">operations_research::DefaultPhaseParameters::initialization_splits</a></div><div class="ttdeci">int initialization_splits</div><div class="ttdoc">Maximum number of intervals that the initialization of impacts will scan per variable.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00180">constraint_solver.h:180</a></div></div>
<div class="ttc" id="classoperations__research_1_1SolutionPool_html_ab71086e9d6cbca14023cd54a03bd1eff"><div class="ttname"><a href="classoperations__research_1_1SolutionPool.html#ab71086e9d6cbca14023cd54a03bd1eff">operations_research::SolutionPool::SyncNeeded</a></div><div class="ttdeci">virtual bool SyncNeeded(Assignment *const local_assignment)=0</div><div class="ttdoc">This method checks if the local solution needs to be updated with an external one.</div></div>
<div class="ttc" id="structoperations__research_1_1InitAndGetValues_1_1Iterator_html_ad89645a8a6fb3eeb636b0ae211ae0ba9"><div class="ttname"><a href="structoperations__research_1_1InitAndGetValues_1_1Iterator.html#ad89645a8a6fb3eeb636b0ae211ae0ba9">operations_research::InitAndGetValues::Iterator::operator *</a></div><div class="ttdeci">int64 operator *() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03947">constraint_solver.h:3947</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a627e898b1125c5dd6a2fb41551d2af5f"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a627e898b1125c5dd6a2fb41551d2af5f">operations_research::IntervalVar::StartMax</a></div><div class="ttdeci">virtual int64 StartMax() const =0</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a59d3fe79f6b850edef2a003af69c8c1c"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a59d3fe79f6b850edef2a003af69c8c1c">operations_research::ModelVisitor::kFixedChargeArgument</a></div><div class="ttdeci">static const char kFixedChargeArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03436">constraint_solver.h:3436</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a26698013ea5b05f99adfa8940c3e9652"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a26698013ea5b05f99adfa8940c3e9652">operations_research::ModelVisitor::kLinkExprVar</a></div><div class="ttdeci">static const char kLinkExprVar[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03362">constraint_solver.h:3362</a></div></div>
<div class="ttc" id="classoperations__research_1_1NumericalRevArray_html_ab4b135d5d6cfb30dbba7df17f1affd32"><div class="ttname"><a href="classoperations__research_1_1NumericalRevArray.html#ab4b135d5d6cfb30dbba7df17f1affd32">operations_research::NumericalRevArray::Add</a></div><div class="ttdeci">void Add(Solver *const s, int index, const T &amp;to_add)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03801">constraint_solver.h:3801</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a66ac2efcb889501c994e3355d5a331ba"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a66ac2efcb889501c994e3355d5a331ba">operations_research::Solver::RegisterIntVar</a></div><div class="ttdeci">IntVar * RegisterIntVar(IntVar *const var)</div><div class="ttdoc">Registers a new IntVar and wraps it inside a TraceIntVar if necessary.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_aa4558615a9df31d326b9e04902cc362a"><div class="ttname"><a href="classoperations__research_1_1Solver.html#aa4558615a9df31d326b9e04902cc362a">operations_research::Solver::MakeConstantRestart</a></div><div class="ttdeci">SearchMonitor * MakeConstantRestart(int frequency)</div><div class="ttdoc">This search monitor will restart the search periodically after 'frequency' failures.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a42aa572d3afd9564a4b642872b672bcf"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a42aa572d3afd9564a4b642872b672bcf">operations_research::ModelVisitor::kIntervalVariable</a></div><div class="ttdeci">static const char kIntervalVariable[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03349">constraint_solver.h:3349</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntExpr_html_a845a3c3c71323504f6b59f9c0ea46b08"><div class="ttname"><a href="classoperations__research_1_1IntExpr.html#a845a3c3c71323504f6b59f9c0ea46b08">operations_research::IntExpr::WhenRange</a></div><div class="ttdeci">virtual void WhenRange(Demon *d)=0</div><div class="ttdoc">Attach a demon that will watch the min or the max of the expression.</div></div>
<div class="ttc" id="structoperations__research_1_1Solver_1_1IntegerCastInfo_html_ae16e463040462ec79e67106d639789a1"><div class="ttname"><a href="structoperations__research_1_1Solver_1_1IntegerCastInfo.html#ae16e463040462ec79e67106d639789a1">operations_research::Solver::IntegerCastInfo::maintainer</a></div><div class="ttdeci">Constraint * maintainer</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00251">constraint_solver.h:251</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a131e1a06b2ee488ac26d6e2c84a187c1"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a131e1a06b2ee488ac26d6e2c84a187c1">operations_research::Solver::MakeAtSolutionCallback</a></div><div class="ttdeci">SearchMonitor * MakeAtSolutionCallback(std::function&lt; void()&gt; callback)</div></div>
<div class="ttc" id="classoperations__research_1_1RevArray_html_a6516d4adeaf28338dbc7ba2584d76919"><div class="ttname"><a href="classoperations__research_1_1RevArray.html#a6516d4adeaf28338dbc7ba2584d76919">operations_research::RevArray::SetValue</a></div><div class="ttdeci">void SetValue(Solver *const s, int index, const T &amp;val)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03778">constraint_solver.h:3778</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ae92ae7da7adbe8c74cfca8bda16b3ab4"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ae92ae7da7adbe8c74cfca8bda16b3ab4">operations_research::Solver::MakeSplitVariableDomain</a></div><div class="ttdeci">Decision * MakeSplitVariableDomain(IntVar *const var, int64 val, bool start_with_lower_half)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a2b941bb1e1090e457abd3b2da7e45b09"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a2b941bb1e1090e457abd3b2da7e45b09">operations_research::Solver::MakeMirrorInterval</a></div><div class="ttdeci">IntervalVar * MakeMirrorInterval(IntervalVar *const interval_var)</div><div class="ttdoc">Creates an interval var that is the mirror image of the given one, that is, the interval var obtained...</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8307ead1637b1c665169d0dc1f822549"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8307ead1637b1c665169d0dc1f822549">operations_research::Solver::MakeBoolVarArray</a></div><div class="ttdeci">void MakeBoolVarArray(int var_count, const std::string &amp;name, std::vector&lt; IntVar * &gt; *vars)</div><div class="ttdoc">This method will append the vector vars with 'var_count' boolean variables having name &quot;name&lt;i&gt;&quot; wher...</div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html_a494cf6256ff568544390e507a6943112"><div class="ttname"><a href="classoperations__research_1_1Pack.html#a494cf6256ff568544390e507a6943112">operations_research::Pack::DebugString</a></div><div class="ttdeci">std::string DebugString() const override</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ac3c5b22fad8060ca1a66bd928182d8a4a1a2beb32468f536c96644b3faa9c8d6e"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a1a2beb32468f536c96644b3faa9c8d6e">operations_research::Solver::MAKEINACTIVE</a></div><div class="ttdoc">Operator which makes path nodes inactive.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00483">constraint_solver.h:483</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a1f477deb432653548d529105d333b51e"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a1f477deb432653548d529105d333b51e">operations_research::Solver::MakeBestValueSolutionCollector</a></div><div class="ttdeci">SolutionCollector * MakeBestValueSolutionCollector(const Assignment *const assignment, bool maximize)</div><div class="ttdoc">Collect the solution corresponding to the optimal value of the objective of 'assignment'; if 'assignm...</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a34c44801edcbe3195f161f7769d1cb0a"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a34c44801edcbe3195f161f7769d1cb0a">operations_research::IntervalVar::SetDurationMax</a></div><div class="ttdeci">virtual void SetDurationMax(int64 m)=0</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a3488d384fcd80a6dbc3347c6b8dfb222"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a3488d384fcd80a6dbc3347c6b8dfb222">operations_research::Solver::MakeGenericTabuSearch</a></div><div class="ttdeci">SearchMonitor * MakeGenericTabuSearch(bool maximize, IntVar *const v, int64 step, const std::vector&lt; IntVar * &gt; &amp;tabu_vars, int64 forbid_tenure)</div><div class="ttdoc">Creates a Tabu Search based on the vars vars.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_aa873231c27c0bfa5e9689d3e7d74521d"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#aa873231c27c0bfa5e9689d3e7d74521d">operations_research::ModelVisitor::VisitSequenceVariable</a></div><div class="ttdeci">virtual void VisitSequenceVariable(const SequenceVar *const variable)</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a9bfcdbd186adf792ef57bac57a3809b0"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a9bfcdbd186adf792ef57bac57a3809b0">operations_research::IntervalVar::SetDurationRange</a></div><div class="ttdeci">virtual void SetDurationRange(int64 mi, int64 ma)=0</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_a57a113de1e0491feccba9b08b905a968"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#a57a113de1e0491feccba9b08b905a968">operations_research::IntervalVarElement::EndMax</a></div><div class="ttdeci">int64 EndMax() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04690">constraint_solver.h:4690</a></div></div>
<div class="ttc" id="classoperations__research_1_1SearchMonitor_html_a775e4bc59c759621fdb0b6f129744296"><div class="ttname"><a href="classoperations__research_1_1SearchMonitor.html#a775e4bc59c759621fdb0b6f129744296">operations_research::SearchMonitor::Install</a></div><div class="ttdeci">virtual void Install()</div><div class="ttdoc">Registers itself on the solver such that it gets notified of the search and propagation events.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_af1f609953aff475abe227d57735209ce"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#af1f609953aff475abe227d57735209ce">operations_research::ModelVisitor::kVariableUsageLessConstantExtension</a></div><div class="ttdeci">static const char kVariableUsageLessConstantExtension[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03412">constraint_solver.h:3412</a></div></div>
<div class="ttc" id="classoperations__research_1_1DisjunctiveConstraint_html_ac51ca0d886882db6afc2814bb91d4f05"><div class="ttname"><a href="classoperations__research_1_1DisjunctiveConstraint.html#ac51ca0d886882db6afc2814bb91d4f05">operations_research::DisjunctiveConstraint::intervals_</a></div><div class="ttdeci">const std::vector&lt; IntervalVar * &gt; intervals_</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l05343">constraint_solver.h:5343</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a1f24a08006b3142731a258d856f13e43"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a1f24a08006b3142731a258d856f13e43">operations_research::Solver::IndexEvaluator3</a></div><div class="ttdeci">std::function&lt; int64(int64, int64, int64)&gt; IndexEvaluator3</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00724">constraint_solver.h:724</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_aab3f00f122b9cf7651d696d78fe36543"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#aab3f00f122b9cf7651d696d78fe36543">operations_research::ModelVisitor::kSortingConstraint</a></div><div class="ttdeci">static const char kSortingConstraint[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03388">constraint_solver.h:3388</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a5ca2c3302d7fda338f6c59adbb8c7979"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a5ca2c3302d7fda338f6c59adbb8c7979">operations_research::Solver::MakeRandomLnsOperator</a></div><div class="ttdeci">LocalSearchOperator * MakeRandomLnsOperator(const std::vector&lt; IntVar * &gt; &amp;vars, int number_of_variables)</div><div class="ttdoc">Creates a large neighborhood search operator which creates fragments (set of relaxed variables) with ...</div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVarElement_html_a4c16de890c82a38ac4d26499a2617a74"><div class="ttname"><a href="classoperations__research_1_1SequenceVarElement.html#a4c16de890c82a38ac4d26499a2617a74">operations_research::SequenceVarElement::ForwardSequence</a></div><div class="ttdeci">const std::vector&lt; int &gt; &amp; ForwardSequence() const</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a932daaf79abd6438cab1c6c8acb71e0f"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a932daaf79abd6438cab1c6c8acb71e0f">operations_research::Solver::MakeIsLessCstVar</a></div><div class="ttdeci">IntVar * MakeIsLessCstVar(IntExpr *const var, int64 value)</div><div class="ttdoc">status var of (var &lt; value)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_af26049e7a0c0bd0a3d3b826579a839ff"><div class="ttname"><a href="classoperations__research_1_1Solver.html#af26049e7a0c0bd0a3d3b826579a839ff">operations_research::Solver::MakeIsLessVar</a></div><div class="ttdeci">IntVar * MakeIsLessVar(IntExpr *const left, IntExpr *const right)</div><div class="ttdoc">status var of (left &lt; right)</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a124e348117110332cb3e5d460f455e4a"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a124e348117110332cb3e5d460f455e4a">operations_research::ModelVisitor::kAbs</a></div><div class="ttdeci">static const char kAbs[]</div><div class="ttdoc">Constraint and Expression types.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03318">constraint_solver.h:3318</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8f39cd51e795db7a44e418fafbabf93f"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8f39cd51e795db7a44e418fafbabf93f">operations_research::Solver::MakeDistribute</a></div><div class="ttdeci">Constraint * MakeDistribute(const std::vector&lt; IntVar * &gt; &amp;vars, const std::vector&lt; int64 &gt; &amp;values, const std::vector&lt; IntVar * &gt; &amp;cards)</div><div class="ttdoc">Aggregated version of count: |{i | v[i] == values[j]}| == cards[j].</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_a9f3bd3b96c814e46db080a7870e441be"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#a9f3bd3b96c814e46db080a7870e441be">operations_research::IntervalVarElement::Var</a></div><div class="ttdeci">IntervalVar * Var() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04670">constraint_solver.h:4670</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_aa820a5c3a3f05b8a3873b752429e559a"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#aa820a5c3a3f05b8a3873b752429e559a">operations_research::ModelVisitor::kDelayedPathCumul</a></div><div class="ttdeci">static const char kDelayedPathCumul[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03378">constraint_solver.h:3378</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8e06358629a979e64e62158816f6759a"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8e06358629a979e64e62158816f6759a">operations_research::Solver::AddCastConstraint</a></div><div class="ttdeci">void AddCastConstraint(CastConstraint *const constraint, IntVar *const target_var, IntExpr *const expr)</div><div class="ttdoc">Adds 'constraint' to the solver and marks it as a cast constraint, that is, a constraint created call...</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a941c7c212362540d900af004c16692a7"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a941c7c212362540d900af004c16692a7">operations_research::Solver::MakeBoolVar</a></div><div class="ttdeci">IntVar * MakeBoolVar()</div><div class="ttdoc">MakeBoolVar will create a variable with a {0, 1} domain.</div></div>
<div class="ttc" id="classoperations__research_1_1RevArray_html_abad018c5f8a0e44bdfd6e17ab59612c7"><div class="ttname"><a href="classoperations__research_1_1RevArray.html#abad018c5f8a0e44bdfd6e17ab59612c7">operations_research::RevArray::Value</a></div><div class="ttdeci">const T &amp; Value(int index) const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03772">constraint_solver.h:3772</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntExpr_html_a4bb288e8b397020398b1184047587f01"><div class="ttname"><a href="classoperations__research_1_1IntExpr.html#a4bb288e8b397020398b1184047587f01">operations_research::IntExpr::IsVar</a></div><div class="ttdeci">virtual bool IsVar() const</div><div class="ttdoc">Returns true if the expression is indeed a variable.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03846">constraint_solver.h:3846</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a8898f5457ee277d6365c9d01ef6e66ab"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a8898f5457ee277d6365c9d01ef6e66ab">operations_research::Assignment::SetStartMax</a></div><div class="ttdeci">void SetStartMax(const IntervalVar *const var, int64 m)</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_ab4a9176237aaf2e3b50196cf4726757a"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#ab4a9176237aaf2e3b50196cf4726757a">operations_research::Assignment::BackwardSequence</a></div><div class="ttdeci">const std::vector&lt; int &gt; &amp; BackwardSequence(const SequenceVar *const var) const</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a3f704993474818667273f078cd273863"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a3f704993474818667273f078cd273863">operations_research::Solver::MakeIsGreaterVar</a></div><div class="ttdeci">IntVar * MakeIsGreaterVar(IntExpr *const left, IntExpr *const right)</div><div class="ttdoc">status var of (left &gt; right)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a10095177497184eb69d38915b04e2b82"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a10095177497184eb69d38915b04e2b82">operations_research::Solver::ExportProfilingOverview</a></div><div class="ttdeci">void ExportProfilingOverview(const std::string &amp;filename)</div><div class="ttdoc">Exports the profiling information in a human readable overview.</div></div>
<div class="ttc" id="classoperations__research_1_1SearchMonitor_html_a9b300dfb35699cf80504c00f2cbe9153"><div class="ttname"><a href="classoperations__research_1_1SearchMonitor.html#a9b300dfb35699cf80504c00f2cbe9153">operations_research::SearchMonitor::Accept</a></div><div class="ttdeci">virtual void Accept(ModelVisitor *const visitor) const</div><div class="ttdoc">Accepts the given model visitor.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_ae4f29693e71a4fbed4ad28b041b5c18a"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#ae4f29693e71a4fbed4ad28b041b5c18a">operations_research::ModelVisitor::kSmartTimeCheckArgument</a></div><div class="ttdeci">static const char kSmartTimeCheckArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03462">constraint_solver.h:3462</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_aed73378373382879db4cc4f42db38784"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#aed73378373382879db4cc4f42db38784">operations_research::ModelVisitor::kIntervalsArgument</a></div><div class="ttdeci">static const char kIntervalsArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03441">constraint_solver.h:3441</a></div></div>
<div class="ttc" id="classoperations__research_1_1NumericalRevArray_html_a394cdf85b4442ebcb0b4ea7f29697b5d"><div class="ttname"><a href="classoperations__research_1_1NumericalRevArray.html#a394cdf85b4442ebcb0b4ea7f29697b5d">operations_research::NumericalRevArray::Decr</a></div><div class="ttdeci">void Decr(Solver *const s, int index)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03807">constraint_solver.h:3807</a></div></div>
<div class="ttc" id="classoperations__research_1_1AssignmentContainer_html_ab4270afda9d688e9132eb95fc9207ae2"><div class="ttname"><a href="classoperations__research_1_1AssignmentContainer.html#ab4270afda9d688e9132eb95fc9207ae2">operations_research::AssignmentContainer::Add</a></div><div class="ttdeci">E * Add(V *var)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04827">constraint_solver.h:4827</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a337babca836e2eff4e67adb0e141f82d"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a337babca836e2eff4e67adb0e141f82d">operations_research::IntervalVar::EndMin</a></div><div class="ttdeci">virtual int64 EndMin() const =0</div><div class="ttdoc">These methods query, set, and watch the end position of the interval var.</div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVar_html_a280b3b63fee8247cc2b89a5ec877497b"><div class="ttname"><a href="classoperations__research_1_1SequenceVar.html#a280b3b63fee8247cc2b89a5ec877497b">operations_research::SequenceVar::~SequenceVar</a></div><div class="ttdeci">~SequenceVar() override</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a9110719b65ea5b817d9da02a742270fe"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a9110719b65ea5b817d9da02a742270fe">operations_research::Solver::MakeConstraintAdder</a></div><div class="ttdeci">DecisionBuilder * MakeConstraintAdder(Constraint *const ct)</div><div class="ttdoc">Returns a decision builder that will add the given constraint to the model.</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_a9b3e359361ec1c033611c5ae5252e9f9"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#a9b3e359361ec1c033611c5ae5252e9f9">operations_research::IntervalVarElement::EndValue</a></div><div class="ttdeci">int64 EndValue() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04691">constraint_solver.h:4691</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_ad613991e451593b83b35081635d1fca6"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#ad613991e451593b83b35081635d1fca6">operations_research::Assignment::SetForwardSequence</a></div><div class="ttdeci">void SetForwardSequence(const SequenceVar *const var, const std::vector&lt; int &gt; &amp;forward_sequence)</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_ab74b8ac19e3a0c418636b841ba551c1a"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#ab74b8ac19e3a0c418636b841ba551c1a">operations_research::Assignment::SetPerformedRange</a></div><div class="ttdeci">void SetPerformedRange(const IntervalVar *const var, int64 mi, int64 ma)</div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html_ac2a200cf86dc0fa3b6a7905971ad88e6"><div class="ttname"><a href="classoperations__research_1_1Pack.html#ac2a200cf86dc0fa3b6a7905971ad88e6">operations_research::Pack::PropagateDelayed</a></div><div class="ttdeci">void PropagateDelayed()</div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html_af69fc8b35affb174b5e47fbee6de9772"><div class="ttname"><a href="classoperations__research_1_1Pack.html#af69fc8b35affb174b5e47fbee6de9772">operations_research::Pack::AddWeightedSumLessOrEqualConstantDimension</a></div><div class="ttdeci">void AddWeightedSumLessOrEqualConstantDimension(const std::vector&lt; int64 &gt; &amp;weights, const std::vector&lt; int64 &gt; &amp;bounds)</div><div class="ttdoc">--— Public API --—</div></div>
<div class="ttc" id="classoperations__research_1_1OptimizeVar_html_ac7b6348e2752a940f527c428636a977b"><div class="ttname"><a href="classoperations__research_1_1OptimizeVar.html#ac7b6348e2752a940f527c428636a977b">operations_research::OptimizeVar::best_</a></div><div class="ttdeci">int64 best_</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04214">constraint_solver.h:4214</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_aeb43b24cad9ab5cae8741d69e1c6c9e0"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#aeb43b24cad9ab5cae8741d69e1c6c9e0">operations_research::IntervalVar::IntervalVar</a></div><div class="ttdeci">IntervalVar(Solver *const solver, const std::string &amp;name)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04349">constraint_solver.h:4349</a></div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html_ae4523b9fc891602c62af24e4961dfe74"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html#ae4523b9fc891602c62af24e4961dfe74">operations_research::SolutionCollector::solution_data_</a></div><div class="ttdeci">std::vector&lt; SolutionData &gt; solution_data_</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04172">constraint_solver.h:4172</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_aaa8c4a089360326fa1ca2a31351f52ce"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#aaa8c4a089360326fa1ca2a31351f52ce">operations_research::ModelVisitor::kLess</a></div><div class="ttdeci">static const char kLess[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03359">constraint_solver.h:3359</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a0f79c92d6b10f900f213b483162466e6"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a0f79c92d6b10f900f213b483162466e6">operations_research::Solver::MakeLocalSearchPhaseParameters</a></div><div class="ttdeci">LocalSearchPhaseParameters * MakeLocalSearchPhaseParameters(LocalSearchOperator *const ls_operator, DecisionBuilder *const sub_decision_builder)</div><div class="ttdoc">Local Search Phase Parameters.</div></div>
<div class="ttc" id="classoperations__research_1_1SimpleRevFIFO_html"><div class="ttname"><a href="classoperations__research_1_1SimpleRevFIFO.html">operations_research::SimpleRevFIFO</a></div><div class="ttdoc">--— utility classes --—</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00151">constraint_solver.h:151</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a3388a6269c91d6ec8b8edc5556d5a544"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a3388a6269c91d6ec8b8edc5556d5a544">operations_research::Assignment::SetDurationValue</a></div><div class="ttdeci">void SetDurationValue(const IntervalVar *const var, int64 value)</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_af9bcfa03b17bfc77afa707f3775ed1fc"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#af9bcfa03b17bfc77afa707f3775ed1fc">operations_research::ModelVisitor::kValueArgument</a></div><div class="ttdeci">static const char kValueArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03472">constraint_solver.h:3472</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_ad27a5fbdd24135dd54498db87feee98e"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#ad27a5fbdd24135dd54498db87feee98e">operations_research::IntervalVar::SafeEndExpr</a></div><div class="ttdeci">virtual IntExpr * SafeEndExpr(int64 unperformed_value)=0</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a3267baa7f21b8bda6b5ac4bced87fbae"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a3267baa7f21b8bda6b5ac4bced87fbae">operations_research::Solver::NameAllVariables</a></div><div class="ttdeci">bool NameAllVariables() const</div><div class="ttdoc">Returns whether all variables should be named.</div></div>
<div class="ttc" id="classoperations__research_1_1PropagationBaseObject_html_a97782b79fbcf8043201fefaa7729dcf1"><div class="ttname"><a href="classoperations__research_1_1PropagationBaseObject.html#a97782b79fbcf8043201fefaa7729dcf1">operations_research::PropagationBaseObject::UnfreezeQueue</a></div><div class="ttdeci">void UnfreezeQueue()</div><div class="ttdoc">This method unfreezes the propagation queue.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03168">constraint_solver.h:3168</a></div></div>
<div class="ttc" id="classoperations__research_1_1DecisionBuilder_html_a3bcaa4dd991e8ddb4d0e48cfbca58592"><div class="ttname"><a href="classoperations__research_1_1DecisionBuilder.html#a3bcaa4dd991e8ddb4d0e48cfbca58592">operations_research::DecisionBuilder::Next</a></div><div class="ttdeci">virtual Decision * Next(Solver *const s)=0</div><div class="ttdoc">This is the main method of the decision builder class.</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_aaccf9ecedf3ef182e9d293c7561b9ff8"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#aaccf9ecedf3ef182e9d293c7561b9ff8">operations_research::IntervalVarElement::operator==</a></div><div class="ttdeci">bool operator==(const IntervalVarElement &amp;element) const</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_aad709b2db0bb964c2cdeeb0d47414297"><div class="ttname"><a href="classoperations__research_1_1Solver.html#aad709b2db0bb964c2cdeeb0d47414297">operations_research::Solver::tmp_vector_</a></div><div class="ttdeci">std::vector&lt; int64 &gt; tmp_vector_</div><div class="ttdoc">Unsafe temporary vector.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02912">constraint_solver.h:2912</a></div></div>
<div class="ttc" id="classoperations__research_1_1RevBitMatrix_html"><div class="ttname"><a href="classoperations__research_1_1RevBitMatrix.html">operations_research::RevBitMatrix</a></div><div class="ttdoc">Matrix version of the RevBitSet class.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solveri_8h_source.html#l00476">constraint_solveri.h:476</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a31d7d8bb2bb4f992ef1ec9d41434091c"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a31d7d8bb2bb4f992ef1ec9d41434091c">operations_research::Solver::MakeScheduleOrPostpone</a></div><div class="ttdeci">Decision * MakeScheduleOrPostpone(IntervalVar *const var, int64 est, int64 *const marker)</div><div class="ttdoc">--— Scheduling Decisions --—</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html">operations_research::ModelVisitor</a></div><div class="ttdoc">Model visitor.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03315">constraint_solver.h:3315</a></div></div>
<div class="ttc" id="classoperations__research_1_1SearchMonitor_html_aadfcba48c62683c6d6463a7adb9b0a28"><div class="ttname"><a href="classoperations__research_1_1SearchMonitor.html#aadfcba48c62683c6d6463a7adb9b0a28">operations_research::SearchMonitor::RefuteDecision</a></div><div class="ttdeci">virtual void RefuteDecision(Decision *const d)</div><div class="ttdoc">Before refuting the decision.</div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html_ae6465359ff5ec74c5f4dcbc0d6e4a3df"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html#ae6465359ff5ec74c5f4dcbc0d6e4a3df">operations_research::SolutionCollector::DurationValue</a></div><div class="ttdeci">int64 DurationValue(int n, IntervalVar *const var) const</div><div class="ttdoc">This is a shortcut to get the DurationValue of 'var' in the nth solution.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_abe82078ee45c0cb3976f9a648e7e8389"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#abe82078ee45c0cb3976f9a648e7e8389">operations_research::ModelVisitor::kEndsArgument</a></div><div class="ttdeci">static const char kEndsArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03432">constraint_solver.h:3432</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_aa4bb610f8e4708b2ea925c37db2b7f66"><div class="ttname"><a href="classoperations__research_1_1Solver.html#aa4bb610f8e4708b2ea925c37db2b7f66">operations_research::Solver::MakeAllowedAssignments</a></div><div class="ttdeci">Constraint * MakeAllowedAssignments(const std::vector&lt; IntVar * &gt; &amp;vars, const IntTupleSet &amp;tuples)</div><div class="ttdoc">This method creates a constraint where the graph of the relation between the variables is given in ex...</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a0f276220863e52aa5b4310e09bca80f0"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a0f276220863e52aa5b4310e09bca80f0">operations_research::ModelVisitor::kLateDateArgument</a></div><div class="ttdeci">static const char kLateDateArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03443">constraint_solver.h:3443</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntVarElement_html_ab5fde53ca39720061f5684e7d472cdd3"><div class="ttname"><a href="classoperations__research_1_1IntVarElement.html#ab5fde53ca39720061f5684e7d472cdd3">operations_research::IntVarElement::SetValue</a></div><div class="ttdeci">void SetValue(int64 v)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04644">constraint_solver.h:4644</a></div></div>
<div class="ttc" id="structoperations__research_1_1Solver_1_1SearchLogParameters_html_ae40b4b440b5b9e79ed7cd50b444a5466"><div class="ttname"><a href="structoperations__research_1_1Solver_1_1SearchLogParameters.html#ae40b4b440b5b9e79ed7cd50b444a5466">operations_research::Solver::SearchLogParameters::variable</a></div><div class="ttdeci">IntVar * variable</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02291">constraint_solver.h:2291</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_af1eda61c28ecb4c870c47793d708e812"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#af1eda61c28ecb4c870c47793d708e812">operations_research::ModelVisitor::kCountAssignedItemsExtension</a></div><div class="ttdeci">static const char kCountAssignedItemsExtension[]</div><div class="ttdoc">Extension names:</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03402">constraint_solver.h:3402</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a0333a30480e11666e6b67162d05b2144"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a0333a30480e11666e6b67162d05b2144">operations_research::Solver::SetBranchSelector</a></div><div class="ttdeci">void SetBranchSelector(BranchSelector bs)</div><div class="ttdoc">Sets the given branch selector on the current active search.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ab836ebc6f5a7daa6e9e5e2bd08cd50f3"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ab836ebc6f5a7daa6e9e5e2bd08cd50f3">operations_research::Solver::MakeGreaterOrEqual</a></div><div class="ttdeci">Constraint * MakeGreaterOrEqual(IntExpr *const left, IntExpr *const right)</div><div class="ttdoc">left &gt;= right</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ad7e8f831f8fe5c00526fc38f30c4ab8d"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ad7e8f831f8fe5c00526fc38f30c4ab8d">operations_research::Solver::MakeAssignVariableValueOrFail</a></div><div class="ttdeci">Decision * MakeAssignVariableValueOrFail(IntVar *const var, int64 value)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a91764cdc9186294ec25adb3dec886515"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a91764cdc9186294ec25adb3dec886515">operations_research::Solver::MakeIsDifferentVar</a></div><div class="ttdeci">IntVar * MakeIsDifferentVar(IntExpr *const v1, IntExpr *const v2)</div><div class="ttdoc">status var of (v1 != v2)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ac1b3220ae80fb8430bc06310c5bea5f1aae6bcc97b395e12e9a8e54093a327512"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ac1b3220ae80fb8430bc06310c5bea5f1aae6bcc97b395e12e9a8e54093a327512">operations_research::Solver::LK</a></div><div class="ttdoc">LinKernighan local search.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00562">constraint_solver.h:562</a></div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html_a94969a5d7e604ccba7e5b515424a246e"><div class="ttname"><a href="classoperations__research_1_1Pack.html#a94969a5d7e604ccba7e5b515424a246e">operations_research::Pack::Pack</a></div><div class="ttdeci">Pack(Solver *const s, const std::vector&lt; IntVar * &gt; &amp;vars, int number_of_bins)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ac69bf81e7f8a9d08453ca8dae9619092"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ac69bf81e7f8a9d08453ca8dae9619092">operations_research::Solver::MakeCircuit</a></div><div class="ttdeci">Constraint * MakeCircuit(const std::vector&lt; IntVar * &gt; &amp;nexts)</div><div class="ttdoc">Force the &quot;nexts&quot; variable to create a complete Hamiltonian path.</div></div>
<div class="ttc" id="structoperations__research_1_1InitAndGetValues_1_1Iterator_html_a6e4d3225cd724e3e121cdd74dd845d3e"><div class="ttname"><a href="structoperations__research_1_1InitAndGetValues_1_1Iterator.html#a6e4d3225cd724e3e121cdd74dd845d3e">operations_research::InitAndGetValues::Iterator::operator++</a></div><div class="ttdeci">Iterator &amp; operator++()</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03951">constraint_solver.h:3951</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_af68303d9fbd37f5bca241917e84d1b85"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#af68303d9fbd37f5bca241917e84d1b85">operations_research::ModelVisitor::kSumGreaterOrEqual</a></div><div class="ttdeci">static const char kSumGreaterOrEqual[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03393">constraint_solver.h:3393</a></div></div>
<div class="ttc" id="classoperations__research_1_1PropagationBaseObject_html_a8be8b75223b76744791e48747677cdb6"><div class="ttname"><a href="classoperations__research_1_1PropagationBaseObject.html#a8be8b75223b76744791e48747677cdb6">operations_research::PropagationBaseObject::name</a></div><div class="ttdeci">virtual std::string name() const</div><div class="ttdoc">Object naming.</div></div>
<div class="ttc" id="classoperations__research_1_1Constraint_html_a92c3bfe86238b5c95448d4a0384a327f"><div class="ttname"><a href="classoperations__research_1_1Constraint.html#a92c3bfe86238b5c95448d4a0384a327f">operations_research::Constraint::PostAndPropagate</a></div><div class="ttdeci">void PostAndPropagate()</div><div class="ttdoc">Calls Post and then Propagate to initialize the constraints.</div></div>
<div class="ttc" id="classoperations__research_1_1Decision_html_a8c30db3cf86cc406442a05f5361fe4b9"><div class="ttname"><a href="classoperations__research_1_1Decision.html#a8c30db3cf86cc406442a05f5361fe4b9">operations_research::Decision::DebugString</a></div><div class="ttdeci">std::string DebugString() const override</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03220">constraint_solver.h:3220</a></div></div>
<div class="ttc" id="classoperations__research_1_1SearchLimit_html_a4d58c37975405a86ef02fd0fdd7ed34f"><div class="ttname"><a href="classoperations__research_1_1SearchLimit.html#a4d58c37975405a86ef02fd0fdd7ed34f">operations_research::SearchLimit::BeginNextDecision</a></div><div class="ttdeci">void BeginNextDecision(DecisionBuilder *const b) override</div><div class="ttdoc">Before calling DecisionBuilder::Next.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a0c3ee759e1618eb55ca895c8f6878e57"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a0c3ee759e1618eb55ca895c8f6878e57">operations_research::Solver::MakeSemiContinuousExpr</a></div><div class="ttdeci">IntExpr * MakeSemiContinuousExpr(IntExpr *const expr, int64 fixed_charge, int64 step)</div><div class="ttdoc">Semi continuous Expression (x &lt;= 0 -&gt; f(x) = 0; x &gt; 0 -&gt; f(x) = ax + b) a &gt;= 0 and b &gt;= 0.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a7b5480d7ce4e02a3d924c1c07544eb7d"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a7b5480d7ce4e02a3d924c1c07544eb7d">operations_research::ModelVisitor::kOpposite</a></div><div class="ttdeci">static const char kOpposite[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03375">constraint_solver.h:3375</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a054bb0ce517052aa4d701536cce06748"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a054bb0ce517052aa4d701536cce06748">operations_research::ModelVisitor::EndVisitExtension</a></div><div class="ttdeci">virtual void EndVisitExtension(const std::string &amp;type)</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a5230c251f02f05d4f641e7f159512ae7"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a5230c251f02f05d4f641e7f159512ae7">operations_research::ModelVisitor::kCountUsedBinsExtension</a></div><div class="ttdeci">static const char kCountUsedBinsExtension[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03403">constraint_solver.h:3403</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntVarElement_html_ab75541e5c6fe6f193f5cf94d8b12f5a4"><div class="ttname"><a href="classoperations__research_1_1IntVarElement.html#ab75541e5c6fe6f193f5cf94d8b12f5a4">operations_research::IntVarElement::Copy</a></div><div class="ttdeci">void Copy(const IntVarElement &amp;element)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ac1b3220ae80fb8430bc06310c5bea5f1"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ac1b3220ae80fb8430bc06310c5bea5f1">operations_research::Solver::EvaluatorLocalSearchOperators</a></div><div class="ttdeci">EvaluatorLocalSearchOperators</div><div class="ttdoc">This enum is used in Solver::MakeOperator associated with an evaluator to specify the neighborhood to...</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00557">constraint_solver.h:557</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_ad8e6fc060fea392c9ae52b3102b19bb5"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#ad8e6fc060fea392c9ae52b3102b19bb5">operations_research::ModelVisitor::kDisjunctive</a></div><div class="ttdeci">static const char kDisjunctive[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03333">constraint_solver.h:3333</a></div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html_a9661ec736470edba26f92dfac906a114"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html#a9661ec736470edba26f92dfac906a114">operations_research::SolutionCollector::AddObjective</a></div><div class="ttdeci">void AddObjective(IntVar *const objective)</div></div>
<div class="ttc" id="classoperations__research_1_1IntVar_html_ad371f5411c3f0aa0424181fc9936a2fb"><div class="ttname"><a href="classoperations__research_1_1IntVar.html#ad371f5411c3f0aa0424181fc9936a2fb">operations_research::IntVar::MakeDomainIterator</a></div><div class="ttdeci">virtual IntVarIterator * MakeDomainIterator(bool reversible) const =0</div><div class="ttdoc">Creates a domain iterator.</div></div>
<div class="ttc" id="classoperations__research_1_1PropagationBaseObject_html_af6e627822f954d6072125c1d152c30f8"><div class="ttname"><a href="classoperations__research_1_1PropagationBaseObject.html#af6e627822f954d6072125c1d152c30f8">operations_research::PropagationBaseObject::HasName</a></div><div class="ttdeci">bool HasName() const</div><div class="ttdoc">Returns whether the object has been named or not.</div></div>
<div class="ttc" id="classoperations__research_1_1SolutionPool_html_a9fb836da69e3c48b8ea240c0aee64d61"><div class="ttname"><a href="classoperations__research_1_1SolutionPool.html#a9fb836da69e3c48b8ea240c0aee64d61">operations_research::SolutionPool::Initialize</a></div><div class="ttdeci">virtual void Initialize(Assignment *const assignment)=0</div><div class="ttdoc">This method is called to initialize the solution pool with the assignment from the local search.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a1db3e601f221c9db91c5b47dc9028fd5"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a1db3e601f221c9db91c5b47dc9028fd5">operations_research::ModelVisitor::kNonEqual</a></div><div class="ttdeci">static const char kNonEqual[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03371">constraint_solver.h:3371</a></div></div>
<div class="ttc" id="classoperations__research_1_1RegularLimit_html_a255302e173fe3765a12bdac8cc893d89"><div class="ttname"><a href="classoperations__research_1_1RegularLimit.html#a255302e173fe3765a12bdac8cc893d89">operations_research::RegularLimit::Copy</a></div><div class="ttdeci">void Copy(const SearchLimit *const limit) override</div><div class="ttdoc">Copy a limit.</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a846c66e60add2d3116f6080694492c55"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a846c66e60add2d3116f6080694492c55">operations_research::Assignment::SetStartRange</a></div><div class="ttdeci">void SetStartRange(const IntervalVar *const var, int64 mi, int64 ma)</div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html_ab4e8efc23e9db0d7d793ca7697e89e05"><div class="ttname"><a href="classoperations__research_1_1Pack.html#ab4e8efc23e9db0d7d793ca7697e89e05">operations_research::Pack::RemoveAllPossibleFromBin</a></div><div class="ttdeci">void RemoveAllPossibleFromBin(int bin_index)</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_acb394e7169662d9ca957a0affde6220b"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#acb394e7169662d9ca957a0affde6220b">operations_research::ModelVisitor::kMaximizeArgument</a></div><div class="ttdeci">static const char kMaximizeArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03446">constraint_solver.h:3446</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ac6ac3661a9add716fade6fecf1645805"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ac6ac3661a9add716fade6fecf1645805">operations_research::Solver::MakeIfThenElseCt</a></div><div class="ttdeci">Constraint * MakeIfThenElseCt(IntVar *const condition, IntExpr *const then_expr, IntExpr *const else_expr, IntVar *const target_var)</div><div class="ttdoc">Special cases with arrays of size two.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_acf6d57032f4a4c2ea638066179385b5e"><div class="ttname"><a href="classoperations__research_1_1Solver.html#acf6d57032f4a4c2ea638066179385b5e">operations_research::Solver::HasName</a></div><div class="ttdeci">bool HasName(const PropagationBaseObject *object) const</div><div class="ttdoc">Returns whether the object has been named or not.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a5f87c832967334179f0f9c8d05380847a7a7d1379ff946fd786c118c3358ce438"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a5f87c832967334179f0f9c8d05380847a7a7d1379ff946fd786c118c3358ce438">operations_research::Solver::KEEP_LEFT</a></div><div class="ttdoc">Right branches are ignored.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00688">constraint_solver.h:688</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ae21b3786b7770dc880343e4a1445b424"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ae21b3786b7770dc880343e4a1445b424">operations_research::Solver::IntervalStrategy</a></div><div class="ttdeci">IntervalStrategy</div><div class="ttdoc">This enum describes the straregy used to select the next interval variable and its value to be fixed.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00404">constraint_solver.h:404</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a0f576f70d8fae8d5d498ec142490f8e1"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a0f576f70d8fae8d5d498ec142490f8e1">operations_research::Solver::IsLocalSearchProfilingEnabled</a></div><div class="ttdeci">bool IsLocalSearchProfilingEnabled() const</div><div class="ttdoc">Returns whether we are profiling local search.</div></div>
<div class="ttc" id="classoperations__research_1_1IntVar_html_a68e475702b2e14bf968256ec36cccad7"><div class="ttname"><a href="classoperations__research_1_1IntVar.html#a68e475702b2e14bf968256ec36cccad7">operations_research::IntVar::MakeHoleIterator</a></div><div class="ttdeci">virtual IntVarIterator * MakeHoleIterator(bool reversible) const =0</div><div class="ttdoc">Creates a hole iterator.</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a9ffb2e99804d31214d9d23e1f200e85c"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a9ffb2e99804d31214d9d23e1f200e85c">operations_research::Assignment::MutableIntervalVarContainer</a></div><div class="ttdeci">IntervalContainer * MutableIntervalVarContainer()</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l05161">constraint_solver.h:5161</a></div></div>
<div class="ttc" id="classoperations__research_1_1AssignmentElement_html"><div class="ttname"><a href="classoperations__research_1_1AssignmentElement.html">operations_research::AssignmentElement</a></div><div class="ttdoc">------— Assignments -------------------------—</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04596">constraint_solver.h:4596</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_aaa52f2620322c849e2142fdfc0eb4213"><div class="ttname"><a href="classoperations__research_1_1Solver.html#aaa52f2620322c849e2142fdfc0eb4213">operations_research::Solver::MakePiecewiseLinearExpr</a></div><div class="ttdeci">IntExpr * MakePiecewiseLinearExpr(IntExpr *expr, const PiecewiseLinearFunction &amp;f)</div><div class="ttdoc">General piecewise-linear function expression, built from f(x) where f is piecewise-linear.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ac3c5b22fad8060ca1a66bd928182d8a4a5dcd871e02933eb704b45ea8ea68a852"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a5dcd871e02933eb704b45ea8ea68a852">operations_research::Solver::CROSS</a></div><div class="ttdoc">Operator which cross exchanges the starting chains of 2 paths, including exchanging the whole paths.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00468">constraint_solver.h:468</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_af45183dc5bc39eda3d7a7ed11e0e7f31"><div class="ttname"><a href="classoperations__research_1_1Solver.html#af45183dc5bc39eda3d7a7ed11e0e7f31">operations_research::Solver::MakeVariableDegreeVisitor</a></div><div class="ttdeci">ModelVisitor * MakeVariableDegreeVisitor(absl::flat_hash_map&lt; const IntVar *, int &gt; *const map)</div><div class="ttdoc">Compute the number of constraints a variable is attached to.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ae63acd77b8c2ee40387795051298f659"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659">operations_research::Solver::IntValueStrategy</a></div><div class="ttdeci">IntValueStrategy</div><div class="ttdoc">This enum describes the strategy used to select the next variable value to set.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00340">constraint_solver.h:340</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_acd30ddafdc9f5f26a950470d1f3edeed"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#acd30ddafdc9f5f26a950470d1f3edeed">operations_research::IntervalVarElement::DurationValue</a></div><div class="ttdeci">int64 DurationValue() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04685">constraint_solver.h:4685</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntVar_html_a4566c3b4fe20baa14354525be9b31bca"><div class="ttname"><a href="classoperations__research_1_1IntVar.html#a4566c3b4fe20baa14354525be9b31bca">operations_research::IntVar::IsGreaterOrEqual</a></div><div class="ttdeci">virtual IntVar * IsGreaterOrEqual(int64 constant)=0</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a3ae4ede3b7a68624006b888b97fae3c5"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a3ae4ede3b7a68624006b888b97fae3c5">operations_research::Solver::MakeConditionalExpression</a></div><div class="ttdeci">IntExpr * MakeConditionalExpression(IntVar *const condition, IntExpr *const expr, int64 unperformed_value)</div><div class="ttdoc">Conditional Expr condition ? expr : unperformed_value.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_ad5d3ccac1c12901e24a9861010c139a9"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#ad5d3ccac1c12901e24a9861010c139a9">operations_research::ModelVisitor::kTransitsArgument</a></div><div class="ttdeci">static const char kTransitsArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03470">constraint_solver.h:3470</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_ad6ab5aff03cb66b05fcbdff43dde169a"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#ad6ab5aff03cb66b05fcbdff43dde169a">operations_research::Assignment::CopyIntersection</a></div><div class="ttdeci">void CopyIntersection(const Assignment *assignment)</div><div class="ttdoc">Copies the intersection of the two assignments to the current assignment.</div></div>
<div class="ttc" id="classoperations__research_1_1IntVarElement_html_a86c83c81ce35a6100adf1790419977ef"><div class="ttname"><a href="classoperations__research_1_1IntVarElement.html#a86c83c81ce35a6100adf1790419977ef">operations_research::IntVarElement::Clone</a></div><div class="ttdeci">IntVarElement * Clone()</div></div>
<div class="ttc" id="classoperations__research_1_1IntVar_html_ade36b093f22913a40c24d37575c28f38"><div class="ttname"><a href="classoperations__research_1_1IntVar.html#ade36b093f22913a40c24d37575c28f38">operations_research::IntVar::RemoveValues</a></div><div class="ttdeci">virtual void RemoveValues(const std::vector&lt; int64 &gt; &amp;values)</div><div class="ttdoc">This method remove the values from the domain of the variable.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a87ca0b6abf9c8724900387f5aa557c04"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a87ca0b6abf9c8724900387f5aa557c04">operations_research::Solver::Action</a></div><div class="ttdeci">std::function&lt; void(Solver *)&gt; Action</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00739">constraint_solver.h:739</a></div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVarElement_html_a6459f3a116d5253c4080fd2a3d52585b"><div class="ttname"><a href="classoperations__research_1_1SequenceVarElement.html#a6459f3a116d5253c4080fd2a3d52585b">operations_research::SequenceVarElement::Copy</a></div><div class="ttdeci">void Copy(const SequenceVarElement &amp;element)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a3ce9d85b90e2416f59ee89b13579c725"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a3ce9d85b90e2416f59ee89b13579c725">operations_research::Solver::Solve</a></div><div class="ttdeci">bool Solve(DecisionBuilder *const db, const std::vector&lt; SearchMonitor * &gt; &amp;monitors)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_af0f7c0067b5a3a79cfff03d48e9eeb94"><div class="ttname"><a href="classoperations__research_1_1Solver.html#af0f7c0067b5a3a79cfff03d48e9eeb94">operations_research::Solver::MakePower</a></div><div class="ttdeci">IntExpr * MakePower(IntExpr *const expr, int64 n)</div><div class="ttdoc">expr ^ n (n &gt; 0)</div></div>
<div class="ttc" id="classoperations__research_1_1SearchMonitor_html_a705ae4bfa396632c23d65f37793391f2"><div class="ttname"><a href="classoperations__research_1_1SearchMonitor.html#a705ae4bfa396632c23d65f37793391f2">operations_research::SearchMonitor::EnterSearch</a></div><div class="ttdeci">virtual void EnterSearch()</div><div class="ttdoc">Beginning of the search.</div></div>
<div class="ttc" id="classoperations__research_1_1IntExpr_html_afec5a6eea8ee64fbc7fa34d7d28f8d8f"><div class="ttname"><a href="classoperations__research_1_1IntExpr.html#afec5a6eea8ee64fbc7fa34d7d28f8d8f">operations_research::IntExpr::SetMin</a></div><div class="ttdeci">virtual void SetMin(int64 m)=0</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a9da8bd50488b7bfaf29dafeac488c24e"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a9da8bd50488b7bfaf29dafeac488c24e">operations_research::ModelVisitor::kEndMinArgument</a></div><div class="ttdeci">static const char kEndMinArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03431">constraint_solver.h:3431</a></div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVarElement_html_a2dde19669941089f5262965a4de3fb8a"><div class="ttname"><a href="classoperations__research_1_1SequenceVarElement.html#a2dde19669941089f5262965a4de3fb8a">operations_research::SequenceVarElement::operator==</a></div><div class="ttdeci">bool operator==(const SequenceVarElement &amp;element) const</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a1d3505710b6b1b66c738695d877aef8b"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a1d3505710b6b1b66c738695d877aef8b">operations_research::Solver::MakeLess</a></div><div class="ttdeci">Constraint * MakeLess(IntExpr *const left, IntExpr *const right)</div><div class="ttdoc">left &lt; right</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a1137b3c7b1a1322229ffb6fd6b1ea24c"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a1137b3c7b1a1322229ffb6fd6b1ea24c">operations_research::ModelVisitor::kLexLess</a></div><div class="ttdeci">static const char kLexLess[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03361">constraint_solver.h:3361</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ad80dd1ae1e4b2a33944cf207f2a63458"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ad80dd1ae1e4b2a33944cf207f2a63458">operations_research::Solver::MakeModulo</a></div><div class="ttdeci">IntExpr * MakeModulo(IntExpr *const x, int64 mod)</div><div class="ttdoc">Modulo expression x % mod (with the python convention for modulo).</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a7d3901dd55a861cbe149a179469cbb46"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a7d3901dd55a861cbe149a179469cbb46">operations_research::ModelVisitor::kSquare</a></div><div class="ttdeci">static const char kSquare[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03389">constraint_solver.h:3389</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_aa99c80d3aa788f16d966b7b5af4be7e2"><div class="ttname"><a href="classoperations__research_1_1Solver.html#aa99c80d3aa788f16d966b7b5af4be7e2">operations_research::Solver::MakeNonEquality</a></div><div class="ttdeci">Constraint * MakeNonEquality(IntExpr *const left, IntExpr *const right)</div><div class="ttdoc">left != right</div></div>
<div class="ttc" id="classoperations__research_1_1IntVarIterator_html_a8cd71554efc9460ca2319bbe79574ffa"><div class="ttname"><a href="classoperations__research_1_1IntVarIterator.html#a8cd71554efc9460ca2319bbe79574ffa">operations_research::IntVarIterator::Value</a></div><div class="ttdeci">virtual int64 Value() const =0</div><div class="ttdoc">This method returns the current value of the iterator.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a4b0972c731faf884eba5acab99ebb2b4af8769149902a8a2b168069cb93cc6370"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a4b0972c731faf884eba5acab99ebb2b4af8769149902a8a2b168069cb93cc6370">operations_research::Solver::DELAYED_PRIORITY</a></div><div class="ttdoc">DELAYED_PRIORITY is the lowest priority: Demons will be processed after VAR_PRIORITY and NORMAL_PRIOR...</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00601">constraint_solver.h:601</a></div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html_ad5f73f593628e7d72088fb9e3b5a369d"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html#ad5f73f593628e7d72088fb9e3b5a369d">operations_research::SolutionCollector::BackwardSequence</a></div><div class="ttdeci">const std::vector&lt; int &gt; &amp; BackwardSequence(int n, SequenceVar *const var) const</div><div class="ttdoc">This is a shortcut to get the BackwardSequence of 'var' in the nth solution.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8b4e4af37e3d9c1f667992bcec34630c"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8b4e4af37e3d9c1f667992bcec34630c">operations_research::Solver::MakeSum</a></div><div class="ttdeci">IntExpr * MakeSum(IntExpr *const left, IntExpr *const right)</div><div class="ttdoc">--— Integer Expressions --—</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_aab58d22b2215e79f8e3a9424fe186239"><div class="ttname"><a href="classoperations__research_1_1Solver.html#aab58d22b2215e79f8e3a9424fe186239">operations_research::Solver::Closure</a></div><div class="ttdeci">std::function&lt; void()&gt; Closure</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00740">constraint_solver.h:740</a></div></div>
<div class="ttc" id="structoperations__research_1_1DefaultPhaseParameters_html_aa1ee3388a187cc5465d43d25ac9ab1f1af2a047b8f99a5e3d2dcfff41b7575242"><div class="ttname"><a href="structoperations__research_1_1DefaultPhaseParameters.html#aa1ee3388a187cc5465d43d25ac9ab1f1af2a047b8f99a5e3d2dcfff41b7575242">operations_research::DefaultPhaseParameters::CHOOSE_MAX_VALUE_IMPACT</a></div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00161">constraint_solver.h:161</a></div></div>
<div class="ttc" id="classoperations__research_1_1AssignmentElement_html_a72b7c59e2cb99e623dff415ad129aa07"><div class="ttname"><a href="classoperations__research_1_1AssignmentElement.html#a72b7c59e2cb99e623dff415ad129aa07">operations_research::AssignmentElement::AssignmentElement</a></div><div class="ttdeci">AssignmentElement()</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04598">constraint_solver.h:4598</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a4d59a6ca10783bbd71c02450cd300167"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a4d59a6ca10783bbd71c02450cd300167">operations_research::Solver::MakeAssignVariableValue</a></div><div class="ttdeci">Decision * MakeAssignVariableValue(IntVar *const var, int64 val)</div><div class="ttdoc">--— Search Decicions and Decision Builders --—</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a2f30468d938065d5e3ae986a09b66df4"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a2f30468d938065d5e3ae986a09b66df4">operations_research::Solver::MakePhase</a></div><div class="ttdeci">DecisionBuilder * MakePhase(const std::vector&lt; IntVar * &gt; &amp;vars, IntVarStrategy var_str, IntValueStrategy val_str)</div><div class="ttdoc">Phases on IntVar arrays.</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a51aa4ca92209f593a3b458247642987d"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a51aa4ca92209f593a3b458247642987d">operations_research::IntervalVar::WhenEndBound</a></div><div class="ttdeci">virtual void WhenEndBound(Demon *const d)=0</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_af285b462fedc4cf35d36faff5fc78e21"><div class="ttname"><a href="classoperations__research_1_1Solver.html#af285b462fedc4cf35d36faff5fc78e21">operations_research::Solver::MakeNullIntersectExcept</a></div><div class="ttdeci">Constraint * MakeNullIntersectExcept(const std::vector&lt; IntVar * &gt; &amp;first_vars, const std::vector&lt; IntVar * &gt; &amp;second_vars, int64 escape_value)</div><div class="ttdoc">Creates a constraint that states that all variables in the first vector are different from all variab...</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_af4d2c143bd1e769ab96a69a8ab855136"><div class="ttname"><a href="classoperations__research_1_1Solver.html#af4d2c143bd1e769ab96a69a8ab855136">operations_research::Solver::Solver</a></div><div class="ttdeci">Solver(const std::string &amp;name)</div><div class="ttdoc">Solver API.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ad140a06463178d92b516e34762903b2d"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ad140a06463178d92b516e34762903b2d">operations_research::Solver::RestartCurrentSearch</a></div><div class="ttdeci">void RestartCurrentSearch()</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a01b92dc5c74e94c0decb3883663b6a21"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a01b92dc5c74e94c0decb3883663b6a21">operations_research::Solver::MakeGuidedLocalSearch</a></div><div class="ttdeci">SearchMonitor * MakeGuidedLocalSearch(bool maximize, IntVar *const objective, IndexEvaluator2 objective_function, int64 step, const std::vector&lt; IntVar * &gt; &amp;vars, double penalty_factor)</div><div class="ttdoc">Creates a Guided Local Search monitor.</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_ab9ab90406aa4d66b882c1e873ce76c48"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#ab9ab90406aa4d66b882c1e873ce76c48">operations_research::Assignment::SetUnperformed</a></div><div class="ttdeci">void SetUnperformed(const SequenceVar *const var, const std::vector&lt; int &gt; &amp;unperformed)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a85403f4ea76885802e486103ef5d6615"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a85403f4ea76885802e486103ef5d6615">operations_research::Solver::MakeIsGreaterCstCt</a></div><div class="ttdeci">Constraint * MakeIsGreaterCstCt(IntExpr *const v, int64 c, IntVar *const b)</div><div class="ttdoc">b == (v &gt; c)</div></div>
<div class="ttc" id="classoperations__research_1_1RegularLimit_html_a8d79675478e6f3bc3536e278f71ab507"><div class="ttname"><a href="classoperations__research_1_1RegularLimit.html#a8d79675478e6f3bc3536e278f71ab507">operations_research::RegularLimit::MakeIdenticalClone</a></div><div class="ttdeci">RegularLimit * MakeIdenticalClone() const</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a916b0c8011c6d73e0da63c0de5811735"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a916b0c8011c6d73e0da63c0de5811735">operations_research::ModelVisitor::kTimeLimitArgument</a></div><div class="ttdeci">static const char kTimeLimitArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03469">constraint_solver.h:3469</a></div></div>
<div class="ttc" id="classoperations__research_1_1SearchMonitor_html_a9cb45d67a60d4729f1e1fd4d0c6442db"><div class="ttname"><a href="classoperations__research_1_1SearchMonitor.html#a9cb45d67a60d4729f1e1fd4d0c6442db">operations_research::SearchMonitor::PeriodicCheck</a></div><div class="ttdeci">virtual void PeriodicCheck()</div><div class="ttdoc">Periodic call to check limits in long running methods.</div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html_af10aa93a14a72df0bd8b5c7143c6648e"><div class="ttname"><a href="classoperations__research_1_1Pack.html#af10aa93a14a72df0bd8b5c7143c6648e">operations_research::Pack::ClearAll</a></div><div class="ttdeci">void ClearAll()</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a23709f68a0b309e7ba3329c0e4775d07"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a23709f68a0b309e7ba3329c0e4775d07">operations_research::IntervalVar::DurationMin</a></div><div class="ttdeci">virtual int64 DurationMin() const =0</div><div class="ttdoc">These methods query, set, and watch the duration of the interval var.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a526f8541539c9560e826469dc13ddfaf"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a526f8541539c9560e826469dc13ddfaf">operations_research::ModelVisitor::VisitInt64ToBoolExtension</a></div><div class="ttdeci">void VisitInt64ToBoolExtension(Solver::IndexFilter1 filter, int64 index_min, int64 index_max)</div><div class="ttdoc">Using SWIG on callbacks is troublesome, so we hide these methods during the wrapping.</div></div>
<div class="ttc" id="classoperations__research_1_1IntVarLocalSearchFilter_html"><div class="ttname"><a href="classoperations__research_1_1IntVarLocalSearchFilter.html">operations_research::IntVarLocalSearchFilter</a></div><div class="ttdoc">--— IntVarLocalSearchFilter --—</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solveri_8h_source.html#l01578">constraint_solveri.h:1578</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a7530f8bd8c4e7153cae4e5245b28b0d9"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a7530f8bd8c4e7153cae4e5245b28b0d9">operations_research::Assignment::StartValue</a></div><div class="ttdeci">int64 StartValue(const IntervalVar *const var) const</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a94a24557456395e59c924a095f2096aaa2824d95f6832660bf47a077680403b7c"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a94a24557456395e59c924a095f2096aaa2824d95f6832660bf47a077680403b7c">operations_research::Solver::SEQUENCE_SIMPLE</a></div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00397">constraint_solver.h:397</a></div></div>
<div class="ttc" id="structoperations__research_1_1Solver_1_1IntegerCastInfo_html_a4829cf800cd883bd0670163ef47da7cb"><div class="ttname"><a href="structoperations__research_1_1Solver_1_1IntegerCastInfo.html#a4829cf800cd883bd0670163ef47da7cb">operations_research::Solver::IntegerCastInfo::IntegerCastInfo</a></div><div class="ttdeci">IntegerCastInfo()</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00245">constraint_solver.h:245</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a36d90b47d30362df401823c21106132a"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a36d90b47d30362df401823c21106132a">operations_research::ModelVisitor::kDemandsArgument</a></div><div class="ttdeci">static const char kDemandsArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03425">constraint_solver.h:3425</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a6ea132b8530a5b9146a4b0ff6b478163"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a6ea132b8530a5b9146a4b0ff6b478163">operations_research::ModelVisitor::kSum</a></div><div class="ttdeci">static const char kSum[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03391">constraint_solver.h:3391</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_abebae695ae85e01fe4c176c5a056c9b9"><div class="ttname"><a href="classoperations__research_1_1Solver.html#abebae695ae85e01fe4c176c5a056c9b9">operations_research::Solver::MakeMax</a></div><div class="ttdeci">IntExpr * MakeMax(const std::vector&lt; IntVar * &gt; &amp;vars)</div><div class="ttdoc">std::max(vars)</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a7eb289b0a73f7cdb6296c26f485eb69e"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a7eb289b0a73f7cdb6296c26f485eb69e">operations_research::Assignment::Store</a></div><div class="ttdeci">void Store()</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ab6302978f1de57bdeafa0ffee05c92c9ad5a5ac7b999f4c37d11206e531125988"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9ad5a5ac7b999f4c37d11206e531125988">operations_research::Solver::STARTS_AFTER_END</a></div><div class="ttdoc">t1 starts after t2 end, i.e. Start(t1) &gt;= End(t2) + delay.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00626">constraint_solver.h:626</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a2359ce77356b72617d07f9fe15e64b8e"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a2359ce77356b72617d07f9fe15e64b8e">operations_research::Solver::MakeOptimize</a></div><div class="ttdeci">OptimizeVar * MakeOptimize(bool maximize, IntVar *const v, int64 step)</div><div class="ttdoc">Creates a objective with a given sense (true = maximization).</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a83e14be9c6bba9abdd1949c25c32a60da9cc048da4ce5362c5a58866161a219bd"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a83e14be9c6bba9abdd1949c25c32a60da9cc048da4ce5362c5a58866161a219bd">operations_research::Solver::ENDS_BEFORE</a></div><div class="ttdoc">t ends before d, i.e. End(t) &lt;= d.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00653">constraint_solver.h:653</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a5bdf15368dacb3a71e78ed7f7ca38ce3"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a5bdf15368dacb3a71e78ed7f7ca38ce3">operations_research::Solver::MakeIsGreaterOrEqualVar</a></div><div class="ttdeci">IntVar * MakeIsGreaterOrEqualVar(IntExpr *const left, IntExpr *const right)</div><div class="ttdoc">status var of (left &gt;= right)</div></div>
<div class="ttc" id="classoperations__research_1_1IntVarElement_html_a9683993188d5a63cad067a6a1891aaa7"><div class="ttname"><a href="classoperations__research_1_1IntVarElement.html#a9683993188d5a63cad067a6a1891aaa7">operations_research::IntVarElement::DebugString</a></div><div class="ttdeci">std::string DebugString() const</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_ae6c54c4443407469494ea7b5eaa7ebfc"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#ae6c54c4443407469494ea7b5eaa7ebfc">operations_research::ModelVisitor::kDistribute</a></div><div class="ttdeci">static const char kDistribute[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03334">constraint_solver.h:3334</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a7cc767e828c3681fc2ff98ba83c6919c"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a7cc767e828c3681fc2ff98ba83c6919c">operations_research::ModelVisitor::kIntervalDisjunction</a></div><div class="ttdeci">static const char kIntervalDisjunction[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03347">constraint_solver.h:3347</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8e9cbe2323b10c6b49da625f5bae14c0a7b0d93c6324068fe1984836247bc1104"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8e9cbe2323b10c6b49da625f5bae14c0a7b0d93c6324068fe1984836247bc1104">operations_research::Solver::LE</a></div><div class="ttdoc">Move is accepted when the current objective value &lt;= objective.Max.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00589">constraint_solver.h:589</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_aae471dd402e8c4860b84b50a17012364"><div class="ttname"><a href="classoperations__research_1_1Solver.html#aae471dd402e8c4860b84b50a17012364">operations_research::Solver::MakeDefaultSolutionPool</a></div><div class="ttdeci">SolutionPool * MakeDefaultSolutionPool()</div><div class="ttdoc">Solution Pool.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a878714df7b35afc923456d2608205377"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a878714df7b35afc923456d2608205377">operations_research::Solver::MakeRankLastInterval</a></div><div class="ttdeci">Decision * MakeRankLastInterval(SequenceVar *const sequence, int index)</div><div class="ttdoc">Returns a decision that tries to rank last the ith interval var in the sequence variable.</div></div>
<div class="ttc" id="classoperations__research_1_1SearchLimit_html_a011a3a7171696f1f440d753dcd5a1136"><div class="ttname"><a href="classoperations__research_1_1SearchLimit.html#a011a3a7171696f1f440d753dcd5a1136">operations_research::SearchLimit::MakeClone</a></div><div class="ttdeci">virtual SearchLimit * MakeClone() const =0</div><div class="ttdoc">Allocates a clone of the limit.</div></div>
<div class="ttc" id="classoperations__research_1_1Constraint_html_a6e3070956af148d6fa0491de1d3cf289"><div class="ttname"><a href="classoperations__research_1_1Constraint.html#a6e3070956af148d6fa0491de1d3cf289">operations_research::Constraint::Accept</a></div><div class="ttdeci">virtual void Accept(ModelVisitor *const visitor) const</div><div class="ttdoc">Accepts the given visitor.</div></div>
<div class="ttc" id="classoperations__research_1_1SearchLimit_html_a5e78de48144b2c4446fb2847a525a061"><div class="ttname"><a href="classoperations__research_1_1SearchLimit.html#a5e78de48144b2c4446fb2847a525a061">operations_research::SearchLimit::PeriodicCheck</a></div><div class="ttdeci">void PeriodicCheck() override</div><div class="ttdoc">Periodic call to check limits in long running methods.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ac3c5b22fad8060ca1a66bd928182d8a4"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4">operations_research::Solver::LocalSearchOperators</a></div><div class="ttdeci">LocalSearchOperators</div><div class="ttdoc">This enum is used in Solver::MakeOperator to specify the neighborhood to create.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00419">constraint_solver.h:419</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_aba8c3c31b4420581c108861a64014df2"><div class="ttname"><a href="classoperations__research_1_1Solver.html#aba8c3c31b4420581c108861a64014df2">operations_research::Solver::RandomConcatenateOperators</a></div><div class="ttdeci">LocalSearchOperator * RandomConcatenateOperators(const std::vector&lt; LocalSearchOperator * &gt; &amp;ops)</div><div class="ttdoc">Randomized version of local search concatenator; calls a random operator at each call to MakeNextNeig...</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ab6905ce95ac75e188d838c0a230888f2"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ab6905ce95ac75e188d838c0a230888f2">operations_research::Solver::demon_runs</a></div><div class="ttdeci">int64 demon_runs(DemonPriority p) const</div><div class="ttdoc">The number of demons executed during search for a given priority.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00978">constraint_solver.h:978</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntVarElement_html_a1295db3bf37f2183eb7a466f6b1207fa"><div class="ttname"><a href="classoperations__research_1_1IntVarElement.html#a1295db3bf37f2183eb7a466f6b1207fa">operations_research::IntVarElement::Min</a></div><div class="ttdeci">int64 Min() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04630">constraint_solver.h:4630</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a9a9e58a1e346c571e52c2d491f8b3748"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a9a9e58a1e346c571e52c2d491f8b3748">operations_research::Solver::MakeIsDifferentCstVar</a></div><div class="ttdeci">IntVar * MakeIsDifferentCstVar(IntExpr *const var, int64 value)</div><div class="ttdoc">status var of (var != value)</div></div>
<div class="ttc" id="classoperations__research_1_1SearchMonitor_html_a1bd91b270f903d25e6eb7c252d5cf001"><div class="ttname"><a href="classoperations__research_1_1SearchMonitor.html#a1bd91b270f903d25e6eb7c252d5cf001">operations_research::SearchMonitor::AcceptUncheckedNeighbor</a></div><div class="ttdeci">virtual void AcceptUncheckedNeighbor()</div><div class="ttdoc">After accepting an unchecked neighbor during local search.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a68ccd69d2cb81ad9b176a007275fde0b"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a68ccd69d2cb81ad9b176a007275fde0b">operations_research::Solver::FindOneNeighbor</a></div><div class="ttdeci">friend class FindOneNeighbor</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02917">constraint_solver.h:2917</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a687be895b4cfd73ad06992a8e6115eef"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a687be895b4cfd73ad06992a8e6115eef">operations_research::Solver::MakeNotMemberCt</a></div><div class="ttdeci">Constraint * MakeNotMemberCt(IntExpr *const expr, const std::vector&lt; int64 &gt; &amp;values)</div><div class="ttdoc">expr not in set.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a915de6b5bab0757bd033699387a486e2"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a915de6b5bab0757bd033699387a486e2">operations_research::ModelVisitor::kModulo</a></div><div class="ttdeci">static const char kModulo[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03369">constraint_solver.h:3369</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_aae6f147ee2f7bf03fa728868ae2d670d"><div class="ttname"><a href="classoperations__research_1_1Solver.html#aae6f147ee2f7bf03fa728868ae2d670d">operations_research::Solver::MakeIsEqualCt</a></div><div class="ttdeci">Constraint * MakeIsEqualCt(IntExpr *const v1, IntExpr *v2, IntVar *const b)</div><div class="ttdoc">b == (v1 == v2)</div></div>
<div class="ttc" id="structoperations__research_1_1DefaultPhaseParameters_html_a28c6636498f47abc60feabd264ebb0bf"><div class="ttname"><a href="structoperations__research_1_1DefaultPhaseParameters.html#a28c6636498f47abc60feabd264ebb0bf">operations_research::DefaultPhaseParameters::use_last_conflict</a></div><div class="ttdeci">bool use_last_conflict</div><div class="ttdoc">Should we use last conflict method. The default is false.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00207">constraint_solver.h:207</a></div></div>
<div class="ttc" id="classoperations__research_1_1CastConstraint_html"><div class="ttname"><a href="classoperations__research_1_1CastConstraint.html">operations_research::CastConstraint</a></div><div class="ttdoc">Cast constraints are special channeling constraints designed to keep a variable in sync with an expre...</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03601">constraint_solver.h:3601</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_ad0c35762f9cd7d79b51e6d9ca568f6ec"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#ad0c35762f9cd7d79b51e6d9ca568f6ec">operations_research::ModelVisitor::kMaxArgument</a></div><div class="ttdeci">static const char kMaxArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03445">constraint_solver.h:3445</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a91ddc514b7b8418b66575323f56ac418"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a91ddc514b7b8418b66575323f56ac418">operations_research::Solver::SetSearchContext</a></div><div class="ttdeci">void SetSearchContext(Search *search, const std::string &amp;search_context)</div></div>
<div class="ttc" id="classoperations__research_1_1BaseObject_html_a9bd95fcee9e5856c6097b5dfae0b7076"><div class="ttname"><a href="classoperations__research_1_1BaseObject.html#a9bd95fcee9e5856c6097b5dfae0b7076">operations_research::BaseObject::~BaseObject</a></div><div class="ttdeci">virtual ~BaseObject()</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03137">constraint_solver.h:3137</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_abb5ced4ea25c0dfaa7f5a5a8258423da"><div class="ttname"><a href="classoperations__research_1_1Solver.html#abb5ced4ea25c0dfaa7f5a5a8258423da">operations_research::Solver::MakeSumEquality</a></div><div class="ttdeci">Constraint * MakeSumEquality(const std::vector&lt; IntVar * &gt; &amp;vars, int64 cst)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_adbf9d5aec9bc8016844cdb07a9f56bfa"><div class="ttname"><a href="classoperations__research_1_1Solver.html#adbf9d5aec9bc8016844cdb07a9f56bfa">operations_research::Solver::MakeNestedOptimize</a></div><div class="ttdeci">DecisionBuilder * MakeNestedOptimize(DecisionBuilder *const db, Assignment *const solution, bool maximize, int64 step)</div><div class="ttdoc">NestedOptimize will collapse a search tree described by a decision builder 'db' and a set of monitors...</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_afeade782088a114d35356067be755a3d"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#afeade782088a114d35356067be755a3d">operations_research::ModelVisitor::kMapDomain</a></div><div class="ttdeci">static const char kMapDomain[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03363">constraint_solver.h:3363</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_a66b960e2914e177ee0be5c4c9b62f933"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#a66b960e2914e177ee0be5c4c9b62f933">operations_research::IntervalVarElement::WriteToProto</a></div><div class="ttdeci">void WriteToProto(IntervalVarAssignment *interval_var_assignment_proto) const</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a528ef45e21c77f33dc2670278f7a4615"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a528ef45e21c77f33dc2670278f7a4615">operations_research::ModelVisitor::kNoCycle</a></div><div class="ttdeci">static const char kNoCycle[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03370">constraint_solver.h:3370</a></div></div>
<div class="ttc" id="classoperations__research_1_1DecisionVisitor_html_af93d0ecd1a2cf63364ce9f8e554979cb"><div class="ttname"><a href="classoperations__research_1_1DecisionVisitor.html#af93d0ecd1a2cf63364ce9f8e554979cb">operations_research::DecisionVisitor::VisitUnknownDecision</a></div><div class="ttdeci">virtual void VisitUnknownDecision()</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a561299bd3b4d1875e1a627084c4f3dc2"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a561299bd3b4d1875e1a627084c4f3dc2">operations_research::Solver::MakeFixedDurationEndSyncedOnEndIntervalVar</a></div><div class="ttdeci">IntervalVar * MakeFixedDurationEndSyncedOnEndIntervalVar(IntervalVar *const interval_var, int64 duration, int64 offset)</div><div class="ttdoc">Creates an interval var with a fixed duration whose end is synchronized with the end of another inter...</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a94a24557456395e59c924a095f2096aa"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a94a24557456395e59c924a095f2096aa">operations_research::Solver::SequenceStrategy</a></div><div class="ttdeci">SequenceStrategy</div><div class="ttdoc">Used for scheduling. Not yet implemented.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00395">constraint_solver.h:395</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a031d97f0c0940a75d32debe1e7c16c43"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a031d97f0c0940a75d32debe1e7c16c43">operations_research::IntervalVar::WhenAnything</a></div><div class="ttdeci">void WhenAnything(Demon *const d)</div><div class="ttdoc">Attaches a demon awakened when anything about this interval changes.</div></div>
<div class="ttc" id="namespaceoperations__research_html_a009f247167f32509baf749083e4bc984"><div class="ttname"><a href="namespaceoperations__research.html#a009f247167f32509baf749083e4bc984">operations_research::Zero</a></div><div class="ttdeci">int64 Zero()</div><div class="ttdoc">-------— Misc -------—</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03118">constraint_solver.h:3118</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a83e14be9c6bba9abdd1949c25c32a60dac88ebc55bfbf4a9ad97391ef97b4d6b9"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a83e14be9c6bba9abdd1949c25c32a60dac88ebc55bfbf4a9ad97391ef97b4d6b9">operations_research::Solver::ENDS_AFTER</a></div><div class="ttdoc">t ends after d, i.e. End(t) &gt;= d.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00647">constraint_solver.h:647</a></div></div>
<div class="ttc" id="classoperations__research_1_1OptimizeVar_html_aed1aff1da93b7d6ef67c9433a56e311a"><div class="ttname"><a href="classoperations__research_1_1OptimizeVar.html#aed1aff1da93b7d6ef67c9433a56e311a">operations_research::OptimizeVar::AcceptSolution</a></div><div class="ttdeci">bool AcceptSolution() override</div><div class="ttdoc">This method is called when a solution is found.</div></div>
<div class="ttc" id="classoperations__research_1_1SearchMonitor_html_a4e4e007e3de77736cd9d7a3b9df2f5f9"><div class="ttname"><a href="classoperations__research_1_1SearchMonitor.html#a4e4e007e3de77736cd9d7a3b9df2f5f9">operations_research::SearchMonitor::ProgressPercent</a></div><div class="ttdeci">virtual int ProgressPercent()</div><div class="ttdoc">Returns a percentage representing the propress of the search before reaching limits.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03696">constraint_solver.h:3696</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a92a4c3f41d240eae8b123abb2b0360b2"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a92a4c3f41d240eae8b123abb2b0360b2">operations_research::ModelVisitor::kRelaxedMaxOperation</a></div><div class="ttdeci">static const char kRelaxedMaxOperation[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03480">constraint_solver.h:3480</a></div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html_ae7c46b011db8d3382e6b370bbdeaca4f"><div class="ttname"><a href="classoperations__research_1_1Pack.html#ae7c46b011db8d3382e6b370bbdeaca4f">operations_research::Pack::AssignVar</a></div><div class="ttdeci">IntVar * AssignVar(int var_index, int bin_index) const</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a9d0e42e2529aa2689695532c52b3c588"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a9d0e42e2529aa2689695532c52b3c588">operations_research::ModelVisitor::kNullIntersect</a></div><div class="ttdeci">static const char kNullIntersect[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03374">constraint_solver.h:3374</a></div></div>
<div class="ttc" id="classoperations__research_1_1NumericalRev_html_a349aea96aef9e96ecdb1c001e931f75b"><div class="ttname"><a href="classoperations__research_1_1NumericalRev.html#a349aea96aef9e96ecdb1c001e931f75b">operations_research::NumericalRev::NumericalRev</a></div><div class="ttdeci">NumericalRev(const T &amp;val)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03741">constraint_solver.h:3741</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_abf9e5fc7b45242477e71e8e69e13129a"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#abf9e5fc7b45242477e71e8e69e13129a">operations_research::ModelVisitor::kSemiContinuous</a></div><div class="ttdeci">static const char kSemiContinuous[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03386">constraint_solver.h:3386</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a0047bb3bb4cdff41ece9cfaad2ad108b"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a0047bb3bb4cdff41ece9cfaad2ad108b">operations_research::Solver::MakeMin</a></div><div class="ttdeci">IntExpr * MakeMin(const std::vector&lt; IntVar * &gt; &amp;vars)</div><div class="ttdoc">std::min(vars)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a9816b2778045704456abd21374c9174d"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a9816b2778045704456abd21374c9174d">operations_research::Solver::MakeAssignVariableValueOrDoNothing</a></div><div class="ttdeci">Decision * MakeAssignVariableValueOrDoNothing(IntVar *const var, int64 value)</div></div>
<div class="ttc" id="classoperations__research_1_1IntVarElement_html_a8d25f09aa43ef6ea5fe8dd622f6552b2"><div class="ttname"><a href="classoperations__research_1_1IntVarElement.html#a8d25f09aa43ef6ea5fe8dd622f6552b2">operations_research::IntVarElement::SetRange</a></div><div class="ttdeci">void SetRange(int64 l, int64 u)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04640">constraint_solver.h:4640</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a5f87c832967334179f0f9c8d05380847a9bbb245ecd3725f5a67fd4c8466ee678"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a5f87c832967334179f0f9c8d05380847a9bbb245ecd3725f5a67fd4c8466ee678">operations_research::Solver::SWITCH_BRANCHES</a></div><div class="ttdoc">Applies right branch first.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00701">constraint_solver.h:701</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_af0aa8d715cd8daf2fdc0dc6ebd1f5abb"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#af0aa8d715cd8daf2fdc0dc6ebd1f5abb">operations_research::Assignment::Save</a></div><div class="ttdeci">bool Save(const std::string &amp;filename) const</div><div class="ttdoc">Saves the assignment to a file.</div></div>
<div class="ttc" id="classoperations__research_1_1IntVarIterator_html_ac5e717b4d80a83e797fd6f996f040f8c"><div class="ttname"><a href="classoperations__research_1_1IntVarIterator.html#ac5e717b4d80a83e797fd6f996f040f8c">operations_research::IntVarIterator::Init</a></div><div class="ttdeci">virtual void Init()=0</div><div class="ttdoc">This method must be called before each loop.</div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html_ae47681f11a043b56dab58e533f017cef"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html#ae47681f11a043b56dab58e533f017cef">operations_research::SolutionCollector::PerformedValue</a></div><div class="ttdeci">int64 PerformedValue(int n, IntervalVar *const var) const</div><div class="ttdoc">This is a shortcut to get the PerformedValue of 'var' in the nth solution.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a698bcc5222b25fdb9b3351b14fa2c94b"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a698bcc5222b25fdb9b3351b14fa2c94b">operations_research::ModelVisitor::kPositionXArgument</a></div><div class="ttdeci">static const char kPositionXArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03452">constraint_solver.h:3452</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a4b0972c731faf884eba5acab99ebb2b4"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a4b0972c731faf884eba5acab99ebb2b4">operations_research::Solver::DemonPriority</a></div><div class="ttdeci">DemonPriority</div><div class="ttdoc">This enum represents the three possible priorities for a demon in the Solver queue.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00598">constraint_solver.h:598</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8a00b64c16b54cef4e0467730e171befadd112fa680436644573a4d6e6e955906"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8a00b64c16b54cef4e0467730e171befadd112fa680436644573a4d6e6e955906">operations_research::Solver::NOT_SET</a></div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00719">constraint_solver.h:719</a></div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVarElement_html_a60768b9a65cc2b1f9b22dded7572556d"><div class="ttname"><a href="classoperations__research_1_1SequenceVarElement.html#a60768b9a65cc2b1f9b22dded7572556d">operations_research::SequenceVarElement::SetUnperformed</a></div><div class="ttdeci">void SetUnperformed(const std::vector&lt; int &gt; &amp;unperformed)</div></div>
<div class="ttc" id="classoperations__research_1_1SearchMonitor_html_adc462b9f376d796296bbee05fd44a6ed"><div class="ttname"><a href="classoperations__research_1_1SearchMonitor.html#adc462b9f376d796296bbee05fd44a6ed">operations_research::SearchMonitor::EndNextDecision</a></div><div class="ttdeci">virtual void EndNextDecision(DecisionBuilder *const b, Decision *const d)</div><div class="ttdoc">After calling DecisionBuilder::Next, along with the returned decision.</div></div>
<div class="ttc" id="structoperations__research_1_1SolutionCollector_1_1SolutionData_html"><div class="ttname"><a href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html">operations_research::SolutionCollector::SolutionData</a></div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04149">constraint_solver.h:4149</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a8341278b341fb7888adf8cdde439dfa2"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a8341278b341fb7888adf8cdde439dfa2">operations_research::Assignment::NumIntervalVars</a></div><div class="ttdeci">int NumIntervalVars() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l05026">constraint_solver.h:5026</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_ac074bf0a3f7086df10faa9bca6a42004"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#ac074bf0a3f7086df10faa9bca6a42004">operations_research::IntervalVar::SetDurationMin</a></div><div class="ttdeci">virtual void SetDurationMin(int64 m)=0</div></div>
<div class="ttc" id="classoperations__research_1_1BaseObject_html_abcf5669a8a0612adb1665e276efb416f"><div class="ttname"><a href="classoperations__research_1_1BaseObject.html#abcf5669a8a0612adb1665e276efb416f">operations_research::BaseObject::BaseObject</a></div><div class="ttdeci">BaseObject()</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03136">constraint_solver.h:3136</a></div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html_a44ccf194f93a5b1fb2dd15f821d070a1"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html#a44ccf194f93a5b1fb2dd15f821d070a1">operations_research::SolutionCollector::branches</a></div><div class="ttdeci">int64 branches(int n) const</div><div class="ttdoc">Returns the number of branches when the nth solution was found.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a5b5712802e63dcd3ee5abfd37e0f2a95a30b34e2664f9b1e2fb0d1347d7a87674"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a5b5712802e63dcd3ee5abfd37e0f2a95a30b34e2664f9b1e2fb0d1347d7a87674">operations_research::Solver::PROBLEM_INFEASIBLE</a></div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00715">constraint_solver.h:715</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a5b5712802e63dcd3ee5abfd37e0f2a95ac05654b6a7479316478744b3ce4a50df"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a5b5712802e63dcd3ee5abfd37e0f2a95ac05654b6a7479316478744b3ce4a50df">operations_research::Solver::OUTSIDE_SEARCH</a></div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00710">constraint_solver.h:710</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntExpr_html_aa573e0d34def6539f939b4b81d506164"><div class="ttname"><a href="classoperations__research_1_1IntExpr.html#aa573e0d34def6539f939b4b81d506164">operations_research::IntExpr::Accept</a></div><div class="ttdeci">virtual void Accept(ModelVisitor *const visitor) const</div><div class="ttdoc">Accepts the given visitor.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_afdd94e94c4d4b8950d20f1ebf7fd238d"><div class="ttname"><a href="classoperations__research_1_1Solver.html#afdd94e94c4d4b8950d20f1ebf7fd238d">operations_research::Solver::MakeIsDifferentCt</a></div><div class="ttdeci">Constraint * MakeIsDifferentCt(IntExpr *const v1, IntExpr *const v2, IntVar *const b)</div><div class="ttdoc">b == (v1 != v2)</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_af6e5490427e0fba93541ce64812af7ff"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#af6e5490427e0fba93541ce64812af7ff">operations_research::Assignment::Activate</a></div><div class="ttdeci">void Activate(const IntVar *const var)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ab6302978f1de57bdeafa0ffee05c92c9abaaae5f195366a4e2aeae19bb2f0ae76"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9abaaae5f195366a4e2aeae19bb2f0ae76">operations_research::Solver::ENDS_AT_END</a></div><div class="ttdoc">t1 ends at t2 end, i.e. End(t1) == End(t2) + delay.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00620">constraint_solver.h:620</a></div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVar_html_a245d9693519203fc1a9d406684829812"><div class="ttname"><a href="classoperations__research_1_1SequenceVar.html#a245d9693519203fc1a9d406684829812">operations_research::SequenceVar::RankNotFirst</a></div><div class="ttdeci">void RankNotFirst(int index)</div><div class="ttdoc">Indicates that the index_th interval var will not be ranked first of all currently unranked interval ...</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_add5cfd638da3fe013e6d86aef1426009"><div class="ttname"><a href="classoperations__research_1_1Solver.html#add5cfd638da3fe013e6d86aef1426009">operations_research::Solver::Try</a></div><div class="ttdeci">DecisionBuilder * Try(DecisionBuilder *const db1, DecisionBuilder *const db2)</div><div class="ttdoc">Creates a decision builder which will create a search tree where each decision builder is called from...</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a18ff54edbaad4a3da9eb7b1112194d1a"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a18ff54edbaad4a3da9eb7b1112194d1a">operations_research::Solver::MakeMaxEquality</a></div><div class="ttdeci">Constraint * MakeMaxEquality(const std::vector&lt; IntVar * &gt; &amp;vars, IntVar *const max_var)</div></div>
<div class="ttc" id="classoperations__research_1_1PropagationMonitor_html"><div class="ttname"><a href="classoperations__research_1_1PropagationMonitor.html">operations_research::PropagationMonitor</a></div><div class="ttdoc">-------— PropagationMonitor -------—</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solveri_8h_source.html#l01637">constraint_solveri.h:1637</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_aea82a4efd98d6523154ab7c8fa9125d3"><div class="ttname"><a href="classoperations__research_1_1Solver.html#aea82a4efd98d6523154ab7c8fa9125d3">operations_research::Solver::IsBooleanVar</a></div><div class="ttdeci">bool IsBooleanVar(IntExpr *const expr, IntVar **inner_var, bool *is_negated) const</div><div class="ttdoc">Returns true if expr represents either boolean_var or 1 - boolean_var.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a17a56adc8ee57642c3f00a1778319192"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a17a56adc8ee57642c3f00a1778319192">operations_research::Solver::DemonProfiler</a></div><div class="ttdeci">friend class DemonProfiler</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02916">constraint_solver.h:2916</a></div></div>
<div class="ttc" id="structoperations__research_1_1DefaultPhaseParameters_html_a6938c08fc955872a3b8da845c8ad4e16a9b07a23261ca51a42ecd8d28387495da"><div class="ttname"><a href="structoperations__research_1_1DefaultPhaseParameters.html#a6938c08fc955872a3b8da845c8ad4e16a9b07a23261ca51a42ecd8d28387495da">operations_research::DefaultPhaseParameters::SELECT_MAX_IMPACT</a></div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00166">constraint_solver.h:166</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html"><div class="ttname"><a href="classoperations__research_1_1Solver.html">operations_research::Solver</a></div><div class="ttdoc">Solver Class.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00238">constraint_solver.h:238</a></div></div>
<div class="ttc" id="classoperations__research_1_1OptimizeVar_html_aecf2e4a608fd1836c0ebac6d7ee0d0ce"><div class="ttname"><a href="classoperations__research_1_1OptimizeVar.html#aecf2e4a608fd1836c0ebac6d7ee0d0ce">operations_research::OptimizeVar::best</a></div><div class="ttdeci">int64 best() const</div><div class="ttdoc">Returns the best value found during search.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04194">constraint_solver.h:4194</a></div></div>
<div class="ttc" id="classoperations__research_1_1LocalSearchMonitor_html"><div class="ttname"><a href="classoperations__research_1_1LocalSearchMonitor.html">operations_research::LocalSearchMonitor</a></div><div class="ttdoc">-------— LocalSearchMonitor -------—</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solveri_8h_source.html#l01703">constraint_solveri.h:1703</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a7133f1f0ea6afd334b2091e3d5a668d0"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a7133f1f0ea6afd334b2091e3d5a668d0">operations_research::Solver::MakeConvexPiecewiseExpr</a></div><div class="ttdeci">IntExpr * MakeConvexPiecewiseExpr(IntExpr *expr, int64 early_cost, int64 early_date, int64 late_date, int64 late_cost)</div><div class="ttdoc">Convex piecewise function.</div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVar_html_a5cd7df5031e4b9e89532c03f542078aa"><div class="ttname"><a href="classoperations__research_1_1SequenceVar.html#a5cd7df5031e4b9e89532c03f542078aa">operations_research::SequenceVar::SequenceVar</a></div><div class="ttdeci">SequenceVar(Solver *const s, const std::vector&lt; IntervalVar * &gt; &amp;intervals, const std::vector&lt; IntVar * &gt; &amp;nexts, const std::string &amp;name)</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_af05577d9a8dceaf2f97e3012ce426225"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#af05577d9a8dceaf2f97e3012ce426225">operations_research::ModelVisitor::kIndex2Argument</a></div><div class="ttdeci">static const char kIndex2Argument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03437">constraint_solver.h:3437</a></div></div>
<div class="ttc" id="classoperations__research_1_1OptimizeVar_html_ab50cd48d312f0e20afcd77b1bf1e94cb"><div class="ttname"><a href="classoperations__research_1_1OptimizeVar.html#ab50cd48d312f0e20afcd77b1bf1e94cb">operations_research::OptimizeVar::AtSolution</a></div><div class="ttdeci">bool AtSolution() override</div><div class="ttdoc">This method is called when a valid solution is found.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8e9cbe2323b10c6b49da625f5bae14c0ac146aa5e02ea92fc5666c258910c049e"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8e9cbe2323b10c6b49da625f5bae14c0ac146aa5e02ea92fc5666c258910c049e">operations_research::Solver::GE</a></div><div class="ttdoc">Move is accepted when the current objective value &gt;= objective.Min.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00587">constraint_solver.h:587</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a16cf34d9d8c3f46d7d1414b8c0e3b0c8"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a16cf34d9d8c3f46d7d1414b8c0e3b0c8">operations_research::Solver::MakeDelayedPathCumul</a></div><div class="ttdeci">Constraint * MakeDelayedPathCumul(const std::vector&lt; IntVar * &gt; &amp;nexts, const std::vector&lt; IntVar * &gt; &amp;active, const std::vector&lt; IntVar * &gt; &amp;cumuls, const std::vector&lt; IntVar * &gt; &amp;transits)</div><div class="ttdoc">Delayed version of the same constraint: propagation on the nexts variables is delayed until all const...</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a7e7c95e3ec16dc6bcb54997bde754620"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a7e7c95e3ec16dc6bcb54997bde754620">operations_research::IntervalVar::WhenStartRange</a></div><div class="ttdeci">void WhenStartRange(Solver::Closure closure)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04365">constraint_solver.h:4365</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a598796842a46e4c0e2a6d6f55ad7f999"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a598796842a46e4c0e2a6d6f55ad7f999">operations_research::ModelVisitor::kLessOrEqual</a></div><div class="ttdeci">static const char kLessOrEqual[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03360">constraint_solver.h:3360</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a91cc6755dcf8a72ebdccea585239b223"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a91cc6755dcf8a72ebdccea585239b223">operations_research::Solver::MakeCumulative</a></div><div class="ttdeci">Constraint * MakeCumulative(const std::vector&lt; IntervalVar * &gt; &amp;intervals, const std::vector&lt; int64 &gt; &amp;demands, int64 capacity, const std::string &amp;name)</div><div class="ttdoc">This constraint forces that, for any integer t, the sum of the demands corresponding to an interval c...</div></div>
<div class="ttc" id="classoperations__research_1_1SearchLimit_html_aabfdc25c6657291757a2230513d51162"><div class="ttname"><a href="classoperations__research_1_1SearchLimit.html#aabfdc25c6657291757a2230513d51162">operations_research::SearchLimit::Init</a></div><div class="ttdeci">virtual void Init()=0</div><div class="ttdoc">This method is called when the search limit is initialized.</div></div>
<div class="ttc" id="namespaceoperations__research_html_aa96bb5a28dd9c1ccc864b1587e8e1a98"><div class="ttname"><a href="namespaceoperations__research.html#aa96bb5a28dd9c1ccc864b1587e8e1a98">operations_research::One</a></div><div class="ttdeci">int64 One()</div><div class="ttdoc">This method returns 1.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03120">constraint_solver.h:3120</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_ad19c386bb59eb247ae45f5a55c148c98"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#ad19c386bb59eb247ae45f5a55c148c98">operations_research::ModelVisitor::VisitIntegerVariable</a></div><div class="ttdeci">virtual void VisitIntegerVariable(const IntVar *const variable, IntExpr *const delegate)</div></div>
<div class="ttc" id="classoperations__research_1_1DecisionVisitor_html_a7003dd5f4ff2cf139801866b35d02960"><div class="ttname"><a href="classoperations__research_1_1DecisionVisitor.html#a7003dd5f4ff2cf139801866b35d02960">operations_research::DecisionVisitor::VisitScheduleOrExpedite</a></div><div class="ttdeci">virtual void VisitScheduleOrExpedite(IntervalVar *const var, int64 est)</div></div>
<div class="ttc" id="classoperations__research_1_1AssignmentContainer_html"><div class="ttname"><a href="classoperations__research_1_1AssignmentContainer.html">operations_research::AssignmentContainer</a></div><div class="ttdoc">--— Assignment element container --—</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04824">constraint_solver.h:4824</a></div></div>
<div class="ttc" id="classoperations__research_1_1SearchLimit_html_a3ce36720ef2cd8490199ac815d07a1d1"><div class="ttname"><a href="classoperations__research_1_1SearchLimit.html#a3ce36720ef2cd8490199ac815d07a1d1">operations_research::SearchLimit::RefuteDecision</a></div><div class="ttdeci">void RefuteDecision(Decision *const d) override</div><div class="ttdoc">Before refuting the decision.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_ae649b9555f2b5c6fdad39d5b3adbf1a7"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#ae649b9555f2b5c6fdad39d5b3adbf1a7">operations_research::ModelVisitor::kSizeXArgument</a></div><div class="ttdeci">static const char kSizeXArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03460">constraint_solver.h:3460</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a507e861514fe3fdc9313406ba25b7443"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a507e861514fe3fdc9313406ba25b7443">operations_research::Assignment::Objective</a></div><div class="ttdeci">IntVar * Objective() const</div></div>
<div class="ttc" id="structoperations__research_1_1SolutionCollector_1_1SolutionData_html_ad72f24766540ebd09df0a41869945bf0"><div class="ttname"><a href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html#ad72f24766540ebd09df0a41869945bf0">operations_research::SolutionCollector::SolutionData::branches</a></div><div class="ttdeci">int64 branches</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04152">constraint_solver.h:4152</a></div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVar_html"><div class="ttname"><a href="classoperations__research_1_1SequenceVar.html">operations_research::SequenceVar</a></div><div class="ttdoc">--— SequenceVar --—</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04499">constraint_solver.h:4499</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a452f6de4ae9e08677c8303dfd7c3292f"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a452f6de4ae9e08677c8303dfd7c3292f">operations_research::Solver::MakeIsLessOrEqualCstCt</a></div><div class="ttdeci">Constraint * MakeIsLessOrEqualCstCt(IntExpr *const var, int64 value, IntVar *const boolvar)</div><div class="ttdoc">boolvar == (var &lt;= value)</div></div>
<div class="ttc" id="classoperations__research_1_1OptimizeVar_html"><div class="ttname"><a href="classoperations__research_1_1OptimizeVar.html">operations_research::OptimizeVar</a></div><div class="ttdoc">-------— Objective Management -------—</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04188">constraint_solver.h:4188</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_ac14b8b5751c3b224067530d0a82ed56f"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#ac14b8b5751c3b224067530d0a82ed56f">operations_research::IntervalVar::SafeStartExpr</a></div><div class="ttdeci">virtual IntExpr * SafeStartExpr(int64 unperformed_value)=0</div><div class="ttdoc">These methods create expressions encapsulating the start, end and duration of the interval var.</div></div>
<div class="ttc" id="classoperations__research_1_1SearchMonitor_html_ab138fa7a0d0f11e57507d9d903729558"><div class="ttname"><a href="classoperations__research_1_1SearchMonitor.html#ab138fa7a0d0f11e57507d9d903729558">operations_research::SearchMonitor::AfterDecision</a></div><div class="ttdeci">virtual void AfterDecision(Decision *const d, bool apply)</div><div class="ttdoc">Just after refuting or applying the decision, apply is true after Apply.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a06878b72d0eb67da9c177f29468a721c"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a06878b72d0eb67da9c177f29468a721c">operations_research::Solver::CurrentlyInSolve</a></div><div class="ttdeci">bool CurrentlyInSolve() const</div><div class="ttdoc">Returns true whether the current search has been created using a Solve() call instead of a NewSearch ...</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a290a9b9301de6b92f2e0a1f189cf1cd7"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a290a9b9301de6b92f2e0a1f189cf1cd7">operations_research::ModelVisitor::kRangeArgument</a></div><div class="ttdeci">static const char kRangeArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03454">constraint_solver.h:3454</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a51f15897d3435634cc78f1a18a67530f"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a51f15897d3435634cc78f1a18a67530f">operations_research::Solver::MakeApplyBranchSelector</a></div><div class="ttdeci">DecisionBuilder * MakeApplyBranchSelector(BranchSelector bs)</div><div class="ttdoc">Creates a decision builder that will set the branch selector.</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_adae0600f8be577e57febc34f92d59203"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#adae0600f8be577e57febc34f92d59203">operations_research::Assignment::AddObjective</a></div><div class="ttdeci">void AddObjective(IntVar *const v)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ab5f100b79eb45ff9d1e65d6743c3724c"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ab5f100b79eb45ff9d1e65d6743c3724c">operations_research::Solver::SearchContext</a></div><div class="ttdeci">std::string SearchContext() const</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_aad9eb1217dc7ff8f54cf10a3391410b6"><div class="ttname"><a href="classoperations__research_1_1Solver.html#aad9eb1217dc7ff8f54cf10a3391410b6">operations_research::Solver::MakeNullIntersect</a></div><div class="ttdeci">Constraint * MakeNullIntersect(const std::vector&lt; IntVar * &gt; &amp;first_vars, const std::vector&lt; IntVar * &gt; &amp;second_vars)</div><div class="ttdoc">Creates a constraint that states that all variables in the first vector are different from all variab...</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a0dd7452d63d18c1e4591ce9468e38026"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a0dd7452d63d18c1e4591ce9468e38026">operations_research::Solver::MakeSumGreaterOrEqual</a></div><div class="ttdeci">Constraint * MakeSumGreaterOrEqual(const std::vector&lt; IntVar * &gt; &amp;vars, int64 cst)</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_abf92c871da428f03cd4ad14853860721"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#abf92c871da428f03cd4ad14853860721">operations_research::Assignment::DurationMax</a></div><div class="ttdeci">int64 DurationMax(const IntervalVar *const var) const</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_ad98cd25d71c9c8c2e98aab3866372a85"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#ad98cd25d71c9c8c2e98aab3866372a85">operations_research::Assignment::SetValue</a></div><div class="ttdeci">void SetValue(const IntVar *const var, int64 value)</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a8abd1a6ee2a78ee78c5ee55faaa3d4c6"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a8abd1a6ee2a78ee78c5ee55faaa3d4c6">operations_research::ModelVisitor::kIsMember</a></div><div class="ttdeci">static const char kIsMember[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03358">constraint_solver.h:3358</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_ac3cbe166fe2619e72c729e18ee245eac"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#ac3cbe166fe2619e72c729e18ee245eac">operations_research::Assignment::PerformedValue</a></div><div class="ttdeci">int64 PerformedValue(const IntervalVar *const var) const</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a3d8a500d9eb0df0d74daffa348a4ffef"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a3d8a500d9eb0df0d74daffa348a4ffef">operations_research::Solver::MemoryUsage</a></div><div class="ttdeci">static int64 MemoryUsage()</div><div class="ttdoc">Current memory usage in bytes.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ad2d2769a8cae1736dec41abe50d6a711"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ad2d2769a8cae1736dec41abe50d6a711">operations_research::Solver::MakeElementEquality</a></div><div class="ttdeci">Constraint * MakeElementEquality(const std::vector&lt; int64 &gt; &amp;vals, IntVar *const index, IntVar *const target)</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a4f8fbcca399411ad28b7d2130072ee77"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a4f8fbcca399411ad28b7d2130072ee77">operations_research::ModelVisitor::kMax</a></div><div class="ttdeci">static const char kMax[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03364">constraint_solver.h:3364</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a31c577d3e5dbbf7a90f5b1955660642c"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a31c577d3e5dbbf7a90f5b1955660642c">operations_research::Assignment::HasObjective</a></div><div class="ttdeci">bool HasObjective() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l05048">constraint_solver.h:5048</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_ae2c61aed5346bd04a91421c70861d918"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#ae2c61aed5346bd04a91421c70861d918">operations_research::Assignment::ClearObjective</a></div><div class="ttdeci">void ClearObjective()</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l05046">constraint_solver.h:5046</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a18656e1529d449a029580307f65978e8"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a18656e1529d449a029580307f65978e8">operations_research::Solver::MakeFirstSolutionCollector</a></div><div class="ttdeci">SolutionCollector * MakeFirstSolutionCollector()</div><div class="ttdoc">Collect the first solution of the search.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a7439b7f22691d89b1743cd176973904e"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a7439b7f22691d89b1743cd176973904e">operations_research::Solver::MakeVariableGreaterOrEqualValue</a></div><div class="ttdeci">Decision * MakeVariableGreaterOrEqualValue(IntVar *const var, int64 value)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ae4b9d3730dc01f9b766e69d411f190a6"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ae4b9d3730dc01f9b766e69d411f190a6">operations_research::Solver::MakeTransitionConstraint</a></div><div class="ttdeci">Constraint * MakeTransitionConstraint(const std::vector&lt; IntVar * &gt; &amp;vars, const IntTupleSet &amp;transition_table, int64 initial_state, const std::vector&lt; int64 &gt; &amp;final_states)</div><div class="ttdoc">This constraint create a finite automaton that will check the sequence of variables vars.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a26ba71cb46871a942d7da294eb72df85"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a26ba71cb46871a942d7da294eb72df85">operations_research::ModelVisitor::kPartialArgument</a></div><div class="ttdeci">static const char kPartialArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03451">constraint_solver.h:3451</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a57300a63dc9978b1a14a74e1698a8920"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a57300a63dc9978b1a14a74e1698a8920">operations_research::Solver::clear_fail_intercept</a></div><div class="ttdeci">void clear_fail_intercept()</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02850">constraint_solver.h:2850</a></div></div>
<div class="ttc" id="structoperations__research_1_1DefaultPhaseParameters_html_a57b6ace15b9d8666f76c6618d8addc1dab1a4c17b2c342104297c4d23db4c6936"><div class="ttname"><a href="structoperations__research_1_1DefaultPhaseParameters.html#a57b6ace15b9d8666f76c6618d8addc1dab1a4c17b2c342104297c4d23db4c6936">operations_research::DefaultPhaseParameters::NONE</a></div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00169">constraint_solver.h:169</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a651208f79a13e7e47feef0b4d95a8168"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a651208f79a13e7e47feef0b4d95a8168">operations_research::ModelVisitor::~ModelVisitor</a></div><div class="ttdeci">~ModelVisitor() override</div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVar_html_aad89b1d091262e23caf515cae51ba10c"><div class="ttname"><a href="classoperations__research_1_1SequenceVar.html#aad89b1d091262e23caf515cae51ba10c">operations_research::SequenceVar::ComputeStatistics</a></div><div class="ttdeci">void ComputeStatistics(int *const ranked, int *const not_ranked, int *const unperformed) const</div><div class="ttdoc">Compute statistics on the sequence.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a6c2937a3cb434bc01c01d454419fcb95"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a6c2937a3cb434bc01c01d454419fcb95">operations_research::Solver::MakeAbsEquality</a></div><div class="ttdeci">Constraint * MakeAbsEquality(IntVar *const var, IntVar *const abs_var)</div><div class="ttdoc">Creates the constraint abs(var) == abs_var.</div></div>
<div class="ttc" id="classoperations__research_1_1DecisionBuilder_html_aca201d99227a6116c62418d28761aa9b"><div class="ttname"><a href="classoperations__research_1_1DecisionBuilder.html#aca201d99227a6116c62418d28761aa9b">operations_research::DecisionBuilder::DebugString</a></div><div class="ttdeci">std::string DebugString() const override</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a3cd17736ebef01ece7f1c8acc970819b"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a3cd17736ebef01ece7f1c8acc970819b">operations_research::ModelVisitor::kTransition</a></div><div class="ttdeci">static const char kTransition[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03396">constraint_solver.h:3396</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a4e3a54c23e49210c0bd3e0f4d99d19c6"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a4e3a54c23e49210c0bd3e0f4d99d19c6">operations_research::ModelVisitor::kInversePermutation</a></div><div class="ttdeci">static const char kInversePermutation[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03350">constraint_solver.h:3350</a></div></div>
<div class="ttc" id="classoperations__research_1_1BaseIntExpr_html"><div class="ttname"><a href="classoperations__research_1_1BaseIntExpr.html">operations_research::BaseIntExpr</a></div><div class="ttdoc">This is the base class for all expressions that are not variables.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solveri_8h_source.html#l00109">constraint_solveri.h:109</a></div></div>
<div class="ttc" id="classoperations__research_1_1SearchMonitor_html_ae08ee7f1dc5f652ee9b55393e0cc3550"><div class="ttname"><a href="classoperations__research_1_1SearchMonitor.html#ae08ee7f1dc5f652ee9b55393e0cc3550">operations_research::SearchMonitor::BeginInitialPropagation</a></div><div class="ttdeci">virtual void BeginInitialPropagation()</div><div class="ttdoc">Before the initial propagation.</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a91dba370f181ba0f0ca98992aaeb59d6"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a91dba370f181ba0f0ca98992aaeb59d6">operations_research::Assignment::Value</a></div><div class="ttdeci">int64 Value(const IntVar *const var) const</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_ae3e8e37ef2baa38aa0759ce4c8c34924"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#ae3e8e37ef2baa38aa0759ce4c8c34924">operations_research::ModelVisitor::kValuesArgument</a></div><div class="ttdeci">static const char kValuesArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03473">constraint_solver.h:3473</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a71cef740cd200067eadf66d0a9276d69"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a71cef740cd200067eadf66d0a9276d69">operations_research::ModelVisitor::BeginVisitModel</a></div><div class="ttdeci">virtual void BeginVisitModel(const std::string &amp;solver_name)</div><div class="ttdoc">--— Virtual methods for visitors --—</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a1724ad5bbac74b4c99cfc18968debcba"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a1724ad5bbac74b4c99cfc18968debcba">operations_research::ModelVisitor::kPathCumul</a></div><div class="ttdeci">static const char kPathCumul[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03377">constraint_solver.h:3377</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_ad2a1dd4393008af0667d4101826f61b7"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#ad2a1dd4393008af0667d4101826f61b7">operations_research::IntervalVar::WhenDurationBound</a></div><div class="ttdeci">void WhenDurationBound(Solver::Closure closure)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04401">constraint_solver.h:4401</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntVarElement_html_a65504db21d71ae343eeb6371555a15fa"><div class="ttname"><a href="classoperations__research_1_1IntVarElement.html#a65504db21d71ae343eeb6371555a15fa">operations_research::IntVarElement::operator!=</a></div><div class="ttdeci">bool operator!=(const IntVarElement &amp;element) const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04651">constraint_solver.h:4651</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_afeff6d108db59ec38fad9a2fa144a6a8"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#afeff6d108db59ec38fad9a2fa144a6a8">operations_research::IntervalVar::OldEndMin</a></div><div class="ttdeci">virtual int64 OldEndMin() const =0</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a46f1c758e6201e2606cb3561c16c9e3d"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a46f1c758e6201e2606cb3561c16c9e3d">operations_research::IntervalVar::WhenEndRange</a></div><div class="ttdeci">virtual void WhenEndRange(Demon *const d)=0</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ae6da70a11e2bce1a688259a2e0ab6c9d"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ae6da70a11e2bce1a688259a2e0ab6c9d">operations_research::Solver::MakeProd</a></div><div class="ttdeci">IntExpr * MakeProd(IntExpr *const left, IntExpr *const right)</div><div class="ttdoc">left * right</div></div>
<div class="ttc" id="classoperations__research_1_1DecisionVisitor_html_a8faebc249d15a171102fd56fbe725216"><div class="ttname"><a href="classoperations__research_1_1DecisionVisitor.html#a8faebc249d15a171102fd56fbe725216">operations_research::DecisionVisitor::VisitSplitVariableDomain</a></div><div class="ttdeci">virtual void VisitSplitVariableDomain(IntVar *const var, int64 value, bool start_with_lower_half)</div></div>
<div class="ttc" id="classoperations__research_1_1DecisionVisitor_html_ac6e7b0464cdfb0caaac7661366295e65"><div class="ttname"><a href="classoperations__research_1_1DecisionVisitor.html#ac6e7b0464cdfb0caaac7661366295e65">operations_research::DecisionVisitor::VisitSetVariableValue</a></div><div class="ttdeci">virtual void VisitSetVariableValue(IntVar *const var, int64 value)</div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html_a5cc8f57cec90beaa0f351e63f1fb24d9"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html#a5cc8f57cec90beaa0f351e63f1fb24d9">operations_research::SolutionCollector::check_index</a></div><div class="ttdeci">void check_index(int n) const</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8bda7ed6e7e533cca4c44eba6efffc8b"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8b">operations_research::Solver::IntVarStrategy</a></div><div class="ttdeci">IntVarStrategy</div><div class="ttdoc">This enum describes the strategy used to select the next branching variable at each node during the s...</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00259">constraint_solver.h:259</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a117e51bab95cb5e42af11f97448c6d29"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a117e51bab95cb5e42af11f97448c6d29">operations_research::Assignment::SetMin</a></div><div class="ttdeci">void SetMin(const IntVar *const var, int64 m)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ae6dee2b402434520635e66e9d58a6215ab8ed3456ae15444c88849d08123e4c03"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ae6dee2b402434520635e66e9d58a6215ab8ed3456ae15444c88849d08123e4c03">operations_research::Solver::REVERSIBLE_ACTION</a></div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00706">constraint_solver.h:706</a></div></div>
<div class="ttc" id="classoperations__research_1_1OptimizeVar_html_a869a6765e20963972d8bc3dd11645f33"><div class="ttname"><a href="classoperations__research_1_1OptimizeVar.html#a869a6765e20963972d8bc3dd11645f33">operations_research::OptimizeVar::OptimizeVar</a></div><div class="ttdeci">OptimizeVar(Solver *const s, bool maximize, IntVar *const a, int64 step)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_af723a41e416b056f0ab17c114498e675"><div class="ttname"><a href="classoperations__research_1_1Solver.html#af723a41e416b056f0ab17c114498e675">operations_research::Solver::AddLocalSearchMonitor</a></div><div class="ttdeci">void AddLocalSearchMonitor(LocalSearchMonitor *monitor)</div><div class="ttdoc">Adds the local search monitor to the solver.</div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html_a917706361bb737a32be97259dae4c3f4"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html#a917706361bb737a32be97259dae4c3f4">operations_research::SolutionCollector::PushSolution</a></div><div class="ttdeci">void PushSolution()</div><div class="ttdoc">Push the current state as a new solution.</div></div>
<div class="ttc" id="classoperations__research_1_1Demon_html"><div class="ttname"><a href="classoperations__research_1_1Demon.html">operations_research::Demon</a></div><div class="ttdoc">A Demon is the base element of a propagation queue.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03282">constraint_solver.h:3282</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a5d25b8d216afddbe19a9713a0398e2d2"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a5d25b8d216afddbe19a9713a0398e2d2">operations_research::Solver::MakeSolutionsLimit</a></div><div class="ttdeci">RegularLimit * MakeSolutionsLimit(int64 solutions)</div><div class="ttdoc">Creates a search limit that constrains the number of solutions found during the search.</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a7e88fb7a9da71421cb4a67eb1f81a24e"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a7e88fb7a9da71421cb4a67eb1f81a24e">operations_research::Assignment::SetEndMin</a></div><div class="ttdeci">void SetEndMin(const IntervalVar *const var, int64 m)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a58f99f85567010c8726801175b285bfe"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a58f99f85567010c8726801175b285bfe">operations_research::Solver::MakeScalProd</a></div><div class="ttdeci">IntExpr * MakeScalProd(const std::vector&lt; IntVar * &gt; &amp;vars, const std::vector&lt; int64 &gt; &amp;coefs)</div><div class="ttdoc">scalar product</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a89a5139453ffd5edd1992c82bd95f675"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a89a5139453ffd5edd1992c82bd95f675">operations_research::Solver::solutions</a></div><div class="ttdeci">int64 solutions() const</div><div class="ttdoc">The number of solutions found since the start of the search.</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a157b6b9a936699c80f515accdf1bd422"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a157b6b9a936699c80f515accdf1bd422">operations_research::Assignment::SetEndMax</a></div><div class="ttdeci">void SetEndMax(const IntervalVar *const var, int64 m)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ac3c5b22fad8060ca1a66bd928182d8a4a721d9e61cd2a9b9c221793b9b8086b09"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a721d9e61cd2a9b9c221793b9b8086b09">operations_research::Solver::OROPT</a></div><div class="ttdoc">Relocate: OROPT and RELOCATE.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00445">constraint_solver.h:445</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a6e3a7428eea94e102ed7c7335f551b52"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a6e3a7428eea94e102ed7c7335f551b52">operations_research::Assignment::PerformedMax</a></div><div class="ttdeci">int64 PerformedMax(const IntervalVar *const var) const</div></div>
<div class="ttc" id="classoperations__research_1_1BaseObject_html_afb3b013c5063d71566d5273793c1d828"><div class="ttname"><a href="classoperations__research_1_1BaseObject.html#afb3b013c5063d71566d5273793c1d828">operations_research::BaseObject::DebugString</a></div><div class="ttdeci">virtual std::string DebugString() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03138">constraint_solver.h:3138</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a7cb2726d3860a2ca7d7097d58beaa58f"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a7cb2726d3860a2ca7d7097d58beaa58f">operations_research::Solver::MakeMemberCt</a></div><div class="ttdeci">Constraint * MakeMemberCt(IntExpr *const expr, const std::vector&lt; int64 &gt; &amp;values)</div><div class="ttdoc">--— Member and related constraints --—</div></div>
<div class="ttc" id="classoperations__research_1_1SolutionPool_html_a2e49e36a6c729756e59287fb8a3a3bcd"><div class="ttname"><a href="classoperations__research_1_1SolutionPool.html#a2e49e36a6c729756e59287fb8a3a3bcd">operations_research::SolutionPool::RegisterNewSolution</a></div><div class="ttdeci">virtual void RegisterNewSolution(Assignment *const assignment)=0</div><div class="ttdoc">This method is called when a new solution has been accepted by the local search.</div></div>
<div class="ttc" id="classoperations__research_1_1AssignmentContainer_html_a5750f450575a30e8a539ecf7b2e89f18"><div class="ttname"><a href="classoperations__research_1_1AssignmentContainer.html#a5750f450575a30e8a539ecf7b2e89f18">operations_research::AssignmentContainer::operator!=</a></div><div class="ttdeci">bool operator!=(const AssignmentContainer&lt; V, E &gt; &amp;container) const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04964">constraint_solver.h:4964</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntVarElement_html_a4205abd38e203b570f9ff6b49d351a06"><div class="ttname"><a href="classoperations__research_1_1IntVarElement.html#a4205abd38e203b570f9ff6b49d351a06">operations_research::IntVarElement::Bound</a></div><div class="ttdeci">bool Bound() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04639">constraint_solver.h:4639</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a75c6576ece0c576b350705166f6268ae"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a75c6576ece0c576b350705166f6268ae">operations_research::ModelVisitor::kVariableGroupExtension</a></div><div class="ttdeci">static const char kVariableGroupExtension[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03411">constraint_solver.h:3411</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_acf6f5c6a44c14d6197701c450457d5bf"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#acf6f5c6a44c14d6197701c450457d5bf">operations_research::IntervalVar::StartMin</a></div><div class="ttdeci">virtual int64 StartMin() const =0</div><div class="ttdoc">These methods query, set, and watch the start position of the interval var.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a1d424057a9bb254b68f4462b5ca2affe"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a1d424057a9bb254b68f4462b5ca2affe">operations_research::ModelVisitor::kIntervalUnaryRelation</a></div><div class="ttdeci">static const char kIntervalUnaryRelation[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03348">constraint_solver.h:3348</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_adbf679024d2686e8f5c750d13b8b58ad"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#adbf679024d2686e8f5c750d13b8b58ad">operations_research::ModelVisitor::kGlobalCardinality</a></div><div class="ttdeci">static const char kGlobalCardinality[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03342">constraint_solver.h:3342</a></div></div>
<div class="ttc" id="structoperations__research_1_1Solver_1_1IntegerCastInfo_html_a93bf7638f82b52965834ad94286161c8"><div class="ttname"><a href="structoperations__research_1_1Solver_1_1IntegerCastInfo.html#a93bf7638f82b52965834ad94286161c8">operations_research::Solver::IntegerCastInfo::expression</a></div><div class="ttdeci">IntExpr * expression</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00250">constraint_solver.h:250</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a7c7cdd60d6c9e3bc141dfc36595bdd7f"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a7c7cdd60d6c9e3bc141dfc36595bdd7f">operations_research::Solver::MakeFixedDurationEndSyncedOnStartIntervalVar</a></div><div class="ttdeci">IntervalVar * MakeFixedDurationEndSyncedOnStartIntervalVar(IntervalVar *const interval_var, int64 duration, int64 offset)</div><div class="ttdoc">Creates an interval var with a fixed duration whose end is synchronized with the start of another int...</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_af24d476da11ebf69fae9d4890447cc95"><div class="ttname"><a href="classoperations__research_1_1Solver.html#af24d476da11ebf69fae9d4890447cc95">operations_research::Solver::VariableValueComparator</a></div><div class="ttdeci">std::function&lt; bool(int64, int64, int64)&gt; VariableValueComparator</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00735">constraint_solver.h:735</a></div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html_a9f32dc165d6a4c1c09121ecd666a85b2"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html#a9f32dc165d6a4c1c09121ecd666a85b2">operations_research::SolutionCollector::Add</a></div><div class="ttdeci">void Add(IntVar *const var)</div><div class="ttdoc">Add API.</div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html_ac41b9dfede7920f5baadea90cddc72ea"><div class="ttname"><a href="classoperations__research_1_1Pack.html#ac41b9dfede7920f5baadea90cddc72ea">operations_research::Pack::~Pack</a></div><div class="ttdeci">~Pack() override</div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVar_html_a9af118a9bace50fc7a94224578757a32"><div class="ttname"><a href="classoperations__research_1_1SequenceVar.html#a9af118a9bace50fc7a94224578757a32">operations_research::SequenceVar::FillSequence</a></div><div class="ttdeci">void FillSequence(std::vector&lt; int &gt; *const rank_first, std::vector&lt; int &gt; *const rank_last, std::vector&lt; int &gt; *const unperformed) const</div><div class="ttdoc">Clears 'rank_first' and 'rank_last', and fills them with the intervals in the order of the ranks.</div></div>
<div class="ttc" id="classoperations__research_1_1AssignmentContainer_html_a3e1c65f80f5da3371c10938c120fb984"><div class="ttname"><a href="classoperations__research_1_1AssignmentContainer.html#a3e1c65f80f5da3371c10938c120fb984">operations_research::AssignmentContainer::Copy</a></div><div class="ttdeci">void Copy(const AssignmentContainer&lt; V, E &gt; &amp;container)</div><div class="ttdoc">Copies all the elements of 'container' to this container, clearing its previous content.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04882">constraint_solver.h:4882</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a77c667f3158b3cb5eb2a06ff4292e00d"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a77c667f3158b3cb5eb2a06ff4292e00d">operations_research::ModelVisitor::kTuplesArgument</a></div><div class="ttdeci">static const char kTuplesArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03471">constraint_solver.h:3471</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a462cc213ea47b1e4c772e0332cb12249"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a462cc213ea47b1e4c772e0332cb12249">operations_research::Solver::MakeIntConst</a></div><div class="ttdeci">IntVar * MakeIntConst(int64 val, const std::string &amp;name)</div><div class="ttdoc">IntConst will create a constant expression.</div></div>
<div class="ttc" id="classoperations__research_1_1IntVar_html_a3316193a23988b72bd52ada02859efb0"><div class="ttname"><a href="classoperations__research_1_1IntVar.html#a3316193a23988b72bd52ada02859efb0">operations_research::IntVar::RemoveInterval</a></div><div class="ttdeci">virtual void RemoveInterval(int64 l, int64 u)=0</div><div class="ttdoc">This method removes the interval 'l' .</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_a2894c06ec30527c1810666cb9a47bc76"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#a2894c06ec30527c1810666cb9a47bc76">operations_research::IntervalVarElement::StartValue</a></div><div class="ttdeci">int64 StartValue() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04679">constraint_solver.h:4679</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a53fae091a4dac1829b8947ff7426aa4b"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a53fae091a4dac1829b8947ff7426aa4b">operations_research::Solver::wall_time</a></div><div class="ttdeci">int64 wall_time() const</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a7d783636fe1d998f40ef05ac2b007f77"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a7d783636fe1d998f40ef05ac2b007f77">operations_research::Assignment::Deactivate</a></div><div class="ttdeci">void Deactivate(const IntVar *const var)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a741958c282764f0093800613f9a49eb7"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a741958c282764f0093800613f9a49eb7">operations_research::Solver::MakeTabuSearch</a></div><div class="ttdeci">SearchMonitor * MakeTabuSearch(bool maximize, IntVar *const v, int64 step, const std::vector&lt; IntVar * &gt; &amp;vars, int64 keep_tenure, int64 forbid_tenure, double tabu_factor)</div><div class="ttdoc">--— Meta-heuristics --— Search monitors which try to get the search out of local optima.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a65d5353da6e7922032fa3dbd6e4d7ba8"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a65d5353da6e7922032fa3dbd6e4d7ba8">operations_research::ModelVisitor::kWeightedSumOfAssignedEqualVariableExtension</a></div><div class="ttdeci">static const char kWeightedSumOfAssignedEqualVariableExtension[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03413">constraint_solver.h:3413</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a674a604bf7823571ae7ba12dbd939290"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a674a604bf7823571ae7ba12dbd939290">operations_research::Solver::MakeScalProdLessOrEqual</a></div><div class="ttdeci">Constraint * MakeScalProdLessOrEqual(const std::vector&lt; IntVar * &gt; &amp;vars, const std::vector&lt; int64 &gt; &amp;coefficients, int64 cst)</div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html_afc53068cf76b2865a10fafd410da228e"><div class="ttname"><a href="classoperations__research_1_1Pack.html#afc53068cf76b2865a10fafd410da228e">operations_research::Pack::IsUndecided</a></div><div class="ttdeci">bool IsUndecided(int var_index, int bin_index) const</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a1f15c77df41fd565ee016cfde6185052"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a1f15c77df41fd565ee016cfde6185052">operations_research::Solver::MakeIndexOfFirstMinValueConstraint</a></div><div class="ttdeci">Constraint * MakeIndexOfFirstMinValueConstraint(IntVar *index, const std::vector&lt; IntVar * &gt; &amp;vars)</div><div class="ttdoc">Creates a constraint that binds the index variable to the index of the first variable with the minimu...</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_a4972b271ad222d388f9bf89ad5db017e"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#a4972b271ad222d388f9bf89ad5db017e">operations_research::IntervalVarElement::SetPerformedMax</a></div><div class="ttdeci">void SetPerformedMax(int64 m)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04732">constraint_solver.h:4732</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_aced209d10277f701930a1e46f95465e7"><div class="ttname"><a href="classoperations__research_1_1Solver.html#aced209d10277f701930a1e46f95465e7">operations_research::Solver::MakeDeviation</a></div><div class="ttdeci">Constraint * MakeDeviation(const std::vector&lt; IntVar * &gt; &amp;vars, IntVar *const deviation_var, int64 total_sum)</div><div class="ttdoc">Deviation constraint: sum_i |n * vars[i] - total_sum| &lt;= deviation_var and sum_i vars[i] == total_sum...</div></div>
<div class="ttc" id="structoperations__research_1_1SolutionCollector_1_1SolutionData_html_a40ee8d9d06d28d7e8c6c63b2a7b407fd"><div class="ttname"><a href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html#a40ee8d9d06d28d7e8c6c63b2a7b407fd">operations_research::SolutionCollector::SolutionData::failures</a></div><div class="ttdeci">int64 failures</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04153">constraint_solver.h:4153</a></div></div>
<div class="ttc" id="classoperations__research_1_1DisjunctiveConstraint_html_af80d78dab69e2420e5df2acd13be698e"><div class="ttname"><a href="classoperations__research_1_1DisjunctiveConstraint.html#af80d78dab69e2420e5df2acd13be698e">operations_research::DisjunctiveConstraint::SetTransitionTime</a></div><div class="ttdeci">void SetTransitionTime(Solver::IndexEvaluator2 transition_time)</div><div class="ttdoc">Add a transition time between intervals.</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_abc1a433b3e54e2fa0aef6925f83d43b4"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#abc1a433b3e54e2fa0aef6925f83d43b4">operations_research::Assignment::NumSequenceVars</a></div><div class="ttdeci">int NumSequenceVars() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l05027">constraint_solver.h:5027</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a3755a91175b0918171b5758e15e34208"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a3755a91175b0918171b5758e15e34208">operations_research::Solver::MakePrintModelVisitor</a></div><div class="ttdeci">ModelVisitor * MakePrintModelVisitor()</div><div class="ttdoc">--— ModelVisitor --—</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a8a16cc4af57936ccb4aff6c3a29adcfc"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a8a16cc4af57936ccb4aff6c3a29adcfc">operations_research::ModelVisitor::kIsLessOrEqual</a></div><div class="ttdeci">static const char kIsLessOrEqual[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03357">constraint_solver.h:3357</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a23c2fd1ac75c76dff862c8e91572df76"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a23c2fd1ac75c76dff862c8e91572df76">operations_research::ModelVisitor::kElementEqual</a></div><div class="ttdeci">static const char kElementEqual[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03338">constraint_solver.h:3338</a></div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html_a7e431c9d2ecc17d670c7d39ae12dbb1f"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html#a7e431c9d2ecc17d670c7d39ae12dbb1f">operations_research::SolutionCollector::solution_count</a></div><div class="ttdeci">int solution_count() const</div><div class="ttdoc">Returns how many solutions were stored during the search.</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a51dadd0690d4db9d75d1f8616f2742d8"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a51dadd0690d4db9d75d1f8616f2742d8">operations_research::Assignment::ObjectiveMin</a></div><div class="ttdeci">int64 ObjectiveMin() const</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a5f87c832967334179f0f9c8d05380847a1322e52b2ac49d3b2975acb1f4603cae"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a5f87c832967334179f0f9c8d05380847a1322e52b2ac49d3b2975acb1f4603cae">operations_research::Solver::KEEP_RIGHT</a></div><div class="ttdoc">Left branches are ignored.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00693">constraint_solver.h:693</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_ae51ad783156fb9ec65af38a8d234a0b8"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#ae51ad783156fb9ec65af38a8d234a0b8">operations_research::Assignment::MutableIntVarContainer</a></div><div class="ttdeci">IntContainer * MutableIntVarContainer()</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l05157">constraint_solver.h:5157</a></div></div>
<div class="ttc" id="classoperations__research_1_1Constraint_html_a5606cc31756a1708615d492ab75ba886"><div class="ttname"><a href="classoperations__research_1_1Constraint.html#a5606cc31756a1708615d492ab75ba886">operations_research::Constraint::Var</a></div><div class="ttdeci">virtual IntVar * Var()</div><div class="ttdoc">Creates a Boolean variable representing the status of the constraint (false = constraint is violated,...</div></div>
<div class="ttc" id="classoperations__research_1_1SearchMonitor_html_a681646c2ba21c997eca605387d387cad"><div class="ttname"><a href="classoperations__research_1_1SearchMonitor.html#a681646c2ba21c997eca605387d387cad">operations_research::SearchMonitor::RestartSearch</a></div><div class="ttdeci">virtual void RestartSearch()</div><div class="ttdoc">Restart the search.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a5cedf602d46e984da78cb8862d9e9737"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a5cedf602d46e984da78cb8862d9e9737">operations_research::ModelVisitor::kNotMember</a></div><div class="ttdeci">static const char kNotMember[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03373">constraint_solver.h:3373</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_aa136071473c98731ced9ccf73e9b1f9d"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#aa136071473c98731ced9ccf73e9b1f9d">operations_research::ModelVisitor::VisitIntervalArgument</a></div><div class="ttdeci">virtual void VisitIntervalArgument(const std::string &amp;arg_name, IntervalVar *const argument)</div><div class="ttdoc">Visit interval argument.</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_aa109772cea3713098a40a645509f7566"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#aa109772cea3713098a40a645509f7566">operations_research::IntervalVar::WhenStartRange</a></div><div class="ttdeci">virtual void WhenStartRange(Demon *const d)=0</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_aa41f52a032f36aa8f26b00cceb8b6793"><div class="ttname"><a href="classoperations__research_1_1Solver.html#aa41f52a032f36aa8f26b00cceb8b6793">operations_research::Solver::MakeWeightedOptimize</a></div><div class="ttdeci">OptimizeVar * MakeWeightedOptimize(bool maximize, const std::vector&lt; IntVar * &gt; &amp;sub_objectives, const std::vector&lt; int64 &gt; &amp;weights, int64 step)</div><div class="ttdoc">Creates a weighted objective with a given sense (true = maximization).</div></div>
<div class="ttc" id="classoperations__research_1_1SearchLimit_html_a5fce652e4e80c2ac089bdd70281feeb8"><div class="ttname"><a href="classoperations__research_1_1SearchLimit.html#a5fce652e4e80c2ac089bdd70281feeb8">operations_research::SearchLimit::crossed</a></div><div class="ttdeci">bool crossed() const</div><div class="ttdoc">Returns true if the limit has been crossed.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04231">constraint_solver.h:4231</a></div></div>
<div class="ttc" id="classoperations__research_1_1AssignmentContainer_html_a088429aaba219da2c92f9abbdaaa906d"><div class="ttname"><a href="classoperations__research_1_1AssignmentContainer.html#a088429aaba219da2c92f9abbdaaa906d">operations_research::AssignmentContainer::Size</a></div><div class="ttdeci">int Size() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04922">constraint_solver.h:4922</a></div></div>
<div class="ttc" id="classoperations__research_1_1Constraint_html_a834edc2ae995b866a6aa63e44c242570"><div class="ttname"><a href="classoperations__research_1_1Constraint.html#a834edc2ae995b866a6aa63e44c242570">operations_research::Constraint::IsCastConstraint</a></div><div class="ttdeci">bool IsCastConstraint() const</div><div class="ttdoc">Is the constraint created by a cast from expression to integer variable?</div></div>
<div class="ttc" id="classoperations__research_1_1Demon_html_ab1cf435bf9f422682783c255027e0570"><div class="ttname"><a href="classoperations__research_1_1Demon.html#ab1cf435bf9f422682783c255027e0570">operations_research::Demon::Demon</a></div><div class="ttdeci">Demon()</div><div class="ttdoc">This indicates the priority of a demon.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03286">constraint_solver.h:3286</a></div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html_ae8960240e82f61c3f93c1a81842d29f0"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html#ae8960240e82f61c3f93c1a81842d29f0">operations_research::SolutionCollector::solution</a></div><div class="ttdeci">Assignment * solution(int n) const</div><div class="ttdoc">Returns the nth solution.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a59f3825b2c4fc01c7be8d7e523211d68"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a59f3825b2c4fc01c7be8d7e523211d68">operations_research::Solver::MakeInversePermutationConstraint</a></div><div class="ttdeci">Constraint * MakeInversePermutationConstraint(const std::vector&lt; IntVar * &gt; &amp;left, const std::vector&lt; IntVar * &gt; &amp;right)</div><div class="ttdoc">Creates a constraint that enforces that 'left' and 'right' both represent permutations of [0....</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a0e75f7efda75c27cdec0baa19c2803d1"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a0e75f7efda75c27cdec0baa19c2803d1">operations_research::Assignment::Bound</a></div><div class="ttdeci">bool Bound(const IntVar *const var) const</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_acd6c49bd62ce1a1777a1c0e644f1186e"><div class="ttname"><a href="classoperations__research_1_1Solver.html#acd6c49bd62ce1a1777a1c0e644f1186e">operations_research::Solver::PropagationBaseObject</a></div><div class="ttdeci">friend class PropagationBaseObject</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02919">constraint_solver.h:2919</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8a00b64c16b54cef4e0467730e171bef"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8a00b64c16b54cef4e0467730e171bef">operations_research::Solver::OptimizationDirection</a></div><div class="ttdeci">OptimizationDirection</div><div class="ttdoc">Optimization directions.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00719">constraint_solver.h:719</a></div></div>
<div class="ttc" id="classoperations__research_1_1AssignmentContainer_html_a144d9ee58d069b6f1863b2827085143f"><div class="ttname"><a href="classoperations__research_1_1AssignmentContainer.html#a144d9ee58d069b6f1863b2827085143f">operations_research::AssignmentContainer::Resize</a></div><div class="ttdeci">void Resize(size_t size)</div><div class="ttdoc">Advanced usage: Resizes the container, potentially adding elements with null variables.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04856">constraint_solver.h:4856</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a709bad20694c9c117a3abfff24a60d03"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a709bad20694c9c117a3abfff24a60d03">operations_research::Assignment::DebugString</a></div><div class="ttdeci">std::string DebugString() const override</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_aac32a6eabe1d316d7ff5f92fedd1ec5b"><div class="ttname"><a href="classoperations__research_1_1Solver.html#aac32a6eabe1d316d7ff5f92fedd1ec5b">operations_research::Solver::SearchMonitor</a></div><div class="ttdeci">friend class SearchMonitor</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02921">constraint_solver.h:2921</a></div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html_adac62b65b527aa23434dd7d1fdba3b14"><div class="ttname"><a href="classoperations__research_1_1Pack.html#adac62b65b527aa23434dd7d1fdba3b14">operations_research::Pack::InitialPropagate</a></div><div class="ttdeci">void InitialPropagate() override</div><div class="ttdoc">This method performs the initial propagation of the constraint.</div></div>
<div class="ttc" id="classoperations__research_1_1IntVar_html_a1e8732e1343228cbe86db9c986aa48d4"><div class="ttname"><a href="classoperations__research_1_1IntVar.html#a1e8732e1343228cbe86db9c986aa48d4">operations_research::IntVar::IsVar</a></div><div class="ttdeci">bool IsVar() const override</div><div class="ttdoc">Returns true if the expression is indeed a variable.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03984">constraint_solver.h:3984</a></div></div>
<div class="ttc" id="classoperations__research_1_1AssignmentContainer_html_a37197e2028382d8987a41c9ac84ed7f5"><div class="ttname"><a href="classoperations__research_1_1AssignmentContainer.html#a37197e2028382d8987a41c9ac84ed7f5">operations_research::AssignmentContainer::AreAllElementsBound</a></div><div class="ttdeci">bool AreAllElementsBound() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04935">constraint_solver.h:4935</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8bda7ed6e7e533cca4c44eba6efffc8baccdbce6c50c85d4ed2c507dbc5691116"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8baccdbce6c50c85d4ed2c507dbc5691116">operations_research::Solver::INT_VAR_SIMPLE</a></div><div class="ttdoc">The simple selection is CHOOSE_FIRST_UNBOUND.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00264">constraint_solver.h:264</a></div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html_a104bd60ce9672f53c0539dac7daec58f"><div class="ttname"><a href="classoperations__research_1_1Pack.html#a104bd60ce9672f53c0539dac7daec58f">operations_research::Pack::SetAssigned</a></div><div class="ttdeci">void SetAssigned(int var_index)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a1559c74f56ae49a7c49ebe359b3631cf"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a1559c74f56ae49a7c49ebe359b3631cf">operations_research::Solver::GetLocalSearchMonitor</a></div><div class="ttdeci">LocalSearchMonitor * GetLocalSearchMonitor() const</div><div class="ttdoc">Returns the local search monitor.</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_a2b51c61059210e6b8a6f3bbde76b53b1"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#a2b51c61059210e6b8a6f3bbde76b53b1">operations_research::IntervalVarElement::SetDurationMax</a></div><div class="ttdeci">void SetDurationMax(int64 m)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04712">constraint_solver.h:4712</a></div></div>
<div class="ttc" id="classoperations__research_1_1PropagationBaseObject_html"><div class="ttname"><a href="classoperations__research_1_1PropagationBaseObject.html">operations_research::PropagationBaseObject</a></div><div class="ttdoc">The PropagationBaseObject is a subclass of BaseObject that is also friend to the Solver class.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03149">constraint_solver.h:3149</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a67a3f35a5b19a1ebdf4217b483068ad7"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a67a3f35a5b19a1ebdf4217b483068ad7">operations_research::Solver::AddBacktrackAction</a></div><div class="ttdeci">void AddBacktrackAction(Action a, bool fast)</div><div class="ttdoc">When SaveValue() is not the best way to go, one can create a reversible action that will be called up...</div></div>
<div class="ttc" id="classoperations__research_1_1DisjunctiveConstraint_html_a4b4ead77ac71b5c23fc1dc2871407d8d"><div class="ttname"><a href="classoperations__research_1_1DisjunctiveConstraint.html#a4b4ead77ac71b5c23fc1dc2871407d8d">operations_research::DisjunctiveConstraint::MakeSequenceVar</a></div><div class="ttdeci">virtual SequenceVar * MakeSequenceVar()=0</div><div class="ttdoc">Creates a sequence variable from the constraint.</div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html_aa8c9281df8ab547dbed84de1364267d4"><div class="ttname"><a href="classoperations__research_1_1Pack.html#aa8c9281df8ab547dbed84de1364267d4">operations_research::Pack::AddCountAssignedItemsDimension</a></div><div class="ttdeci">void AddCountAssignedItemsDimension(IntVar *const count_var)</div><div class="ttdoc">This dimension links 'count_var' to the actual number of items assigned to a bin in the pack.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a495f20c9f679b71c617a627c3041eba2"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a495f20c9f679b71c617a627c3041eba2">operations_research::Solver::MakeIsMemberVar</a></div><div class="ttdeci">IntVar * MakeIsMemberVar(IntExpr *const expr, const std::vector&lt; int64 &gt; &amp;values)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8e9cbe2323b10c6b49da625f5bae14c0"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8e9cbe2323b10c6b49da625f5bae14c0">operations_research::Solver::LocalSearchFilterBound</a></div><div class="ttdeci">LocalSearchFilterBound</div><div class="ttdoc">This enum is used in Solver::MakeLocalSearchObjectiveFilter.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00585">constraint_solver.h:585</a></div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html_a7406f484f98fd83e408ffae60895905c"><div class="ttname"><a href="classoperations__research_1_1Pack.html#a7406f484f98fd83e408ffae60895905c">operations_research::Pack::AssignFirstPossibleToBin</a></div><div class="ttdeci">void AssignFirstPossibleToBin(int bin_index)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ae21b3786b7770dc880343e4a1445b424a0ad27937b9a501b07827886abd97a8df"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ae21b3786b7770dc880343e4a1445b424a0ad27937b9a501b07827886abd97a8df">operations_research::Solver::INTERVAL_SET_TIMES_FORWARD</a></div><div class="ttdoc">Selects the variable with the lowest starting time of all variables, and fixes its starting time to t...</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00411">constraint_solver.h:411</a></div></div>
<div class="ttc" id="classoperations__research_1_1DisjunctiveConstraint_html_adc7d8ad50b0d9c98c59f7f9c3f6bda6c"><div class="ttname"><a href="classoperations__research_1_1DisjunctiveConstraint.html#adc7d8ad50b0d9c98c59f7f9c3f6bda6c">operations_research::DisjunctiveConstraint::~DisjunctiveConstraint</a></div><div class="ttdeci">~DisjunctiveConstraint() override</div></div>
<div class="ttc" id="classoperations__research_1_1SearchLimit_html_a0fe1a712b9cd0ea7dbb96a590d1684f7"><div class="ttname"><a href="classoperations__research_1_1SearchLimit.html#a0fe1a712b9cd0ea7dbb96a590d1684f7">operations_research::SearchLimit::~SearchLimit</a></div><div class="ttdeci">~SearchLimit() override</div></div>
<div class="ttc" id="classoperations__research_1_1SolutionPool_html"><div class="ttname"><a href="classoperations__research_1_1SolutionPool.html">operations_research::SolutionPool</a></div><div class="ttdoc">--— SolutionPool --—</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l05354">constraint_solver.h:5354</a></div></div>
<div class="ttc" id="classoperations__research_1_1AssignmentContainer_html_af793fb6edd1488935eabba836ee8a76b"><div class="ttname"><a href="classoperations__research_1_1AssignmentContainer.html#af793fb6edd1488935eabba836ee8a76b">operations_research::AssignmentContainer::AssignmentContainer</a></div><div class="ttdeci">AssignmentContainer()</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04826">constraint_solver.h:4826</a></div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVarElement_html_a9240cc020d1d179aeb4ff57993ac822a"><div class="ttname"><a href="classoperations__research_1_1SequenceVarElement.html#a9240cc020d1d179aeb4ff57993ac822a">operations_research::SequenceVarElement::SetSequence</a></div><div class="ttdeci">void SetSequence(const std::vector&lt; int &gt; &amp;forward_sequence, const std::vector&lt; int &gt; &amp;backward_sequence, const std::vector&lt; int &gt; &amp;unperformed)</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a1905d71fcbbce31fb70a5457049f1e5c"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a1905d71fcbbce31fb70a5457049f1e5c">operations_research::ModelVisitor::kElement</a></div><div class="ttdeci">static const char kElement[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03337">constraint_solver.h:3337</a></div></div>
<div class="ttc" id="classoperations__research_1_1SearchLimit_html_aa184196d0761829d7df21643bc498a01"><div class="ttname"><a href="classoperations__research_1_1SearchLimit.html#aa184196d0761829d7df21643bc498a01">operations_research::SearchLimit::EnterSearch</a></div><div class="ttdeci">void EnterSearch() override</div><div class="ttdoc">Internal methods.</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_a107e6b7d51fa279dcd5516aff5cd05ee"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#a107e6b7d51fa279dcd5516aff5cd05ee">operations_research::IntervalVarElement::DurationMax</a></div><div class="ttdeci">int64 DurationMax() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04684">constraint_solver.h:4684</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_aad1539aca7b4ada550fd75077f060b8d"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#aad1539aca7b4ada550fd75077f060b8d">operations_research::ModelVisitor::kScalProd</a></div><div class="ttdeci">static const char kScalProd[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03382">constraint_solver.h:3382</a></div></div>
<div class="ttc" id="classoperations__research_1_1SolutionPool_html_a0c1b8aceb7d2732914ade32de14cfc41"><div class="ttname"><a href="classoperations__research_1_1SolutionPool.html#a0c1b8aceb7d2732914ade32de14cfc41">operations_research::SolutionPool::SolutionPool</a></div><div class="ttdeci">SolutionPool()</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l05356">constraint_solver.h:5356</a></div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html_a43b6922981e5f524b4cd259cc4538336"><div class="ttname"><a href="classoperations__research_1_1Pack.html#a43b6922981e5f524b4cd259cc4538336">operations_research::Pack::UnassignAllRemainingItems</a></div><div class="ttdeci">void UnassignAllRemainingItems()</div></div>
<div class="ttc" id="structoperations__research_1_1SolutionCollector_1_1SolutionData_html_affb63b3dbea54e1f5445aef70012f935"><div class="ttname"><a href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html#affb63b3dbea54e1f5445aef70012f935">operations_research::SolutionCollector::SolutionData::objective_value</a></div><div class="ttdeci">int64 objective_value</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04154">constraint_solver.h:4154</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_add69e5d253a42a328478f6797711abda"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#add69e5d253a42a328478f6797711abda">operations_research::IntervalVar::SetEndMax</a></div><div class="ttdeci">virtual void SetEndMax(int64 m)=0</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a47d98f9809485d149e9537e1afb1d6fa"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a47d98f9809485d149e9537e1afb1d6fa">operations_research::Assignment::ObjectiveMax</a></div><div class="ttdeci">int64 ObjectiveMax() const</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a2ae5d743b7bc3e49c8b8dbc4f105a4cd"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a2ae5d743b7bc3e49c8b8dbc4f105a4cd">operations_research::ModelVisitor::VisitInt64ToInt64AsArray</a></div><div class="ttdeci">void VisitInt64ToInt64AsArray(const Solver::IndexEvaluator1 &amp;eval, const std::string &amp;arg_name, int64 index_max)</div><div class="ttdoc">Expands function as array when index min is 0.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a07ac46ef4c52623df078eb57daf07070"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a07ac46ef4c52623df078eb57daf07070">operations_research::ModelVisitor::kStartSyncOnStartOperation</a></div><div class="ttdeci">static const char kStartSyncOnStartOperation[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03485">constraint_solver.h:3485</a></div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVarElement_html_a363efa1fc4e42a235e80aa881aa56dd5"><div class="ttname"><a href="classoperations__research_1_1SequenceVarElement.html#a363efa1fc4e42a235e80aa881aa56dd5">operations_research::SequenceVarElement::DebugString</a></div><div class="ttdeci">std::string DebugString() const</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_abdbfec794188ed5074d0cb2f611124ea"><div class="ttname"><a href="classoperations__research_1_1Solver.html#abdbfec794188ed5074d0cb2f611124ea">operations_research::Solver::MakeTrueConstraint</a></div><div class="ttdeci">Constraint * MakeTrueConstraint()</div><div class="ttdoc">--— Constraints --— This constraint always succeeds.</div></div>
<div class="ttc" id="classoperations__research_1_1Decision_html_a5ac1f45476e2b62e48de4798adf8b911"><div class="ttname"><a href="classoperations__research_1_1Decision.html#a5ac1f45476e2b62e48de4798adf8b911">operations_research::Decision::Accept</a></div><div class="ttdeci">virtual void Accept(DecisionVisitor *const visitor) const</div><div class="ttdoc">Accepts the given visitor.</div></div>
<div class="ttc" id="classoperations__research_1_1CastConstraint_html_a6d1daffc6d0067731f886641c64de177"><div class="ttname"><a href="classoperations__research_1_1CastConstraint.html#a6d1daffc6d0067731f886641c64de177">operations_research::CastConstraint::CastConstraint</a></div><div class="ttdeci">CastConstraint(Solver *const solver, IntVar *const target_var)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03603">constraint_solver.h:3603</a></div></div>
<div class="ttc" id="classoperations__research_1_1Rev_html"><div class="ttname"><a href="classoperations__research_1_1Rev.html">operations_research::Rev</a></div><div class="ttdoc">This class adds reversibility to a POD type.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03716">constraint_solver.h:3716</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8bda7ed6e7e533cca4c44eba6efffc8ba76e76e12dcb8935b6a7713f849a11df6"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8ba76e76e12dcb8935b6a7713f849a11df6">operations_research::Solver::CHOOSE_HIGHEST_MAX</a></div><div class="ttdoc">Among unbound variables, select the variable with the highest maximal value.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00316">constraint_solver.h:316</a></div></div>
<div class="ttc" id="classoperations__research_1_1PropagationBaseObject_html_a767a917fc7d9232d121994ae1e124875"><div class="ttname"><a href="classoperations__research_1_1PropagationBaseObject.html#a767a917fc7d9232d121994ae1e124875">operations_research::PropagationBaseObject::~PropagationBaseObject</a></div><div class="ttdeci">~PropagationBaseObject() override</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03152">constraint_solver.h:3152</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a096d24d789eb823876f2288bf15f282e"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a096d24d789eb823876f2288bf15f282e">operations_research::ModelVisitor::kCover</a></div><div class="ttdeci">static const char kCover[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03329">constraint_solver.h:3329</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_ad714215e3927f1e0f74381f51af18968"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#ad714215e3927f1e0f74381f51af18968">operations_research::ModelVisitor::kGreater</a></div><div class="ttdeci">static const char kGreater[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03343">constraint_solver.h:3343</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a6ffc56653b5ef9643ce87d05c9ebd8d6"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a6ffc56653b5ef9643ce87d05c9ebd8d6">operations_research::Solver::TopPeriodicCheck</a></div><div class="ttdeci">void TopPeriodicCheck()</div><div class="ttdoc">Performs PeriodicCheck on the top-level search; for instance, can be called from a nested solve to ch...</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_abc3ebe43e811c7fb172f962a78305a2e"><div class="ttname"><a href="classoperations__research_1_1Solver.html#abc3ebe43e811c7fb172f962a78305a2e">operations_research::Solver::MakeFixedInterval</a></div><div class="ttdeci">IntervalVar * MakeFixedInterval(int64 start, int64 duration, const std::string &amp;name)</div><div class="ttdoc">Creates a fixed and performed interval.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a655735058a06195cc28f25d2564fc8ca"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a655735058a06195cc28f25d2564fc8ca">operations_research::Solver::MakeIsEqualCstVar</a></div><div class="ttdeci">IntVar * MakeIsEqualCstVar(IntExpr *const var, int64 value)</div><div class="ttdoc">status var of (var == value)</div></div>
<div class="ttc" id="structoperations__research_1_1Solver_1_1SearchLogParameters_html_aa0b92206253b0409db49ebda4632b90e"><div class="ttname"><a href="structoperations__research_1_1Solver_1_1SearchLogParameters.html#aa0b92206253b0409db49ebda4632b90e">operations_research::Solver::SearchLogParameters::objective</a></div><div class="ttdeci">OptimizeVar * objective</div><div class="ttdoc">SearchMonitors will display values of objective or variable (both cannot be used together).</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02290">constraint_solver.h:2290</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ac3c5b22fad8060ca1a66bd928182d8a4aeac9baf3ea4fa072bb9e4eccf691205d"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4aeac9baf3ea4fa072bb9e4eccf691205d">operations_research::Solver::SWAPACTIVE</a></div><div class="ttdoc">Operator which replaces an active node by an inactive one.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00498">constraint_solver.h:498</a></div></div>
<div class="ttc" id="classoperations__research_1_1Constraint_html_a443bf6da3f8db15c240cb92d20e37466"><div class="ttname"><a href="classoperations__research_1_1Constraint.html#a443bf6da3f8db15c240cb92d20e37466">operations_research::Constraint::DebugString</a></div><div class="ttdeci">std::string DebugString() const override</div></div>
<div class="ttc" id="classoperations__research_1_1IntVarIterator_html_afcbc1c1ac6f9230d7037807d3dbd46dc"><div class="ttname"><a href="classoperations__research_1_1IntVarIterator.html#afcbc1c1ac6f9230d7037807d3dbd46dc">operations_research::IntVarIterator::DebugString</a></div><div class="ttdeci">std::string DebugString() const override</div><div class="ttdoc">Pretty Print.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03912">constraint_solver.h:3912</a></div></div>
<div class="ttc" id="classoperations__research_1_1PropagationBaseObject_html_ae5b6f8cb73c1b76da152ad612f91c4ce"><div class="ttname"><a href="classoperations__research_1_1PropagationBaseObject.html#ae5b6f8cb73c1b76da152ad612f91c4ce">operations_research::PropagationBaseObject::DebugString</a></div><div class="ttdeci">std::string DebugString() const override</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03154">constraint_solver.h:3154</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_ac7e5aa5ca9abcfa7d8ab76fa081d9d09"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#ac7e5aa5ca9abcfa7d8ab76fa081d9d09">operations_research::IntervalVarElement::LoadFromProto</a></div><div class="ttdeci">void LoadFromProto(const IntervalVarAssignment &amp;interval_var_assignment_proto)</div></div>
<div class="ttc" id="classoperations__research_1_1DecisionVisitor_html_a771d64a88d1eecc6fcce4a5b39349be8"><div class="ttname"><a href="classoperations__research_1_1DecisionVisitor.html#a771d64a88d1eecc6fcce4a5b39349be8">operations_research::DecisionVisitor::VisitRankLastInterval</a></div><div class="ttdeci">virtual void VisitRankLastInterval(SequenceVar *const sequence, int index)</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a866bf5f6b036757bcdd337ddf5c993d0"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a866bf5f6b036757bcdd337ddf5c993d0">operations_research::ModelVisitor::kUsageEqualVariableExtension</a></div><div class="ttdeci">static const char kUsageEqualVariableExtension[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03408">constraint_solver.h:3408</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a9812ac2275793bcdd987daae9e0551ad"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a9812ac2275793bcdd987daae9e0551ad">operations_research::ModelVisitor::kMaxEqual</a></div><div class="ttdeci">static const char kMaxEqual[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03365">constraint_solver.h:3365</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ae094ccae48e0e5942835f318aee30f58"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ae094ccae48e0e5942835f318aee30f58">operations_research::Solver::MakeLimit</a></div><div class="ttdeci">RegularLimit * MakeLimit(int64 time, int64 branches, int64 failures, int64 solutions)</div><div class="ttdoc">Limits the search with the 'time', 'branches', 'failures' and 'solutions' limits.</div></div>
<div class="ttc" id="classoperations__research_1_1IntVarElement_html_a8e83db9b01afab0172f195f110406008"><div class="ttname"><a href="classoperations__research_1_1IntVarElement.html#a8e83db9b01afab0172f195f110406008">operations_research::IntVarElement::Store</a></div><div class="ttdeci">void Store()</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04618">constraint_solver.h:4618</a></div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html_a22f97f40518e3d2f565d78f7ef6f3b56"><div class="ttname"><a href="classoperations__research_1_1Pack.html#a22f97f40518e3d2f565d78f7ef6f3b56">operations_research::Pack::Post</a></div><div class="ttdeci">void Post() override</div><div class="ttdoc">--— Internal API --—</div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html_a4c3227b06d52ecdb2f09dccc01baa347"><div class="ttname"><a href="classoperations__research_1_1Pack.html#a4c3227b06d52ecdb2f09dccc01baa347">operations_research::Pack::AssignAllPossibleToBin</a></div><div class="ttdeci">void AssignAllPossibleToBin(int bin_index)</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_adb508b94e5443a1b074937377dec783e"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#adb508b94e5443a1b074937377dec783e">operations_research::ModelVisitor::kFalseConstraint</a></div><div class="ttdeci">static const char kFalseConstraint[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03341">constraint_solver.h:3341</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a470a8ff6d426b41ce7b4cefbd7de8d6d"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a470a8ff6d426b41ce7b4cefbd7de8d6d">operations_research::Assignment::SetDurationMin</a></div><div class="ttdeci">void SetDurationMin(const IntervalVar *const var, int64 m)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8bda7ed6e7e533cca4c44eba6efffc8baf25b88c6fb8a0b956dd3812af864e2a9"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8baf25b88c6fb8a0b956dd3812af864e2a9">operations_research::Solver::CHOOSE_MAX_REGRET_ON_MIN</a></div><div class="ttdoc">Among unbound variables, select the variable with the largest gap between the first and the second va...</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00330">constraint_solver.h:330</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_add93a1a7265307e0915276d5d3645a5e"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#add93a1a7265307e0915276d5d3645a5e">operations_research::Assignment::ActivateObjective</a></div><div class="ttdeci">void ActivateObjective()</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8b9acf693b1584dd7c7113ba7cea2527"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8b9acf693b1584dd7c7113ba7cea2527">operations_research::Solver::MakeIntVarArray</a></div><div class="ttdeci">void MakeIntVarArray(int var_count, int64 vmin, int64 vmax, const std::string &amp;name, std::vector&lt; IntVar * &gt; *vars)</div><div class="ttdoc">This method will append the vector vars with 'var_count' variables having bounds vmin and vmax and ha...</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_aad1113636f0ceefbf79a1c1ed0962266"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#aad1113636f0ceefbf79a1c1ed0962266">operations_research::ModelVisitor::kEarlyDateArgument</a></div><div class="ttdeci">static const char kEarlyDateArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03429">constraint_solver.h:3429</a></div></div>
<div class="ttc" id="structoperations__research_1_1InitAndGetValues_1_1Iterator_html_a0b89b39be2a5dbfe5f830521cff2e4bf"><div class="ttname"><a href="structoperations__research_1_1InitAndGetValues_1_1Iterator.html#a0b89b39be2a5dbfe5f830521cff2e4bf">operations_research::InitAndGetValues::Iterator::End</a></div><div class="ttdeci">static Iterator End(IntVarIterator *it)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03943">constraint_solver.h:3943</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a8bef2058a71de8dc9d979cdfee244613"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a8bef2058a71de8dc9d979cdfee244613">operations_research::ModelVisitor::kLeftArgument</a></div><div class="ttdeci">static const char kLeftArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03444">constraint_solver.h:3444</a></div></div>
<div class="ttc" id="classoperations__research_1_1SearchMonitor_html_a8c745cdd7838067851f65e5ed812ab14"><div class="ttname"><a href="classoperations__research_1_1SearchMonitor.html#a8c745cdd7838067851f65e5ed812ab14">operations_research::SearchMonitor::ApplyDecision</a></div><div class="ttdeci">virtual void ApplyDecision(Decision *const d)</div><div class="ttdoc">Before applying the decision.</div></div>
<div class="ttc" id="classoperations__research_1_1AssignmentElement_html_a878af7bb76cdf04d84eb523d6deeb696"><div class="ttname"><a href="classoperations__research_1_1AssignmentElement.html#a878af7bb76cdf04d84eb523d6deeb696">operations_research::AssignmentElement::Deactivate</a></div><div class="ttdeci">void Deactivate()</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04601">constraint_solver.h:4601</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a147203cf742a1daac8b1af0be03b1b92"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a147203cf742a1daac8b1af0be03b1b92">operations_research::IntervalVar::DurationExpr</a></div><div class="ttdeci">virtual IntExpr * DurationExpr()=0</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a2774c028f0464596c6767565cee80ff0"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a2774c028f0464596c6767565cee80ff0">operations_research::IntervalVar::OldStartMin</a></div><div class="ttdeci">virtual int64 OldStartMin() const =0</div></div>
<div class="ttc" id="classoperations__research_1_1RegularLimit_html_a7c7b7fcaac46d6e0677703e92bf53bb0"><div class="ttname"><a href="classoperations__research_1_1RegularLimit.html#a7c7b7fcaac46d6e0677703e92bf53bb0">operations_research::RegularLimit::branches</a></div><div class="ttdeci">int64 branches() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04288">constraint_solver.h:4288</a></div></div>
<div class="ttc" id="structoperations__research_1_1DefaultPhaseParameters_html_a5599253b090dbe9b50cfa40fe05ecce0"><div class="ttname"><a href="structoperations__research_1_1DefaultPhaseParameters.html#a5599253b090dbe9b50cfa40fe05ecce0">operations_research::DefaultPhaseParameters::heuristic_period</a></div><div class="ttdeci">int heuristic_period</div><div class="ttdoc">The distance in nodes between each run of the heuristics.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00190">constraint_solver.h:190</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8bda7ed6e7e533cca4c44eba6efffc8ba46e6f2fa2b646a2114a32d816ba399ee"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8ba46e6f2fa2b646a2114a32d816ba399ee">operations_research::Solver::CHOOSE_PATH</a></div><div class="ttdoc">Selects the next unbound variable on a path, the path being defined by the variables: var[i] correspo...</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00334">constraint_solver.h:334</a></div></div>
<div class="ttc" id="classoperations__research_1_1SearchMonitor_html_a528e028cce317c06203f079dd05635a9"><div class="ttname"><a href="classoperations__research_1_1SearchMonitor.html#a528e028cce317c06203f079dd05635a9">operations_research::SearchMonitor::BeginFail</a></div><div class="ttdeci">virtual void BeginFail()</div><div class="ttdoc">Just when the failure occurs.</div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html_a5f3395e17a51ad230b73c965e4387d39"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html#a5f3395e17a51ad230b73c965e4387d39">operations_research::SolutionCollector::StartValue</a></div><div class="ttdeci">int64 StartValue(int n, IntervalVar *const var) const</div><div class="ttdoc">This is a shortcut to get the StartValue of 'var' in the nth solution.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ab6302978f1de57bdeafa0ffee05c92c9"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9">operations_research::Solver::BinaryIntervalRelation</a></div><div class="ttdeci">BinaryIntervalRelation</div><div class="ttdoc">This enum is used in Solver::MakeIntervalVarRelation to specify the temporal relation between the two...</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00612">constraint_solver.h:612</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a54a6c970300c41c108c0ea9634d6cfa7"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a54a6c970300c41c108c0ea9634d6cfa7">operations_research::Assignment::Assignment</a></div><div class="ttdeci">Assignment(Solver *const s)</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_ad2532beeeeaf7018cab5f3946e604af3"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#ad2532beeeeaf7018cab5f3946e604af3">operations_research::ModelVisitor::kStartSyncOnEndOperation</a></div><div class="ttdeci">static const char kStartSyncOnEndOperation[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03486">constraint_solver.h:3486</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a16d65c01260397f78e7df69dc3c2b867"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a16d65c01260397f78e7df69dc3c2b867">operations_research::ModelVisitor::kCumulativeArgument</a></div><div class="ttdeci">static const char kCumulativeArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03423">constraint_solver.h:3423</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8a00b64c16b54cef4e0467730e171befaf042b1d4c82247d9ff0ca476800d8fc2"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8a00b64c16b54cef4e0467730e171befaf042b1d4c82247d9ff0ca476800d8fc2">operations_research::Solver::MINIMIZATION</a></div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00719">constraint_solver.h:719</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a83e14be9c6bba9abdd1949c25c32a60da6ea2fea7afd48b130486b2b48b5ae418"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a83e14be9c6bba9abdd1949c25c32a60da6ea2fea7afd48b130486b2b48b5ae418">operations_research::Solver::AVOID_DATE</a></div><div class="ttdoc">STARTS_AFTER or ENDS_BEFORE, i.e.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00672">constraint_solver.h:672</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a4f85930982b76fe71ed525a692957515"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a4f85930982b76fe71ed525a692957515">operations_research::Solver::MakeIsGreaterOrEqualCstVar</a></div><div class="ttdeci">IntVar * MakeIsGreaterOrEqualCstVar(IntExpr *const var, int64 value)</div><div class="ttdoc">status var of (var &gt;= value)</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a56f29d4d46c50ac1dc77475c5718175b"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a56f29d4d46c50ac1dc77475c5718175b">operations_research::ModelVisitor::kVarBoundWatcher</a></div><div class="ttdeci">static const char kVarBoundWatcher[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03398">constraint_solver.h:3398</a></div></div>
<div class="ttc" id="classoperations__research_1_1OptimizeVar_html_adcfad0327a52f24042b49aadb09f1b4d"><div class="ttname"><a href="classoperations__research_1_1OptimizeVar.html#adcfad0327a52f24042b49aadb09f1b4d">operations_research::OptimizeVar::Accept</a></div><div class="ttdeci">void Accept(ModelVisitor *const visitor) const override</div><div class="ttdoc">Accepts the given model visitor.</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_ab6d8cf1dcb0f18656622e325be57e9e8"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#ab6d8cf1dcb0f18656622e325be57e9e8">operations_research::Assignment::SetSequence</a></div><div class="ttdeci">void SetSequence(const SequenceVar *const var, const std::vector&lt; int &gt; &amp;forward_sequence, const std::vector&lt; int &gt; &amp;backward_sequence, const std::vector&lt; int &gt; &amp;unperformed)</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a2b17a924fed9dff78cbd365ccdb5c597"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a2b17a924fed9dff78cbd365ccdb5c597">operations_research::ModelVisitor::VisitIntervalArrayArgument</a></div><div class="ttdeci">virtual void VisitIntervalArrayArgument(const std::string &amp;arg_name, const std::vector&lt; IntervalVar * &gt; &amp;arguments)</div></div>
<div class="ttc" id="classoperations__research_1_1DecisionVisitor_html_af48323740d18f4059ff01271b50eb9f2"><div class="ttname"><a href="classoperations__research_1_1DecisionVisitor.html#af48323740d18f4059ff01271b50eb9f2">operations_research::DecisionVisitor::VisitScheduleOrPostpone</a></div><div class="ttdeci">virtual void VisitScheduleOrPostpone(IntervalVar *const var, int64 est)</div></div>
<div class="ttc" id="structoperations__research_1_1DefaultPhaseParameters_html_ae1903959bc4ab1ec6e92aabd9465dc90"><div class="ttname"><a href="structoperations__research_1_1DefaultPhaseParameters.html#ae1903959bc4ab1ec6e92aabd9465dc90">operations_research::DefaultPhaseParameters::var_selection_schema</a></div><div class="ttdeci">VariableSelection var_selection_schema</div><div class="ttdoc">This parameter describes how the next variable to instantiate will be chosen.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00173">constraint_solver.h:173</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a83e14be9c6bba9abdd1949c25c32a60da21ce390ff5a9625cc07569f7629b2a32"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a83e14be9c6bba9abdd1949c25c32a60da21ce390ff5a9625cc07569f7629b2a32">operations_research::Solver::STARTS_BEFORE</a></div><div class="ttdoc">t starts before d, i.e. Start(t) &lt;= d.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00662">constraint_solver.h:662</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a19bcba10f75045499952148742a3cf6f"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a19bcba10f75045499952148742a3cf6f">operations_research::ModelVisitor::kBetween</a></div><div class="ttdeci">static const char kBetween[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03324">constraint_solver.h:3324</a></div></div>
<div class="ttc" id="structoperations__research_1_1DefaultPhaseParameters_html_aa1ee3388a187cc5465d43d25ac9ab1f1a7498691aa1fa94308453cbd0c3233e6d"><div class="ttname"><a href="structoperations__research_1_1DefaultPhaseParameters.html#aa1ee3388a187cc5465d43d25ac9ab1f1a7498691aa1fa94308453cbd0c3233e6d">operations_research::DefaultPhaseParameters::CHOOSE_MAX_SUM_IMPACT</a></div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00159">constraint_solver.h:159</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_af244626a5557c4f0addd20548d76fadc"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#af244626a5557c4f0addd20548d76fadc">operations_research::IntervalVar::WhenEndBound</a></div><div class="ttdeci">void WhenEndBound(Solver::Closure closure)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04428">constraint_solver.h:4428</a></div></div>
<div class="ttc" id="classoperations__research_1_1Decision_html_a20a827cbc3c6cf9ecbef85bc3ba85cdb"><div class="ttname"><a href="classoperations__research_1_1Decision.html#a20a827cbc3c6cf9ecbef85bc3ba85cdb">operations_research::Decision::Decision</a></div><div class="ttdeci">Decision()</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03211">constraint_solver.h:3211</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a216609be9e8d0b595ce401ca5c2d86b0"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a216609be9e8d0b595ce401ca5c2d86b0">operations_research::IntervalVar::WhenPerformedBound</a></div><div class="ttdeci">virtual void WhenPerformedBound(Demon *const d)=0</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a776893abf62ec0dbf9b80a5faf0aa455"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a776893abf62ec0dbf9b80a5faf0aa455">operations_research::Solver::MakeIsBetweenCt</a></div><div class="ttdeci">Constraint * MakeIsBetweenCt(IntExpr *const expr, int64 l, int64 u, IntVar *const b)</div><div class="ttdoc">b == (l &lt;= expr &lt;= u)</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_a80614d155acba1d61ff322283c4ce2ca"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#a80614d155acba1d61ff322283c4ce2ca">operations_research::IntervalVarElement::operator!=</a></div><div class="ttdeci">bool operator!=(const IntervalVarElement &amp;element) const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04747">constraint_solver.h:4747</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ab6302978f1de57bdeafa0ffee05c92c9a4d3f223d92b1ac90127546c396f6cd26"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9a4d3f223d92b1ac90127546c396f6cd26">operations_research::Solver::STAYS_IN_SYNC</a></div><div class="ttdoc">STARTS_AT_START and ENDS_AT_END at the same time.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00640">constraint_solver.h:640</a></div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVar_html_ae6327825d9ed07ea7e97ac731e4d6ff8"><div class="ttname"><a href="classoperations__research_1_1SequenceVar.html#ae6327825d9ed07ea7e97ac731e4d6ff8">operations_research::SequenceVar::Next</a></div><div class="ttdeci">IntVar * Next(int index) const</div><div class="ttdoc">Returns the next of the index_th interval of the sequence.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_adab85b93ce8b5ea9a14b5a5969adcc14"><div class="ttname"><a href="classoperations__research_1_1Solver.html#adab85b93ce8b5ea9a14b5a5969adcc14">operations_research::Solver::MakeIsLessCstCt</a></div><div class="ttdeci">Constraint * MakeIsLessCstCt(IntExpr *const v, int64 c, IntVar *const b)</div><div class="ttdoc">b == (v &lt; c)</div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVarElement_html_af1c4120e8b1b34d629b0b2fae26e2b26"><div class="ttname"><a href="classoperations__research_1_1SequenceVarElement.html#af1c4120e8b1b34d629b0b2fae26e2b26">operations_research::SequenceVarElement::LoadFromProto</a></div><div class="ttdeci">void LoadFromProto(const SequenceVarAssignment &amp;sequence_var_assignment_proto)</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a77552a8028118507b948e06dd8d5e879"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a77552a8028118507b948e06dd8d5e879">operations_research::Assignment::SetEndRange</a></div><div class="ttdeci">void SetEndRange(const IntervalVar *const var, int64 mi, int64 ma)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a5166877a2d94e773fc8abf433b086d82"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a5166877a2d94e773fc8abf433b086d82">operations_research::Solver::Rand64</a></div><div class="ttdeci">int64 Rand64(int64 size)</div><div class="ttdoc">Returns a random value between 0 and 'size' - 1;.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02812">constraint_solver.h:2812</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_ac7f4610bf9ddd8a02c4df0e389fda3ca"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#ac7f4610bf9ddd8a02c4df0e389fda3ca">operations_research::IntervalVarElement::StartMax</a></div><div class="ttdeci">int64 StartMax() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04678">constraint_solver.h:4678</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ae39c8f6f3ee87c9a3d74bc8a446db697"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ae39c8f6f3ee87c9a3d74bc8a446db697">operations_research::Solver::CheckConstraint</a></div><div class="ttdeci">bool CheckConstraint(Constraint *const ct)</div><div class="ttdoc">Checks whether adding this constraint will lead to an immediate failure.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a956f49ec11b9f98f42ecbfb2c2af1224"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a956f49ec11b9f98f42ecbfb2c2af1224">operations_research::ModelVisitor::kDeviation</a></div><div class="ttdeci">static const char kDeviation[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03331">constraint_solver.h:3331</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a5d83388a399fb4f4e44e4054d1fda341"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a5d83388a399fb4f4e44e4054d1fda341">operations_research::IntervalVar::OldDurationMin</a></div><div class="ttdeci">virtual int64 OldDurationMin() const =0</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8d6fbba2ba47eda46d4565e4a0ca69cf"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8d6fbba2ba47eda46d4565e4a0ca69cf">operations_research::Solver::MakeGreater</a></div><div class="ttdeci">Constraint * MakeGreater(IntExpr *const left, IntExpr *const right)</div><div class="ttdoc">left &gt; right</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_aeb7ec77351bcc3b896fbd6f034749427"><div class="ttname"><a href="classoperations__research_1_1Solver.html#aeb7ec77351bcc3b896fbd6f034749427">operations_research::Solver::MakeWeightedMaximize</a></div><div class="ttdeci">OptimizeVar * MakeWeightedMaximize(const std::vector&lt; IntVar * &gt; &amp;sub_objectives, const std::vector&lt; int64 &gt; &amp;weights, int64 step)</div><div class="ttdoc">Creates a maximization weigthed objective.</div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html"><div class="ttname"><a href="classoperations__research_1_1Pack.html">operations_research::Pack</a></div><div class="ttdoc">-------— Pack Constraint -------—</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l05203">constraint_solver.h:5203</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a8640e47c57ef2d95a6c94d383a9641a4"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a8640e47c57ef2d95a6c94d383a9641a4">operations_research::Assignment::Copy</a></div><div class="ttdeci">void Copy(const Assignment *assignment)</div><div class="ttdoc">Copies 'assignment' to the current assignment, clearing its previous content.</div></div>
<div class="ttc" id="classoperations__research_1_1RegularLimit_html_a895d84c05da5c98c72e3662bf83ecc86"><div class="ttname"><a href="classoperations__research_1_1RegularLimit.html#a895d84c05da5c98c72e3662bf83ecc86">operations_research::RegularLimit::ExitSearch</a></div><div class="ttdeci">void ExitSearch() override</div><div class="ttdoc">End of the search.</div></div>
<div class="ttc" id="classoperations__research_1_1AssignmentElement_html_aaa91977feff42f876d7cd00556ab94f7"><div class="ttname"><a href="classoperations__research_1_1AssignmentElement.html#aaa91977feff42f876d7cd00556ab94f7">operations_research::AssignmentElement::Activated</a></div><div class="ttdeci">bool Activated() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04602">constraint_solver.h:4602</a></div></div>
<div class="ttc" id="classoperations__research_1_1PropagationBaseObject_html_a5d4a4cf402b353ba2908836656cf0c62"><div class="ttname"><a href="classoperations__research_1_1PropagationBaseObject.html#a5d4a4cf402b353ba2908836656cf0c62">operations_research::PropagationBaseObject::set_name</a></div><div class="ttdeci">void set_name(const std::string &amp;name)</div></div>
<div class="ttc" id="classoperations__research_1_1RegularLimit_html_a034b9632ef4574d05aa150cd7a0c613c"><div class="ttname"><a href="classoperations__research_1_1RegularLimit.html#a034b9632ef4574d05aa150cd7a0c613c">operations_research::RegularLimit::duration_limit</a></div><div class="ttdeci">absl::Duration duration_limit() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04282">constraint_solver.h:4282</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a779da92d4afffabdb868318665298d59"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a779da92d4afffabdb868318665298d59">operations_research::Solver::CheckAssignment</a></div><div class="ttdeci">bool CheckAssignment(Assignment *const solution)</div><div class="ttdoc">Checks whether the given assignment satisfies all relevant constraints.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ab3e7525b57ce27119e4eb32fe24eedca"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ab3e7525b57ce27119e4eb32fe24eedca">operations_research::Solver::filtered_neighbors</a></div><div class="ttdeci">int64 filtered_neighbors() const</div><div class="ttdoc">The number of filtered neighbors (neighbors accepted by filters).</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00987">constraint_solver.h:987</a></div></div>
<div class="ttc" id="classoperations__research_1_1DisjunctiveConstraint_html_a487094cee9f08d7d6d7f4e8642d0579d"><div class="ttname"><a href="classoperations__research_1_1DisjunctiveConstraint.html#a487094cee9f08d7d6d7f4e8642d0579d">operations_research::DisjunctiveConstraint::time_cumuls</a></div><div class="ttdeci">virtual const std::vector&lt; IntVar * &gt; &amp; time_cumuls() const =0</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ad3a0dd883b4adb63646503b62dabbc23"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ad3a0dd883b4adb63646503b62dabbc23">operations_research::Solver::DebugString</a></div><div class="ttdeci">std::string DebugString() const</div><div class="ttdoc">misc debug std::string.</div></div>
<div class="ttc" id="structoperations__research_1_1DefaultPhaseParameters_html_adbccfb764ad843006381e772c828ae8b"><div class="ttname"><a href="structoperations__research_1_1DefaultPhaseParameters.html#adbccfb764ad843006381e772c828ae8b">operations_research::DefaultPhaseParameters::random_seed</a></div><div class="ttdeci">int random_seed</div><div class="ttdoc">Seed used to initialize the random part in some heuristics.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00200">constraint_solver.h:200</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a1066ef518e2ca9b1c2608a86c7ea32eb"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a1066ef518e2ca9b1c2608a86c7ea32eb">operations_research::ModelVisitor::kVarValueWatcher</a></div><div class="ttdeci">static const char kVarValueWatcher[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03399">constraint_solver.h:3399</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a079c0703e63776a4ad3e53864b486222"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a079c0703e63776a4ad3e53864b486222">operations_research::ModelVisitor::kStartMaxArgument</a></div><div class="ttdeci">static const char kStartMaxArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03464">constraint_solver.h:3464</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntVar_html_ab6acebb20eb1a885ca1313d759db0bdb"><div class="ttname"><a href="classoperations__research_1_1IntVar.html#ab6acebb20eb1a885ca1313d759db0bdb">operations_research::IntVar::~IntVar</a></div><div class="ttdeci">~IntVar() override</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03982">constraint_solver.h:3982</a></div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVarElement_html_a41b758288965e16fa33baf041c7d981b"><div class="ttname"><a href="classoperations__research_1_1SequenceVarElement.html#a41b758288965e16fa33baf041c7d981b">operations_research::SequenceVarElement::operator!=</a></div><div class="ttdeci">bool operator!=(const SequenceVarElement &amp;element) const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04808">constraint_solver.h:4808</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a47c48e2669dce44002b0c618273bddfe"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a47c48e2669dce44002b0c618273bddfe">operations_research::Assignment::Unperformed</a></div><div class="ttdeci">const std::vector&lt; int &gt; &amp; Unperformed(const SequenceVar *const var) const</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a51c801ef84c5843e4b9a1ba489a15f0f"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a51c801ef84c5843e4b9a1ba489a15f0f">operations_research::Solver::AddPropagationMonitor</a></div><div class="ttdeci">void AddPropagationMonitor(PropagationMonitor *const monitor)</div><div class="ttdoc">Adds the propagation monitor to the solver.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a36ed7ed8253a439625cec250d3adc514"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a36ed7ed8253a439625cec250d3adc514">operations_research::ModelVisitor::kMinArgument</a></div><div class="ttdeci">static const char kMinArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03447">constraint_solver.h:3447</a></div></div>
<div class="ttc" id="classoperations__research_1_1PropagationBaseObject_html_a5c6bf90bb0b099a2c8f81aaefdfdd46c"><div class="ttname"><a href="classoperations__research_1_1PropagationBaseObject.html#a5c6bf90bb0b099a2c8f81aaefdfdd46c">operations_research::PropagationBaseObject::set_action_on_fail</a></div><div class="ttdeci">void set_action_on_fail(Solver::Action a)</div><div class="ttdoc">This method sets a callback that will be called if a failure happens during the propagation of the qu...</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03181">constraint_solver.h:3181</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_aee6505d2effca79a716ca26c203f97ae"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#aee6505d2effca79a716ca26c203f97ae">operations_research::ModelVisitor::kDifferenceOperation</a></div><div class="ttdeci">static const char kDifferenceOperation[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03483">constraint_solver.h:3483</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a097e1714e012247ef87ba3cb18297609"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a097e1714e012247ef87ba3cb18297609">operations_research::IntervalVar::OldDurationMax</a></div><div class="ttdeci">virtual int64 OldDurationMax() const =0</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8986fc6e352ee5b9601831e6466b923c"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8986fc6e352ee5b9601831e6466b923c">operations_research::Solver::MakeIsLessCt</a></div><div class="ttdeci">Constraint * MakeIsLessCt(IntExpr *const left, IntExpr *const right, IntVar *const b)</div><div class="ttdoc">b == (left &lt; right)</div></div>
<div class="ttc" id="classoperations__research_1_1IntVarIterator_html_a85fb1088ff1184b4cb867259ee512fc5"><div class="ttname"><a href="classoperations__research_1_1IntVarIterator.html#a85fb1088ff1184b4cb867259ee512fc5">operations_research::IntVarIterator::~IntVarIterator</a></div><div class="ttdeci">~IntVarIterator() override</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03897">constraint_solver.h:3897</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a02f7cd678fb793a4cedbaa11f1904e32"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a02f7cd678fb793a4cedbaa11f1904e32">operations_research::Assignment::PerformedMin</a></div><div class="ttdeci">int64 PerformedMin(const IntervalVar *const var) const</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a6f2f9c44d5e8efa05a0c142310fbcd71"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a6f2f9c44d5e8efa05a0c142310fbcd71">operations_research::IntervalVar::WhenDurationBound</a></div><div class="ttdeci">virtual void WhenDurationBound(Demon *const d)=0</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a58a13c5ddb389b3d3ad063013ce18191"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a58a13c5ddb389b3d3ad063013ce18191">operations_research::ModelVisitor::kSequencesArgument</a></div><div class="ttdeci">static const char kSequencesArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03458">constraint_solver.h:3458</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a7af7d40f7324b60dae150e11aaef3b6b"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a7af7d40f7324b60dae150e11aaef3b6b">operations_research::ModelVisitor::kPower</a></div><div class="ttdeci">static const char kPower[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03380">constraint_solver.h:3380</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a607ab1726c4a6ae603e3645084ae96b3"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a607ab1726c4a6ae603e3645084ae96b3">operations_research::Assignment::NumIntVars</a></div><div class="ttdeci">int NumIntVars() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l05025">constraint_solver.h:5025</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_abb90fd1d87eea297afe95bca09e9235e"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#abb90fd1d87eea297afe95bca09e9235e">operations_research::ModelVisitor::kLateCostArgument</a></div><div class="ttdeci">static const char kLateCostArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03442">constraint_solver.h:3442</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a3a509ada6c8ab1ca9924a548e9614344"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a3a509ada6c8ab1ca9924a548e9614344">operations_research::Solver::MakeStatisticsModelVisitor</a></div><div class="ttdeci">ModelVisitor * MakeStatisticsModelVisitor()</div><div class="ttdoc">Displays some nice statistics on the model.</div></div>
<div class="ttc" id="classoperations__research_1_1DisjunctiveConstraint_html_a8fa126c7081c99d91c347cb82ab16326"><div class="ttname"><a href="classoperations__research_1_1DisjunctiveConstraint.html#a8fa126c7081c99d91c347cb82ab16326">operations_research::DisjunctiveConstraint::TransitionTime</a></div><div class="ttdeci">int64 TransitionTime(int before_index, int after_index)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l05330">constraint_solver.h:5330</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ad0b048792bdbf3cd5699eb82a9b57e76"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ad0b048792bdbf3cd5699eb82a9b57e76">operations_research::Solver::MakeFalseConstraint</a></div><div class="ttdeci">Constraint * MakeFalseConstraint()</div><div class="ttdoc">This constraint always fails.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_ad60683aaee8e4a19043476a2bd899d50"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#ad60683aaee8e4a19043476a2bd899d50">operations_research::ModelVisitor::VisitIntegerArgument</a></div><div class="ttdeci">virtual void VisitIntegerArgument(const std::string &amp;arg_name, int64 value)</div><div class="ttdoc">Visit integer arguments.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a82743e5fcfb142e69798225fc83305ca"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a82743e5fcfb142e69798225fc83305ca">operations_research::Solver::MakeLexicalLess</a></div><div class="ttdeci">Constraint * MakeLexicalLess(const std::vector&lt; IntVar * &gt; &amp;left, const std::vector&lt; IntVar * &gt; &amp;right)</div><div class="ttdoc">Creates a constraint that enforces that left is lexicographically less than right.</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_ae8af25911cdd4091cd6a0ec08c9a38c7"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#ae8af25911cdd4091cd6a0ec08c9a38c7">operations_research::Assignment::IntVarContainer</a></div><div class="ttdeci">const IntContainer &amp; IntVarContainer() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l05156">constraint_solver.h:5156</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a4e8bb409ff7303de27d92e7452ff4745"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a4e8bb409ff7303de27d92e7452ff4745">operations_research::ModelVisitor::kSearchLimitExtension</a></div><div class="ttdeci">static const char kSearchLimitExtension[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03407">constraint_solver.h:3407</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_aa26e4339dae784c7f42929a0a7221b9e"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#aa26e4339dae784c7f42929a0a7221b9e">operations_research::ModelVisitor::kEquality</a></div><div class="ttdeci">static const char kEquality[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03340">constraint_solver.h:3340</a></div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html_a13b2487c422d35cd36e9bfbc2810c652"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html#a13b2487c422d35cd36e9bfbc2810c652">operations_research::SolutionCollector::DebugString</a></div><div class="ttdeci">std::string DebugString() const override</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04088">constraint_solver.h:4088</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a4c1f66539cdb6258a67e4543a08d8a76"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a4c1f66539cdb6258a67e4543a08d8a76">operations_research::IntervalVar::SetPerformed</a></div><div class="ttdeci">virtual void SetPerformed(bool val)=0</div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html_a02862f4b1f6f2c81e51e1d54da1a8533"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html#a02862f4b1f6f2c81e51e1d54da1a8533">operations_research::SolutionCollector::ForwardSequence</a></div><div class="ttdeci">const std::vector&lt; int &gt; &amp; ForwardSequence(int n, SequenceVar *const var) const</div><div class="ttdoc">This is a shortcut to get the ForwardSequence of 'var' in the nth solution.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a0683bc1537d5fbc81ae0a2f0c271cd75"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a0683bc1537d5fbc81ae0a2f0c271cd75">operations_research::Solver::constraints</a></div><div class="ttdeci">int constraints() const</div><div class="ttdoc">Counts the number of constraints that have been added to the solver before the search.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02837">constraint_solver.h:2837</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a124e2377182b7f2be763fc2c009f2fe6"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a124e2377182b7f2be763fc2c009f2fe6">operations_research::Solver::MakeSumLessOrEqual</a></div><div class="ttdeci">Constraint * MakeSumLessOrEqual(const std::vector&lt; IntVar * &gt; &amp;vars, int64 cst)</div><div class="ttdoc">Variation on arrays.</div></div>
<div class="ttc" id="classoperations__research_1_1SearchMonitor_html_a3da80f7b3b108f36ace3e45d1654805b"><div class="ttname"><a href="classoperations__research_1_1SearchMonitor.html#a3da80f7b3b108f36ace3e45d1654805b">operations_research::SearchMonitor::AcceptSolution</a></div><div class="ttdeci">virtual bool AcceptSolution()</div><div class="ttdoc">This method is called when a solution is found.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a09fdd4ae9e13607b278e9d472b673c1e"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a09fdd4ae9e13607b278e9d472b673c1e">operations_research::ModelVisitor::kCountEqual</a></div><div class="ttdeci">static const char kCountEqual[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03328">constraint_solver.h:3328</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a1694a1680e59545addfa46bf8512218c"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a1694a1680e59545addfa46bf8512218c">operations_research::Solver::SearchDepth</a></div><div class="ttdeci">int SearchDepth() const</div><div class="ttdoc">Gets the search depth of the current active search.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_af3cf859de88467c7340a3ada0fe79620"><div class="ttname"><a href="classoperations__research_1_1Solver.html#af3cf859de88467c7340a3ada0fe79620">operations_research::Solver::MakeFixedDurationIntervalVar</a></div><div class="ttdeci">IntervalVar * MakeFixedDurationIntervalVar(int64 start_min, int64 start_max, int64 duration, bool optional, const std::string &amp;name)</div><div class="ttdoc">--— scheduling objects --—</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ab235bf1af3430d5b19cf811be7c2da0f"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ab235bf1af3430d5b19cf811be7c2da0f">operations_research::Solver::MakeNonOverlappingNonStrictBoxesConstraint</a></div><div class="ttdeci">Constraint * MakeNonOverlappingNonStrictBoxesConstraint(const std::vector&lt; IntVar * &gt; &amp;x_vars, const std::vector&lt; IntVar * &gt; &amp;y_vars, const std::vector&lt; IntVar * &gt; &amp;x_size, const std::vector&lt; IntVar * &gt; &amp;y_size)</div><div class="ttdoc">This constraint states that all the boxes must not overlap.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a0a9ab7660c16c45e3a04547107a1f44f"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a0a9ab7660c16c45e3a04547107a1f44f">operations_research::Solver::MakeIntervalRelaxedMin</a></div><div class="ttdeci">IntervalVar * MakeIntervalRelaxedMin(IntervalVar *const interval_var)</div><div class="ttdoc">Creates and returns an interval variable that wraps around the given one, relaxing the min start and ...</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a0a054848f96f9043dac24dccecb2a47e"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a0a054848f96f9043dac24dccecb2a47e">operations_research::ModelVisitor::BeginVisitExtension</a></div><div class="ttdeci">virtual void BeginVisitExtension(const std::string &amp;type)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ab7aef297f0c654af26dc7108c9ee6c69"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ab7aef297f0c654af26dc7108c9ee6c69">operations_research::Solver::RoutingModel</a></div><div class="ttdeci">friend class RoutingModel</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02923">constraint_solver.h:2923</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a0f974867e7b4d7f51f9ae33bea50ba02"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a0f974867e7b4d7f51f9ae33bea50ba02">operations_research::Solver::MakeStoreAssignment</a></div><div class="ttdeci">DecisionBuilder * MakeStoreAssignment(Assignment *assignment)</div><div class="ttdoc">Returns a DecisionBuilder which stores an Assignment (calls void Assignment::Store())</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_afb8890710339634b60f2c59043a2b4dd"><div class="ttname"><a href="classoperations__research_1_1Solver.html#afb8890710339634b60f2c59043a2b4dd">operations_research::Solver::MakeFixedDurationStartSyncedOnStartIntervalVar</a></div><div class="ttdeci">IntervalVar * MakeFixedDurationStartSyncedOnStartIntervalVar(IntervalVar *const interval_var, int64 duration, int64 offset)</div><div class="ttdoc">Creates an interval var with a fixed duration whose start is synchronized with the start of another i...</div></div>
<div class="ttc" id="classoperations__research_1_1AssignmentContainer_html_ac376aeb350b04f9b4876dfd9284a2c70"><div class="ttname"><a href="classoperations__research_1_1AssignmentContainer.html#ac376aeb350b04f9b4876dfd9284a2c70">operations_research::AssignmentContainer::Restore</a></div><div class="ttdeci">void Restore()</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04928">constraint_solver.h:4928</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a2a7061ff47d238c40664f5501b3878b8"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a2a7061ff47d238c40664f5501b3878b8">operations_research::ModelVisitor::kIsLess</a></div><div class="ttdeci">static const char kIsLess[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03356">constraint_solver.h:3356</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_aef9101d29cf50c67521b105947f8fdcd"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#aef9101d29cf50c67521b105947f8fdcd">operations_research::IntervalVar::MustBePerformed</a></div><div class="ttdeci">virtual bool MustBePerformed() const =0</div><div class="ttdoc">These methods query, set, and watch the performed status of the interval var.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a4b0972c731faf884eba5acab99ebb2b4a4f432957a8b27277538d5ee856201a4c"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a4b0972c731faf884eba5acab99ebb2b4a4f432957a8b27277538d5ee856201a4c">operations_research::Solver::NORMAL_PRIORITY</a></div><div class="ttdoc">NORMAL_PRIORITY is the highest priority: Demons will be processed first.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00607">constraint_solver.h:607</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a94a24557456395e59c924a095f2096aaa139097881c016328ab920b3505100887"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a94a24557456395e59c924a095f2096aaa139097881c016328ab920b3505100887">operations_research::Solver::CHOOSE_RANDOM_RANK_FORWARD</a></div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00399">constraint_solver.h:399</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a62948d17defdef3995eedcf87cefe92b"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a62948d17defdef3995eedcf87cefe92b">operations_research::ModelVisitor::kFinalStatesArgument</a></div><div class="ttdeci">static const char kFinalStatesArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03435">constraint_solver.h:3435</a></div></div>
<div class="ttc" id="structoperations__research_1_1Solver_1_1SearchLogParameters_html"><div class="ttname"><a href="structoperations__research_1_1Solver_1_1SearchLogParameters.html">operations_research::Solver::SearchLogParameters</a></div><div class="ttdoc">Creates a search monitor from logging parameters.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02284">constraint_solver.h:2284</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8bda7ed6e7e533cca4c44eba6efffc8bab82ee292f55491e6068a560434f9a649"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8bab82ee292f55491e6068a560434f9a649">operations_research::Solver::INT_VAR_DEFAULT</a></div><div class="ttdoc">The default behavior is CHOOSE_FIRST_UNBOUND.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00261">constraint_solver.h:261</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntVar_html_a619ac58213bbff56398934e76dd1079f"><div class="ttname"><a href="classoperations__research_1_1IntVar.html#a619ac58213bbff56398934e76dd1079f">operations_research::IntVar::OldMax</a></div><div class="ttdeci">virtual int64 OldMax() const =0</div><div class="ttdoc">Returns the previous max.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a80075457db431f10ac45ec9d700fa763"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a80075457db431f10ac45ec9d700fa763">operations_research::ModelVisitor::kIsEqual</a></div><div class="ttdeci">static const char kIsEqual[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03353">constraint_solver.h:3353</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ac3c5b22fad8060ca1a66bd928182d8a4a3a1a321416e317c8ed906573a937ffc4"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a3a1a321416e317c8ed906573a937ffc4">operations_research::Solver::SIMPLELNS</a></div><div class="ttdoc">Operator which defines one neighbor per variable.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00552">constraint_solver.h:552</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_aaba6e77a62dd706b07a0c993f6e0a945"><div class="ttname"><a href="classoperations__research_1_1Solver.html#aaba6e77a62dd706b07a0c993f6e0a945">operations_research::Solver::MakeSimulatedAnnealing</a></div><div class="ttdeci">SearchMonitor * MakeSimulatedAnnealing(bool maximize, IntVar *const v, int64 step, int64 initial_temperature)</div><div class="ttdoc">Creates a Simulated Annealing monitor.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a5dfe92f44918889831f51375e91ffa01"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a5dfe92f44918889831f51375e91ffa01">operations_research::ModelVisitor::kIndexOf</a></div><div class="ttdeci">static const char kIndexOf[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03323">constraint_solver.h:3323</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ab6302978f1de57bdeafa0ffee05c92c9ad02b3b6c25bdd69c2735af0dcd7c3aa8"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9ad02b3b6c25bdd69c2735af0dcd7c3aa8">operations_research::Solver::ENDS_AT_START</a></div><div class="ttdoc">t1 ends at t2 start, i.e. End(t1) == Start(t2) + delay.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00623">constraint_solver.h:623</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_a20ff4a7e8f872abc11d9c0a619f8c671"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#a20ff4a7e8f872abc11d9c0a619f8c671">operations_research::IntervalVarElement::Bound</a></div><div class="ttdeci">bool Bound() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04741">constraint_solver.h:4741</a></div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html_a467ca023ad6d3a5c4ffbdba1391f80cb"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html#a467ca023ad6d3a5c4ffbdba1391f80cb">operations_research::SolutionCollector::PopSolution</a></div><div class="ttdeci">void PopSolution()</div><div class="ttdoc">Remove and delete the last popped solution.</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_ab9f7970e317fa45b497c484a00485b1f"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#ab9f7970e317fa45b497c484a00485b1f">operations_research::Assignment::SetObjectiveValue</a></div><div class="ttdeci">void SetObjectiveValue(int64 value)</div></div>
<div class="ttc" id="classoperations__research_1_1Rev_html_a614fdcd3e96dc71b0c580f29026380ec"><div class="ttname"><a href="classoperations__research_1_1Rev.html#a614fdcd3e96dc71b0c580f29026380ec">operations_research::Rev::SetValue</a></div><div class="ttdeci">void SetValue(Solver *const s, const T &amp;val)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03722">constraint_solver.h:3722</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntExpr_html_a6efc4d555955044d64aca04be757e367"><div class="ttname"><a href="classoperations__research_1_1IntExpr.html#a6efc4d555955044d64aca04be757e367">operations_research::IntExpr::~IntExpr</a></div><div class="ttdeci">~IntExpr() override</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03820">constraint_solver.h:3820</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_ac050b2f234e7b4deaa197572c1b4cc69"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#ac050b2f234e7b4deaa197572c1b4cc69">operations_research::ModelVisitor::kAllDifferent</a></div><div class="ttdeci">static const char kAllDifferent[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03320">constraint_solver.h:3320</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a4140a32d9cc0d4700ef8cd391e20f635"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a4140a32d9cc0d4700ef8cd391e20f635">operations_research::Solver::MakePack</a></div><div class="ttdeci">Pack * MakePack(const std::vector&lt; IntVar * &gt; &amp;vars, int number_of_bins)</div><div class="ttdoc">--— Packing constraint --—</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a17a5e13f2f630fd1566794ac31087fb1"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a17a5e13f2f630fd1566794ac31087fb1">operations_research::Assignment::Restore</a></div><div class="ttdeci">void Restore()</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a01d92f3ca676da6aecf64fd91fbcf1b5"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a01d92f3ca676da6aecf64fd91fbcf1b5">operations_research::Solver::MakeIntervalVarRelationWithDelay</a></div><div class="ttdeci">Constraint * MakeIntervalVarRelationWithDelay(IntervalVar *const t1, BinaryIntervalRelation r, IntervalVar *const t2, int64 delay)</div><div class="ttdoc">This method creates a relation between two interval vars.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a9b0ec9bf06a8b303a2402cd55242236d"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a9b0ec9bf06a8b303a2402cd55242236d">operations_research::ModelVisitor::kStepArgument</a></div><div class="ttdeci">static const char kStepArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03467">constraint_solver.h:3467</a></div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html_a15e81047afe54184915345326a7cdaa6"><div class="ttname"><a href="classoperations__research_1_1Pack.html#a15e81047afe54184915345326a7cdaa6">operations_research::Pack::Assign</a></div><div class="ttdeci">void Assign(int var_index, int bin_index)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_af2dd63ac2ae9f837cfab35b13176dc38"><div class="ttname"><a href="classoperations__research_1_1Solver.html#af2dd63ac2ae9f837cfab35b13176dc38">operations_research::Solver::MakeAllSolutionCollector</a></div><div class="ttdeci">SolutionCollector * MakeAllSolutionCollector()</div><div class="ttdoc">Collect all solutions of the search.</div></div>
<div class="ttc" id="classoperations__research_1_1DecisionVisitor_html_a00084fcd22fc7f269b23dbfd5aa1032f"><div class="ttname"><a href="classoperations__research_1_1DecisionVisitor.html#a00084fcd22fc7f269b23dbfd5aa1032f">operations_research::DecisionVisitor::VisitRankFirstInterval</a></div><div class="ttdeci">virtual void VisitRankFirstInterval(SequenceVar *const sequence, int index)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_aeb2e6947882d148bfaece200f5c6b131"><div class="ttname"><a href="classoperations__research_1_1Solver.html#aeb2e6947882d148bfaece200f5c6b131">operations_research::Solver::InstrumentsDemons</a></div><div class="ttdeci">bool InstrumentsDemons() const</div><div class="ttdoc">Returns whether we are instrumenting demons.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a121897bbc632a6e27428666949b781e9"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a121897bbc632a6e27428666949b781e9">operations_research::Solver::TopProgressPercent</a></div><div class="ttdeci">int TopProgressPercent()</div><div class="ttdoc">Returns a percentage representing the propress of the search before reaching the limits of the top-le...</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a76e55486b1fb81a4860bd6a2321648d7"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a76e55486b1fb81a4860bd6a2321648d7">operations_research::ModelVisitor::kNextsArgument</a></div><div class="ttdeci">static const char kNextsArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03449">constraint_solver.h:3449</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8e9cbe2323b10c6b49da625f5bae14c0a1ed30b8b721fbabcd346c23b61ba8f7b"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8e9cbe2323b10c6b49da625f5bae14c0a1ed30b8b721fbabcd346c23b61ba8f7b">operations_research::Solver::EQ</a></div><div class="ttdoc">Move is accepted when the current objective value is in the interval objective.Min .</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00592">constraint_solver.h:592</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_ab5bba882c8c44098d624f9c17b3dc0b9"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#ab5bba882c8c44098d624f9c17b3dc0b9">operations_research::Assignment::DeactivateObjective</a></div><div class="ttdeci">void DeactivateObjective()</div></div>
<div class="ttc" id="classoperations__research_1_1SearchMonitor_html_ab98b6cd2d173adb819adff4e1839f10b"><div class="ttname"><a href="classoperations__research_1_1SearchMonitor.html#ab98b6cd2d173adb819adff4e1839f10b">operations_research::SearchMonitor::ExitSearch</a></div><div class="ttdeci">virtual void ExitSearch()</div><div class="ttdoc">End of the search.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a644bf665c00f8b9447bdcb5f18590ee9"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a644bf665c00f8b9447bdcb5f18590ee9">operations_research::Solver::accepted_neighbors</a></div><div class="ttdeci">int64 accepted_neighbors() const</div><div class="ttdoc">The number of accepted neighbors.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00990">constraint_solver.h:990</a></div></div>
<div class="ttc" id="classoperations__research_1_1PropagationBaseObject_html_a4a7285479f5e0fa7663c043cdfc7dd61"><div class="ttname"><a href="classoperations__research_1_1PropagationBaseObject.html#a4a7285479f5e0fa7663c043cdfc7dd61">operations_research::PropagationBaseObject::ExecuteAll</a></div><div class="ttdeci">void ExecuteAll(const SimpleRevFIFO&lt; Demon * &gt; &amp;demons)</div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html_a9e64163be6305d1ff5330b472f70a7bb"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html#a9e64163be6305d1ff5330b472f70a7bb">operations_research::SolutionCollector::SolutionCollector</a></div><div class="ttdeci">SolutionCollector(Solver *const solver, const Assignment *assignment)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_aff9d2ee8b32e16581d3b5838f1d56e21"><div class="ttname"><a href="classoperations__research_1_1Solver.html#aff9d2ee8b32e16581d3b5838f1d56e21">operations_research::Solver::MakeFailuresLimit</a></div><div class="ttdeci">RegularLimit * MakeFailuresLimit(int64 failures)</div><div class="ttdoc">Creates a search limit that constrains the number of failures that can happen when exploring the sear...</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a53ea0cb612f72835754ca2d0c5a3c51c"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a53ea0cb612f72835754ca2d0c5a3c51c">operations_research::Solver::MakeLessOrEqual</a></div><div class="ttdeci">Constraint * MakeLessOrEqual(IntExpr *const left, IntExpr *const right)</div><div class="ttdoc">left &lt;= right</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a8ac9667afec105d8f4ca359160d7245c"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a8ac9667afec105d8f4ca359160d7245c">operations_research::ModelVisitor::kMember</a></div><div class="ttdeci">static const char kMember[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03366">constraint_solver.h:3366</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ae49d5791dd8bb104be6a25c30cf59de6"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ae49d5791dd8bb104be6a25c30cf59de6">operations_research::Solver::set_optimization_direction</a></div><div class="ttdeci">void set_optimization_direction(OptimizationDirection direction)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l01003">constraint_solver.h:1003</a></div></div>
<div class="ttc" id="structoperations__research_1_1Solver_1_1IntegerCastInfo_html"><div class="ttname"><a href="structoperations__research_1_1Solver_1_1IntegerCastInfo.html">operations_research::Solver::IntegerCastInfo</a></div><div class="ttdoc">Holds semantic information stating that the 'expression' has been cast into 'variable' using the Var(...</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00244">constraint_solver.h:244</a></div></div>
<div class="ttc" id="classoperations__research_1_1OptimizeVar_html_a7a8a943a24864d59725e423490e86dfb"><div class="ttname"><a href="classoperations__research_1_1OptimizeVar.html#a7a8a943a24864d59725e423490e86dfb">operations_research::OptimizeVar::maximize_</a></div><div class="ttdeci">bool maximize_</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04215">constraint_solver.h:4215</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_abe0c38990d5922ce0b7b8674c5c9cdd8"><div class="ttname"><a href="classoperations__research_1_1Solver.html#abe0c38990d5922ce0b7b8674c5c9cdd8">operations_research::Solver::MakeIsMemberCt</a></div><div class="ttdeci">Constraint * MakeIsMemberCt(IntExpr *const expr, const std::vector&lt; int64 &gt; &amp;values, IntVar *const boolvar)</div><div class="ttdoc">boolvar == (expr in set)</div></div>
<div class="ttc" id="classoperations__research_1_1DecisionBuilder_html_a62372947c9ce93ba28cb636a635433d7"><div class="ttname"><a href="classoperations__research_1_1DecisionBuilder.html#a62372947c9ce93ba28cb636a635433d7">operations_research::DecisionBuilder::Accept</a></div><div class="ttdeci">virtual void Accept(ModelVisitor *const visitor) const</div></div>
<div class="ttc" id="classoperations__research_1_1OptimizeVar_html_a5f4f2dec1c3aaaac9f795c2b90023dcc"><div class="ttname"><a href="classoperations__research_1_1OptimizeVar.html#a5f4f2dec1c3aaaac9f795c2b90023dcc">operations_research::OptimizeVar::~OptimizeVar</a></div><div class="ttdeci">~OptimizeVar() override</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ad8d269e222a882295b43ebf8dc4ec83a"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ad8d269e222a882295b43ebf8dc4ec83a">operations_research::Solver::state</a></div><div class="ttdeci">SolverState state() const</div><div class="ttdoc">State of the solver.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00939">constraint_solver.h:939</a></div></div>
<div class="ttc" id="structoperations__research_1_1DefaultPhaseParameters_html_ab0fe50ca88d7e5f45ae9db09d2bd2fec"><div class="ttname"><a href="structoperations__research_1_1DefaultPhaseParameters.html#ab0fe50ca88d7e5f45ae9db09d2bd2fec">operations_research::DefaultPhaseParameters::value_selection_schema</a></div><div class="ttdeci">ValueSelection value_selection_schema</div><div class="ttdoc">This parameter describes which value to select for a given var.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00176">constraint_solver.h:176</a></div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVar_html_ae44ab42e06f43ced3bd04b251965b73f"><div class="ttname"><a href="classoperations__research_1_1SequenceVar.html#ae44ab42e06f43ced3bd04b251965b73f">operations_research::SequenceVar::RankFirst</a></div><div class="ttdeci">void RankFirst(int index)</div><div class="ttdoc">Ranks the index_th interval var first of all unranked interval vars.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_aa32f0bc3ea5eea881da14daadaa817fc"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#aa32f0bc3ea5eea881da14daadaa817fc">operations_research::ModelVisitor::VisitIntegerVariableArrayArgument</a></div><div class="ttdeci">virtual void VisitIntegerVariableArrayArgument(const std::string &amp;arg_name, const std::vector&lt; IntVar * &gt; &amp;arguments)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_abb737b44b0a0335d550d2a740ba00236"><div class="ttname"><a href="classoperations__research_1_1Solver.html#abb737b44b0a0335d550d2a740ba00236">operations_research::Solver::SearchLimit</a></div><div class="ttdeci">friend class SearchLimit</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02922">constraint_solver.h:2922</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a45ce1ff8007e76e844d2ec32e740b3d9"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a45ce1ff8007e76e844d2ec32e740b3d9">operations_research::Solver::RevAllocArray</a></div><div class="ttdeci">T * RevAllocArray(T *object)</div><div class="ttdoc">Like RevAlloc() above, but for an array of objects: the array must have been allocated with the new[]...</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00787">constraint_solver.h:787</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntVar_html_afa4460e0dd9745ad24b99d08d853f3a4"><div class="ttname"><a href="classoperations__research_1_1IntVar.html#afa4460e0dd9745ad24b99d08d853f3a4">operations_research::IntVar::RemoveValue</a></div><div class="ttdeci">virtual void RemoveValue(int64 v)=0</div><div class="ttdoc">This method removes the value 'v' from the domain of the variable.</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a240108b6b72b6f8ea4a479095b36504b"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a240108b6b72b6f8ea4a479095b36504b">operations_research::Assignment::ForwardSequence</a></div><div class="ttdeci">const std::vector&lt; int &gt; &amp; ForwardSequence(const SequenceVar *const var) const</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_aee80fc5cd33bc3ea9d99ec892ad9d610"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#aee80fc5cd33bc3ea9d99ec892ad9d610">operations_research::IntervalVar::SetStartMin</a></div><div class="ttdeci">virtual void SetStartMin(int64 m)=0</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a707803108150b1bd31cb496ac5ce42f2"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a707803108150b1bd31cb496ac5ce42f2">operations_research::ModelVisitor::kDurationMinArgument</a></div><div class="ttdeci">static const char kDurationMinArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03427">constraint_solver.h:3427</a></div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html_a99f5a376a7479ced58f234f6d696094f"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html#a99f5a376a7479ced58f234f6d696094f">operations_research::SolutionCollector::objective_value</a></div><div class="ttdeci">int64 objective_value(int n) const</div><div class="ttdoc">Returns the objective value of the nth solution.</div></div>
<div class="ttc" id="classoperations__research_1_1AssignmentContainer_html_ac4fc0cfe7060f5cf2e37c03b7b9a0b7f"><div class="ttname"><a href="classoperations__research_1_1AssignmentContainer.html#ac4fc0cfe7060f5cf2e37c03b7b9a0b7f">operations_research::AssignmentContainer::Store</a></div><div class="ttdeci">void Store()</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04923">constraint_solver.h:4923</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a5deb6524933e21a8cd1c3563f5cd3c4d"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a5deb6524933e21a8cd1c3563f5cd3c4d">operations_research::Solver::Compose</a></div><div class="ttdeci">DecisionBuilder * Compose(DecisionBuilder *const db1, DecisionBuilder *const db2)</div><div class="ttdoc">Creates a decision builder which sequentially composes decision builders.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a10322a6adaa9c514e927c50ebbf15f4a"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a10322a6adaa9c514e927c50ebbf15f4a">operations_research::ModelVisitor::VisitIntegerMatrixArgument</a></div><div class="ttdeci">virtual void VisitIntegerMatrixArgument(const std::string &amp;arg_name, const IntTupleSet &amp;tuples)</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_aab465f88252c7db74615834bfe9c95fb"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#aab465f88252c7db74615834bfe9c95fb">operations_research::IntervalVar::SetEndMin</a></div><div class="ttdeci">virtual void SetEndMin(int64 m)=0</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_aa4372845801e7c83acbdfc7fa59d2fb2"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#aa4372845801e7c83acbdfc7fa59d2fb2">operations_research::IntervalVar::SetStartRange</a></div><div class="ttdeci">virtual void SetStartRange(int64 mi, int64 ma)=0</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ae63acd77b8c2ee40387795051298f659a13d07bd4fac1cf9de979eaa59bb9089b"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659a13d07bd4fac1cf9de979eaa59bb9089b">operations_research::Solver::ASSIGN_MAX_VALUE</a></div><div class="ttdoc">Selects the max value of the selected variable.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00351">constraint_solver.h:351</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ae21b3786b7770dc880343e4a1445b424ae24e4970fab2a37e23eaa50c783fd6e7"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ae21b3786b7770dc880343e4a1445b424ae24e4970fab2a37e23eaa50c783fd6e7">operations_research::Solver::INTERVAL_SIMPLE</a></div><div class="ttdoc">The simple is INTERVAL_SET_TIMES_FORWARD.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00408">constraint_solver.h:408</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a45534161a4dda7e1997bc0effd606648"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a45534161a4dda7e1997bc0effd606648">operations_research::Solver::Fail</a></div><div class="ttdeci">void Fail()</div><div class="ttdoc">Abandon the current branch in the search tree. A backtrack will follow.</div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html_ae82f80cca2acf98982b3c0eb5cc96d03"><div class="ttname"><a href="classoperations__research_1_1Pack.html#ae82f80cca2acf98982b3c0eb5cc96d03">operations_research::Pack::AddWeightedSumEqualVarDimension</a></div><div class="ttdeci">void AddWeightedSumEqualVarDimension(const std::vector&lt; int64 &gt; &amp;weights, const std::vector&lt; IntVar * &gt; &amp;loads)</div><div class="ttdoc">This dimension imposes that for all bins b, the weighted sum (weights[i]) of all objects i assigned t...</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a6f83fe983be47faffe412c1d3ba85877"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a6f83fe983be47faffe412c1d3ba85877">operations_research::ModelVisitor::kInt64ToInt64Extension</a></div><div class="ttdeci">static const char kInt64ToInt64Extension[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03405">constraint_solver.h:3405</a></div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html_a424f3f1c33e8a55ec2ad31d66b4fa226"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html#a424f3f1c33e8a55ec2ad31d66b4fa226">operations_research::SolutionCollector::Push</a></div><div class="ttdeci">void Push(const SolutionData &amp;data)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04164">constraint_solver.h:4164</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a83e14be9c6bba9abdd1949c25c32a60da79c510d187e0d3ef01df628731231ec1"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a83e14be9c6bba9abdd1949c25c32a60da79c510d187e0d3ef01df628731231ec1">operations_research::Solver::CROSS_DATE</a></div><div class="ttdoc">STARTS_BEFORE and ENDS_AFTER at the same time, i.e.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00667">constraint_solver.h:667</a></div></div>
<div class="ttc" id="classoperations__research_1_1AssignmentContainer_html_a4d04b95d5dd08e9c6466eea81801d931"><div class="ttname"><a href="classoperations__research_1_1AssignmentContainer.html#a4d04b95d5dd08e9c6466eea81801d931">operations_research::AssignmentContainer::ElementPtrOrNull</a></div><div class="ttdeci">const E * ElementPtrOrNull(const V *const var) const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04912">constraint_solver.h:4912</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_a7d9e6870b3d7d594cbcef37f57b088e0"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#a7d9e6870b3d7d594cbcef37f57b088e0">operations_research::IntervalVarElement::DurationMin</a></div><div class="ttdeci">int64 DurationMin() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04683">constraint_solver.h:4683</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ae63acd77b8c2ee40387795051298f659a78588d0b2a789c20c1252eaffed29e50"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659a78588d0b2a789c20c1252eaffed29e50">operations_research::Solver::INT_VALUE_SIMPLE</a></div><div class="ttdoc">The simple selection is ASSIGN_MIN_VALUE.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00345">constraint_solver.h:345</a></div></div>
<div class="ttc" id="classoperations__research_1_1PropagationBaseObject_html_ab34671f68433c582260a443f3d15bfae"><div class="ttname"><a href="classoperations__research_1_1PropagationBaseObject.html#ab34671f68433c582260a443f3d15bfae">operations_research::PropagationBaseObject::BaseName</a></div><div class="ttdeci">virtual std::string BaseName() const</div><div class="ttdoc">Returns a base name for automatic naming.</div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVarElement_html_a40179b14fb9451e5d8f6fc3666a6caa9"><div class="ttname"><a href="classoperations__research_1_1SequenceVarElement.html#a40179b14fb9451e5d8f6fc3666a6caa9">operations_research::SequenceVarElement::SequenceVarElement</a></div><div class="ttdeci">SequenceVarElement()</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_abc81aee53f65168867b3fcff003fd584"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#abc81aee53f65168867b3fcff003fd584">operations_research::ModelVisitor::kIsBetween</a></div><div class="ttdeci">static const char kIsBetween[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03351">constraint_solver.h:3351</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8f5eee399d887d3f3f0bfebec6096cc3"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8f5eee399d887d3f3f0bfebec6096cc3">operations_research::Solver::MakeIsGreaterOrEqualCstCt</a></div><div class="ttdeci">Constraint * MakeIsGreaterOrEqualCstCt(IntExpr *const var, int64 value, IntVar *const boolvar)</div><div class="ttdoc">boolvar == (var &gt;= value)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_afa66a85cec14980401bb16d4f4a84aa1"><div class="ttname"><a href="classoperations__research_1_1Solver.html#afa66a85cec14980401bb16d4f4a84aa1">operations_research::Solver::SetUseFastLocalSearch</a></div><div class="ttdeci">void SetUseFastLocalSearch(bool use_fast_local_search)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02856">constraint_solver.h:2856</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a68d0ff1edb8a26a4e9ecb7794313298c"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a68d0ff1edb8a26a4e9ecb7794313298c">operations_research::ModelVisitor::kDivide</a></div><div class="ttdeci">static const char kDivide[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03335">constraint_solver.h:3335</a></div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html">operations_research::SolutionCollector</a></div><div class="ttdoc">-------— Solution Collectors -------—</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04083">constraint_solver.h:4083</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_af3f5c65aeb337203e6b0bf80ce2dd09c"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#af3f5c65aeb337203e6b0bf80ce2dd09c">operations_research::ModelVisitor::kAllowedAssignments</a></div><div class="ttdeci">static const char kAllowedAssignments[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03321">constraint_solver.h:3321</a></div></div>
<div class="ttc" id="structoperations__research_1_1DefaultPhaseParameters_html_aa1ee3388a187cc5465d43d25ac9ab1f1"><div class="ttname"><a href="structoperations__research_1_1DefaultPhaseParameters.html#aa1ee3388a187cc5465d43d25ac9ab1f1">operations_research::DefaultPhaseParameters::VariableSelection</a></div><div class="ttdeci">VariableSelection</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00158">constraint_solver.h:158</a></div></div>
<div class="ttc" id="structoperations__research_1_1SolutionCollector_1_1SolutionData_html_a0e535f078ff1680ca4c2610d3d0c2afc"><div class="ttname"><a href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html#a0e535f078ff1680ca4c2610d3d0c2afc">operations_research::SolutionCollector::SolutionData::solution</a></div><div class="ttdeci">Assignment * solution</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04150">constraint_solver.h:4150</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a31446874c1dc3fd6e1e81b85f0be282f"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a31446874c1dc3fd6e1e81b85f0be282f">operations_research::Solver::MakeCover</a></div><div class="ttdeci">Constraint * MakeCover(const std::vector&lt; IntervalVar * &gt; &amp;vars, IntervalVar *const target_var)</div><div class="ttdoc">This constraint states that the target_var is the convex hull of the intervals.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a95f09c393e1c513ff4bc15522a854633"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a95f09c393e1c513ff4bc15522a854633">operations_research::Solver::MakeDiv</a></div><div class="ttdeci">IntExpr * MakeDiv(IntExpr *const expr, int64 value)</div><div class="ttdoc">expr / value (integer division)</div></div>
<div class="ttc" id="classoperations__research_1_1DecisionBuilder_html"><div class="ttname"><a href="classoperations__research_1_1DecisionBuilder.html">operations_research::DecisionBuilder</a></div><div class="ttdoc">A DecisionBuilder is responsible for creating the search tree.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03249">constraint_solver.h:3249</a></div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVar_html_a4e4a8cbd11cbf363fe073dca6e757b37"><div class="ttname"><a href="classoperations__research_1_1SequenceVar.html#a4e4a8cbd11cbf363fe073dca6e757b37">operations_research::SequenceVar::RankNotLast</a></div><div class="ttdeci">void RankNotLast(int index)</div><div class="ttdoc">Indicates that the index_th interval var will not be ranked first of all currently unranked interval ...</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_af9873f0b909de865b771b6168eafc78b"><div class="ttname"><a href="classoperations__research_1_1Solver.html#af9873f0b909de865b771b6168eafc78b">operations_research::Solver::stamp</a></div><div class="ttdeci">uint64 stamp() const</div><div class="ttdoc">The stamp indicates how many moves in the search tree we have performed.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_ad7801044121f6bd969c646fa17721eef"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#ad7801044121f6bd969c646fa17721eef">operations_research::ModelVisitor::kCoefficientsArgument</a></div><div class="ttdeci">static const char kCoefficientsArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03421">constraint_solver.h:3421</a></div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVarElement_html_a25c73fd837475a0ae2ca740a1eb4d0aa"><div class="ttname"><a href="classoperations__research_1_1SequenceVarElement.html#a25c73fd837475a0ae2ca740a1eb4d0aa">operations_research::SequenceVarElement::WriteToProto</a></div><div class="ttdeci">void WriteToProto(SequenceVarAssignment *sequence_var_assignment_proto) const</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a977f97618d061bd656919818a3e5b63c"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a977f97618d061bd656919818a3e5b63c">operations_research::Solver::ReSeed</a></div><div class="ttdeci">void ReSeed(int32 seed)</div><div class="ttdoc">Reseed the solver random generator.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02818">constraint_solver.h:2818</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ad47d47ea8e05e2187fcb81ae1dea508a"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ad47d47ea8e05e2187fcb81ae1dea508a">operations_research::Solver::DefaultSolverParameters</a></div><div class="ttdeci">static ConstraintSolverParameters DefaultSolverParameters()</div><div class="ttdoc">Create a ConstraintSolverParameters proto with all the default values.</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_ad18a61ff8de4c3e7ec78a7e12a480af3"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#ad18a61ff8de4c3e7ec78a7e12a480af3">operations_research::Assignment::IntervalVarContainer</a></div><div class="ttdeci">const IntervalContainer &amp; IntervalVarContainer() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l05158">constraint_solver.h:5158</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a95bd74b66ab1626c7d7cb8b4c083463f"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a95bd74b66ab1626c7d7cb8b4c083463f">operations_research::Assignment::SetObjectiveMax</a></div><div class="ttdeci">void SetObjectiveMax(int64 m)</div></div>
<div class="ttc" id="classoperations__research_1_1PropagationBaseObject_html_a5dd87cd906d80738f8727fda04bc5ace"><div class="ttname"><a href="classoperations__research_1_1PropagationBaseObject.html#a5dd87cd906d80738f8727fda04bc5ace">operations_research::PropagationBaseObject::EnqueueDelayedDemon</a></div><div class="ttdeci">void EnqueueDelayedDemon(Demon *const d)</div><div class="ttdoc">This method pushes the demon onto the propagation queue.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03173">constraint_solver.h:3173</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntVarElement_html_aee7b64f549193b551ca2cdcc5230e37d"><div class="ttname"><a href="classoperations__research_1_1IntVarElement.html#aee7b64f549193b551ca2cdcc5230e37d">operations_research::IntVarElement::Reset</a></div><div class="ttdeci">void Reset(IntVar *const var)</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_ad13e04b607579ab1edded8f7bc558da4"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#ad13e04b607579ab1edded8f7bc558da4">operations_research::ModelVisitor::kTrace</a></div><div class="ttdeci">static const char kTrace[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03395">constraint_solver.h:3395</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a5b5712802e63dcd3ee5abfd37e0f2a95a0e9b4a7467a4d4f1a7da211e6c59251e"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a5b5712802e63dcd3ee5abfd37e0f2a95a0e9b4a7467a4d4f1a7da211e6c59251e">operations_research::Solver::IN_ROOT_NODE</a></div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00711">constraint_solver.h:711</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ada8d3fd4401506308d77417b72c66dfe"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ada8d3fd4401506308d77417b72c66dfe">operations_research::Solver::ShouldFail</a></div><div class="ttdeci">void ShouldFail()</div><div class="ttdoc">These methods are only useful for the SWIG wrappers, which need a way to externally cause the Solver ...</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02957">constraint_solver.h:2957</a></div></div>
<div class="ttc" id="classoperations__research_1_1OptimizeVar_html_a229d2a4ba25ff904b6504ba41161721a"><div class="ttname"><a href="classoperations__research_1_1OptimizeVar.html#a229d2a4ba25ff904b6504ba41161721a">operations_research::OptimizeVar::var_</a></div><div class="ttdeci">IntVar *const var_</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04212">constraint_solver.h:4212</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ac3c5b22fad8060ca1a66bd928182d8a4aae749f308386810f29338c96daf0e4f8"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4aae749f308386810f29338c96daf0e4f8">operations_research::Solver::PATHLNS</a></div><div class="ttdoc">Operator which relaxes two sub-chains of three consecutive arcs each.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00519">constraint_solver.h:519</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a6d2ae179cd6e66dc4cfd14307126b2cb"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a6d2ae179cd6e66dc4cfd14307126b2cb">operations_research::Solver::PushState</a></div><div class="ttdeci">void PushState()</div><div class="ttdoc">The PushState and PopState methods manipulates the states of the reversible objects.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a74b062753c96d5652f1f0fe4faa2d3a9"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a74b062753c96d5652f1f0fe4faa2d3a9">operations_research::ModelVisitor::kCountArgument</a></div><div class="ttdeci">static const char kCountArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03422">constraint_solver.h:3422</a></div></div>
<div class="ttc" id="classoperations__research_1_1InitAndGetValues_html_abb257dd5cc47ff82a1be987c6f0614c7"><div class="ttname"><a href="classoperations__research_1_1InitAndGetValues.html#abb257dd5cc47ff82a1be987c6f0614c7">operations_research::InitAndGetValues::InitAndGetValues</a></div><div class="ttdeci">InitAndGetValues(IntVarIterator *it)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03924">constraint_solver.h:3924</a></div></div>
<div class="ttc" id="structoperations__research_1_1DefaultPhaseParameters_html_a57b6ace15b9d8666f76c6618d8addc1da31fef74cca87cb00faf89405448bf546"><div class="ttname"><a href="structoperations__research_1_1DefaultPhaseParameters.html#a57b6ace15b9d8666f76c6618d8addc1da31fef74cca87cb00faf89405448bf546">operations_research::DefaultPhaseParameters::NORMAL</a></div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00169">constraint_solver.h:169</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_afe3dbddb20591c19ba69dcaad778f0f6"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#afe3dbddb20591c19ba69dcaad778f0f6">operations_research::IntervalVarElement::Clone</a></div><div class="ttdeci">IntervalVarElement * Clone()</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a83e14be9c6bba9abdd1949c25c32a60da5228c64950eccf096f9847d100100b8a"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a83e14be9c6bba9abdd1949c25c32a60da5228c64950eccf096f9847d100100b8a">operations_research::Solver::STARTS_AFTER</a></div><div class="ttdoc">t starts after d, i.e. Start(t) &gt;= d.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00656">constraint_solver.h:656</a></div></div>
<div class="ttc" id="classoperations__research_1_1NumericalRevArray_html_a837710ab5c022c6ad8d0569847b40f84"><div class="ttname"><a href="classoperations__research_1_1NumericalRevArray.html#a837710ab5c022c6ad8d0569847b40f84">operations_research::NumericalRevArray::NumericalRevArray</a></div><div class="ttdeci">NumericalRevArray(int size, const T &amp;val)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03799">constraint_solver.h:3799</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_af6888b151e4711476ed1e0d64732ac44"><div class="ttname"><a href="classoperations__research_1_1Solver.html#af6888b151e4711476ed1e0d64732ac44">operations_research::Solver::InstrumentsVariables</a></div><div class="ttdeci">bool InstrumentsVariables() const</div><div class="ttdoc">Returns whether we are tracing variables.</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_a63fec77c7b642a175000409de73b6374"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#a63fec77c7b642a175000409de73b6374">operations_research::IntervalVarElement::SetEndMin</a></div><div class="ttdeci">void SetEndMin(int64 m)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04721">constraint_solver.h:4721</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a5b5712802e63dcd3ee5abfd37e0f2a95a401b0c79d1fa9261524343fce4dd5439"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a5b5712802e63dcd3ee5abfd37e0f2a95a401b0c79d1fa9261524343fce4dd5439">operations_research::Solver::NO_MORE_SOLUTIONS</a></div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00714">constraint_solver.h:714</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_ae7ca6eb46e7d8d939a22aec0ee528234"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#ae7ca6eb46e7d8d939a22aec0ee528234">operations_research::ModelVisitor::kPerformedExpr</a></div><div class="ttdeci">static const char kPerformedExpr[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03379">constraint_solver.h:3379</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_a31c0e8c0739a67e401a41b93ce0cf055"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#a31c0e8c0739a67e401a41b93ce0cf055">operations_research::IntervalVarElement::SetPerformedRange</a></div><div class="ttdeci">void SetPerformedRange(int64 mi, int64 ma)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04733">constraint_solver.h:4733</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ab46fa9dd348f4228f9b830fcf8ab0ca6"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ab46fa9dd348f4228f9b830fcf8ab0ca6">operations_research::Solver::MakeSearchLog</a></div><div class="ttdeci">SearchMonitor * MakeSearchLog(int branch_period)</div><div class="ttdoc">--— Search Log --— The SearchMonitors below will display a periodic search log on LOG(INFO) every bra...</div></div>
<div class="ttc" id="classoperations__research_1_1SearchLimit_html_a8f26a36c2c4d7738c37eba2ae7e26f3e"><div class="ttname"><a href="classoperations__research_1_1SearchLimit.html#a8f26a36c2c4d7738c37eba2ae7e26f3e">operations_research::SearchLimit::Copy</a></div><div class="ttdeci">virtual void Copy(const SearchLimit *const limit)=0</div><div class="ttdoc">Copy a limit.</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_a9faf5408c656a03df7409463db6e97a3"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#a9faf5408c656a03df7409463db6e97a3">operations_research::IntervalVarElement::SetEndValue</a></div><div class="ttdeci">void SetEndValue(int64 v)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04727">constraint_solver.h:4727</a></div></div>
<div class="ttc" id="classoperations__research_1_1RegularLimit_html_a57e044adfe2b59e031d3772fc218eef7"><div class="ttname"><a href="classoperations__research_1_1RegularLimit.html#a57e044adfe2b59e031d3772fc218eef7">operations_research::RegularLimit::Init</a></div><div class="ttdeci">void Init() override</div><div class="ttdoc">This method is called when the search limit is initialized.</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_ae52a3d79c5e89b8661928c6439d9e107"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#ae52a3d79c5e89b8661928c6439d9e107">operations_research::Assignment::SetEndValue</a></div><div class="ttdeci">void SetEndValue(const IntervalVar *const var, int64 value)</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_afb060e70086680308813304d51bd2160"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#afb060e70086680308813304d51bd2160">operations_research::IntervalVarElement::SetStartValue</a></div><div class="ttdeci">void SetStartValue(int64 v)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04707">constraint_solver.h:4707</a></div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html_af13898c8553d217fa3d52c6e2b504f8d"><div class="ttname"><a href="classoperations__research_1_1Pack.html#af13898c8553d217fa3d52c6e2b504f8d">operations_research::Pack::OneDomain</a></div><div class="ttdeci">void OneDomain(int var_index)</div></div>
<div class="ttc" id="classoperations__research_1_1OptimizeVar_html_abc92b023a2273899160c0997007c6ca8"><div class="ttname"><a href="classoperations__research_1_1OptimizeVar.html#abc92b023a2273899160c0997007c6ca8">operations_research::OptimizeVar::found_initial_solution_</a></div><div class="ttdeci">bool found_initial_solution_</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04216">constraint_solver.h:4216</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a5f87c832967334179f0f9c8d05380847"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a5f87c832967334179f0f9c8d05380847">operations_research::Solver::DecisionModification</a></div><div class="ttdeci">DecisionModification</div><div class="ttdoc">The Solver is responsible for creating the search tree.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00680">constraint_solver.h:680</a></div></div>
<div class="ttc" id="classoperations__research_1_1PropagationBaseObject_html_afa9385e35090e310e58fc4cb6fd5d606"><div class="ttname"><a href="classoperations__research_1_1PropagationBaseObject.html#afa9385e35090e310e58fc4cb6fd5d606">operations_research::PropagationBaseObject::PropagationBaseObject</a></div><div class="ttdeci">PropagationBaseObject(Solver *const s)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03151">constraint_solver.h:3151</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a2ea28ee541988d173f0cb43eb8eed02a"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a2ea28ee541988d173f0cb43eb8eed02a">operations_research::ModelVisitor::kInt64ToBoolExtension</a></div><div class="ttdeci">static const char kInt64ToBoolExtension[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03404">constraint_solver.h:3404</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntExpr_html_a751d151bfe120bc6d378c4570505cbd4"><div class="ttname"><a href="classoperations__research_1_1IntExpr.html#a751d151bfe120bc6d378c4570505cbd4">operations_research::IntExpr::Var</a></div><div class="ttdeci">virtual IntVar * Var()=0</div><div class="ttdoc">Creates a variable from the expression.</div></div>
<div class="ttc" id="classoperations__research_1_1Demon_html_a906a1bd16d33b9b841e68b2a06bbbfd2"><div class="ttname"><a href="classoperations__research_1_1Demon.html#a906a1bd16d33b9b841e68b2a06bbbfd2">operations_research::Demon::DebugString</a></div><div class="ttdeci">std::string DebugString() const override</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a8f1f48670d847343b04f8bacd77686e8"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a8f1f48670d847343b04f8bacd77686e8">operations_research::Assignment::IntContainer</a></div><div class="ttdeci">AssignmentContainer&lt; IntVar, IntVarElement &gt; IntContainer</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l05007">constraint_solver.h:5007</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntVar_html_a6e297b67956343bed8a4aece6a2c88a3"><div class="ttname"><a href="classoperations__research_1_1IntVar.html#a6e297b67956343bed8a4aece6a2c88a3">operations_research::IntVar::Contains</a></div><div class="ttdeci">virtual bool Contains(int64 v) const =0</div><div class="ttdoc">This method returns whether the value 'v' is in the domain of the variable.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a045309e1ee229240071692a4e889f3e0"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a045309e1ee229240071692a4e889f3e0">operations_research::Solver::optimization_direction</a></div><div class="ttdeci">OptimizationDirection optimization_direction() const</div><div class="ttdoc">The direction of optimization, getter and setter.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l01000">constraint_solver.h:1000</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_a9b887d862bb4540be60a9f4c726854b7"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#a9b887d862bb4540be60a9f4c726854b7">operations_research::IntervalVarElement::SetStartRange</a></div><div class="ttdeci">void SetStartRange(int64 mi, int64 ma)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04703">constraint_solver.h:4703</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_ad161fede703fc4b4ebb688b2198a2108"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#ad161fede703fc4b4ebb688b2198a2108">operations_research::IntervalVarElement::PerformedValue</a></div><div class="ttdeci">int64 PerformedValue() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04697">constraint_solver.h:4697</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_af10e474564d080f7949e680215224176"><div class="ttname"><a href="classoperations__research_1_1Solver.html#af10e474564d080f7949e680215224176">operations_research::Solver::MakeAtMost</a></div><div class="ttdeci">Constraint * MakeAtMost(std::vector&lt; IntVar * &gt; vars, int64 value, int64 max_count)</div><div class="ttdoc">|{i | vars[i] == value}| &lt;= max_count</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a253eae82dd0e365d9c49f7e31d0f5f7a"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a253eae82dd0e365d9c49f7e31d0f5f7a">operations_research::ModelVisitor::kAbsEqual</a></div><div class="ttdeci">static const char kAbsEqual[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03319">constraint_solver.h:3319</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_aac9032d088ad5a8555155a9fbc03d886"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#aac9032d088ad5a8555155a9fbc03d886">operations_research::ModelVisitor::BeginVisitIntegerExpression</a></div><div class="ttdeci">virtual void BeginVisitIntegerExpression(const std::string &amp;type_name, const IntExpr *const expr)</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a2d319e77b0403d9ad50fc0aacf8b3d71"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a2d319e77b0403d9ad50fc0aacf8b3d71">operations_research::ModelVisitor::VisitSequenceArrayArgument</a></div><div class="ttdeci">virtual void VisitSequenceArrayArgument(const std::string &amp;arg_name, const std::vector&lt; SequenceVar * &gt; &amp;arguments)</div></div>
<div class="ttc" id="classoperations__research_1_1AssignmentContainer_html_a6a50632530dfd8c9a55a5134bdee9cb4"><div class="ttname"><a href="classoperations__research_1_1AssignmentContainer.html#a6a50632530dfd8c9a55a5134bdee9cb4">operations_research::AssignmentContainer::operator==</a></div><div class="ttdeci">bool operator==(const AssignmentContainer&lt; V, E &gt; &amp;container) const</div><div class="ttdoc">Returns true if this and 'container' both represent the same V* -&gt; E map.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04945">constraint_solver.h:4945</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8bda7ed6e7e533cca4c44eba6efffc8ba2547ec2e47ea5c8da65a39817a04f220"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8ba2547ec2e47ea5c8da65a39817a04f220">operations_research::Solver::CHOOSE_RANDOM</a></div><div class="ttdoc">Randomly select one of the remaining unbound variables.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00272">constraint_solver.h:272</a></div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html_a4a8231d856858b0158109777f3ae57df"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html#a4a8231d856858b0158109777f3ae57df">operations_research::SolutionCollector::BuildSolutionDataForCurrentState</a></div><div class="ttdeci">SolutionData BuildSolutionDataForCurrentState()</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a63132523df4ebdb9948c120d12b8d802"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a63132523df4ebdb9948c120d12b8d802">operations_research::Solver::SaveAndAdd</a></div><div class="ttdeci">void SaveAndAdd(T *adr, T val)</div><div class="ttdoc">All-in-one SaveAndAdd_value.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02804">constraint_solver.h:2804</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_abb7ca3d6a720b538c57845e8573b45a3"><div class="ttname"><a href="classoperations__research_1_1Solver.html#abb7ca3d6a720b538c57845e8573b45a3">operations_research::Solver::ClearLocalSearchState</a></div><div class="ttdeci">void ClearLocalSearchState()</div><div class="ttdoc">Clears the local search state.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02906">constraint_solver.h:2906</a></div></div>
<div class="ttc" id="structoperations__research_1_1DefaultPhaseParameters_html_a3d609270cd755aabacde8c738d49c1da"><div class="ttname"><a href="structoperations__research_1_1DefaultPhaseParameters.html#a3d609270cd755aabacde8c738d49c1da">operations_research::DefaultPhaseParameters::persistent_impact</a></div><div class="ttdeci">bool persistent_impact</div><div class="ttdoc">Whether to keep the impact from the first search for other searches, or to recompute the impact for e...</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00197">constraint_solver.h:197</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a07f7fa906a3c321c3095969fca1c6ff5"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a07f7fa906a3c321c3095969fca1c6ff5">operations_research::Solver::MakeIndexOfConstraint</a></div><div class="ttdeci">Constraint * MakeIndexOfConstraint(const std::vector&lt; IntVar * &gt; &amp;vars, IntVar *const index, int64 target)</div><div class="ttdoc">This constraint is a special case of the element constraint with an array of integer variables,...</div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html_a17269925652c762db15e61d86b2d9b72"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html#a17269925652c762db15e61d86b2d9b72">operations_research::SolutionCollector::failures</a></div><div class="ttdeci">int64 failures(int n) const</div><div class="ttdoc">Returns the number of failures encountered at the time of the nth solution.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a4e80c7cc39381ccbf5457c83dc75cbb5"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a4e80c7cc39381ccbf5457c83dc75cbb5">operations_research::ModelVisitor::EndVisitConstraint</a></div><div class="ttdeci">virtual void EndVisitConstraint(const std::string &amp;type_name, const Constraint *const constraint)</div></div>
<div class="ttc" id="structoperations__research_1_1DefaultPhaseParameters_html_a6938c08fc955872a3b8da845c8ad4e16abdea23afb50539f635029f8424f40237"><div class="ttname"><a href="structoperations__research_1_1DefaultPhaseParameters.html#a6938c08fc955872a3b8da845c8ad4e16abdea23afb50539f635029f8424f40237">operations_research::DefaultPhaseParameters::SELECT_MIN_IMPACT</a></div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00165">constraint_solver.h:165</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a65a1027f9fa77f54095277f7ef10cfca"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a65a1027f9fa77f54095277f7ef10cfca">operations_research::Solver::MakeIndexOfFirstMaxValueConstraint</a></div><div class="ttdeci">Constraint * MakeIndexOfFirstMaxValueConstraint(IntVar *index, const std::vector&lt; IntVar * &gt; &amp;vars)</div><div class="ttdoc">Creates a constraint that binds the index variable to the index of the first variable with the maximu...</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_afabd2f40b8da33b224a5cafd2a053a21ad2e527283c597c714aa93e9fa72ee0e7"><div class="ttname"><a href="classoperations__research_1_1Solver.html#afabd2f40b8da33b224a5cafd2a053a21ad2e527283c597c714aa93e9fa72ee0e7">operations_research::Solver::CHOOSE_STATIC_GLOBAL_BEST</a></div><div class="ttdoc">Pairs are compared at the first call of the selector, and results are cached.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00385">constraint_solver.h:385</a></div></div>
<div class="ttc" id="classoperations__research_1_1RegularLimit_html_a5971e2a299e94cd43e5aaf6675cf9dc7"><div class="ttname"><a href="classoperations__research_1_1RegularLimit.html#a5971e2a299e94cd43e5aaf6675cf9dc7">operations_research::RegularLimit::Accept</a></div><div class="ttdeci">void Accept(ModelVisitor *const visitor) const override</div><div class="ttdoc">Accepts the given model visitor.</div></div>
<div class="ttc" id="classoperations__research_1_1IntVar_html_ab84b786a2128f72fc720ae611e880499"><div class="ttname"><a href="classoperations__research_1_1IntVar.html#ab84b786a2128f72fc720ae611e880499">operations_research::IntVar::Value</a></div><div class="ttdeci">virtual int64 Value() const =0</div><div class="ttdoc">This method returns the value of the variable.</div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVarElement_html_a6f2f3905bb0616011690eca0f83dd589"><div class="ttname"><a href="classoperations__research_1_1SequenceVarElement.html#a6f2f3905bb0616011690eca0f83dd589">operations_research::SequenceVarElement::Clone</a></div><div class="ttdeci">SequenceVarElement * Clone()</div></div>
<div class="ttc" id="classoperations__research_1_1IntExpr_html_adee9a082160df545671781df47f2b985"><div class="ttname"><a href="classoperations__research_1_1IntExpr.html#adee9a082160df545671781df47f2b985">operations_research::IntExpr::SetMax</a></div><div class="ttdeci">virtual void SetMax(int64 m)=0</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a95e429f9bc2b17b436f68f16bd184a4c"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a95e429f9bc2b17b436f68f16bd184a4c">operations_research::Assignment::DurationMin</a></div><div class="ttdeci">int64 DurationMin(const IntervalVar *const var) const</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a489b5750b870a190187805c835ae9001"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a489b5750b870a190187805c835ae9001">operations_research::Solver::CheckFail</a></div><div class="ttdeci">void CheckFail()</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02958">constraint_solver.h:2958</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a3e4a18958cd72c63d679d1feea501e98"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a3e4a18958cd72c63d679d1feea501e98">operations_research::Solver::MakeNonOverlappingBoxesConstraint</a></div><div class="ttdeci">Constraint * MakeNonOverlappingBoxesConstraint(const std::vector&lt; IntVar * &gt; &amp;x_vars, const std::vector&lt; IntVar * &gt; &amp;y_vars, const std::vector&lt; IntVar * &gt; &amp;x_size, const std::vector&lt; IntVar * &gt; &amp;y_size)</div><div class="ttdoc">This constraint states that all the boxes must not overlap.</div></div>
<div class="ttc" id="classoperations__research_1_1LocalSearchFilter_html"><div class="ttname"><a href="classoperations__research_1_1LocalSearchFilter.html">operations_research::LocalSearchFilter</a></div><div class="ttdoc">--— Local Search Filters ---—</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solveri_8h_source.html#l01509">constraint_solveri.h:1509</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_a0a085373190322c6e03e1a07fe26634f"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#a0a085373190322c6e03e1a07fe26634f">operations_research::IntervalVarElement::PerformedMax</a></div><div class="ttdeci">int64 PerformedMax() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04696">constraint_solver.h:4696</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_acdde99f804b915fc54e00c182f77d84c"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#acdde99f804b915fc54e00c182f77d84c">operations_research::ModelVisitor::VisitIntegerArrayArgument</a></div><div class="ttdeci">virtual void VisitIntegerArrayArgument(const std::string &amp;arg_name, const std::vector&lt; int64 &gt; &amp;values)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_aa6f53d2a5d18750d91f16db45700c3af"><div class="ttname"><a href="classoperations__research_1_1Solver.html#aa6f53d2a5d18750d91f16db45700c3af">operations_research::Solver::MakeIsGreaterOrEqualCt</a></div><div class="ttdeci">Constraint * MakeIsGreaterOrEqualCt(IntExpr *const left, IntExpr *const right, IntVar *const b)</div><div class="ttdoc">b == (left &gt;= right)</div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVar_html_aa0e28d22da71b3976d56f59a14e08854"><div class="ttname"><a href="classoperations__research_1_1SequenceVar.html#aa0e28d22da71b3976d56f59a14e08854">operations_research::SequenceVar::RankLast</a></div><div class="ttdeci">void RankLast(int index)</div><div class="ttdoc">Ranks the index_th interval var first of all unranked interval vars.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a1b0628976e99904e7c4ae72618c9772e"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a1b0628976e99904e7c4ae72618c9772e">operations_research::Solver::MakeNotBetweenCt</a></div><div class="ttdeci">Constraint * MakeNotBetweenCt(IntExpr *const expr, int64 l, int64 u)</div><div class="ttdoc">(expr &lt; l || expr &gt; u) This constraint is lazy as it will not make holes in the domain of variables.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a44c97dfc4f51c14779ea29f76c662036"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a44c97dfc4f51c14779ea29f76c662036">operations_research::Solver::MakeEquality</a></div><div class="ttdeci">Constraint * MakeEquality(IntExpr *const left, IntExpr *const right)</div><div class="ttdoc">left == right</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ac3c5b22fad8060ca1a66bd928182d8a4a41dc08543fce010d8ce65df80935ff38"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a41dc08543fce010d8ce65df80935ff38">operations_research::Solver::MAKEACTIVE</a></div><div class="ttdoc">Operator which inserts an inactive node into a path.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00476">constraint_solver.h:476</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntVarElement_html_aea2fc7d2679592fdd9e07b2ae8fb58f0"><div class="ttname"><a href="classoperations__research_1_1IntVarElement.html#aea2fc7d2679592fdd9e07b2ae8fb58f0">operations_research::IntVarElement::Max</a></div><div class="ttdeci">int64 Max() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04632">constraint_solver.h:4632</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ae21b3786b7770dc880343e4a1445b424a1bd1a37995f05ae93089ba0475799682"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ae21b3786b7770dc880343e4a1445b424a1bd1a37995f05ae93089ba0475799682">operations_research::Solver::INTERVAL_DEFAULT</a></div><div class="ttdoc">The default is INTERVAL_SET_TIMES_FORWARD.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00406">constraint_solver.h:406</a></div></div>
<div class="ttc" id="classoperations__research_1_1CastConstraint_html_a89f0e9f3c52c31eba3759c8c411f792d"><div class="ttname"><a href="classoperations__research_1_1CastConstraint.html#a89f0e9f3c52c31eba3759c8c411f792d">operations_research::CastConstraint::target_var</a></div><div class="ttdeci">IntVar * target_var() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03609">constraint_solver.h:3609</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_ab9a4c7d3a86c8bf0d11448239aeb09ca"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#ab9a4c7d3a86c8bf0d11448239aeb09ca">operations_research::ModelVisitor::kScalProdLessOrEqual</a></div><div class="ttdeci">static const char kScalProdLessOrEqual[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03385">constraint_solver.h:3385</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntVar_html_a16770c4e77b7c3bae7f706661aae94fb"><div class="ttname"><a href="classoperations__research_1_1IntVar.html#a16770c4e77b7c3bae7f706661aae94fb">operations_research::IntVar::WhenDomain</a></div><div class="ttdeci">virtual void WhenDomain(Demon *d)=0</div><div class="ttdoc">This method attaches a demon that will watch any domain modification of the domain of the variable.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a6ef8634dceaef579006ab4db28f1f684"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a6ef8634dceaef579006ab4db28f1f684">operations_research::Solver::MakeDifference</a></div><div class="ttdeci">IntExpr * MakeDifference(IntExpr *const left, IntExpr *const right)</div><div class="ttdoc">left - right</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a94a24557456395e59c924a095f2096aaaaf8c34e2288277212469f187b5cc268b"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a94a24557456395e59c924a095f2096aaaaf8c34e2288277212469f187b5cc268b">operations_research::Solver::SEQUENCE_DEFAULT</a></div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00396">constraint_solver.h:396</a></div></div>
<div class="ttc" id="namespaceoperations__research_html_a316abccdfa41512564d84365ea8f0ead"><div class="ttname"><a href="namespaceoperations__research.html#a316abccdfa41512564d84365ea8f0ead">operations_research::operator&lt;&lt;</a></div><div class="ttdeci">std::ostream &amp; operator&lt;&lt;(std::ostream &amp;out, const Solver *const s)</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a866caecff7e07d15a7771d26fcb3b995"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a866caecff7e07d15a7771d26fcb3b995">operations_research::Assignment::SetPerformedMax</a></div><div class="ttdeci">void SetPerformedMax(const IntervalVar *const var, int64 m)</div></div>
<div class="ttc" id="classoperations__research_1_1RegularLimit_html_a7a6e185350eade19733138b3d054bba9"><div class="ttname"><a href="classoperations__research_1_1RegularLimit.html#a7a6e185350eade19733138b3d054bba9">operations_research::RegularLimit::DebugString</a></div><div class="ttdeci">std::string DebugString() const override</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_aa17bdea653a78104b916a01addc085e6"><div class="ttname"><a href="classoperations__research_1_1Solver.html#aa17bdea653a78104b916a01addc085e6">operations_research::Solver::FinishCurrentSearch</a></div><div class="ttdeci">void FinishCurrentSearch()</div><div class="ttdoc">Tells the solver to kill or restart the current search.</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a808d1e2da8133bc44f693e87e5584bfc"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a808d1e2da8133bc44f693e87e5584bfc">operations_research::Assignment::ActivatedObjective</a></div><div class="ttdeci">bool ActivatedObjective() const</div></div>
<div class="ttc" id="routing_8h_html_adb1490a44086db009cdb51f854a02a65"><div class="ttname"><a href="routing_8h.html#adb1490a44086db009cdb51f854a02a65">status</a></div><div class="ttdeci">Status status() const</div><div class="ttdoc">Returns the current status of the routing model.</div><div class="ttdef"><b>Definition:</b> <a href="routing_8h_source.html#l00918">routing.h:918</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a1c39e5b63288d7be78e1b70eeec4ee54"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a1c39e5b63288d7be78e1b70eeec4ee54">operations_research::Solver::Accept</a></div><div class="ttdeci">void Accept(ModelVisitor *const visitor) const</div><div class="ttdoc">Accepts the given model visitor.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a5e627ed6e6400a344f3191a717b3efe0"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a5e627ed6e6400a344f3191a717b3efe0">operations_research::ModelVisitor::kCircuit</a></div><div class="ttdeci">static const char kCircuit[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03326">constraint_solver.h:3326</a></div></div>
<div class="ttc" id="classoperations__research_1_1Demon_html_a47dfc6f2bc0d50a6e7c92eb00d97b064"><div class="ttname"><a href="classoperations__research_1_1Demon.html#a47dfc6f2bc0d50a6e7c92eb00d97b064">operations_research::Demon::Queue</a></div><div class="ttdeci">friend class Queue</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03307">constraint_solver.h:3307</a></div></div>
<div class="ttc" id="classoperations__research_1_1DisjunctiveConstraint_html_aacb295c42edd50d5fc0dc3f009fb0a81"><div class="ttname"><a href="classoperations__research_1_1DisjunctiveConstraint.html#aacb295c42edd50d5fc0dc3f009fb0a81">operations_research::DisjunctiveConstraint::nexts</a></div><div class="ttdeci">virtual const std::vector&lt; IntVar * &gt; &amp; nexts() const =0</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a5804f6bd3c4bc743ed902d467aa11343"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a5804f6bd3c4bc743ed902d467aa11343">operations_research::Solver::SearchLeftDepth</a></div><div class="ttdeci">int SearchLeftDepth() const</div><div class="ttdoc">Gets the search left depth of the current active search.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a67a90d3f386c8530100f810ef54a240a"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a67a90d3f386c8530100f810ef54a240a">operations_research::Solver::PopState</a></div><div class="ttdeci">void PopState()</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a95b306294d94049874328a4c02f320b4"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a95b306294d94049874328a4c02f320b4">operations_research::Solver::MakeMapDomain</a></div><div class="ttdeci">Constraint * MakeMapDomain(IntVar *const var, const std::vector&lt; IntVar * &gt; &amp;actives)</div><div class="ttdoc">This constraint maps the domain of 'var' onto the array of variables 'actives'.</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a514977300d99309ea09e80365ce54dca"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a514977300d99309ea09e80365ce54dca">operations_research::Assignment::SetDurationRange</a></div><div class="ttdeci">void SetDurationRange(const IntervalVar *const var, int64 mi, int64 ma)</div></div>
<div class="ttc" id="classoperations__research_1_1RevArray_html_a361b6a1085ee10fb94ea8105dbb180a9"><div class="ttname"><a href="classoperations__research_1_1RevArray.html#a361b6a1085ee10fb94ea8105dbb180a9">operations_research::RevArray::RevArray</a></div><div class="ttdeci">RevArray(int size, const T &amp;val)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03760">constraint_solver.h:3760</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a149da4f0a5e14223dd41d0b647b8f392"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a149da4f0a5e14223dd41d0b647b8f392">operations_research::Solver::MakeSubCircuit</a></div><div class="ttdeci">Constraint * MakeSubCircuit(const std::vector&lt; IntVar * &gt; &amp;nexts)</div><div class="ttdoc">Force the &quot;nexts&quot; variable to create a complete Hamiltonian path for those that do not loop upon them...</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a13e7e93a66ce0f15343c48c66d615e47"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a13e7e93a66ce0f15343c48c66d615e47">operations_research::Solver::RestartSearch</a></div><div class="ttdeci">void RestartSearch()</div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVarElement_html_a5439b37d5c44ae4c1b22b85073a82d6c"><div class="ttname"><a href="classoperations__research_1_1SequenceVarElement.html#a5439b37d5c44ae4c1b22b85073a82d6c">operations_research::SequenceVarElement::Bound</a></div><div class="ttdeci">bool Bound() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04801">constraint_solver.h:4801</a></div></div>
<div class="ttc" id="classoperations__research_1_1Constraint_html"><div class="ttname"><a href="classoperations__research_1_1Constraint.html">operations_research::Constraint</a></div><div class="ttdoc">A constraint is the main modeling object.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03565">constraint_solver.h:3565</a></div></div>
<div class="ttc" id="classoperations__research_1_1AssignmentContainer_html_a2f617e7ec317b5dab5b29213dd48950f"><div class="ttname"><a href="classoperations__research_1_1AssignmentContainer.html#a2f617e7ec317b5dab5b29213dd48950f">operations_research::AssignmentContainer::MutableElement</a></div><div class="ttdeci">E * MutableElement(const V *const var)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04893">constraint_solver.h:4893</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ab6302978f1de57bdeafa0ffee05c92c9aea2183489b4cb88c3e43e90e8f96eb61"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9aea2183489b4cb88c3e43e90e8f96eb61">operations_research::Solver::STARTS_AT_END</a></div><div class="ttdoc">t1 starts at t2 end, i.e. Start(t1) == End(t2) + delay.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00632">constraint_solver.h:632</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_aecb0b69911306ae5b8aa6a69839812e0"><div class="ttname"><a href="classoperations__research_1_1Solver.html#aecb0b69911306ae5b8aa6a69839812e0">operations_research::Solver::MakeLastSolutionCollector</a></div><div class="ttdeci">SolutionCollector * MakeLastSolutionCollector()</div><div class="ttdoc">Collect the last solution of the search.</div></div>
<div class="ttc" id="classoperations__research_1_1SearchMonitor_html_aa13f15c14e3a5237526cf6215f3b3077"><div class="ttname"><a href="classoperations__research_1_1SearchMonitor.html#aa13f15c14e3a5237526cf6215f3b3077">operations_research::SearchMonitor::SearchMonitor</a></div><div class="ttdeci">SearchMonitor(Solver *const s)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03620">constraint_solver.h:3620</a></div></div>
<div class="ttc" id="classoperations__research_1_1RegularLimit_html_a549c9e71214a87f6a4ab59b113933721"><div class="ttname"><a href="classoperations__research_1_1RegularLimit.html#a549c9e71214a87f6a4ab59b113933721">operations_research::RegularLimit::~RegularLimit</a></div><div class="ttdeci">~RegularLimit() override</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a70158d7ac7a7d59a1ca07f3e8656b67c"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a70158d7ac7a7d59a1ca07f3e8656b67c">operations_research::IntervalVar::SafeDurationExpr</a></div><div class="ttdeci">virtual IntExpr * SafeDurationExpr(int64 unperformed_value)=0</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a1b2eed669b8c881a2d596f63bb68150c"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a1b2eed669b8c881a2d596f63bb68150c">operations_research::Solver::MakeClosureDemon</a></div><div class="ttdeci">Demon * MakeClosureDemon(Closure closure)</div><div class="ttdoc">Creates a demon from a closure.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ac1bcd30f46029ec27d32f9718c5a0d2f"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ac1bcd30f46029ec27d32f9718c5a0d2f">operations_research::Solver::fail_stamp</a></div><div class="ttdeci">uint64 fail_stamp() const</div><div class="ttdoc">The fail_stamp() is incremented after each backtrack.</div></div>
<div class="ttc" id="classoperations__research_1_1SearchMonitor_html_ad73cc7165dba2ee87884286537666ec8"><div class="ttname"><a href="classoperations__research_1_1SearchMonitor.html#ad73cc7165dba2ee87884286537666ec8">operations_research::SearchMonitor::NoMoreSolutions</a></div><div class="ttdeci">virtual void NoMoreSolutions()</div><div class="ttdoc">When the search tree is finished.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ac3c5b22fad8060ca1a66bd928182d8a4aed2205097d136a425fa309dcfc71586e"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4aed2205097d136a425fa309dcfc71586e">operations_research::Solver::INCREMENT</a></div><div class="ttdoc">Operator which defines one neighbor per variable.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00538">constraint_solver.h:538</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntExpr_html_a153843dc05670b540a8e83dba2043eb0"><div class="ttname"><a href="classoperations__research_1_1IntExpr.html#a153843dc05670b540a8e83dba2043eb0">operations_research::IntExpr::SetRange</a></div><div class="ttdeci">virtual void SetRange(int64 l, int64 u)</div><div class="ttdoc">This method sets both the min and the max of the expression.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03834">constraint_solver.h:3834</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_af77457fc093a5cca3be6a1b56e2bc028"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#af77457fc093a5cca3be6a1b56e2bc028">operations_research::Assignment::SetStartValue</a></div><div class="ttdeci">void SetStartValue(const IntervalVar *const var, int64 value)</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a5d5ce8cfe4c9243c9b78d8492668b800"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a5d5ce8cfe4c9243c9b78d8492668b800">operations_research::ModelVisitor::kIndexArgument</a></div><div class="ttdeci">static const char kIndexArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03438">constraint_solver.h:3438</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a14b79fb7c8d45f40452921f13bdcf3a1"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a14b79fb7c8d45f40452921f13bdcf3a1">operations_research::Solver::MakeFixedDurationStartSyncedOnEndIntervalVar</a></div><div class="ttdeci">IntervalVar * MakeFixedDurationStartSyncedOnEndIntervalVar(IntervalVar *const interval_var, int64 duration, int64 offset)</div><div class="ttdoc">Creates an interval var with a fixed duration whose start is synchronized with the end of another int...</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a76d57c8fe9937093475ce43cdfe2412d"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a76d57c8fe9937093475ce43cdfe2412d">operations_research::Solver::MakeScheduleOrExpedite</a></div><div class="ttdeci">Decision * MakeScheduleOrExpedite(IntervalVar *const var, int64 est, int64 *const marker)</div><div class="ttdoc">Returns a decision that tries to schedule a task at a given time.</div></div>
<div class="ttc" id="classoperations__research_1_1RevArray_html_a0c7349d7ede9ab1e16cff1096d6afe8b"><div class="ttname"><a href="classoperations__research_1_1RevArray.html#a0c7349d7ede9ab1e16cff1096d6afe8b">operations_research::RevArray::size</a></div><div class="ttdeci">int64 size() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03770">constraint_solver.h:3770</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_a0a5d158cc83a4b454daad3d2925d4d38"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#a0a5d158cc83a4b454daad3d2925d4d38">operations_research::IntervalVarElement::SetDurationValue</a></div><div class="ttdeci">void SetDurationValue(int64 v)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04717">constraint_solver.h:4717</a></div></div>
<div class="ttc" id="classoperations__research_1_1OptimizeVar_html_a964aef312aae5df04e7d0fe12060e614"><div class="ttname"><a href="classoperations__research_1_1OptimizeVar.html#a964aef312aae5df04e7d0fe12060e614">operations_research::OptimizeVar::AcceptDelta</a></div><div class="ttdeci">bool AcceptDelta(Assignment *delta, Assignment *deltadelta) override</div><div class="ttdoc">Internal methods.</div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVar_html_adcef8966bcacea28d9ad6e554bd92a4f"><div class="ttname"><a href="classoperations__research_1_1SequenceVar.html#adcef8966bcacea28d9ad6e554bd92a4f">operations_research::SequenceVar::Interval</a></div><div class="ttdeci">IntervalVar * Interval(int index) const</div><div class="ttdoc">Returns the index_th interval of the sequence.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ac3c5b22fad8060ca1a66bd928182d8a4a6954bf415a41a3e683060ce706cec2b6"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a6954bf415a41a3e683060ce706cec2b6">operations_research::Solver::TWOOPT</a></div><div class="ttdoc">Operator which reverses a sub-chain of a path.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00429">constraint_solver.h:429</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8bda7ed6e7e533cca4c44eba6efffc8ba2edce2c3cb946cfafd4541b442b3c511"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8ba2edce2c3cb946cfafd4541b442b3c511">operations_research::Solver::CHOOSE_LOWEST_MIN</a></div><div class="ttdoc">Among unbound variables, select the variable with the smallest minimal value.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00310">constraint_solver.h:310</a></div></div>
<div class="ttc" id="classoperations__research_1_1AssignmentContainer_html_aaf8cce923cb7cfc1aa15c6f0b0f7820e"><div class="ttname"><a href="classoperations__research_1_1AssignmentContainer.html#aaf8cce923cb7cfc1aa15c6f0b0f7820e">operations_research::AssignmentContainer::Element</a></div><div class="ttdeci">const E &amp; Element(const V *const var) const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04906">constraint_solver.h:4906</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a1deb0c244aeb417d3746d0b12fc17914"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a1deb0c244aeb417d3746d0b12fc17914">operations_research::IntervalVar::WasPerformedBound</a></div><div class="ttdeci">virtual bool WasPerformedBound() const =0</div></div>
<div class="ttc" id="structoperations__research_1_1DefaultPhaseParameters_html"><div class="ttname"><a href="structoperations__research_1_1DefaultPhaseParameters.html">operations_research::DefaultPhaseParameters</a></div><div class="ttdoc">This struct holds all parameters for the default search.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00156">constraint_solver.h:156</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a8c613fab3bb57fb3ec18a55a11eee8b5"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a8c613fab3bb57fb3ec18a55a11eee8b5">operations_research::Assignment::MutableSequenceVarContainer</a></div><div class="ttdeci">SequenceContainer * MutableSequenceVarContainer()</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l05167">constraint_solver.h:5167</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a7f5ddcad7db239c13bab38ca5f3614bc"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a7f5ddcad7db239c13bab38ca5f3614bc">operations_research::ModelVisitor::kObjectiveExtension</a></div><div class="ttdeci">static const char kObjectiveExtension[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03406">constraint_solver.h:3406</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a40c0b89a06e6341fe2155f38ac1ceede"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a40c0b89a06e6341fe2155f38ac1ceede">operations_research::Assignment::SequenceVarContainer</a></div><div class="ttdeci">const SequenceContainer &amp; SequenceVarContainer() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l05164">constraint_solver.h:5164</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a444350f74c54195a017c663fe2b2ca44"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a444350f74c54195a017c663fe2b2ca44">operations_research::ModelVisitor::kProductOperation</a></div><div class="ttdeci">static const char kProductOperation[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03484">constraint_solver.h:3484</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ae21b3786b7770dc880343e4a1445b424a3892d13c5d6ce4a93609e4eb176195a0"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ae21b3786b7770dc880343e4a1445b424a3892d13c5d6ce4a93609e4eb176195a0">operations_research::Solver::INTERVAL_SET_TIMES_BACKWARD</a></div><div class="ttdoc">Selects the variable with the highest ending time of all variables, and fixes the ending time to this...</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00414">constraint_solver.h:414</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_ae749b38bd428fb00435ada66bd0b13de"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#ae749b38bd428fb00435ada66bd0b13de">operations_research::IntervalVarElement::Restore</a></div><div class="ttdeci">void Restore()</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ac3c5b22fad8060ca1a66bd928182d8a4a3efd902ca50bb59867c6aaf3fbf20e01"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a3efd902ca50bb59867c6aaf3fbf20e01">operations_research::Solver::FULLPATHLNS</a></div><div class="ttdoc">Operator which relaxes one entire path and all inactive nodes, thus defining num_paths neighbors.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00523">constraint_solver.h:523</a></div></div>
<div class="ttc" id="classoperations__research_1_1PropagationBaseObject_html_a5975e144479d99ceae4f009472ca5e92"><div class="ttname"><a href="classoperations__research_1_1PropagationBaseObject.html#a5975e144479d99ceae4f009472ca5e92">operations_research::PropagationBaseObject::EnqueueAll</a></div><div class="ttdeci">void EnqueueAll(const SimpleRevFIFO&lt; Demon * &gt; &amp;demons)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_adf3a1f03acad746f2abe8bf5d2d6f93d"><div class="ttname"><a href="classoperations__research_1_1Solver.html#adf3a1f03acad746f2abe8bf5d2d6f93d">operations_research::Solver::MakeMaximize</a></div><div class="ttdeci">OptimizeVar * MakeMaximize(IntVar *const v, int64 step)</div><div class="ttdoc">Creates a maximization objective.</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a75637e828b93b922f924b532c6bdf980"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a75637e828b93b922f924b532c6bdf980">operations_research::Assignment::AreAllElementsBound</a></div><div class="ttdeci">bool AreAllElementsBound() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l05140">constraint_solver.h:5140</a></div></div>
<div class="ttc" id="structoperations__research_1_1InitAndGetValues_1_1Iterator_html_a62a83485399dc0c4539d8791eb22673b"><div class="ttname"><a href="structoperations__research_1_1InitAndGetValues_1_1Iterator.html#a62a83485399dc0c4539d8791eb22673b">operations_research::InitAndGetValues::Iterator::Begin</a></div><div class="ttdeci">static Iterator Begin(IntVarIterator *it)</div><div class="ttdoc">These are the only way to construct an Iterator.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03940">constraint_solver.h:3940</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a5ac432327eb7d81e8521da4936f9a12b"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a5ac432327eb7d81e8521da4936f9a12b">operations_research::Solver::MakeVariableDomainFilter</a></div><div class="ttdeci">LocalSearchFilter * MakeVariableDomainFilter()</div><div class="ttdoc">Local Search Filters.</div></div>
<div class="ttc" id="classoperations__research_1_1IntVarElement_html_aea590b57d46c0ca3aca92adc3ce82b3a"><div class="ttname"><a href="classoperations__research_1_1IntVarElement.html#aea590b57d46c0ca3aca92adc3ce82b3a">operations_research::IntVarElement::LoadFromProto</a></div><div class="ttdeci">void LoadFromProto(const IntVarAssignment &amp;int_var_assignment_proto)</div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html_a78e202559c958cf7249d3e8ce6ab1b27"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html#a78e202559c958cf7249d3e8ce6ab1b27">operations_research::SolutionCollector::Value</a></div><div class="ttdeci">int64 Value(int n, IntVar *const var) const</div><div class="ttdoc">This is a shortcut to get the Value of 'var' in the nth solution.</div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVar_html_a6993f8721564fc5be685998aa3e4ed47"><div class="ttname"><a href="classoperations__research_1_1SequenceVar.html#a6993f8721564fc5be685998aa3e4ed47">operations_research::SequenceVar::RankSequence</a></div><div class="ttdeci">void RankSequence(const std::vector&lt; int &gt; &amp;rank_first, const std::vector&lt; int &gt; &amp;rank_last, const std::vector&lt; int &gt; &amp;unperformed)</div><div class="ttdoc">Applies the following sequence of ranks, ranks first, then rank last.</div></div>
<div class="ttc" id="classoperations__research_1_1AssignmentContainer_html_a0f61a14dec7c5c955e2ec624a099d3ec"><div class="ttname"><a href="classoperations__research_1_1AssignmentContainer.html#a0f61a14dec7c5c955e2ec624a099d3ec">operations_research::AssignmentContainer::MutableElementOrNull</a></div><div class="ttdeci">E * MutableElementOrNull(const V *const var)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04899">constraint_solver.h:4899</a></div></div>
<div class="ttc" id="classoperations__research_1_1DecisionVisitor_html"><div class="ttname"><a href="classoperations__research_1_1DecisionVisitor.html">operations_research::DecisionVisitor</a></div><div class="ttdoc">A DecisionVisitor is used to inspect a decision.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03230">constraint_solver.h:3230</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_a85c8f2f11b9c5c13eefcc20778340555"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#a85c8f2f11b9c5c13eefcc20778340555">operations_research::IntervalVarElement::Copy</a></div><div class="ttdeci">void Copy(const IntervalVarElement &amp;element)</div></div>
<div class="ttc" id="classoperations__research_1_1AssignmentContainer_html_a877eabf96eaacfd5acee79411af3de22"><div class="ttname"><a href="classoperations__research_1_1AssignmentContainer.html#a877eabf96eaacfd5acee79411af3de22">operations_research::AssignmentContainer::Empty</a></div><div class="ttdeci">bool Empty() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04857">constraint_solver.h:4857</a></div></div>
<div class="ttc" id="classoperations__research_1_1AssignmentElement_html_a065f45865ec10318174fad87f6b00075"><div class="ttname"><a href="classoperations__research_1_1AssignmentElement.html#a065f45865ec10318174fad87f6b00075">operations_research::AssignmentElement::Activate</a></div><div class="ttdeci">void Activate()</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04600">constraint_solver.h:4600</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a11c9545171ef35516112a3f9b49484b7"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a11c9545171ef35516112a3f9b49484b7">operations_research::Assignment::FastAdd</a></div><div class="ttdeci">IntVarElement * FastAdd(IntVar *const var)</div><div class="ttdoc">Adds without checking if variable has been previously added.</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a57610548a8daffff880539eec24df109"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a57610548a8daffff880539eec24df109">operations_research::Assignment::ObjectiveBound</a></div><div class="ttdeci">bool ObjectiveBound() const</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a081aea5d03ea8531476f5e51174b3d55"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a081aea5d03ea8531476f5e51174b3d55">operations_research::IntervalVar::kMaxValidValue</a></div><div class="ttdeci">static const int64 kMaxValidValue</div><div class="ttdoc">The largest acceptable value to be returned by EndMax()</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04348">constraint_solver.h:4348</a></div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html_a3e34da6922cd5c7c03ef9186de8fcf36"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html#a3e34da6922cd5c7c03ef9186de8fcf36">operations_research::SolutionCollector::EnterSearch</a></div><div class="ttdeci">void EnterSearch() override</div><div class="ttdoc">Beginning of the search.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ade277831f6962ff6979f8a2e6558cef5"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ade277831f6962ff6979f8a2e6558cef5">operations_research::Solver::balancing_decision</a></div><div class="ttdeci">Decision * balancing_decision() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02842">constraint_solver.h:2842</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a440a3d529f66bbb818d953beb362a825"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a440a3d529f66bbb818d953beb362a825">operations_research::Solver::neighbors</a></div><div class="ttdeci">int64 neighbors() const</div><div class="ttdoc">The number of neighbors created.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00984">constraint_solver.h:984</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_aaa99adf81f8caaf01fd593e95c33ae50"><div class="ttname"><a href="classoperations__research_1_1Solver.html#aaa99adf81f8caaf01fd593e95c33ae50">operations_research::Solver::RegisterIntExpr</a></div><div class="ttdeci">IntExpr * RegisterIntExpr(IntExpr *const expr)</div><div class="ttdoc">Registers a new IntExpr and wraps it inside a TraceIntExpr if necessary.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ac4587ad555a3768febcd111ac7481b58"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ac4587ad555a3768febcd111ac7481b58">operations_research::Solver::MakeLubyRestart</a></div><div class="ttdeci">SearchMonitor * MakeLubyRestart(int scale_factor)</div><div class="ttdoc">--— Restart Search --—</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8bda7ed6e7e533cca4c44eba6efffc8babce047aa9c6aa994057ae76e535d59df"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8babce047aa9c6aa994057ae76e535d59df">operations_research::Solver::CHOOSE_MAX_SIZE</a></div><div class="ttdoc">Among unbound variables, select the variable with the highest size.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00326">constraint_solver.h:326</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntVarElement_html_a3dd7107f6d77ddb44ebf38053b72137e"><div class="ttname"><a href="classoperations__research_1_1IntVarElement.html#a3dd7107f6d77ddb44ebf38053b72137e">operations_research::IntVarElement::operator==</a></div><div class="ttdeci">bool operator==(const IntVarElement &amp;element) const</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a4a625f0d15b94c92546d05bee7c8b554"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a4a625f0d15b94c92546d05bee7c8b554">operations_research::IntervalVar::Accept</a></div><div class="ttdeci">virtual void Accept(ModelVisitor *const visitor) const =0</div><div class="ttdoc">Accepts the given visitor.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a915268f135681d8a8eeafe9feb4efc5f"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a915268f135681d8a8eeafe9feb4efc5f">operations_research::Solver::MakeDecision</a></div><div class="ttdeci">Decision * MakeDecision(Action apply, Action refute)</div></div>
<div class="ttc" id="classoperations__research_1_1InitAndGetValues_html_a56ec665aa9b3314c60e52ab26e8f9fc6"><div class="ttname"><a href="classoperations__research_1_1InitAndGetValues.html#a56ec665aa9b3314c60e52ab26e8f9fc6">operations_research::InitAndGetValues::end</a></div><div class="ttdeci">Iterator end()</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03936">constraint_solver.h:3936</a></div></div>
<div class="ttc" id="structoperations__research_1_1Solver_1_1IntegerCastInfo_html_a4ddfd15e19f82e34ba4a6ef321ee0cef"><div class="ttname"><a href="structoperations__research_1_1Solver_1_1IntegerCastInfo.html#a4ddfd15e19f82e34ba4a6ef321ee0cef">operations_research::Solver::IntegerCastInfo::variable</a></div><div class="ttdeci">IntVar * variable</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00249">constraint_solver.h:249</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a8c6ea345dae471d30d83faeef85f61cf"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a8c6ea345dae471d30d83faeef85f61cf">operations_research::Assignment::Size</a></div><div class="ttdeci">int Size() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l05022">constraint_solver.h:5022</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ae63acd77b8c2ee40387795051298f659ab75b213a2a3871a9946a74610e388b8e"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659ab75b213a2a3871a9946a74610e388b8e">operations_research::Solver::ASSIGN_RANDOM_VALUE</a></div><div class="ttdoc">Selects randomly one of the possible values of the selected variable.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00354">constraint_solver.h:354</a></div></div>
<div class="ttc" id="classoperations__research_1_1SearchLimit_html_a1cfadc6db5f71ebf750ab119a110d9f0"><div class="ttname"><a href="classoperations__research_1_1SearchLimit.html#a1cfadc6db5f71ebf750ab119a110d9f0">operations_research::SearchLimit::Check</a></div><div class="ttdeci">virtual bool Check()=0</div><div class="ttdoc">This method is called to check the status of the limit.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ab2055a138f98b721cf76d2656a3b90f7"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ab2055a138f98b721cf76d2656a3b90f7">operations_research::Solver::Cache</a></div><div class="ttdeci">ModelCache * Cache() const</div><div class="ttdoc">Returns the cache of the model.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a704132f8c12e3bbbd0590308a58ee744"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a704132f8c12e3bbbd0590308a58ee744">operations_research::Solver::BranchSelector</a></div><div class="ttdeci">std::function&lt; DecisionModification()&gt; BranchSelector</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00737">constraint_solver.h:737</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a94a24557456395e59c924a095f2096aaaeb08eb7c7c4cd0b65331584e4ae7bedf"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a94a24557456395e59c924a095f2096aaaeb08eb7c7c4cd0b65331584e4ae7bedf">operations_research::Solver::CHOOSE_MIN_SLACK_RANK_FORWARD</a></div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00398">constraint_solver.h:398</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a9358d9ba39e033777f5d862f76f8531b"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a9358d9ba39e033777f5d862f76f8531b">operations_research::Solver::MakeExitSearchCallback</a></div><div class="ttdeci">SearchMonitor * MakeExitSearchCallback(std::function&lt; void()&gt; callback)</div></div>
<div class="ttc" id="classoperations__research_1_1Constraint_html_ae4bce2b10b1b0b3f953e356e6a34f339"><div class="ttname"><a href="classoperations__research_1_1Constraint.html#ae4bce2b10b1b0b3f953e356e6a34f339">operations_research::Constraint::Constraint</a></div><div class="ttdeci">Constraint(Solver *const solver)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03567">constraint_solver.h:3567</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_ae6f3b7ad8f6360c12d1b459cb5cefe59"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#ae6f3b7ad8f6360c12d1b459cb5cefe59">operations_research::Assignment::SetStartMin</a></div><div class="ttdeci">void SetStartMin(const IntervalVar *const var, int64 m)</div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html_a3497b80aeb8089fd23eff150d1ca832d"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html#a3497b80aeb8089fd23eff150d1ca832d">operations_research::SolutionCollector::~SolutionCollector</a></div><div class="ttdeci">~SolutionCollector() override</div></div>
<div class="ttc" id="classoperations__research_1_1Decision_html_a04e7498b68e7bfc7caeacad7c4272c1f"><div class="ttname"><a href="classoperations__research_1_1Decision.html#a04e7498b68e7bfc7caeacad7c4272c1f">operations_research::Decision::Refute</a></div><div class="ttdeci">virtual void Refute(Solver *const s)=0</div><div class="ttdoc">Refute will be called after a backtrack.</div></div>
<div class="ttc" id="classoperations__research_1_1SearchMonitor_html_ab412dd0253ec658cd36dbec0c1b9f426"><div class="ttname"><a href="classoperations__research_1_1SearchMonitor.html#ab412dd0253ec658cd36dbec0c1b9f426">operations_research::SearchMonitor::LocalOptimum</a></div><div class="ttdeci">virtual bool LocalOptimum()</div><div class="ttdoc">When a local optimum is reached.</div></div>
<div class="ttc" id="classoperations__research_1_1IntVar_html_a6d8841341ab21ef119c0b7df02785a48"><div class="ttname"><a href="classoperations__research_1_1IntVar.html#a6d8841341ab21ef119c0b7df02785a48">operations_research::IntVar::Accept</a></div><div class="ttdeci">void Accept(ModelVisitor *const visitor) const override</div><div class="ttdoc">Accepts the given visitor.</div></div>
<div class="ttc" id="classoperations__research_1_1SolutionPool_html_a695368c209531f7ae73419543a3d63cd"><div class="ttname"><a href="classoperations__research_1_1SolutionPool.html#a695368c209531f7ae73419543a3d63cd">operations_research::SolutionPool::GetNextSolution</a></div><div class="ttdeci">virtual void GetNextSolution(Assignment *const assignment)=0</div><div class="ttdoc">This method is called when the local search starts a new neighborhood to initialize the default assig...</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a205a1ceec0a84172f184a0e5c09439ee"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a205a1ceec0a84172f184a0e5c09439ee">operations_research::ModelVisitor::kDurationMaxArgument</a></div><div class="ttdeci">static const char kDurationMaxArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03426">constraint_solver.h:3426</a></div></div>
<div class="ttc" id="classoperations__research_1_1OptimizeVar_html_a56122e1a51788c21cba4fd3211e93084"><div class="ttname"><a href="classoperations__research_1_1OptimizeVar.html#a56122e1a51788c21cba4fd3211e93084">operations_research::OptimizeVar::RefuteDecision</a></div><div class="ttdeci">void RefuteDecision(Decision *const d) override</div><div class="ttdoc">Before refuting the decision.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a6cea2e744a27c3ee4567c65216f36c39"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a6cea2e744a27c3ee4567c65216f36c39">operations_research::Solver::MakeIsGreaterCstVar</a></div><div class="ttdeci">IntVar * MakeIsGreaterCstVar(IntExpr *const var, int64 value)</div><div class="ttdoc">status var of (var &gt; value)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a3a2e8e7abcce51fb754da16c477fca45"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a3a2e8e7abcce51fb754da16c477fca45">operations_research::Solver::MakeNoCycle</a></div><div class="ttdeci">Constraint * MakeNoCycle(const std::vector&lt; IntVar * &gt; &amp;nexts, const std::vector&lt; IntVar * &gt; &amp;active, IndexFilter1 sink_handler=nullptr)</div><div class="ttdoc">Prevent cycles.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8bda7ed6e7e533cca4c44eba6efffc8ba1b2865e3429fc5b1956da5f601ae0ed9"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8ba1b2865e3429fc5b1956da5f601ae0ed9">operations_research::Solver::CHOOSE_MIN_SIZE_LOWEST_MIN</a></div><div class="ttdoc">Among unbound variables, select the variable with the smallest size, i.e., the smallest number of pos...</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00280">constraint_solver.h:280</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntExpr_html_a58d589131cbea30d4826248a2fa06aba"><div class="ttname"><a href="classoperations__research_1_1IntExpr.html#a58d589131cbea30d4826248a2fa06aba">operations_research::IntExpr::Min</a></div><div class="ttdeci">virtual int64 Min() const =0</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ae6f96ee767c7b6bd0e190c86d995e88c"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ae6f96ee767c7b6bd0e190c86d995e88c">operations_research::Solver::MakeIsLessOrEqualVar</a></div><div class="ttdeci">IntVar * MakeIsLessOrEqualVar(IntExpr *const left, IntExpr *const right)</div><div class="ttdoc">status var of (left &lt;= right)</div></div>
<div class="ttc" id="classoperations__research_1_1IntVar_html_a9b3717393d801dc1ca5ce32e55a73622"><div class="ttname"><a href="classoperations__research_1_1IntVar.html#a9b3717393d801dc1ca5ce32e55a73622">operations_research::IntVar::SetValues</a></div><div class="ttdeci">virtual void SetValues(const std::vector&lt; int64 &gt; &amp;values)</div><div class="ttdoc">This method intersects the current domain with the values in the array.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a84a1c30c400cb98e95fca1f74d064c80"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a84a1c30c400cb98e95fca1f74d064c80">operations_research::Solver::MakeIsLessOrEqualCt</a></div><div class="ttdeci">Constraint * MakeIsLessOrEqualCt(IntExpr *const left, IntExpr *const right, IntVar *const b)</div><div class="ttdoc">b == (left &lt;= right)</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_af5257fef12cc50e0551dfcddf1ce1b67"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#af5257fef12cc50e0551dfcddf1ce1b67">operations_research::IntervalVar::EndMax</a></div><div class="ttdeci">virtual int64 EndMax() const =0</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_af95b1b5fb7a1ff5818d7eabaafdf8408"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#af95b1b5fb7a1ff5818d7eabaafdf8408">operations_research::IntervalVar::WhenDurationRange</a></div><div class="ttdeci">virtual void WhenDurationRange(Demon *const d)=0</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ae63acd77b8c2ee40387795051298f659a5abe444845850bb7a0f2f5c87cef2763"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659a5abe444845850bb7a0f2f5c87cef2763">operations_research::Solver::SPLIT_LOWER_HALF</a></div><div class="ttdoc">Split the domain in two around the center, and choose the lower part first.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00363">constraint_solver.h:363</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntVarIterator_html_a7d3ca63d1636290367162ad3fb4f5157"><div class="ttname"><a href="classoperations__research_1_1IntVarIterator.html#a7d3ca63d1636290367162ad3fb4f5157">operations_research::IntVarIterator::Next</a></div><div class="ttdeci">virtual void Next()=0</div><div class="ttdoc">This method moves the iterator to the next value.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a2033f7591e7809c9f3abbbe618a484c7"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a2033f7591e7809c9f3abbbe618a484c7">operations_research::ModelVisitor::VisitInt64ToInt64Extension</a></div><div class="ttdeci">void VisitInt64ToInt64Extension(const Solver::IndexEvaluator1 &amp;eval, int64 index_min, int64 index_max)</div></div>
<div class="ttc" id="classoperations__research_1_1IntExpr_html_a8889930ed76665b0f24f12df2ed4e05c"><div class="ttname"><a href="classoperations__research_1_1IntExpr.html#a8889930ed76665b0f24f12df2ed4e05c">operations_research::IntExpr::SetValue</a></div><div class="ttdeci">virtual void SetValue(int64 v)</div><div class="ttdoc">This method sets the value of the expression.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03840">constraint_solver.h:3840</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a4743a337c35039947c1058086fddf5fd"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a4743a337c35039947c1058086fddf5fd">operations_research::ModelVisitor::kGreaterOrEqual</a></div><div class="ttdeci">static const char kGreaterOrEqual[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03344">constraint_solver.h:3344</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a83e14be9c6bba9abdd1949c25c32a60d"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a83e14be9c6bba9abdd1949c25c32a60d">operations_research::Solver::UnaryIntervalRelation</a></div><div class="ttdeci">UnaryIntervalRelation</div><div class="ttdoc">This enum is used in Solver::MakeIntervalVarRelation to specify the temporal relation between an inte...</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00645">constraint_solver.h:645</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a84df9e10dbd2548f4ffebba134c41a31"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a84df9e10dbd2548f4ffebba134c41a31">operations_research::Solver::MakeFixedDurationIntervalVarArray</a></div><div class="ttdeci">void MakeFixedDurationIntervalVarArray(int count, int64 start_min, int64 start_max, int64 duration, bool optional, const std::string &amp;name, std::vector&lt; IntervalVar * &gt; *const array)</div><div class="ttdoc">This method fills the vector with 'count' interval variables built with the corresponding parameters.</div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html_a0c9c26b5eef0f2a6bc5c29a6cd193cac"><div class="ttname"><a href="classoperations__research_1_1Pack.html#a0c9c26b5eef0f2a6bc5c29a6cd193cac">operations_research::Pack::SetUnassigned</a></div><div class="ttdeci">void SetUnassigned(int var_index)</div></div>
<div class="ttc" id="classoperations__research_1_1IntVarElement_html_a015a145792a6224c450259afe9d0b035"><div class="ttname"><a href="classoperations__research_1_1IntVarElement.html#a015a145792a6224c450259afe9d0b035">operations_research::IntVarElement::Value</a></div><div class="ttdeci">int64 Value() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04634">constraint_solver.h:4634</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a173ed9d464551149bbb92274ddb129e9"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a173ed9d464551149bbb92274ddb129e9">operations_research::Solver::set_fail_intercept</a></div><div class="ttdeci">void set_fail_intercept(std::function&lt; void()&gt; fail_intercept)</div><div class="ttdoc">Internal.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02846">constraint_solver.h:2846</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a191609e0de3a43db88f862257151974e"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a191609e0de3a43db88f862257151974e">operations_research::Solver::CastExpression</a></div><div class="ttdeci">IntExpr * CastExpression(const IntVar *const var) const</div><div class="ttdoc">Internal.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_aa729df413387f7bb5b6b54bf7b21f340"><div class="ttname"><a href="classoperations__research_1_1Solver.html#aa729df413387f7bb5b6b54bf7b21f340">operations_research::Solver::MakeMonotonicElement</a></div><div class="ttdeci">IntExpr * MakeMonotonicElement(IndexEvaluator1 values, bool increasing, IntVar *const index)</div><div class="ttdoc">Function based element.</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_ab5842069b663df27c9b6b86dd2033025"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#ab5842069b663df27c9b6b86dd2033025">operations_research::IntervalVar::WhenStartBound</a></div><div class="ttdeci">virtual void WhenStartBound(Demon *const d)=0</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a231e2a22e5b9902b3d659f5cc406eb13"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a231e2a22e5b9902b3d659f5cc406eb13">operations_research::ModelVisitor::kScalProdGreaterOrEqual</a></div><div class="ttdeci">static const char kScalProdGreaterOrEqual[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03384">constraint_solver.h:3384</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a8cb920443f8846ec2aa7599e61864530"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a8cb920443f8846ec2aa7599e61864530">operations_research::ModelVisitor::kTrueConstraint</a></div><div class="ttdeci">static const char kTrueConstraint[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03397">constraint_solver.h:3397</a></div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html_ae7875687d4d252d247a0c4c7b78a0326"><div class="ttname"><a href="classoperations__research_1_1Pack.html#ae7875687d4d252d247a0c4c7b78a0326">operations_research::Pack::SetImpossible</a></div><div class="ttdeci">void SetImpossible(int var_index, int bin_index)</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_ad226ec1e7d6474e9ceab1048be743eb5"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#ad226ec1e7d6474e9ceab1048be743eb5">operations_research::IntervalVar::WhenPerformedBound</a></div><div class="ttdeci">void WhenPerformedBound(Solver::Closure closure)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04448">constraint_solver.h:4448</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8bda7ed6e7e533cca4c44eba6efffc8baf1eadfb5ea6dc853f075589cded04314"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8baf1eadfb5ea6dc853f075589cded04314">operations_research::Solver::CHOOSE_MIN_SIZE_HIGHEST_MAX</a></div><div class="ttdoc">Among unbound variables, select the variable with the smallest size, i.e., the smallest number of pos...</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00304">constraint_solver.h:304</a></div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVarElement_html_a88093f53d27e3a7a7a183a615223ab54"><div class="ttname"><a href="classoperations__research_1_1SequenceVarElement.html#a88093f53d27e3a7a7a183a615223ab54">operations_research::SequenceVarElement::Var</a></div><div class="ttdeci">SequenceVar * Var() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04785">constraint_solver.h:4785</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a95a765a9db2856a8f35b0f3b122a4b2c"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a95a765a9db2856a8f35b0f3b122a4b2c">operations_research::ModelVisitor::VisitSequenceArgument</a></div><div class="ttdeci">virtual void VisitSequenceArgument(const std::string &amp;arg_name, SequenceVar *const argument)</div><div class="ttdoc">Visit sequence argument.</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a3b43a5bec63b40d16227469fa213cb18"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a3b43a5bec63b40d16227469fa213cb18">operations_research::Assignment::Load</a></div><div class="ttdeci">bool Load(const std::string &amp;filename)</div><div class="ttdoc">Loads an assignment from a file; does not add variables to the assignment (only the variables contain...</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a1606c56bdbb336ea2fe5b65ba4162d07"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a1606c56bdbb336ea2fe5b65ba4162d07">operations_research::ModelVisitor::kTargetArgument</a></div><div class="ttdeci">static const char kTargetArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03468">constraint_solver.h:3468</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_abbf76a02f141b5d555d37f047be49155"><div class="ttname"><a href="classoperations__research_1_1Solver.html#abbf76a02f141b5d555d37f047be49155">operations_research::Solver::SolveDepth</a></div><div class="ttdeci">int SolveDepth() const</div><div class="ttdoc">Gets the number of nested searches.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ae6dee2b402434520635e66e9d58a6215"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ae6dee2b402434520635e66e9d58a6215">operations_research::Solver::MarkerType</a></div><div class="ttdeci">MarkerType</div><div class="ttdoc">This enum is used internally in private methods Solver::PushState and Solver::PopState to tag states ...</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00706">constraint_solver.h:706</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a663bdb75f27a96e424ad2a7a4ba397ec"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a663bdb75f27a96e424ad2a7a4ba397ec">operations_research::Solver::~Solver</a></div><div class="ttdeci">~Solver()</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a566bbd1c5497546294c96367cffa47f8"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a566bbd1c5497546294c96367cffa47f8">operations_research::Solver::MakeMoveTowardTargetOperator</a></div><div class="ttdeci">LocalSearchOperator * MakeMoveTowardTargetOperator(const Assignment &amp;target)</div><div class="ttdoc">Creates a local search operator that tries to move the assignment of some variables toward a target.</div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html_a6705ad4a1718e453d0f969901cd77cea"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html#a6705ad4a1718e453d0f969901cd77cea">operations_research::SolutionCollector::wall_time</a></div><div class="ttdeci">int64 wall_time(int n) const</div><div class="ttdoc">Returns the wall time in ms for the nth solution.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ab97f6b20657cd0f589db096d9d6da855"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ab97f6b20657cd0f589db096d9d6da855">operations_research::Solver::ConcatenateOperators</a></div><div class="ttdeci">LocalSearchOperator * ConcatenateOperators(const std::vector&lt; LocalSearchOperator * &gt; &amp;ops)</div><div class="ttdoc">Creates a local search operator which concatenates a vector of operators.</div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html_ae75c29baf023cfde70a58b085efecf5f"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html#ae75c29baf023cfde70a58b085efecf5f">operations_research::SolutionCollector::prototype_</a></div><div class="ttdeci">std::unique_ptr&lt; Assignment &gt; prototype_</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04171">constraint_solver.h:4171</a></div></div>
<div class="ttc" id="classoperations__research_1_1SearchLimit_html_a1e65e704ea5249bc9c346b46449ff1ba"><div class="ttname"><a href="classoperations__research_1_1SearchLimit.html#a1e65e704ea5249bc9c346b46449ff1ba">operations_research::SearchLimit::DebugString</a></div><div class="ttdeci">std::string DebugString() const override</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04254">constraint_solver.h:4254</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a65bedad451869cdc814f87ceb68f2a7c"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a65bedad451869cdc814f87ceb68f2a7c">operations_research::Solver::MakePathConnected</a></div><div class="ttdeci">Constraint * MakePathConnected(std::vector&lt; IntVar * &gt; nexts, std::vector&lt; int64 &gt; sources, std::vector&lt; int64 &gt; sinks, std::vector&lt; IntVar * &gt; status)</div><div class="ttdoc">Constraint enforcing that status[i] is true iff there's a path defined on next variables from sources...</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ae91967e7ceb0016a3bc1d177a17c1ef9"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ae91967e7ceb0016a3bc1d177a17c1ef9">operations_research::Solver::MakeDefaultRegularLimitParameters</a></div><div class="ttdeci">RegularLimitParameters MakeDefaultRegularLimitParameters() const</div><div class="ttdoc">Creates a regular limit proto containing default values.</div></div>
<div class="ttc" id="classoperations__research_1_1AssignmentContainer_html_aa162c36af0d0d536c3cda267a2dac1cc"><div class="ttname"><a href="classoperations__research_1_1AssignmentContainer.html#aa162c36af0d0d536c3cda267a2dac1cc">operations_research::AssignmentContainer::FastAdd</a></div><div class="ttdeci">E * FastAdd(V *var)</div><div class="ttdoc">Adds element without checking its presence in the container.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04837">constraint_solver.h:4837</a></div></div>
<div class="ttc" id="classoperations__research_1_1DecisionBuilder_html_ae49a9c888745786d48556303451d219d"><div class="ttname"><a href="classoperations__research_1_1DecisionBuilder.html#ae49a9c888745786d48556303451d219d">operations_research::DecisionBuilder::~DecisionBuilder</a></div><div class="ttdeci">~DecisionBuilder() override</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03252">constraint_solver.h:3252</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_a14813a4a823ce91c390aff2477cbb435"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#a14813a4a823ce91c390aff2477cbb435">operations_research::IntervalVarElement::SetEndMax</a></div><div class="ttdeci">void SetEndMax(int64 m)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04722">constraint_solver.h:4722</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a39c7db7afb0e10783e0f9f18a9045139"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a39c7db7afb0e10783e0f9f18a9045139">operations_research::Solver::MakePathTransitPrecedenceConstraint</a></div><div class="ttdeci">Constraint * MakePathTransitPrecedenceConstraint(std::vector&lt; IntVar * &gt; nexts, std::vector&lt; IntVar * &gt; transits, const std::vector&lt; std::pair&lt; int, int &gt;&gt; &amp;precedences)</div><div class="ttdoc">Same as MakePathPrecedenceConstraint but will force i to be before j if the sum of transits on the pa...</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a052180d41b28201b81b1c1695f65bcca"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a052180d41b28201b81b1c1695f65bcca">operations_research::IntervalVar::kMinValidValue</a></div><div class="ttdeci">static const int64 kMinValidValue</div><div class="ttdoc">The smallest acceptable value to be returned by StartMin()</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04346">constraint_solver.h:4346</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntExpr_html_a1fb9e08cff06a9a5b5739de4acba587c"><div class="ttname"><a href="classoperations__research_1_1IntExpr.html#a1fb9e08cff06a9a5b5739de4acba587c">operations_research::IntExpr::Max</a></div><div class="ttdeci">virtual int64 Max() const =0</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_aa979715aea2878211bcf0b1db4c62793"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#aa979715aea2878211bcf0b1db4c62793">operations_research::IntervalVar::WhenStartBound</a></div><div class="ttdeci">void WhenStartBound(Solver::Closure closure)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04374">constraint_solver.h:4374</a></div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVar_html_a7004fb329da93aea538284d1213d0cc3"><div class="ttname"><a href="classoperations__research_1_1SequenceVar.html#a7004fb329da93aea538284d1213d0cc3">operations_research::SequenceVar::Accept</a></div><div class="ttdeci">virtual void Accept(ModelVisitor *const visitor) const</div><div class="ttdoc">Accepts the given visitor.</div></div>
<div class="ttc" id="classoperations__research_1_1SearchMonitor_html_a913eb75331c00bed226200fd96ee0cb6"><div class="ttname"><a href="classoperations__research_1_1SearchMonitor.html#a913eb75331c00bed226200fd96ee0cb6">operations_research::SearchMonitor::IsUncheckedSolutionLimitReached</a></div><div class="ttdeci">virtual bool IsUncheckedSolutionLimitReached()</div><div class="ttdoc">Returns true if the limit of solutions has been reached including unchecked solutions.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03687">constraint_solver.h:3687</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a0fc43c0f1a567725de7ac83cc86bde8f"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a0fc43c0f1a567725de7ac83cc86bde8f">operations_research::Assignment::DurationValue</a></div><div class="ttdeci">int64 DurationValue(const IntervalVar *const var) const</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ac1097997c1048eba4ed6b2ba1bc3d3a1"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ac1097997c1048eba4ed6b2ba1bc3d3a1">operations_research::Solver::MakeDisjunctiveConstraint</a></div><div class="ttdeci">DisjunctiveConstraint * MakeDisjunctiveConstraint(const std::vector&lt; IntervalVar * &gt; &amp;intervals, const std::string &amp;name)</div><div class="ttdoc">This constraint forces all interval vars into an non-overlapping sequence.</div></div>
<div class="ttc" id="classoperations__research_1_1IntVar_html_a49fb18ac443f329969336d1d685269ed"><div class="ttname"><a href="classoperations__research_1_1IntVar.html#a49fb18ac443f329969336d1d685269ed">operations_research::IntVar::index</a></div><div class="ttdeci">int index() const</div><div class="ttdoc">Returns the index of the variable.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04071">constraint_solver.h:4071</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a3d0f049e3e28448b276346341717d945"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a3d0f049e3e28448b276346341717d945">operations_research::Solver::GetOrCreateLocalSearchState</a></div><div class="ttdeci">Assignment * GetOrCreateLocalSearchState()</div><div class="ttdoc">Returns (or creates) an assignment representing the state of local search.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a70a1f8ef1f9c2d029d134917e60bf363"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a70a1f8ef1f9c2d029d134917e60bf363">operations_research::Solver::MakeActionDemon</a></div><div class="ttdeci">Demon * MakeActionDemon(Action action)</div><div class="ttdoc">Creates a demon from a callback.</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_ad1746f20b39f1db633bb4781bedf05b7"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#ad1746f20b39f1db633bb4781bedf05b7">operations_research::Assignment::SetBackwardSequence</a></div><div class="ttdeci">void SetBackwardSequence(const SequenceVar *const var, const std::vector&lt; int &gt; &amp;backward_sequence)</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a9bdd4a47b226bebc9f27469b567e0026"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a9bdd4a47b226bebc9f27469b567e0026">operations_research::ModelVisitor::kCardsArgument</a></div><div class="ttdeci">static const char kCardsArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03420">constraint_solver.h:3420</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ac3c5b22fad8060ca1a66bd928182d8a4aa2d880da72318dcffa237e4f2100c58c"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4aa2d880da72318dcffa237e4f2100c58c">operations_research::Solver::MAKECHAININACTIVE</a></div><div class="ttdoc">Operator which makes a &quot;chain&quot; of path nodes inactive.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00491">constraint_solver.h:491</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ae6dee2b402434520635e66e9d58a6215a6a8779a3d27000ed1e11b3549c0470ef"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ae6dee2b402434520635e66e9d58a6215a6a8779a3d27000ed1e11b3549c0470ef">operations_research::Solver::SENTINEL</a></div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00706">constraint_solver.h:706</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_aa9ee3a1781e9969518c2f838f16c1552"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#aa9ee3a1781e9969518c2f838f16c1552">operations_research::ModelVisitor::BeginVisitConstraint</a></div><div class="ttdeci">virtual void BeginVisitConstraint(const std::string &amp;type_name, const Constraint *const constraint)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a622500a4c7e11bbc4b8a5e5de2c84f13"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a622500a4c7e11bbc4b8a5e5de2c84f13">operations_research::Solver::LocalSearchProfiler</a></div><div class="ttdeci">friend class LocalSearchProfiler</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02924">constraint_solver.h:2924</a></div></div>
<div class="ttc" id="classoperations__research_1_1DisjunctiveConstraint_html_ae2b4ffa19747b4205f3dff8e91424e1c"><div class="ttname"><a href="classoperations__research_1_1DisjunctiveConstraint.html#ae2b4ffa19747b4205f3dff8e91424e1c">operations_research::DisjunctiveConstraint::actives</a></div><div class="ttdeci">virtual const std::vector&lt; IntVar * &gt; &amp; actives() const =0</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_ab8d2e00eb03cec613c05eaf9ad6da646"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#ab8d2e00eb03cec613c05eaf9ad6da646">operations_research::Assignment::EndMin</a></div><div class="ttdeci">int64 EndMin(const IntervalVar *const var) const</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_ac9845229df3d0b0afc7d58f5a37432e8"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#ac9845229df3d0b0afc7d58f5a37432e8">operations_research::ModelVisitor::kSequenceArgument</a></div><div class="ttdeci">static const char kSequenceArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03457">constraint_solver.h:3457</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntVarElement_html_a5377e53fa0dc99d944ecc88e20e5f130"><div class="ttname"><a href="classoperations__research_1_1IntVarElement.html#a5377e53fa0dc99d944ecc88e20e5f130">operations_research::IntVarElement::SetMin</a></div><div class="ttdeci">void SetMin(int64 m)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04631">constraint_solver.h:4631</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_abdda7108c8185b3dcea12523567b96a4"><div class="ttname"><a href="classoperations__research_1_1Solver.html#abdda7108c8185b3dcea12523567b96a4">operations_research::Solver::MakePathPrecedenceConstraint</a></div><div class="ttdeci">Constraint * MakePathPrecedenceConstraint(std::vector&lt; IntVar * &gt; nexts, const std::vector&lt; std::pair&lt; int, int &gt;&gt; &amp;precedences)</div><div class="ttdoc">Contraint enforcing, for each pair (i,j) in precedences, i to be before j in paths defined by next va...</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a4ee11d297238c4b366eacbe02fe2ed23"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a4ee11d297238c4b366eacbe02fe2ed23">operations_research::Solver::MakeRestoreAssignment</a></div><div class="ttdeci">DecisionBuilder * MakeRestoreAssignment(Assignment *assignment)</div><div class="ttdoc">Returns a DecisionBuilder which restores an Assignment (calls void Assignment::Restore())</div></div>
<div class="ttc" id="classoperations__research_1_1PropagationBaseObject_html_a3fe6115081d583d57b6cd8b0dd1783d7"><div class="ttname"><a href="classoperations__research_1_1PropagationBaseObject.html#a3fe6115081d583d57b6cd8b0dd1783d7">operations_research::PropagationBaseObject::EnqueueVar</a></div><div class="ttdeci">void EnqueueVar(Demon *const d)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03174">constraint_solver.h:3174</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_af8fa7be9bf993f9441d56aaaa8213eb5"><div class="ttname"><a href="classoperations__research_1_1Solver.html#af8fa7be9bf993f9441d56aaaa8213eb5">operations_research::Solver::MakeCustomLimit</a></div><div class="ttdeci">SearchLimit * MakeCustomLimit(std::function&lt; bool()&gt; limiter)</div><div class="ttdoc">Callback-based search limit.</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html">operations_research::IntervalVarElement</a></div><div class="ttdoc">--— IntervalVarElement --—</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04663">constraint_solver.h:4663</a></div></div>
<div class="ttc" id="classoperations__research_1_1RegularLimit_html"><div class="ttname"><a href="classoperations__research_1_1RegularLimit.html">operations_research::RegularLimit</a></div><div class="ttdoc">--— Regular Limit --—</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04269">constraint_solver.h:4269</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ae2bcfbbfd2ccd50e71d9b7c2b466a9c2"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ae2bcfbbfd2ccd50e71d9b7c2b466a9c2">operations_research::Solver::MakeLexicalLessOrEqual</a></div><div class="ttdeci">Constraint * MakeLexicalLessOrEqual(const std::vector&lt; IntVar * &gt; &amp;left, const std::vector&lt; IntVar * &gt; &amp;right)</div><div class="ttdoc">Creates a constraint that enforces that left is lexicographically less than or equal to right.</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_aadef912e9222db3003405f7b60492dce"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#aadef912e9222db3003405f7b60492dce">operations_research::Assignment::Max</a></div><div class="ttdeci">int64 Max(const IntVar *const var) const</div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVarElement_html_a7aad1cd8d56d5d85aaad8face6643e64"><div class="ttname"><a href="classoperations__research_1_1SequenceVarElement.html#a7aad1cd8d56d5d85aaad8face6643e64">operations_research::SequenceVarElement::Reset</a></div><div class="ttdeci">void Reset(SequenceVar *const var)</div></div>
<div class="ttc" id="classoperations__research_1_1NumericalRev_html_ac5b1f44217bbe9914ab5f3bfd8a2c71f"><div class="ttname"><a href="classoperations__research_1_1NumericalRev.html#ac5b1f44217bbe9914ab5f3bfd8a2c71f">operations_research::NumericalRev::Add</a></div><div class="ttdeci">void Add(Solver *const s, const T &amp;to_add)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03743">constraint_solver.h:3743</a></div></div>
<div class="ttc" id="classoperations__research_1_1RegularLimit_html_ae4077e4ee25c40a40eb2c320d916250d"><div class="ttname"><a href="classoperations__research_1_1RegularLimit.html#ae4077e4ee25c40a40eb2c320d916250d">operations_research::RegularLimit::UpdateLimits</a></div><div class="ttdeci">void UpdateLimits(int64 time, int64 branches, int64 failures, int64 solutions)</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_ab793c03904c4ab40135010471187577e"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#ab793c03904c4ab40135010471187577e">operations_research::ModelVisitor::kStartsArgument</a></div><div class="ttdeci">static const char kStartsArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03466">constraint_solver.h:3466</a></div></div>
<div class="ttc" id="classoperations__research_1_1SearchMonitor_html_ac14f9c8abd763be08fbb1220b763df2b"><div class="ttname"><a href="classoperations__research_1_1SearchMonitor.html#ac14f9c8abd763be08fbb1220b763df2b">operations_research::SearchMonitor::AcceptDelta</a></div><div class="ttdeci">virtual bool AcceptDelta(Assignment *delta, Assignment *deltadelta)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_aacf8c33542c5f879ab9e1e21717c6fa6"><div class="ttname"><a href="classoperations__research_1_1Solver.html#aacf8c33542c5f879ab9e1e21717c6fa6">operations_research::Solver::RegisterDemon</a></div><div class="ttdeci">Demon * RegisterDemon(Demon *const demon)</div><div class="ttdoc">Adds a new demon and wraps it inside a DemonProfiler if necessary.</div></div>
<div class="ttc" id="classoperations__research_1_1IntVar_html_a53bfcce0b60a6c491992811a8453aa86"><div class="ttname"><a href="classoperations__research_1_1IntVar.html#a53bfcce0b60a6c491992811a8453aa86">operations_research::IntVar::VarType</a></div><div class="ttdeci">virtual int VarType() const</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a6a699e2d6f96a64244119ee9718e0f71"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a6a699e2d6f96a64244119ee9718e0f71">operations_research::Solver::MakeIntVar</a></div><div class="ttdeci">IntVar * MakeIntVar(int64 min, int64 max, const std::string &amp;name)</div><div class="ttdoc">-------— Make Factory -------—</div></div>
<div class="ttc" id="classoperations__research_1_1IntExpr_html_a13e126985026936fe8da212d2e377236"><div class="ttname"><a href="classoperations__research_1_1IntExpr.html#a13e126985026936fe8da212d2e377236">operations_research::IntExpr::Bound</a></div><div class="ttdeci">virtual bool Bound() const</div><div class="ttdoc">Returns true if the min and the max of the expression are equal.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03843">constraint_solver.h:3843</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a1a981ab215cf0097502d1dd4f3a542ac"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a1a981ab215cf0097502d1dd4f3a542ac">operations_research::Solver::InternalSaveBooleanVarValue</a></div><div class="ttdeci">friend void InternalSaveBooleanVarValue(Solver *const, IntVar *const)</div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVarElement_html_a4019a1b4cf9db5ed6885421d9e038c41"><div class="ttname"><a href="classoperations__research_1_1SequenceVarElement.html#a4019a1b4cf9db5ed6885421d9e038c41">operations_research::SequenceVarElement::Store</a></div><div class="ttdeci">void Store()</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a6183a217e1ddf504a4fd3f49788b73db"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a6183a217e1ddf504a4fd3f49788b73db">operations_research::Solver::Int64ToIntVar</a></div><div class="ttdeci">std::function&lt; IntVar *(int64)&gt; Int64ToIntVar</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00728">constraint_solver.h:728</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a2b8fff361dacff8b29be507fc704d0b1"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a2b8fff361dacff8b29be507fc704d0b1">operations_research::Solver::MakeDefaultPhase</a></div><div class="ttdeci">DecisionBuilder * MakeDefaultPhase(const std::vector&lt; IntVar * &gt; &amp;vars)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_abc4f50009f6abdfa5430c828c2119d76"><div class="ttname"><a href="classoperations__research_1_1Solver.html#abc4f50009f6abdfa5430c828c2119d76">operations_research::Solver::MakeScalProdEquality</a></div><div class="ttdeci">Constraint * MakeScalProdEquality(const std::vector&lt; IntVar * &gt; &amp;vars, const std::vector&lt; int64 &gt; &amp;coefficients, int64 cst)</div></div>
<div class="ttc" id="classoperations__research_1_1RegularLimit_html_a0ece3bd1f5a6a419a1c30fba713c6c8b"><div class="ttname"><a href="classoperations__research_1_1RegularLimit.html#a0ece3bd1f5a6a419a1c30fba713c6c8b">operations_research::RegularLimit::wall_time</a></div><div class="ttdeci">int64 wall_time() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04283">constraint_solver.h:4283</a></div></div>
<div class="ttc" id="classoperations__research_1_1BaseObject_html"><div class="ttname"><a href="classoperations__research_1_1BaseObject.html">operations_research::BaseObject</a></div><div class="ttdoc">Useful Search and Modeling Objects.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03134">constraint_solver.h:3134</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_af46311d9a91a9c985ed30bb560c5353b"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#af46311d9a91a9c985ed30bb560c5353b">operations_research::IntervalVarElement::SetPerformedValue</a></div><div class="ttdeci">void SetPerformedValue(int64 v)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04737">constraint_solver.h:4737</a></div></div>
<div class="ttc" id="classoperations__research_1_1RegularLimit_html_a96a95361f128c6725b5d76ba09239293"><div class="ttname"><a href="classoperations__research_1_1RegularLimit.html#a96a95361f128c6725b5d76ba09239293">operations_research::RegularLimit::solutions</a></div><div class="ttdeci">int64 solutions() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04290">constraint_solver.h:4290</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a01e1a27e5e6c03b48faab541885737ca"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a01e1a27e5e6c03b48faab541885737ca">operations_research::Solver::RevAlloc</a></div><div class="ttdeci">T * RevAlloc(T *object)</div><div class="ttdoc">Registers the given object as being reversible.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00776">constraint_solver.h:776</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a983c4e29e7048bcbcd8b7e170089df83"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a983c4e29e7048bcbcd8b7e170089df83">operations_research::Solver::MakeSolveOnce</a></div><div class="ttdeci">DecisionBuilder * MakeSolveOnce(DecisionBuilder *const db)</div><div class="ttdoc">SolveOnce will collapse a search tree described by a decision builder 'db' and a set of monitors and ...</div></div>
<div class="ttc" id="classoperations__research_1_1IntExpr_html"><div class="ttname"><a href="classoperations__research_1_1IntExpr.html">operations_research::IntExpr</a></div><div class="ttdoc">The class IntExpr is the base of all integer expressions in constraint programming.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03817">constraint_solver.h:3817</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a4808668be13f3c213c5494417b5a1b3f"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a4808668be13f3c213c5494417b5a1b3f">operations_research::ModelVisitor::kMinEqual</a></div><div class="ttdeci">static const char kMinEqual[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03368">constraint_solver.h:3368</a></div></div>
<div class="ttc" id="classoperations__research_1_1InitAndGetValues_html"><div class="ttname"><a href="classoperations__research_1_1InitAndGetValues.html">operations_research::InitAndGetValues</a></div><div class="ttdoc">Utility class to encapsulate an IntVarIterator and use it in a range-based loop.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03922">constraint_solver.h:3922</a></div></div>
<div class="ttc" id="structoperations__research_1_1SolutionCollector_1_1SolutionData_html_a4fd4a3e7f39bccab9df8deac462048b9"><div class="ttname"><a href="structoperations__research_1_1SolutionCollector_1_1SolutionData.html#a4fd4a3e7f39bccab9df8deac462048b9">operations_research::SolutionCollector::SolutionData::operator&lt;</a></div><div class="ttdeci">bool operator&lt;(const SolutionData &amp;other) const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04155">constraint_solver.h:4155</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a5b5712802e63dcd3ee5abfd37e0f2a95a066908e143fd988a03767f05e682acaf"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a5b5712802e63dcd3ee5abfd37e0f2a95a066908e143fd988a03767f05e682acaf">operations_research::Solver::IN_SEARCH</a></div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00712">constraint_solver.h:712</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ad4faf53cefb2c2cdb8892b978a4b93a9"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ad4faf53cefb2c2cdb8892b978a4b93a9">operations_research::Solver::kNumPriorities</a></div><div class="ttdeci">static const int kNumPriorities</div><div class="ttdoc">Number of priorities for demons.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00255">constraint_solver.h:255</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_accdea325f60eb495ff2ea282aa45376c"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#accdea325f60eb495ff2ea282aa45376c">operations_research::ModelVisitor::kIsGreaterOrEqual</a></div><div class="ttdeci">static const char kIsGreaterOrEqual[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03355">constraint_solver.h:3355</a></div></div>
<div class="ttc" id="classoperations__research_1_1SearchMonitor_html"><div class="ttname"><a href="classoperations__research_1_1SearchMonitor.html">operations_research::SearchMonitor</a></div><div class="ttdoc">A search monitor is a simple set of callbacks to monitor all search events.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03616">constraint_solver.h:3616</a></div></div>
<div class="ttc" id="classoperations__research_1_1OptimizeVar_html_ae2a7ca2a1d7ffb879e2d7794aa3875dc"><div class="ttname"><a href="classoperations__research_1_1OptimizeVar.html#ae2a7ca2a1d7ffb879e2d7794aa3875dc">operations_research::OptimizeVar::DebugString</a></div><div class="ttdeci">std::string DebugString() const override</div></div>
<div class="ttc" id="classoperations__research_1_1SolutionPool_html_acfd2afc60305bddd7927b7f406dce492"><div class="ttname"><a href="classoperations__research_1_1SolutionPool.html#acfd2afc60305bddd7927b7f406dce492">operations_research::SolutionPool::~SolutionPool</a></div><div class="ttdeci">~SolutionPool() override</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l05357">constraint_solver.h:5357</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ae63acd77b8c2ee40387795051298f659a3291dae3d9aa520fe52d1ffaa2a2eadc"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659a3291dae3d9aa520fe52d1ffaa2a2eadc">operations_research::Solver::INT_VALUE_DEFAULT</a></div><div class="ttdoc">The default behavior is ASSIGN_MIN_VALUE.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00342">constraint_solver.h:342</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a0fe164a682eb2272efa0f483373b9db8"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a0fe164a682eb2272efa0f483373b9db8">operations_research::Solver::MakeOpposite</a></div><div class="ttdeci">IntExpr * MakeOpposite(IntExpr *const expr)</div><div class="ttdoc">-expr</div></div>
<div class="ttc" id="classoperations__research_1_1RevArray_html"><div class="ttname"><a href="classoperations__research_1_1RevArray.html">operations_research::RevArray</a></div><div class="ttdoc">Reversible array of POD types.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03758">constraint_solver.h:3758</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ac3c5b22fad8060ca1a66bd928182d8a4a27e459c0332eecea29a0b793ec635b49"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a27e459c0332eecea29a0b793ec635b49">operations_research::Solver::EXCHANGE</a></div><div class="ttdoc">Operator which exchanges the positions of two nodes.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00457">constraint_solver.h:457</a></div></div>
<div class="ttc" id="classoperations__research_1_1Constraint_html_ade8518fb88221d449c6a89f1dc7eac44"><div class="ttname"><a href="classoperations__research_1_1Constraint.html#ade8518fb88221d449c6a89f1dc7eac44">operations_research::Constraint::~Constraint</a></div><div class="ttdeci">~Constraint() override</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03568">constraint_solver.h:3568</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8a00b64c16b54cef4e0467730e171befa76db89f0caee82059523e2f233c31433"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8a00b64c16b54cef4e0467730e171befa76db89f0caee82059523e2f233c31433">operations_research::Solver::MAXIMIZATION</a></div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00719">constraint_solver.h:719</a></div></div>
<div class="ttc" id="classoperations__research_1_1CastConstraint_html_afe3c20ec0800b1d344861e783d45be41"><div class="ttname"><a href="classoperations__research_1_1CastConstraint.html#afe3c20ec0800b1d344861e783d45be41">operations_research::CastConstraint::target_var_</a></div><div class="ttdeci">IntVar *const target_var_</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03612">constraint_solver.h:3612</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8bda7ed6e7e533cca4c44eba6efffc8baf654ef2638f1ed2cd22cee830695a2c9"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8baf654ef2638f1ed2cd22cee830695a2c9">operations_research::Solver::CHOOSE_MIN_SIZE_HIGHEST_MIN</a></div><div class="ttdoc">Among unbound variables, select the variable with the smallest size, i.e., the smallest number of pos...</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00288">constraint_solver.h:288</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a5d2f031cb8202d7b1cfe534e3c8e1918"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a5d2f031cb8202d7b1cfe534e3c8e1918">operations_research::Solver::MakeWeightedMinimize</a></div><div class="ttdeci">OptimizeVar * MakeWeightedMinimize(const std::vector&lt; IntVar * &gt; &amp;sub_objectives, const std::vector&lt; int64 &gt; &amp;weights, int64 step)</div><div class="ttdoc">Creates a minimization weighted objective.</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a7240f2caf6bf198514219a78d6dd11f1"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a7240f2caf6bf198514219a78d6dd11f1">operations_research::IntervalVar::CannotBePerformed</a></div><div class="ttdeci">bool CannotBePerformed() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04441">constraint_solver.h:4441</a></div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVar_html_af92814129c466409ff4c004002c2034d"><div class="ttname"><a href="classoperations__research_1_1SequenceVar.html#af92814129c466409ff4c004002c2034d">operations_research::SequenceVar::DebugString</a></div><div class="ttdeci">std::string DebugString() const override</div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVar_html_a80930826abef932c86f9f751daa04ab2"><div class="ttname"><a href="classoperations__research_1_1SequenceVar.html#a80930826abef932c86f9f751daa04ab2">operations_research::SequenceVar::size</a></div><div class="ttdeci">int64 size() const</div><div class="ttdoc">Returns the number of interval vars in the sequence.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04575">constraint_solver.h:4575</a></div></div>
<div class="ttc" id="classoperations__research_1_1DisjunctiveConstraint_html_a125375a3e7f2593d1934d1b2f1a928e9"><div class="ttname"><a href="classoperations__research_1_1DisjunctiveConstraint.html#a125375a3e7f2593d1934d1b2f1a928e9">operations_research::DisjunctiveConstraint::time_slacks</a></div><div class="ttdeci">virtual const std::vector&lt; IntVar * &gt; &amp; time_slacks() const =0</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a6b43cb3f57f637e3c0633bac1d805564"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a6b43cb3f57f637e3c0633bac1d805564">operations_research::Solver::model_name</a></div><div class="ttdeci">std::string model_name() const</div><div class="ttdoc">Returns the name of the model.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a7e47d3b978e31e6273a63dc52fcf3379"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a7e47d3b978e31e6273a63dc52fcf3379">operations_research::Solver::IndexFilter1</a></div><div class="ttdeci">std::function&lt; bool(int64)&gt; IndexFilter1</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00726">constraint_solver.h:726</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_aea4e904944dd8850347309110ee64c36"><div class="ttname"><a href="classoperations__research_1_1Solver.html#aea4e904944dd8850347309110ee64c36">operations_research::Solver::MakeElement</a></div><div class="ttdeci">IntExpr * MakeElement(const std::vector&lt; int64 &gt; &amp;values, IntVar *const index)</div><div class="ttdoc">values[index]</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a7d079adf02e0acbbe26691e8c2e2d26f"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a7d079adf02e0acbbe26691e8c2e2d26f">operations_research::ModelVisitor::kEndMaxArgument</a></div><div class="ttdeci">static const char kEndMaxArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03430">constraint_solver.h:3430</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a3023ac289117048d22e69d76b5f6640e"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a3023ac289117048d22e69d76b5f6640e">operations_research::Solver::MakeSymmetryManager</a></div><div class="ttdeci">SearchMonitor * MakeSymmetryManager(const std::vector&lt; SymmetryBreaker * &gt; &amp;visitors)</div><div class="ttdoc">--— Symmetry Breaking --—</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_ab8f7d613cbf4ee63e39460698d3a46b5"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#ab8f7d613cbf4ee63e39460698d3a46b5">operations_research::Assignment::IntervalContainer</a></div><div class="ttdeci">AssignmentContainer&lt; IntervalVar, IntervalVarElement &gt; IntervalContainer</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l05009">constraint_solver.h:5009</a></div></div>
<div class="ttc" id="structoperations__research_1_1DefaultPhaseParameters_html_a57b6ace15b9d8666f76c6618d8addc1d"><div class="ttname"><a href="structoperations__research_1_1DefaultPhaseParameters.html#a57b6ace15b9d8666f76c6618d8addc1d">operations_research::DefaultPhaseParameters::DisplayLevel</a></div><div class="ttdeci">DisplayLevel</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00169">constraint_solver.h:169</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a95769d12b65e9e41966f082e6be717e3"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a95769d12b65e9e41966f082e6be717e3">operations_research::Assignment::Clear</a></div><div class="ttdeci">void Clear()</div></div>
<div class="ttc" id="structoperations__research_1_1DefaultPhaseParameters_html_aa1ee3388a187cc5465d43d25ac9ab1f1afa625d3c663f3bd0d081170ecf446f3b"><div class="ttname"><a href="structoperations__research_1_1DefaultPhaseParameters.html#aa1ee3388a187cc5465d43d25ac9ab1f1afa625d3c663f3bd0d081170ecf446f3b">operations_research::DefaultPhaseParameters::CHOOSE_MAX_AVERAGE_IMPACT</a></div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00160">constraint_solver.h:160</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntExpr_html_ad8abff4968e302f6a8576a4bdce52a8b"><div class="ttname"><a href="classoperations__research_1_1IntExpr.html#ad8abff4968e302f6a8576a4bdce52a8b">operations_research::IntExpr::IntExpr</a></div><div class="ttdeci">IntExpr(Solver *const s)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03819">constraint_solver.h:3819</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_adb77a0b4b40ea4e8282cf78b54717cd6"><div class="ttname"><a href="classoperations__research_1_1Solver.html#adb77a0b4b40ea4e8282cf78b54717cd6">operations_research::Solver::parameters</a></div><div class="ttdeci">ConstraintSolverParameters parameters() const</div><div class="ttdoc">Stored Parameters.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00748">constraint_solver.h:748</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a60d008087cac0b0ed36381ffbe5bdbeb"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a60d008087cac0b0ed36381ffbe5bdbeb">operations_research::ModelVisitor::kSizeArgument</a></div><div class="ttdeci">static const char kSizeArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03459">constraint_solver.h:3459</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_af56a95588607d60cd6908739164c2455"><div class="ttname"><a href="classoperations__research_1_1Solver.html#af56a95588607d60cd6908739164c2455">operations_research::Solver::MakeNBestValueSolutionCollector</a></div><div class="ttdeci">SolutionCollector * MakeNBestValueSolutionCollector(const Assignment *const assignment, int solution_count, bool maximize)</div><div class="ttdoc">Same as MakeBestValueSolutionCollector but collects the best solution_count solutions.</div></div>
<div class="ttc" id="classoperations__research_1_1RegularLimit_html_a71e06768288b2fd36acf28a435744d51"><div class="ttname"><a href="classoperations__research_1_1RegularLimit.html#a71e06768288b2fd36acf28a435744d51">operations_research::RegularLimit::ProgressPercent</a></div><div class="ttdeci">int ProgressPercent() override</div><div class="ttdoc">Returns a percentage representing the propress of the search before reaching limits.</div></div>
<div class="ttc" id="classoperations__research_1_1Constraint_html_a64ab23714e57db311ba5b9fe1e742979"><div class="ttname"><a href="classoperations__research_1_1Constraint.html#a64ab23714e57db311ba5b9fe1e742979">operations_research::Constraint::InitialPropagate</a></div><div class="ttdeci">virtual void InitialPropagate()=0</div><div class="ttdoc">This method performs the initial propagation of the constraint.</div></div>
<div class="ttc" id="classoperations__research_1_1IntVarElement_html"><div class="ttname"><a href="classoperations__research_1_1IntVarElement.html">operations_research::IntVarElement</a></div><div class="ttdoc">--— IntVarElement --—</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04610">constraint_solver.h:4610</a></div></div>
<div class="ttc" id="classoperations__research_1_1OptimizeVar_html_a6efc7277ebe0c6a15dd35687d9863017"><div class="ttname"><a href="classoperations__research_1_1OptimizeVar.html#a6efc7277ebe0c6a15dd35687d9863017">operations_research::OptimizeVar::Print</a></div><div class="ttdeci">virtual std::string Print() const</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a2878986c75516e14680711d3c1e873af"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a2878986c75516e14680711d3c1e873af">operations_research::ModelVisitor::kInitialState</a></div><div class="ttdeci">static const char kInitialState[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03439">constraint_solver.h:3439</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a4f085aa9a85c0d17046a1410e46de3c5"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a4f085aa9a85c0d17046a1410e46de3c5">operations_research::Solver::UseFastLocalSearch</a></div><div class="ttdeci">bool UseFastLocalSearch() const</div><div class="ttdoc">Returns true if fast local search is enabled.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02860">constraint_solver.h:2860</a></div></div>
<div class="ttc" id="classoperations__research_1_1PropagationBaseObject_html_ab3aa61657c74294f198a16d1dbc52580"><div class="ttname"><a href="classoperations__research_1_1PropagationBaseObject.html#ab3aa61657c74294f198a16d1dbc52580">operations_research::PropagationBaseObject::solver</a></div><div class="ttdeci">Solver * solver() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03161">constraint_solver.h:3161</a></div></div>
<div class="ttc" id="classoperations__research_1_1Rev_html_a49f4bb1d930408358e5678b01bc5e0c6"><div class="ttname"><a href="classoperations__research_1_1Rev.html#a49f4bb1d930408358e5678b01bc5e0c6">operations_research::Rev::Rev</a></div><div class="ttdeci">Rev(const T &amp;val)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03718">constraint_solver.h:3718</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntVarElement_html_a11ad56c03b156e52ac092191a81d278e"><div class="ttname"><a href="classoperations__research_1_1IntVarElement.html#a11ad56c03b156e52ac092191a81d278e">operations_research::IntVarElement::Restore</a></div><div class="ttdeci">void Restore()</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04622">constraint_solver.h:4622</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ae63acd77b8c2ee40387795051298f659a094a0fbeabae8b18ca5367f2564a0896"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659a094a0fbeabae8b18ca5367f2564a0896">operations_research::Solver::SPLIT_UPPER_HALF</a></div><div class="ttdoc">Split the domain in two around the center, and choose the lower part first.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00367">constraint_solver.h:367</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_adf86f33f53f99f73d5f0a459e11e2a64"><div class="ttname"><a href="classoperations__research_1_1Solver.html#adf86f33f53f99f73d5f0a459e11e2a64">operations_research::Solver::MakeFailDecision</a></div><div class="ttdeci">Decision * MakeFailDecision()</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_acb354925d9ed2803b56953a9a9ec59df"><div class="ttname"><a href="classoperations__research_1_1Solver.html#acb354925d9ed2803b56953a9a9ec59df">operations_research::Solver::ObjectiveWatcher</a></div><div class="ttdeci">std::function&lt; void(int64)&gt; ObjectiveWatcher</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00736">constraint_solver.h:736</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_afd4223d7e392bacabeacbd256cfd6b47"><div class="ttname"><a href="classoperations__research_1_1Solver.html#afd4223d7e392bacabeacbd256cfd6b47">operations_research::Solver::ActiveSearch</a></div><div class="ttdeci">Search * ActiveSearch() const</div><div class="ttdoc">Returns the active search, nullptr outside search.</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_a65d8115573c692d5ff5afc12748ea592"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#a65d8115573c692d5ff5afc12748ea592">operations_research::IntervalVarElement::SetPerformedMin</a></div><div class="ttdeci">void SetPerformedMin(int64 m)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04731">constraint_solver.h:4731</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntVar_html_a791449c48c24075f82b47848038b5ffd"><div class="ttname"><a href="classoperations__research_1_1IntVar.html#a791449c48c24075f82b47848038b5ffd">operations_research::IntVar::IsDifferent</a></div><div class="ttdeci">virtual IntVar * IsDifferent(int64 constant)=0</div></div>
<div class="ttc" id="classoperations__research_1_1IntVar_html"><div class="ttname"><a href="classoperations__research_1_1IntVar.html">operations_research::IntVar</a></div><div class="ttdoc">The class IntVar is a subset of IntExpr.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03978">constraint_solver.h:3978</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_ac2f6eb8ce25d5e485ef02c13490a0465"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#ac2f6eb8ce25d5e485ef02c13490a0465">operations_research::ModelVisitor::kCapacityArgument</a></div><div class="ttdeci">static const char kCapacityArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03419">constraint_solver.h:3419</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a676bfc6bcaf0a4866b511c82fd47c420"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a676bfc6bcaf0a4866b511c82fd47c420">operations_research::Assignment::~Assignment</a></div><div class="ttdeci">~Assignment() override</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a70e56c3a6b9f72cd1237a48eda01d330"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a70e56c3a6b9f72cd1237a48eda01d330">operations_research::Solver::RegisterIntervalVar</a></div><div class="ttdeci">IntervalVar * RegisterIntervalVar(IntervalVar *const var)</div><div class="ttdoc">Registers a new IntervalVar and wraps it inside a TraceIntervalVar if necessary.</div></div>
<div class="ttc" id="classoperations__research_1_1SymmetryBreaker_html"><div class="ttname"><a href="classoperations__research_1_1SymmetryBreaker.html">operations_research::SymmetryBreaker</a></div><div class="ttdoc">A symmetry breaker is an object that will visit a decision and create the 'symmetrical' decision in r...</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solveri_8h_source.html#l01786">constraint_solveri.h:1786</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8bda7ed6e7e533cca4c44eba6efffc8ba8954f01caaa3b482d349a3ed6c254155"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8ba8954f01caaa3b482d349a3ed6c254155">operations_research::Solver::CHOOSE_MIN_SIZE_LOWEST_MAX</a></div><div class="ttdoc">Among unbound variables, select the variable with the smallest size, i.e., the smallest number of pos...</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00296">constraint_solver.h:296</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a6e45377849d24ceb498ec05f3bb146e1"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a6e45377849d24ceb498ec05f3bb146e1">operations_research::Assignment::StartMax</a></div><div class="ttdeci">int64 StartMax(const IntervalVar *const var) const</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a845c613a7ca1a56f898c0b8eedc86a24"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a845c613a7ca1a56f898c0b8eedc86a24">operations_research::Solver::MakeSumObjectiveFilter</a></div><div class="ttdeci">IntVarLocalSearchFilter * MakeSumObjectiveFilter(const std::vector&lt; IntVar * &gt; &amp;vars, IndexEvaluator2 values, IntVar *const objective, Solver::LocalSearchFilterBound filter_enum)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a2047abfd3e0cf6919d67a4a6ccd1d3cc"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a2047abfd3e0cf6919d67a4a6ccd1d3cc">operations_research::Solver::failures</a></div><div class="ttdeci">int64 failures() const</div><div class="ttdoc">The number of failures encountered since the creation of the solver.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00981">constraint_solver.h:981</a></div></div>
<div class="ttc" id="classoperations__research_1_1AssignmentContainer_html_a45d4fca065881a70fe4598dd5f91094c"><div class="ttname"><a href="classoperations__research_1_1AssignmentContainer.html#a45d4fca065881a70fe4598dd5f91094c">operations_research::AssignmentContainer::AddAtPosition</a></div><div class="ttdeci">E * AddAtPosition(V *var, int position)</div><div class="ttdoc">Advanced usage: Adds element at a given position; position has to have been allocated with Assignment...</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04844">constraint_solver.h:4844</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_ac5753868fd49c8d832df129de33814f7"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#ac5753868fd49c8d832df129de33814f7">operations_research::ModelVisitor::kEvaluatorArgument</a></div><div class="ttdeci">static const char kEvaluatorArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03476">constraint_solver.h:3476</a></div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVarElement_html_a23bf65206e3c559e50748433229155bf"><div class="ttname"><a href="classoperations__research_1_1SequenceVarElement.html#a23bf65206e3c559e50748433229155bf">operations_research::SequenceVarElement::Unperformed</a></div><div class="ttdeci">const std::vector&lt; int &gt; &amp; Unperformed() const</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ad68a982dad17396ac23877b5c80f7b7d"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ad68a982dad17396ac23877b5c80f7b7d">operations_research::Solver::unchecked_solutions</a></div><div class="ttdeci">int64 unchecked_solutions() const</div><div class="ttdoc">The number of unchecked solutions found by local search.</div></div>
<div class="ttc" id="classoperations__research_1_1RegularLimit_html_ab40802726cee8567662a01a9ca06af97"><div class="ttname"><a href="classoperations__research_1_1RegularLimit.html#ab40802726cee8567662a01a9ca06af97">operations_research::RegularLimit::RegularLimit</a></div><div class="ttdeci">RegularLimit(Solver *const s, int64 time, int64 branches, int64 failures, int64 solutions, bool smart_time_check, bool cumulative)</div></div>
<div class="ttc" id="namespaceoperations__research_html"><div class="ttname"><a href="namespaceoperations__research.html">operations_research</a></div><div class="ttdoc">Licensed under the Apache License, Version 2.0 (the &quot;License&quot;); you may not use this file except in c...</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00093">constraint_solver.h:93</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ab00ece9bae955aa3eed634a3df54e8b0"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ab00ece9bae955aa3eed634a3df54e8b0">operations_research::Solver::MakeScalProdGreaterOrEqual</a></div><div class="ttdeci">Constraint * MakeScalProdGreaterOrEqual(const std::vector&lt; IntVar * &gt; &amp;vars, const std::vector&lt; int64 &gt; &amp;coeffs, int64 cst)</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a1c080372fc528d4951e2411c76696d3f"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a1c080372fc528d4951e2411c76696d3f">operations_research::ModelVisitor::kRightArgument</a></div><div class="ttdeci">static const char kRightArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03456">constraint_solver.h:3456</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a9c522a6cff91adae19af5cce7d8e411f"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a9c522a6cff91adae19af5cce7d8e411f">operations_research::Solver::AddConstraint</a></div><div class="ttdeci">void AddConstraint(Constraint *const c)</div><div class="ttdoc">propagation</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a2cd12d6edf03cb5b85cc14536e77a4a5"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a2cd12d6edf03cb5b85cc14536e77a4a5">operations_research::IntervalVar::PerformedExpr</a></div><div class="ttdeci">virtual IntExpr * PerformedExpr()=0</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a8e2f5e7fed94b846d1f53c1ca8e9fa9f"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a8e2f5e7fed94b846d1f53c1ca8e9fa9f">operations_research::IntervalVar::MayBePerformed</a></div><div class="ttdeci">virtual bool MayBePerformed() const =0</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_af598e870cb075900bb601fdbbdca4825"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#af598e870cb075900bb601fdbbdca4825">operations_research::ModelVisitor::kMirrorOperation</a></div><div class="ttdeci">static const char kMirrorOperation[]</div><div class="ttdoc">Operations.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03479">constraint_solver.h:3479</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntVar_html_a894ecb1c102fa7fca59661a215f14d50"><div class="ttname"><a href="classoperations__research_1_1IntVar.html#a894ecb1c102fa7fca59661a215f14d50">operations_research::IntVar::OldMin</a></div><div class="ttdeci">virtual int64 OldMin() const =0</div><div class="ttdoc">Returns the previous min.</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_ae285dcf4a5f8b6a28a9a6f5ed7b3e93d"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#ae285dcf4a5f8b6a28a9a6f5ed7b3e93d">operations_research::Assignment::operator!=</a></div><div class="ttdeci">bool operator!=(const Assignment &amp;assignment) const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l05176">constraint_solver.h:5176</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a997571dcb78d0c1cedd3e5cb6a8afbd3"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a997571dcb78d0c1cedd3e5cb6a8afbd3">operations_research::Solver::MakeBetweenCt</a></div><div class="ttdeci">Constraint * MakeBetweenCt(IntExpr *const expr, int64 l, int64 u)</div><div class="ttdoc">--— Between and related constraints --—</div></div>
<div class="ttc" id="classoperations__research_1_1DecisionBuilder_html_adcbdca02b7495a6f2ffcff7f77e32b1c"><div class="ttname"><a href="classoperations__research_1_1DecisionBuilder.html#adcbdca02b7495a6f2ffcff7f77e32b1c">operations_research::DecisionBuilder::DecisionBuilder</a></div><div class="ttdeci">DecisionBuilder()</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03251">constraint_solver.h:3251</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntVarIterator_html"><div class="ttname"><a href="classoperations__research_1_1IntVarIterator.html">operations_research::IntVarIterator</a></div><div class="ttdoc">The class Iterator has two direct subclasses.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03895">constraint_solver.h:3895</a></div></div>
<div class="ttc" id="classoperations__research_1_1PropagationBaseObject_html_a78b16596f589dd63573a1586f61c2dbd"><div class="ttname"><a href="classoperations__research_1_1PropagationBaseObject.html#a78b16596f589dd63573a1586f61c2dbd">operations_research::PropagationBaseObject::FreezeQueue</a></div><div class="ttdeci">void FreezeQueue()</div><div class="ttdoc">This method freezes the propagation queue.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03164">constraint_solver.h:3164</a></div></div>
<div class="ttc" id="classoperations__research_1_1RegularLimit_html_a742f9399433cea90ac80e40b7a7cbf4c"><div class="ttname"><a href="classoperations__research_1_1RegularLimit.html#a742f9399433cea90ac80e40b7a7cbf4c">operations_research::RegularLimit::failures</a></div><div class="ttdeci">int64 failures() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04289">constraint_solver.h:4289</a></div></div>
<div class="ttc" id="classoperations__research_1_1CastConstraint_html_abb7d3d824e298a2756e9a74b2163c5e7"><div class="ttname"><a href="classoperations__research_1_1CastConstraint.html#abb7d3d824e298a2756e9a74b2163c5e7">operations_research::CastConstraint::~CastConstraint</a></div><div class="ttdeci">~CastConstraint() override</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03607">constraint_solver.h:3607</a></div></div>
<div class="ttc" id="classoperations__research_1_1Demon_html_a6e4c51a92b24c256d889227667175e52"><div class="ttname"><a href="classoperations__research_1_1Demon.html#a6e4c51a92b24c256d889227667175e52">operations_research::Demon::~Demon</a></div><div class="ttdeci">~Demon() override</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03287">constraint_solver.h:3287</a></div></div>
<div class="ttc" id="classoperations__research_1_1DisjunctiveConstraint_html_a204df98d042e4eb2954aea4563a950e9"><div class="ttname"><a href="classoperations__research_1_1DisjunctiveConstraint.html#a204df98d042e4eb2954aea4563a950e9">operations_research::DisjunctiveConstraint::DisjunctiveConstraint</a></div><div class="ttdeci">DisjunctiveConstraint(Solver *const s, const std::vector&lt; IntervalVar * &gt; &amp;intervals, const std::string &amp;name)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a0bd00b719a0d7571e3bbc3bb93f64eb6"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a0bd00b719a0d7571e3bbc3bb93f64eb6">operations_research::Solver::MakeIsDifferentCstCt</a></div><div class="ttdeci">Constraint * MakeIsDifferentCstCt(IntExpr *const var, int64 value, IntVar *const boolvar)</div><div class="ttdoc">boolvar == (var != value)</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_af63d71fcac04c98d5e774bf36968b8c7"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#af63d71fcac04c98d5e774bf36968b8c7">operations_research::ModelVisitor::kVariableArgument</a></div><div class="ttdeci">static const char kVariableArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03474">constraint_solver.h:3474</a></div></div>
<div class="ttc" id="classoperations__research_1_1Demon_html_a7ec8db0f9eacea36b80bfacfb1b5af8b"><div class="ttname"><a href="classoperations__research_1_1Demon.html#a7ec8db0f9eacea36b80bfacfb1b5af8b">operations_research::Demon::priority</a></div><div class="ttdeci">virtual Solver::DemonPriority priority() const</div><div class="ttdoc">This method returns the priority of the demon.</div></div>
<div class="ttc" id="classoperations__research_1_1OptimizeVar_html_ac567620867f5e875168966d1c5abde7d"><div class="ttname"><a href="classoperations__research_1_1OptimizeVar.html#ac567620867f5e875168966d1c5abde7d">operations_research::OptimizeVar::Var</a></div><div class="ttdeci">IntVar * Var() const</div><div class="ttdoc">Returns the variable that is optimized.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04197">constraint_solver.h:4197</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a7353be5c838dbb88fda3b98d378269c3"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a7353be5c838dbb88fda3b98d378269c3">operations_research::ModelVisitor::kConditionalExpr</a></div><div class="ttdeci">static const char kConditionalExpr[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03325">constraint_solver.h:3325</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a34419e55556ff4e92b447fe895bdb9c3"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a34419e55556ff4e92b447fe895bdb9c3">operations_research::Solver::IntVar</a></div><div class="ttdeci">friend class IntVar</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02918">constraint_solver.h:2918</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_ad71780560faa8a12413e6007c636c104"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#ad71780560faa8a12413e6007c636c104">operations_research::Assignment::Add</a></div><div class="ttdeci">IntVarElement * Add(IntVar *const var)</div></div>
<div class="ttc" id="classoperations__research_1_1AssignmentContainer_html_aae1c4d5b0bb21f3f53d7bd5f06635bfa"><div class="ttname"><a href="classoperations__research_1_1AssignmentContainer.html#aae1c4d5b0bb21f3f53d7bd5f06635bfa">operations_research::AssignmentContainer::Clear</a></div><div class="ttdeci">void Clear()</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04848">constraint_solver.h:4848</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ab6302978f1de57bdeafa0ffee05c92c9a5fbb5a6ea281c2affbcd2fc79c1d7c63"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9a5fbb5a6ea281c2affbcd2fc79c1d7c63">operations_research::Solver::STARTS_AT_START</a></div><div class="ttdoc">t1 starts at t2 start, i.e. Start(t1) == Start(t2) + delay.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00635">constraint_solver.h:635</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a481f3887a70f86eb37968ee8909267f4"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a481f3887a70f86eb37968ee8909267f4">operations_research::Assignment::operator==</a></div><div class="ttdeci">bool operator==(const Assignment &amp;assignment) const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l05170">constraint_solver.h:5170</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_ac91fa31e47cb779cb431dea57017983f"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#ac91fa31e47cb779cb431dea57017983f">operations_research::ModelVisitor::kSizeYArgument</a></div><div class="ttdeci">static const char kSizeYArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03461">constraint_solver.h:3461</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a4b0972c731faf884eba5acab99ebb2b4ae5f79fc80ef9ae665bcd7c0e55c02aa6"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a4b0972c731faf884eba5acab99ebb2b4ae5f79fc80ef9ae665bcd7c0e55c02aa6">operations_research::Solver::VAR_PRIORITY</a></div><div class="ttdoc">VAR_PRIORITY is between DELAYED_PRIORITY and NORMAL_PRIORITY.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00604">constraint_solver.h:604</a></div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVarElement_html_a7296d95d6ce7890ff1ace7779dee8755"><div class="ttname"><a href="classoperations__research_1_1SequenceVarElement.html#a7296d95d6ce7890ff1ace7779dee8755">operations_research::SequenceVarElement::SetBackwardSequence</a></div><div class="ttdeci">void SetBackwardSequence(const std::vector&lt; int &gt; &amp;backward_sequence)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_aa916897f2e52eefc110e225ffd8d23e8"><div class="ttname"><a href="classoperations__research_1_1Solver.html#aa916897f2e52eefc110e225ffd8d23e8">operations_research::Solver::IsProfilingEnabled</a></div><div class="ttdeci">bool IsProfilingEnabled() const</div><div class="ttdoc">Returns whether we are profiling the solver.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a92be45d90f748f1228f09b9585deefcf"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a92be45d90f748f1228f09b9585deefcf">operations_research::Solver::MakeDelayedConstraintInitialPropagateCallback</a></div><div class="ttdeci">Demon * MakeDelayedConstraintInitialPropagateCallback(Constraint *const ct)</div><div class="ttdoc">This method is a specialized case of the MakeConstraintDemon method to call the InitiatePropagate of ...</div></div>
<div class="ttc" id="structoperations__research_1_1Solver_1_1SearchLogParameters_html_a71a927cbad9edffb0f6bed715809c251"><div class="ttname"><a href="structoperations__research_1_1Solver_1_1SearchLogParameters.html#a71a927cbad9edffb0f6bed715809c251">operations_research::Solver::SearchLogParameters::branch_period</a></div><div class="ttdeci">int branch_period</div><div class="ttdoc">SearchMonitors will display a periodic search log every branch_period branches explored.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02287">constraint_solver.h:2287</a></div></div>
<div class="ttc" id="structoperations__research_1_1InitAndGetValues_1_1Iterator_html"><div class="ttname"><a href="structoperations__research_1_1InitAndGetValues_1_1Iterator.html">operations_research::InitAndGetValues::Iterator</a></div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03938">constraint_solver.h:3938</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a83e14be9c6bba9abdd1949c25c32a60da294a4a33adc6833aa24adfd0d8eb44f5"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a83e14be9c6bba9abdd1949c25c32a60da294a4a33adc6833aa24adfd0d8eb44f5">operations_research::Solver::ENDS_AT</a></div><div class="ttdoc">t ends at d, i.e. End(t) == d.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00650">constraint_solver.h:650</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_afab240c5c40998926973f668308d3e28"><div class="ttname"><a href="classoperations__research_1_1Solver.html#afab240c5c40998926973f668308d3e28">operations_research::Solver::MakeStrictDisjunctiveConstraint</a></div><div class="ttdeci">DisjunctiveConstraint * MakeStrictDisjunctiveConstraint(const std::vector&lt; IntervalVar * &gt; &amp;intervals, const std::string &amp;name)</div><div class="ttdoc">This constraint forces all interval vars into an non-overlapping sequence.</div></div>
<div class="ttc" id="classoperations__research_1_1IntVarIterator_html_a35ab3d4e05e41e87312043b3fbb803f4"><div class="ttname"><a href="classoperations__research_1_1IntVarIterator.html#a35ab3d4e05e41e87312043b3fbb803f4">operations_research::IntVarIterator::Ok</a></div><div class="ttdeci">virtual bool Ok() const =0</div><div class="ttdoc">This method indicates if we can call Value() or not.</div></div>
<div class="ttc" id="routing_8h_html_a5f32c22c620c811754ba7b6f977db864"><div class="ttname"><a href="routing_8h.html#a5f32c22c620c811754ba7b6f977db864">solver</a></div><div class="ttdeci">Solver * solver() const</div><div class="ttdoc">Returns the underlying constraint solver.</div><div class="ttdef"><b>Definition:</b> <a href="routing_8h_source.html#l01170">routing.h:1170</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8bda7ed6e7e533cca4c44eba6efffc8ba8f69d3fc74e6a3faaa9be2583ce8fce3"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8ba8f69d3fc74e6a3faaa9be2583ce8fce3">operations_research::Solver::CHOOSE_FIRST_UNBOUND</a></div><div class="ttdoc">Select the first unbound variable.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00269">constraint_solver.h:269</a></div></div>
<div class="ttc" id="classoperations__research_1_1OptimizeVar_html_a046594f08d57c33248ac77101184e66c"><div class="ttname"><a href="classoperations__research_1_1OptimizeVar.html#a046594f08d57c33248ac77101184e66c">operations_research::OptimizeVar::BeginNextDecision</a></div><div class="ttdeci">void BeginNextDecision(DecisionBuilder *const db) override</div><div class="ttdoc">Before calling DecisionBuilder::Next.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a7563a86f8f366a85c8f48431c9f982ee"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a7563a86f8f366a85c8f48431c9f982ee">operations_research::ModelVisitor::kStartMinArgument</a></div><div class="ttdeci">static const char kStartMinArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03465">constraint_solver.h:3465</a></div></div>
<div class="ttc" id="classoperations__research_1_1DecisionVisitor_html_a82aadbb02576d33c46f8c2851f455cde"><div class="ttname"><a href="classoperations__research_1_1DecisionVisitor.html#a82aadbb02576d33c46f8c2851f455cde">operations_research::DecisionVisitor::~DecisionVisitor</a></div><div class="ttdeci">~DecisionVisitor() override</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03233">constraint_solver.h:3233</a></div></div>
<div class="ttc" id="classoperations__research_1_1RegularLimit_html_ab78472fc60e6e9f3a7920cba49f6cc72"><div class="ttname"><a href="classoperations__research_1_1RegularLimit.html#ab78472fc60e6e9f3a7920cba49f6cc72">operations_research::RegularLimit::AbsoluteSolverDeadline</a></div><div class="ttdeci">absl::Time AbsoluteSolverDeadline() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04295">constraint_solver.h:4295</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a6008fca0fdf3f753369e587d933fab59"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a6008fca0fdf3f753369e587d933fab59">operations_research::ModelVisitor::kProduct</a></div><div class="ttdeci">static const char kProduct[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03381">constraint_solver.h:3381</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a2ebf87279a0ec3e2342579e72f2bd34f"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a2ebf87279a0ec3e2342579e72f2bd34f">operations_research::Solver::MakeMinimize</a></div><div class="ttdeci">OptimizeVar * MakeMinimize(IntVar *const v, int64 step)</div><div class="ttdoc">--— Objective --—</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a8f3e3b37dc7487ff51107da6c9d36776"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a8f3e3b37dc7487ff51107da6c9d36776">operations_research::ModelVisitor::kRelaxedMinOperation</a></div><div class="ttdeci">static const char kRelaxedMinOperation[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03481">constraint_solver.h:3481</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a4d7cd9490b4b727b513fa325aa118561"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a4d7cd9490b4b727b513fa325aa118561">operations_research::Solver::MakeEnterSearchCallback</a></div><div class="ttdeci">SearchMonitor * MakeEnterSearchCallback(std::function&lt; void()&gt; callback)</div><div class="ttdoc">--— Callback-based search monitors --—</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_aaeb891b509e11395b17691fc257f8430"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#aaeb891b509e11395b17691fc257f8430">operations_research::ModelVisitor::EndVisitIntegerExpression</a></div><div class="ttdeci">virtual void EndVisitIntegerExpression(const std::string &amp;type_name, const IntExpr *const expr)</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a326a1e8421f974dc3f48401639313298"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a326a1e8421f974dc3f48401639313298">operations_research::ModelVisitor::kSumOperation</a></div><div class="ttdeci">static const char kSumOperation[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03482">constraint_solver.h:3482</a></div></div>
<div class="ttc" id="classoperations__research_1_1NumericalRev_html_a5cb75653696c123cfc8dbc5a9e916084"><div class="ttname"><a href="classoperations__research_1_1NumericalRev.html#a5cb75653696c123cfc8dbc5a9e916084">operations_research::NumericalRev::Incr</a></div><div class="ttdeci">void Incr(Solver *const s)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03747">constraint_solver.h:3747</a></div></div>
<div class="ttc" id="classoperations__research_1_1OptimizeVar_html_a0a7e487cd5bdc3fa3a515765bb007fdd"><div class="ttname"><a href="classoperations__research_1_1OptimizeVar.html#a0a7e487cd5bdc3fa3a515765bb007fdd">operations_research::OptimizeVar::ApplyBound</a></div><div class="ttdeci">void ApplyBound()</div></div>
<div class="ttc" id="classoperations__research_1_1DisjunctiveConstraint_html"><div class="ttname"><a href="classoperations__research_1_1DisjunctiveConstraint.html">operations_research::DisjunctiveConstraint</a></div><div class="ttdoc">--— Disjunctive Constraint --—</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l05314">constraint_solver.h:5314</a></div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVarElement_html_aa416720977aa00d0f25d352166f4f005"><div class="ttname"><a href="classoperations__research_1_1SequenceVarElement.html#aa416720977aa00d0f25d352166f4f005">operations_research::SequenceVarElement::SetForwardSequence</a></div><div class="ttdeci">void SetForwardSequence(const std::vector&lt; int &gt; &amp;forward_sequence)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a63eadebc6faf0538523bfc4dcbc39d97"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a63eadebc6faf0538523bfc4dcbc39d97">operations_research::Solver::MakeAllDifferent</a></div><div class="ttdeci">Constraint * MakeAllDifferent(const std::vector&lt; IntVar * &gt; &amp;vars)</div><div class="ttdoc">All variables are pairwise different.</div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVar_html_a12e4526c316b3d49b8cd8cb91a037118"><div class="ttname"><a href="classoperations__research_1_1SequenceVar.html#a12e4526c316b3d49b8cd8cb91a037118">operations_research::SequenceVar::DurationRange</a></div><div class="ttdeci">void DurationRange(int64 *const dmin, int64 *const dmax) const</div><div class="ttdoc">Returns the minimum and maximum duration of combined interval vars in the sequence.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_adc38e544150243bf19864bfe3119d521"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#adc38e544150243bf19864bfe3119d521">operations_research::ModelVisitor::kUsageLessConstantExtension</a></div><div class="ttdeci">static const char kUsageLessConstantExtension[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03410">constraint_solver.h:3410</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ad7fbe491c3a389f2cd649301689375f5"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ad7fbe491c3a389f2cd649301689375f5">operations_research::Solver::MakeAssignVariablesValues</a></div><div class="ttdeci">Decision * MakeAssignVariablesValues(const std::vector&lt; IntVar * &gt; &amp;vars, const std::vector&lt; int64 &gt; &amp;values)</div></div>
<div class="ttc" id="classoperations__research_1_1IntVar_html_a26efd8a51314b318dc14641e90af5c3a"><div class="ttname"><a href="classoperations__research_1_1IntVar.html#a26efd8a51314b318dc14641e90af5c3a">operations_research::IntVar::Size</a></div><div class="ttdeci">virtual uint64 Size() const =0</div><div class="ttdoc">This method returns the number of values in the domain of the variable.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a2b490050360819abe7bb697033db6561"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a2b490050360819abe7bb697033db6561">operations_research::ModelVisitor::kIsGreater</a></div><div class="ttdeci">static const char kIsGreater[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03354">constraint_solver.h:3354</a></div></div>
<div class="ttc" id="structoperations__research_1_1DefaultPhaseParameters_html_a7a3fddb880fc793ebe5fc960d31ab3a4"><div class="ttname"><a href="structoperations__research_1_1DefaultPhaseParameters.html#a7a3fddb880fc793ebe5fc960d31ab3a4">operations_research::DefaultPhaseParameters::display_level</a></div><div class="ttdeci">DisplayLevel display_level</div><div class="ttdoc">This represents the amount of information displayed by the default search.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00204">constraint_solver.h:204</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ab6302978f1de57bdeafa0ffee05c92c9a6498f37a4ad4a85e8309080a357cb587"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9a6498f37a4ad4a85e8309080a357cb587">operations_research::Solver::ENDS_AFTER_END</a></div><div class="ttdoc">t1 ends after t2 end, i.e. End(t1) &gt;= End(t2) + delay.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00614">constraint_solver.h:614</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a2ab1cbff58c24dc5017097b6a0a838e7"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a2ab1cbff58c24dc5017097b6a0a838e7">operations_research::ModelVisitor::kIntervalArgument</a></div><div class="ttdeci">static const char kIntervalArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03440">constraint_solver.h:3440</a></div></div>
<div class="ttc" id="classoperations__research_1_1Demon_html_ae63a7d849eb2b518ac708c736c670f9c"><div class="ttname"><a href="classoperations__research_1_1Demon.html#ae63a7d849eb2b518ac708c736c670f9c">operations_research::Demon::desinhibit</a></div><div class="ttdeci">void desinhibit(Solver *const s)</div><div class="ttdoc">This method un-inhibits the demon that was previously inhibited.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_afabd2f40b8da33b224a5cafd2a053a21a4c35b22102e37b5ca3d0e62cffcf93d6"><div class="ttname"><a href="classoperations__research_1_1Solver.html#afabd2f40b8da33b224a5cafd2a053a21a4c35b22102e37b5ca3d0e62cffcf93d6">operations_research::Solver::CHOOSE_DYNAMIC_GLOBAL_BEST</a></div><div class="ttdoc">Pairs are compared each time a variable is selected.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00391">constraint_solver.h:391</a></div></div>
<div class="ttc" id="classoperations__research_1_1SearchMonitor_html_a6c4b4a82d20104f3ca8729244dd9cc2e"><div class="ttname"><a href="classoperations__research_1_1SearchMonitor.html#a6c4b4a82d20104f3ca8729244dd9cc2e">operations_research::SearchMonitor::solver</a></div><div class="ttdeci">Solver * solver() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03689">constraint_solver.h:3689</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a0020fd38cc76fc9c2ad20ef40e2ab182"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a0020fd38cc76fc9c2ad20ef40e2ab182">operations_research::IntervalVar::SetEndRange</a></div><div class="ttdeci">virtual void SetEndRange(int64 mi, int64 ma)=0</div></div>
<div class="ttc" id="classoperations__research_1_1Demon_html_a7d3876bb3b369f0ae115e08ce9a6dc72"><div class="ttname"><a href="classoperations__research_1_1Demon.html#a7d3876bb3b369f0ae115e08ce9a6dc72">operations_research::Demon::Run</a></div><div class="ttdeci">virtual void Run(Solver *const s)=0</div><div class="ttdoc">This is the main callback of the demon.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a6781e6ac22e67a344416110b35252493"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a6781e6ac22e67a344416110b35252493">operations_research::ModelVisitor::kPositionYArgument</a></div><div class="ttdeci">static const char kPositionYArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03453">constraint_solver.h:3453</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a8384251179632a80fdb736377043e829"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a8384251179632a80fdb736377043e829">operations_research::ModelVisitor::kEarlyCostArgument</a></div><div class="ttdeci">static const char kEarlyCostArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03428">constraint_solver.h:3428</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a67e272ab8675e00ddeaf04d21bf87ce3"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a67e272ab8675e00ddeaf04d21bf87ce3">operations_research::Solver::MakePathCumul</a></div><div class="ttdeci">Constraint * MakePathCumul(const std::vector&lt; IntVar * &gt; &amp;nexts, const std::vector&lt; IntVar * &gt; &amp;active, const std::vector&lt; IntVar * &gt; &amp;cumuls, const std::vector&lt; IntVar * &gt; &amp;transits)</div><div class="ttdoc">Creates a constraint which accumulates values along a path such that: cumuls[next[i]] = cumuls[i] + t...</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a11247af5621b85588f22a7948ad25ed0"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a11247af5621b85588f22a7948ad25ed0">operations_research::IntervalVar::DurationMax</a></div><div class="ttdeci">virtual int64 DurationMax() const =0</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_a0b9ab438454cb14dcaf13085d853a8a6"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#a0b9ab438454cb14dcaf13085d853a8a6">operations_research::IntervalVarElement::SetDurationMin</a></div><div class="ttdeci">void SetDurationMin(int64 m)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04711">constraint_solver.h:4711</a></div></div>
<div class="ttc" id="classoperations__research_1_1SearchMonitor_html_aa95b9df4d6eb3b0fabd01d9fee33d25d"><div class="ttname"><a href="classoperations__research_1_1SearchMonitor.html#aa95b9df4d6eb3b0fabd01d9fee33d25d">operations_research::SearchMonitor::kNoProgress</a></div><div class="ttdeci">static const int kNoProgress</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03618">constraint_solver.h:3618</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a68cd7b641db22e66b78e7ff0c059e951"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a68cd7b641db22e66b78e7ff0c059e951">operations_research::ModelVisitor::kCumulative</a></div><div class="ttdeci">static const char kCumulative[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03330">constraint_solver.h:3330</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntVar_html_ac65d53711c52b0988b7e8fb81e79aeb9"><div class="ttname"><a href="classoperations__research_1_1IntVar.html#ac65d53711c52b0988b7e8fb81e79aeb9">operations_research::IntVar::Var</a></div><div class="ttdeci">IntVar * Var() override</div><div class="ttdoc">Creates a variable from the expression.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03985">constraint_solver.h:3985</a></div></div>
<div class="ttc" id="classoperations__research_1_1SearchMonitor_html_a95f86eb818555555bfaa50483672a77a"><div class="ttname"><a href="classoperations__research_1_1SearchMonitor.html#a95f86eb818555555bfaa50483672a77a">operations_research::SearchMonitor::EndInitialPropagation</a></div><div class="ttdeci">virtual void EndInitialPropagation()</div><div class="ttdoc">After the initial propagation.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ae63acd77b8c2ee40387795051298f659ab68b8c2566158157a2ba1660aae07553"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659ab68b8c2566158157a2ba1660aae07553">operations_research::Solver::ASSIGN_MIN_VALUE</a></div><div class="ttdoc">Selects the min value of the selected variable.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00348">constraint_solver.h:348</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a608fbd51b0f1c5b6fa65be4b5fc9e4a6"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a608fbd51b0f1c5b6fa65be4b5fc9e4a6">operations_research::Solver::MakeSearchTrace</a></div><div class="ttdeci">SearchMonitor * MakeSearchTrace(const std::string &amp;prefix)</div><div class="ttdoc">--— Search Trace ---—</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ac2ec1f48c0928a10193dbd01c9a2ca7e"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ac2ec1f48c0928a10193dbd01c9a2ca7e">operations_research::Solver::MakeVariableLessOrEqualValue</a></div><div class="ttdeci">Decision * MakeVariableLessOrEqualValue(IntVar *const var, int64 value)</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_a9d7357754c1a7c8bfa9cc1af03a3909d"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#a9d7357754c1a7c8bfa9cc1af03a3909d">operations_research::IntervalVarElement::IntervalVarElement</a></div><div class="ttdeci">IntervalVarElement()</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_addc64b89be5f633952a7735861cc9901"><div class="ttname"><a href="classoperations__research_1_1Solver.html#addc64b89be5f633952a7735861cc9901">operations_research::Solver::VariableValueSelector</a></div><div class="ttdeci">std::function&lt; int64(const IntVar *v, int64 id)&gt; VariableValueSelector</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00734">constraint_solver.h:734</a></div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVar_html_a55eba26b207c5fda44e8b94baa6d9d26"><div class="ttname"><a href="classoperations__research_1_1SequenceVar.html#a55eba26b207c5fda44e8b94baa6d9d26">operations_research::SequenceVar::HorizonRange</a></div><div class="ttdeci">void HorizonRange(int64 *const hmin, int64 *const hmax) const</div><div class="ttdoc">Returns the minimum start min and the maximum end max of all interval vars in the sequence.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a962d1e2e70b0085fe22e4dc424b27c97"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a962d1e2e70b0085fe22e4dc424b27c97">operations_research::ModelVisitor::kTraceOperation</a></div><div class="ttdeci">static const char kTraceOperation[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03487">constraint_solver.h:3487</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a9b5eb53cf394f0ba2c29332b7f9d60d4"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a9b5eb53cf394f0ba2c29332b7f9d60d4">operations_research::IntervalVar::SetStartMax</a></div><div class="ttdeci">virtual void SetStartMax(int64 m)=0</div></div>
<div class="ttc" id="classoperations__research_1_1RevBitSet_html"><div class="ttname"><a href="classoperations__research_1_1RevBitSet.html">operations_research::RevBitSet</a></div><div class="ttdoc">This class represents a reversible bitset.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solveri_8h_source.html#l00441">constraint_solveri.h:441</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a44750e41a0195b2790202338c3798ce1"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a44750e41a0195b2790202338c3798ce1">operations_research::Solver::MakeIntervalVarRelation</a></div><div class="ttdeci">Constraint * MakeIntervalVarRelation(IntervalVar *const t, UnaryIntervalRelation r, int64 d)</div><div class="ttdoc">--— scheduling constraints --—</div></div>
<div class="ttc" id="classoperations__research_1_1Decision_html_a35ecb2123d8d852154e65847096b3f69"><div class="ttname"><a href="classoperations__research_1_1Decision.html#a35ecb2123d8d852154e65847096b3f69">operations_research::Decision::~Decision</a></div><div class="ttdeci">~Decision() override</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03212">constraint_solver.h:3212</a></div></div>
<div class="ttc" id="classoperations__research_1_1OptimizeVar_html_a0f1b41f6ab20eaf58d9c44340620b04e"><div class="ttname"><a href="classoperations__research_1_1OptimizeVar.html#a0f1b41f6ab20eaf58d9c44340620b04e">operations_research::OptimizeVar::step_</a></div><div class="ttdeci">int64 step_</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04213">constraint_solver.h:4213</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_a4aa969469e93c0b17054adb0072afae1"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#a4aa969469e93c0b17054adb0072afae1">operations_research::IntervalVarElement::DebugString</a></div><div class="ttdeci">std::string DebugString() const</div></div>
<div class="ttc" id="classoperations__research_1_1Decision_html"><div class="ttname"><a href="classoperations__research_1_1Decision.html">operations_research::Decision</a></div><div class="ttdoc">A Decision represents a choice point in the search tree.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03209">constraint_solver.h:3209</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_ad89ba9e1f4d98d3a3b2bb5d97bd1e8bd"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#ad89ba9e1f4d98d3a3b2bb5d97bd1e8bd">operations_research::Assignment::Empty</a></div><div class="ttdeci">bool Empty() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l05018">constraint_solver.h:5018</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a008474e94c0f17a270b7e0830758605e"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a008474e94c0f17a270b7e0830758605e">operations_research::ModelVisitor::VisitIntervalVariable</a></div><div class="ttdeci">virtual void VisitIntervalVariable(const IntervalVar *const variable, const std::string &amp;operation, int64 value, IntervalVar *const delegate)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ab170e1ca8e081b65e7ee595be5fb9e81"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ab170e1ca8e081b65e7ee595be5fb9e81">operations_research::Solver::MakeIsEqualCstCt</a></div><div class="ttdeci">Constraint * MakeIsEqualCstCt(IntExpr *const var, int64 value, IntVar *const boolvar)</div><div class="ttdoc">boolvar == (var == value)</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a1906ebb0da0bb2cb8d134e280ae5d1aa"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a1906ebb0da0bb2cb8d134e280ae5d1aa">operations_research::ModelVisitor::kBranchesLimitArgument</a></div><div class="ttdeci">static const char kBranchesLimitArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03418">constraint_solver.h:3418</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ac3c5b22fad8060ca1a66bd928182d8a4a5dbb9333b0dd7a380a85b4e1bd298667"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4a5dbb9333b0dd7a380a85b4e1bd298667">operations_research::Solver::UNACTIVELNS</a></div><div class="ttdoc">Operator which relaxes all inactive nodes and one sub-chain of six consecutive arcs.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00528">constraint_solver.h:528</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a7e316e2c0042d52af11be86b82287718"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a7e316e2c0042d52af11be86b82287718">operations_research::ModelVisitor::kExpressionArgument</a></div><div class="ttdeci">static const char kExpressionArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03433">constraint_solver.h:3433</a></div></div>
<div class="ttc" id="classoperations__research_1_1AssignmentContainer_html_ab5bed5190537df6740bef2bede2814e6"><div class="ttname"><a href="classoperations__research_1_1AssignmentContainer.html#ab5bed5190537df6740bef2bede2814e6">operations_research::AssignmentContainer::Contains</a></div><div class="ttdeci">bool Contains(const V *const var) const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04889">constraint_solver.h:4889</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_a3bfef48731f4ef14fead2f6c34f26aa0"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#a3bfef48731f4ef14fead2f6c34f26aa0">operations_research::IntervalVarElement::Reset</a></div><div class="ttdeci">void Reset(IntervalVar *const var)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a0243986dd2db4b6e1bda331329ae529b"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a0243986dd2db4b6e1bda331329ae529b">operations_research::Solver::IndexEvaluator2</a></div><div class="ttdeci">std::function&lt; int64(int64, int64)&gt; IndexEvaluator2</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00723">constraint_solver.h:723</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a9c8cdc1822429bc21c4523cee66b730d"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a9c8cdc1822429bc21c4523cee66b730d">operations_research::Solver::GetPropagationMonitor</a></div><div class="ttdeci">PropagationMonitor * GetPropagationMonitor() const</div><div class="ttdoc">Returns the propagation monitor.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a52c3bdf647a8bcea13c4da9330c3a9d3"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a52c3bdf647a8bcea13c4da9330c3a9d3">operations_research::Solver::MakeIsEqualVar</a></div><div class="ttdeci">IntVar * MakeIsEqualVar(IntExpr *const v1, IntExpr *v2)</div><div class="ttdoc">status var of (v1 == v2)</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html">operations_research::IntervalVar</a></div><div class="ttdoc">-------— Interval Var -------—</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04343">constraint_solver.h:4343</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a740a8d0fd961f1d6999e8fff910b1cbb"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a740a8d0fd961f1d6999e8fff910b1cbb">operations_research::ModelVisitor::kIntervalBinaryRelation</a></div><div class="ttdeci">static const char kIntervalBinaryRelation[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03346">constraint_solver.h:3346</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a18f81802469559a0e7625b4061b1035b"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a18f81802469559a0e7625b4061b1035b">operations_research::ModelVisitor::kAtMost</a></div><div class="ttdeci">static const char kAtMost[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03322">constraint_solver.h:3322</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntVar_html_adf461eaaf6bcf01239e77fa8ed407ff0"><div class="ttname"><a href="classoperations__research_1_1IntVar.html#adf461eaaf6bcf01239e77fa8ed407ff0">operations_research::IntVar::IsEqual</a></div><div class="ttdeci">virtual IntVar * IsEqual(int64 constant)=0</div><div class="ttdoc">IsEqual.</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a7151316c7367456c2bccac197ac78e07"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a7151316c7367456c2bccac197ac78e07">operations_research::IntervalVar::WhenEndRange</a></div><div class="ttdeci">void WhenEndRange(Solver::Closure closure)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04419">constraint_solver.h:4419</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_add51e06535f44461347658d8ce59979a"><div class="ttname"><a href="classoperations__research_1_1Solver.html#add51e06535f44461347658d8ce59979a">operations_research::Solver::SaveValue</a></div><div class="ttdeci">void SaveValue(T *o)</div><div class="ttdoc">reversibility</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00759">constraint_solver.h:759</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a5b5712802e63dcd3ee5abfd37e0f2a95"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a5b5712802e63dcd3ee5abfd37e0f2a95">operations_research::Solver::SolverState</a></div><div class="ttdeci">SolverState</div><div class="ttdoc">This enum represents the state of the solver w.r.t. the search.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00709">constraint_solver.h:709</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a5251224150b99f3458c7bc494ba9d193"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a5251224150b99f3458c7bc494ba9d193">operations_research::Assignment::EndValue</a></div><div class="ttdeci">int64 EndValue(const IntervalVar *const var) const</div></div>
<div class="ttc" id="classoperations__research_1_1IntVarElement_html_a42e51fe336885a70673cbd4f473790b4"><div class="ttname"><a href="classoperations__research_1_1IntVarElement.html#a42e51fe336885a70673cbd4f473790b4">operations_research::IntVarElement::Var</a></div><div class="ttdeci">IntVar * Var() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04617">constraint_solver.h:4617</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a4610adb8edc9b5804370b55e84d9c99b"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a4610adb8edc9b5804370b55e84d9c99b">operations_research::Solver::SolveAndCommit</a></div><div class="ttdeci">bool SolveAndCommit(DecisionBuilder *const db, const std::vector&lt; SearchMonitor * &gt; &amp;monitors)</div><div class="ttdoc">SolveAndCommit using a decision builder and up to three search monitors, usually one for the objectiv...</div></div>
<div class="ttc" id="classoperations__research_1_1PropagationBaseObject_html_ad07aa613bcc8d3896dff3f33520b061c"><div class="ttname"><a href="classoperations__research_1_1PropagationBaseObject.html#ad07aa613bcc8d3896dff3f33520b061c">operations_research::PropagationBaseObject::reset_action_on_fail</a></div><div class="ttdeci">void reset_action_on_fail()</div><div class="ttdoc">This method clears the failure callback.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03187">constraint_solver.h:3187</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a56a60af43da7618e524355e6b7dcfa18"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a56a60af43da7618e524355e6b7dcfa18">operations_research::ModelVisitor::kStartExpr</a></div><div class="ttdeci">static const char kStartExpr[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03390">constraint_solver.h:3390</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ac1b3220ae80fb8430bc06310c5bea5f1a29c43618e41fc69d29d248c0031d5af1"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ac1b3220ae80fb8430bc06310c5bea5f1a29c43618e41fc69d29d248c0031d5af1">operations_research::Solver::TSPLNS</a></div><div class="ttdoc">TSP-base LNS.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00578">constraint_solver.h:578</a></div></div>
<div class="ttc" id="classoperations__research_1_1DecisionBuilder_html_aacc1030d918e7c2b5ba6c5e8a0542746"><div class="ttname"><a href="classoperations__research_1_1DecisionBuilder.html#aacc1030d918e7c2b5ba6c5e8a0542746">operations_research::DecisionBuilder::AppendMonitors</a></div><div class="ttdeci">virtual void AppendMonitors(Solver *const solver, std::vector&lt; SearchMonitor * &gt; *const extras)</div><div class="ttdoc">This method will be called at the start of the search.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ac1b3220ae80fb8430bc06310c5bea5f1ac712194c4e0edea857001e9cf2ed5811"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ac1b3220ae80fb8430bc06310c5bea5f1ac712194c4e0edea857001e9cf2ed5811">operations_research::Solver::TSPOPT</a></div><div class="ttdoc">Sliding TSP operator.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00570">constraint_solver.h:570</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a44616760a35fb4c8a0811c487108a773"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a44616760a35fb4c8a0811c487108a773">operations_research::Solver::MakeAssignment</a></div><div class="ttdeci">Assignment * MakeAssignment()</div><div class="ttdoc">--— Assignments --—</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a1040bdf484009e1a00e60ebb055ad1a1"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a1040bdf484009e1a00e60ebb055ad1a1">operations_research::Solver::IndexEvaluator1</a></div><div class="ttdeci">std::function&lt; int64(int64)&gt; IndexEvaluator1</div><div class="ttdoc">Callback typedefs.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00722">constraint_solver.h:722</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8bda7ed6e7e533cca4c44eba6efffc8babcab6960ac4a67fbb73fb94aa5e752e1"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8bda7ed6e7e533cca4c44eba6efffc8babcab6960ac4a67fbb73fb94aa5e752e1">operations_research::Solver::CHOOSE_MIN_SIZE</a></div><div class="ttdoc">Among unbound variables, select the variable with the smallest size.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00321">constraint_solver.h:321</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_afbe02152a0dfa9e9b5bdc60024486bec"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#afbe02152a0dfa9e9b5bdc60024486bec">operations_research::ModelVisitor::kNotBetween</a></div><div class="ttdeci">static const char kNotBetween[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03372">constraint_solver.h:3372</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a5664b23c751cead631f08318bdeeb63a"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a5664b23c751cead631f08318bdeeb63a">operations_research::Solver::MakeIntervalRelaxedMax</a></div><div class="ttdeci">IntervalVar * MakeIntervalRelaxedMax(IntervalVar *const interval_var)</div><div class="ttdoc">Creates and returns an interval variable that wraps around the given one, relaxing the max start and ...</div></div>
<div class="ttc" id="classoperations__research_1_1IntVarElement_html_abdc5b135e3b0c58d93a2beeb6c46791b"><div class="ttname"><a href="classoperations__research_1_1IntVarElement.html#abdc5b135e3b0c58d93a2beeb6c46791b">operations_research::IntVarElement::WriteToProto</a></div><div class="ttdeci">void WriteToProto(IntVarAssignment *int_var_assignment_proto) const</div></div>
<div class="ttc" id="classoperations__research_1_1SearchMonitor_html_ac4f21fe0c304fc837d903feb65fe858f"><div class="ttname"><a href="classoperations__research_1_1SearchMonitor.html#ac4f21fe0c304fc837d903feb65fe858f">operations_research::SearchMonitor::AtSolution</a></div><div class="ttdeci">virtual bool AtSolution()</div><div class="ttdoc">This method is called when a valid solution is found.</div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVar_html_a281b19bdc37eed61de45be3ad8745550"><div class="ttname"><a href="classoperations__research_1_1SequenceVar.html#a281b19bdc37eed61de45be3ad8745550">operations_research::SequenceVar::ActiveHorizonRange</a></div><div class="ttdeci">void ActiveHorizonRange(int64 *const hmin, int64 *const hmax) const</div><div class="ttdoc">Returns the minimum start min and the maximum end max of all unranked interval vars in the sequence.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a305fcf51481e580ce845a7c1642fb63a"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a305fcf51481e580ce845a7c1642fb63a">operations_research::Solver::MakeAllDifferentExcept</a></div><div class="ttdeci">Constraint * MakeAllDifferentExcept(const std::vector&lt; IntVar * &gt; &amp;vars, int64 escape_value)</div><div class="ttdoc">All variables are pairwise different, unless they are assigned to the escape value.</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_a8133ba700bcd64e1f180a01cc9664bc3"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#a8133ba700bcd64e1f180a01cc9664bc3">operations_research::IntervalVarElement::SetStartMin</a></div><div class="ttdeci">void SetStartMin(int64 m)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04701">constraint_solver.h:4701</a></div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html_a29f65d45d0fefbab371c7265572d54f4"><div class="ttname"><a href="classoperations__research_1_1Pack.html#a29f65d45d0fefbab371c7265572d54f4">operations_research::Pack::Propagate</a></div><div class="ttdeci">void Propagate()</div></div>
<div class="ttc" id="classoperations__research_1_1SearchMonitor_html_ad138a0d3337eb1085157f824f946d611"><div class="ttname"><a href="classoperations__research_1_1SearchMonitor.html#ad138a0d3337eb1085157f824f946d611">operations_research::SearchMonitor::EndFail</a></div><div class="ttdeci">virtual void EndFail()</div><div class="ttdoc">After completing the backtrack.</div></div>
<div class="ttc" id="classoperations__research_1_1Constraint_html_aaa882d58b5fc0f2e3df6eff957ad4a0d"><div class="ttname"><a href="classoperations__research_1_1Constraint.html#aaa882d58b5fc0f2e3df6eff957ad4a0d">operations_research::Constraint::Post</a></div><div class="ttdeci">virtual void Post()=0</div><div class="ttdoc">This method is called when the constraint is processed by the solver.</div></div>
<div class="ttc" id="structoperations__research_1_1Solver_1_1SearchLogParameters_html_a95a779b76301c3b1241e93f26332adb0"><div class="ttname"><a href="structoperations__research_1_1Solver_1_1SearchLogParameters.html#a95a779b76301c3b1241e93f26332adb0">operations_research::Solver::SearchLogParameters::display_callback</a></div><div class="ttdeci">std::function&lt; std::string()&gt; display_callback</div><div class="ttdoc">SearchMonitors will display the result of display_callback at each new solution found.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02296">constraint_solver.h:2296</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_acef5ab6c453ebd47d42f76e326c15290"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#acef5ab6c453ebd47d42f76e326c15290">operations_research::IntervalVarElement::StartMin</a></div><div class="ttdeci">int64 StartMin() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04677">constraint_solver.h:4677</a></div></div>
<div class="ttc" id="classoperations__research_1_1SearchMonitor_html_a2f3ea4577e11fad619c2d7dcad1617cd"><div class="ttname"><a href="classoperations__research_1_1SearchMonitor.html#a2f3ea4577e11fad619c2d7dcad1617cd">operations_research::SearchMonitor::BeginNextDecision</a></div><div class="ttdeci">virtual void BeginNextDecision(DecisionBuilder *const b)</div><div class="ttdoc">Before calling DecisionBuilder::Next.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a5ed39d9055b446d626bad476ace74cac"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a5ed39d9055b446d626bad476ace74cac">operations_research::Solver::Rand32</a></div><div class="ttdeci">int32 Rand32(int32 size)</div><div class="ttdoc">Returns a random value between 0 and 'size' - 1;.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02815">constraint_solver.h:2815</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a47dfc6f2bc0d50a6e7c92eb00d97b064"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a47dfc6f2bc0d50a6e7c92eb00d97b064">operations_research::Solver::Queue</a></div><div class="ttdeci">friend class Queue</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02920">constraint_solver.h:2920</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_ad5216b1374b28aefa97ec71dd2938d91"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#ad5216b1374b28aefa97ec71dd2938d91">operations_research::IntervalVar::WhenDurationRange</a></div><div class="ttdeci">void WhenDurationRange(Solver::Closure closure)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04392">constraint_solver.h:4392</a></div></div>
<div class="ttc" id="classoperations__research_1_1NumericalRev_html_a9f28c0cf038c1f5f46a5d823c68b887e"><div class="ttname"><a href="classoperations__research_1_1NumericalRev.html#a9f28c0cf038c1f5f46a5d823c68b887e">operations_research::NumericalRev::Decr</a></div><div class="ttdeci">void Decr(Solver *const s)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03749">constraint_solver.h:3749</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_af255bb789297ed05a80419f46621fcf7"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#af255bb789297ed05a80419f46621fcf7">operations_research::ModelVisitor::kRelationArgument</a></div><div class="ttdeci">static const char kRelationArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03455">constraint_solver.h:3455</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a5f87c832967334179f0f9c8d05380847aa8dfadb94521ac7979525ae94f618d57"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a5f87c832967334179f0f9c8d05380847aa8dfadb94521ac7979525ae94f618d57">operations_research::Solver::NO_CHANGE</a></div><div class="ttdoc">Keeps the default behavior, i.e.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00683">constraint_solver.h:683</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a5c741487249c9eb1805e33285873c240"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a5c741487249c9eb1805e33285873c240">operations_research::Assignment::SetMax</a></div><div class="ttdeci">void SetMax(const IntVar *const var, int64 m)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a360a918948e4a8ae01a49899c5a9438e"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a360a918948e4a8ae01a49899c5a9438e">operations_research::Solver::VariableIndexSelector</a></div><div class="ttdeci">std::function&lt; int64(Solver *solver, const std::vector&lt; IntVar * &gt; &amp;vars, int64 first_unbound, int64 last_unbound)&gt; VariableIndexSelector</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00732">constraint_solver.h:732</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a81bf76a202ed41b7bdcb695fde2d5536"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a81bf76a202ed41b7bdcb695fde2d5536">operations_research::ModelVisitor::kScalProdEqual</a></div><div class="ttdeci">static const char kScalProdEqual[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03383">constraint_solver.h:3383</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a6b4182ad46462a9374c84063249eef45"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a6b4182ad46462a9374c84063249eef45">operations_research::Solver::SaveAndSetValue</a></div><div class="ttdeci">void SaveAndSetValue(T *adr, T val)</div><div class="ttdoc">All-in-one SaveAndSetValue.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02795">constraint_solver.h:2795</a></div></div>
<div class="ttc" id="classoperations__research_1_1RegularLimit_html_a5c46712d4c0f5a5259111c343a084313"><div class="ttname"><a href="classoperations__research_1_1RegularLimit.html#a5c46712d4c0f5a5259111c343a084313">operations_research::RegularLimit::MakeClone</a></div><div class="ttdeci">SearchLimit * MakeClone() const override</div><div class="ttdoc">Allocates a clone of the limit.</div></div>
<div class="ttc" id="classoperations__research_1_1IntVar_html_af5197b4635e1581a9bdecdfba44d2428"><div class="ttname"><a href="classoperations__research_1_1IntVar.html#af5197b4635e1581a9bdecdfba44d2428">operations_research::IntVar::IsLessOrEqual</a></div><div class="ttdeci">virtual IntVar * IsLessOrEqual(int64 constant)=0</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a64fd8adbc00c3bed16bf4b824dfd3e2b"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a64fd8adbc00c3bed16bf4b824dfd3e2b">operations_research::Solver::LocalSearchProfile</a></div><div class="ttdeci">std::string LocalSearchProfile() const</div><div class="ttdoc">Returns local search profiling information in a human readable format.</div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html_ad6d087dbee567cc2bf17ee84424a85fc"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html#ad6d087dbee567cc2bf17ee84424a85fc">operations_research::SolutionCollector::recycle_solutions_</a></div><div class="ttdeci">std::vector&lt; Assignment * &gt; recycle_solutions_</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04173">constraint_solver.h:4173</a></div></div>
<div class="ttc" id="classoperations__research_1_1RegularLimit_html_a19509391e38443b1bc38c5847125ff3d"><div class="ttname"><a href="classoperations__research_1_1RegularLimit.html#a19509391e38443b1bc38c5847125ff3d">operations_research::RegularLimit::Check</a></div><div class="ttdeci">bool Check() override</div><div class="ttdoc">This method is called to check the status of the limit.</div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html_acbb9380640b30f024e9986f96d5fe582"><div class="ttname"><a href="classoperations__research_1_1Pack.html#acbb9380640b30f024e9986f96d5fe582">operations_research::Pack::AddWeightedSumOfAssignedDimension</a></div><div class="ttdeci">void AddWeightedSumOfAssignedDimension(const std::vector&lt; int64 &gt; &amp;weights, IntVar *const cost_var)</div><div class="ttdoc">This dimension enforces that cost_var == sum of weights[i] for all objects 'i' assigned to a bin.</div></div>
<div class="ttc" id="structoperations__research_1_1InitAndGetValues_1_1Iterator_html_a3122703d46de6eace75a3de40c92aba5"><div class="ttname"><a href="structoperations__research_1_1InitAndGetValues_1_1Iterator.html#a3122703d46de6eace75a3de40c92aba5">operations_research::InitAndGetValues::Iterator::operator!=</a></div><div class="ttdeci">bool operator!=(const Iterator &amp;other) const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03956">constraint_solver.h:3956</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a6e6d2b77130f2557bd0b0c77f19710dc"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a6e6d2b77130f2557bd0b0c77f19710dc">operations_research::Solver::MakeIndexExpression</a></div><div class="ttdeci">IntExpr * MakeIndexExpression(const std::vector&lt; IntVar * &gt; &amp;vars, int64 value)</div><div class="ttdoc">Returns the expression expr such that vars[expr] == value.</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_a2a559271f39b8afbd1c292ffa94880ef"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#a2a559271f39b8afbd1c292ffa94880ef">operations_research::IntervalVarElement::PerformedMin</a></div><div class="ttdeci">int64 PerformedMin() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04695">constraint_solver.h:4695</a></div></div>
<div class="ttc" id="classoperations__research_1_1DisjunctiveConstraint_html_a9b6d60ebdbacdb0e3910b3c9ccd4d1fa"><div class="ttname"><a href="classoperations__research_1_1DisjunctiveConstraint.html#a9b6d60ebdbacdb0e3910b3c9ccd4d1fa">operations_research::DisjunctiveConstraint::transition_time_</a></div><div class="ttdeci">Solver::IndexEvaluator2 transition_time_</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l05344">constraint_solver.h:5344</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a2fc4c2534a45caa04ad4e11ba7b10a52"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a2fc4c2534a45caa04ad4e11ba7b10a52">operations_research::Solver::MakeCount</a></div><div class="ttdeci">Constraint * MakeCount(const std::vector&lt; IntVar * &gt; &amp;vars, int64 value, int64 max_count)</div><div class="ttdoc">|{i | vars[i] == value}| == max_count</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_aaee3eb3af912875dc367679f64d65a3b"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#aaee3eb3af912875dc367679f64d65a3b">operations_research::Assignment::EndMax</a></div><div class="ttdeci">int64 EndMax(const IntervalVar *const var) const</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_aad27176c06a3aa80de553a72014346d4"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#aad27176c06a3aa80de553a72014346d4">operations_research::IntervalVarElement::SetStartMax</a></div><div class="ttdeci">void SetStartMax(int64 m)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04702">constraint_solver.h:4702</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a7b555e672930179b244785a8f97b3b8f"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a7b555e672930179b244785a8f97b3b8f">operations_research::Solver::MakeIsLessOrEqualCstVar</a></div><div class="ttdeci">IntVar * MakeIsLessOrEqualCstVar(IntExpr *const var, int64 value)</div><div class="ttdoc">status var of (var &lt;= value)</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a3370251672e86a31b98bc2b4f5e483e4"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a3370251672e86a31b98bc2b4f5e483e4">operations_research::ModelVisitor::kActiveArgument</a></div><div class="ttdeci">static const char kActiveArgument[]</div><div class="ttdoc">argument names:</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03416">constraint_solver.h:3416</a></div></div>
<div class="ttc" id="classoperations__research_1_1SearchLimit_html_ae853c8ceb480c9d8e8ba355108c9b816"><div class="ttname"><a href="classoperations__research_1_1SearchLimit.html#ae853c8ceb480c9d8e8ba355108c9b816">operations_research::SearchLimit::SearchLimit</a></div><div class="ttdeci">SearchLimit(Solver *const s)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04227">constraint_solver.h:4227</a></div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html_a6dc7ba8d99e3f6cc958125cbfaf22293"><div class="ttname"><a href="classoperations__research_1_1Pack.html#a6dc7ba8d99e3f6cc958125cbfaf22293">operations_research::Pack::IsAssignedStatusKnown</a></div><div class="ttdeci">bool IsAssignedStatusKnown(int var_index) const</div></div>
<div class="ttc" id="structoperations__research_1_1Solver_1_1SearchLogParameters_html_a61e516d58793110b2d8bca05ac810a3c"><div class="ttname"><a href="structoperations__research_1_1Solver_1_1SearchLogParameters.html#a61e516d58793110b2d8bca05ac810a3c">operations_research::Solver::SearchLogParameters::scaling_factor</a></div><div class="ttdeci">double scaling_factor</div><div class="ttdoc">Objective or var values are unscaled by this factor when displayed.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02293">constraint_solver.h:2293</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a5b5712802e63dcd3ee5abfd37e0f2a95ad487136b6f055fa3fadfd6a3c12aa3a3"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a5b5712802e63dcd3ee5abfd37e0f2a95ad487136b6f055fa3fadfd6a3c12aa3a3">operations_research::Solver::AT_SOLUTION</a></div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00713">constraint_solver.h:713</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ab95c7f997dbe36deb51e7c0213bdf445"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ab95c7f997dbe36deb51e7c0213bdf445">operations_research::Solver::EndSearch</a></div><div class="ttdeci">void EndSearch()</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a094bbb476dd216af27921dcb30ee5303"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a094bbb476dd216af27921dcb30ee5303">operations_research::Assignment::SequenceContainer</a></div><div class="ttdeci">AssignmentContainer&lt; SequenceVar, SequenceVarElement &gt; SequenceContainer</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l05011">constraint_solver.h:5011</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ab6302978f1de57bdeafa0ffee05c92c9ae80d18ceaf9ae55ad39559b85b745628"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9ae80d18ceaf9ae55ad39559b85b745628">operations_research::Solver::STARTS_AFTER_START</a></div><div class="ttdoc">t1 starts after t2 start, i.e. Start(t1) &gt;= Start(t2) + delay.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00629">constraint_solver.h:629</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a1519f3e29373c86a62a2e946cd699c49"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a1519f3e29373c86a62a2e946cd699c49">operations_research::ModelVisitor::kDurationExpr</a></div><div class="ttdeci">static const char kDurationExpr[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03336">constraint_solver.h:3336</a></div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html_a92da0e27853c3c611f0384457e1fcdb2"><div class="ttname"><a href="classoperations__research_1_1Pack.html#a92da0e27853c3c611f0384457e1fcdb2">operations_research::Pack::AddSumVariableWeightsLessOrEqualConstantDimension</a></div><div class="ttdeci">void AddSumVariableWeightsLessOrEqualConstantDimension(const std::vector&lt; IntVar * &gt; &amp;usage, const std::vector&lt; int64 &gt; &amp;capacity)</div><div class="ttdoc">This dimension imposes: forall b in bins, sum (i in items: usage[i] * is_assigned(i,...</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_aae7b2191ec7433b273e1f825213d71a6"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#aae7b2191ec7433b273e1f825213d71a6">operations_research::ModelVisitor::kSolutionLimitArgument</a></div><div class="ttdeci">static const char kSolutionLimitArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03463">constraint_solver.h:3463</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a08c349b1aa12d68304581cfea2ad1fae"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a08c349b1aa12d68304581cfea2ad1fae">operations_research::ModelVisitor::kFailuresLimitArgument</a></div><div class="ttdeci">static const char kFailuresLimitArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03434">constraint_solver.h:3434</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a2e3fd9d97bd872ae2dd5f1f9f7e45014"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a2e3fd9d97bd872ae2dd5f1f9f7e45014">operations_research::ModelVisitor::kDifference</a></div><div class="ttdeci">static const char kDifference[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03332">constraint_solver.h:3332</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_af78a648a227858b30ec2a379c0d67fbf"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#af78a648a227858b30ec2a379c0d67fbf">operations_research::IntervalVar::OldEndMax</a></div><div class="ttdeci">virtual int64 OldEndMax() const =0</div></div>
<div class="ttc" id="classoperations__research_1_1DecisionVisitor_html_a67b3034ec90261e392c5a1c4c35303c3"><div class="ttname"><a href="classoperations__research_1_1DecisionVisitor.html#a67b3034ec90261e392c5a1c4c35303c3">operations_research::DecisionVisitor::DecisionVisitor</a></div><div class="ttdeci">DecisionVisitor()</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03232">constraint_solver.h:3232</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntExpr_html_a1de04a321f16e9cdc50bbec78e1adbf7"><div class="ttname"><a href="classoperations__research_1_1IntExpr.html#a1de04a321f16e9cdc50bbec78e1adbf7">operations_research::IntExpr::VarWithName</a></div><div class="ttdeci">IntVar * VarWithName(const std::string &amp;name)</div><div class="ttdoc">Creates a variable from the expression and set the name of the resulting var.</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a7ac7a68050caf1046a8f299d597e85b1"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a7ac7a68050caf1046a8f299d597e85b1">operations_research::Assignment::Contains</a></div><div class="ttdeci">bool Contains(const IntVar *const var) const</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_aa52aacc34b2380d2b649983ac5c1c7fd"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#aa52aacc34b2380d2b649983ac5c1c7fd">operations_research::Assignment::SetDurationMax</a></div><div class="ttdeci">void SetDurationMax(const IntervalVar *const var, int64 m)</div></div>
<div class="ttc" id="classoperations__research_1_1SearchLimit_html"><div class="ttname"><a href="classoperations__research_1_1SearchLimit.html">operations_research::SearchLimit</a></div><div class="ttdoc">-------— Search Limits -------—</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04225">constraint_solver.h:4225</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a697ed9eaa8955d595a023663ab1e8418"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a697ed9eaa8955d595a023663ab1e8418">operations_research::Solver::Constraint</a></div><div class="ttdeci">friend class Constraint</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02915">constraint_solver.h:2915</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_addd13c37ed68173aab91b87925f76e61"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#addd13c37ed68173aab91b87925f76e61">operations_research::Assignment::SetPerformedValue</a></div><div class="ttdeci">void SetPerformedValue(const IntervalVar *const var, int64 value)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ac3c5b22fad8060ca1a66bd928182d8a4ad5eb45c9651dc49f7e2f0f9bf251dd40"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ac3c5b22fad8060ca1a66bd928182d8a4ad5eb45c9651dc49f7e2f0f9bf251dd40">operations_research::Solver::DECREMENT</a></div><div class="ttdoc">Operator which defines a neighborhood to decrement values.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00543">constraint_solver.h:543</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a06215150a658d6f23e352df8e2edadc5"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a06215150a658d6f23e352df8e2edadc5">operations_research::Assignment::StartMin</a></div><div class="ttdeci">int64 StartMin(const IntervalVar *const var) const</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a48fe0b1746eada44912edfc24cb343ff"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a48fe0b1746eada44912edfc24cb343ff">operations_research::ModelVisitor::kSumLessOrEqual</a></div><div class="ttdeci">static const char kSumLessOrEqual[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03394">constraint_solver.h:3394</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_afacadb82186afef92a407c4e39ca0d64"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#afacadb82186afef92a407c4e39ca0d64">operations_research::ModelVisitor::kConvexPiecewise</a></div><div class="ttdeci">static const char kConvexPiecewise[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03327">constraint_solver.h:3327</a></div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html_a3030c379670033531aab20df788376ed"><div class="ttname"><a href="classoperations__research_1_1Pack.html#a3030c379670033531aab20df788376ed">operations_research::Pack::AddCountUsedBinDimension</a></div><div class="ttdeci">void AddCountUsedBinDimension(IntVar *const count_var)</div><div class="ttdoc">This dimension links 'count_var' to the actual number of bins used in the pack.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a7640173386e395605d573c94aa5110bc"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a7640173386e395605d573c94aa5110bc">operations_research::ModelVisitor::EndVisitModel</a></div><div class="ttdeci">virtual void EndVisitModel(const std::string &amp;solver_name)</div></div>
<div class="ttc" id="classoperations__research_1_1Demon_html_a4e51b1b49f9a937b335cd9381f95614d"><div class="ttname"><a href="classoperations__research_1_1Demon.html#a4e51b1b49f9a937b335cd9381f95614d">operations_research::Demon::inhibit</a></div><div class="ttdeci">void inhibit(Solver *const s)</div><div class="ttdoc">This method inhibits the demon in the search tree below the current position.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a9f660afd82319498e83cb630a71dedd6"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a9f660afd82319498e83cb630a71dedd6">operations_research::Solver::demon_profiler</a></div><div class="ttdeci">DemonProfiler * demon_profiler() const</div><div class="ttdoc">Access to demon profiler.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l02852">constraint_solver.h:2852</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a707908bc6f7b50d0a3ea6a6814912b03"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a707908bc6f7b50d0a3ea6a6814912b03">operations_research::Solver::MakeMinEquality</a></div><div class="ttdeci">Constraint * MakeMinEquality(const std::vector&lt; IntVar * &gt; &amp;vars, IntVar *const min_var)</div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVarElement_html_a752ba08cda16ac39c27e6e110e76e7f9"><div class="ttname"><a href="classoperations__research_1_1SequenceVarElement.html#a752ba08cda16ac39c27e6e110e76e7f9">operations_research::SequenceVarElement::BackwardSequence</a></div><div class="ttdeci">const std::vector&lt; int &gt; &amp; BackwardSequence() const</div></div>
<div class="ttc" id="structoperations__research_1_1DefaultPhaseParameters_html_a4e60526379b527b91e6e271aac905bc5"><div class="ttname"><a href="structoperations__research_1_1DefaultPhaseParameters.html#a4e60526379b527b91e6e271aac905bc5">operations_research::DefaultPhaseParameters::decision_builder</a></div><div class="ttdeci">DecisionBuilder * decision_builder</div><div class="ttdoc">When defined, this overrides the default impact based decision builder.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00210">constraint_solver.h:210</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ac87d5128f0c386531d6bc37d847e9379"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ac87d5128f0c386531d6bc37d847e9379">operations_research::Solver::MakeIntervalVar</a></div><div class="ttdeci">IntervalVar * MakeIntervalVar(int64 start_min, int64 start_max, int64 duration_min, int64 duration_max, int64 end_min, int64 end_max, bool optional, const std::string &amp;name)</div><div class="ttdoc">Creates an interval var by specifying the bounds on start, duration, and end.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_afabd2f40b8da33b224a5cafd2a053a21"><div class="ttname"><a href="classoperations__research_1_1Solver.html#afabd2f40b8da33b224a5cafd2a053a21">operations_research::Solver::EvaluatorStrategy</a></div><div class="ttdeci">EvaluatorStrategy</div><div class="ttdoc">This enum is used by Solver::MakePhase to specify how to select variables and values during the searc...</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00380">constraint_solver.h:380</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ae6dee2b402434520635e66e9d58a6215aa5148450bdc2fa1d4b40c2dd70b6dd3c"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ae6dee2b402434520635e66e9d58a6215aa5148450bdc2fa1d4b40c2dd70b6dd3c">operations_research::Solver::SIMPLE_MARKER</a></div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00706">constraint_solver.h:706</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a6d314aa714607f1c12b3f3b75928f250"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a6d314aa714607f1c12b3f3b75928f250">operations_research::Solver::MakeIsBetweenVar</a></div><div class="ttdeci">IntVar * MakeIsBetweenVar(IntExpr *const v, int64 l, int64 u)</div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVarElement_html_a136038294620a9a9d575eae64a3019eb"><div class="ttname"><a href="classoperations__research_1_1SequenceVarElement.html#a136038294620a9a9d575eae64a3019eb">operations_research::SequenceVarElement::Restore</a></div><div class="ttdeci">void Restore()</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a9b761ffa2c4aa399c1247b642a5e1d54"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a9b761ffa2c4aa399c1247b642a5e1d54">operations_research::Solver::MakeTimeLimit</a></div><div class="ttdeci">RegularLimit * MakeTimeLimit(int64 time_in_ms)</div><div class="ttdoc">--— Search Limit --—</div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html_a40ada0142b3eb38469bea03d0b9d51d4"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html#a40ada0142b3eb38469bea03d0b9d51d4">operations_research::SolutionCollector::FreeSolution</a></div><div class="ttdeci">void FreeSolution(Assignment *solution)</div></div>
<div class="ttc" id="structoperations__research_1_1DefaultPhaseParameters_html_a57b6ace15b9d8666f76c6618d8addc1daa7dc5065949f517176193ad86c4e6368"><div class="ttname"><a href="structoperations__research_1_1DefaultPhaseParameters.html#a57b6ace15b9d8666f76c6618d8addc1daa7dc5065949f517176193ad86c4e6368">operations_research::DefaultPhaseParameters::VERBOSE</a></div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00169">constraint_solver.h:169</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a67ed18b7174df0eb483834276f19ce73"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a67ed18b7174df0eb483834276f19ce73">operations_research::Solver::NewSearch</a></div><div class="ttdeci">void NewSearch(DecisionBuilder *const db, const std::vector&lt; SearchMonitor * &gt; &amp;monitors)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ae6dee2b402434520635e66e9d58a6215a68e4780981758b35943123d19ea5c070"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ae6dee2b402434520635e66e9d58a6215a68e4780981758b35943123d19ea5c070">operations_research::Solver::CHOICE_POINT</a></div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00706">constraint_solver.h:706</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_acb0a02a6acc71bb5c26f5db75be94d43"><div class="ttname"><a href="classoperations__research_1_1Solver.html#acb0a02a6acc71bb5c26f5db75be94d43">operations_research::Solver::MakeTemporalDisjunction</a></div><div class="ttdeci">Constraint * MakeTemporalDisjunction(IntervalVar *const t1, IntervalVar *const t2, IntVar *const alt)</div><div class="ttdoc">This constraint implements a temporal disjunction between two interval vars t1 and t2.</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_aba7b84e96bed12bb02d0c69e702d65f3"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#aba7b84e96bed12bb02d0c69e702d65f3">operations_research::IntervalVarElement::Store</a></div><div class="ttdeci">void Store()</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a547a1c1bd3b8df3a759661e60fbb3e9d"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a547a1c1bd3b8df3a759661e60fbb3e9d">operations_research::Solver::MakeSquare</a></div><div class="ttdeci">IntExpr * MakeSquare(IntExpr *const expr)</div><div class="ttdoc">expr * expr</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a16f77fba967e59bc3327b4dc2a4460f4"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a16f77fba967e59bc3327b4dc2a4460f4">operations_research::ModelVisitor::kCumulsArgument</a></div><div class="ttdeci">static const char kCumulsArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03424">constraint_solver.h:3424</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a5f87c832967334179f0f9c8d05380847af16daaa1fec927c823d4d0441f4c742b"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a5f87c832967334179f0f9c8d05380847af16daaa1fec927c823d4d0441f4c742b">operations_research::Solver::KILL_BOTH</a></div><div class="ttdoc">Backtracks to the previous decisions, i.e.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00697">constraint_solver.h:697</a></div></div>
<div class="ttc" id="classoperations__research_1_1OptimizeVar_html_ad003866ff381968298a0ebf83f1b18f0"><div class="ttname"><a href="classoperations__research_1_1OptimizeVar.html#ad003866ff381968298a0ebf83f1b18f0">operations_research::OptimizeVar::EnterSearch</a></div><div class="ttdeci">void EnterSearch() override</div><div class="ttdoc">Beginning of the search.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a763e42ec89318fb1fc36098a60eca516"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a763e42ec89318fb1fc36098a60eca516">operations_research::Solver::IsProduct</a></div><div class="ttdeci">bool IsProduct(IntExpr *const expr, IntExpr **inner_expr, int64 *coefficient)</div><div class="ttdoc">Returns true if expr represents a product of a expr and a constant.</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a5e302cc44d8ba521da50c0a320a83608"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a5e302cc44d8ba521da50c0a320a83608">operations_research::ModelVisitor::kIsDifferent</a></div><div class="ttdeci">static const char kIsDifferent[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03352">constraint_solver.h:3352</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_ac0c8bfa3cf5460476327b1360783e29d"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#ac0c8bfa3cf5460476327b1360783e29d">operations_research::Assignment::SetRange</a></div><div class="ttdeci">void SetRange(const IntVar *const var, int64 l, int64 u)</div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVarElement_html"><div class="ttname"><a href="classoperations__research_1_1SequenceVarElement.html">operations_research::SequenceVarElement</a></div><div class="ttdoc">--— SequenceVarElement --—</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04778">constraint_solver.h:4778</a></div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a272ed05b871564c3ab8034010901d068"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a272ed05b871564c3ab8034010901d068">operations_research::Assignment::Min</a></div><div class="ttdeci">int64 Min(const IntVar *const var) const</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ab6302978f1de57bdeafa0ffee05c92c9aa98eb73b7940d0127b133f170976fb0e"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ab6302978f1de57bdeafa0ffee05c92c9aa98eb73b7940d0127b133f170976fb0e">operations_research::Solver::ENDS_AFTER_START</a></div><div class="ttdoc">t1 ends after t2 start, i.e. End(t1) &gt;= Start(t2) + delay.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00617">constraint_solver.h:617</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a584222a6b5e247a6982b99c2b4986536"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a584222a6b5e247a6982b99c2b4986536">operations_research::ModelVisitor::kAssumePathsArgument</a></div><div class="ttdeci">static const char kAssumePathsArgument[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03417">constraint_solver.h:3417</a></div></div>
<div class="ttc" id="classoperations__research_1_1SequenceVar_html_ac8f9d8f2220c77dd4f79a652e6aa7b88"><div class="ttname"><a href="classoperations__research_1_1SequenceVar.html#ac8f9d8f2220c77dd4f79a652e6aa7b88">operations_research::SequenceVar::ComputePossibleFirstsAndLasts</a></div><div class="ttdeci">void ComputePossibleFirstsAndLasts(std::vector&lt; int &gt; *const possible_firsts, std::vector&lt; int &gt; *const possible_lasts)</div><div class="ttdoc">Computes the set of indices of interval variables that can be ranked first in the set of unranked act...</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_a51c8f21edb373fbfd068b80a6786dd27"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#a51c8f21edb373fbfd068b80a6786dd27">operations_research::ModelVisitor::kMin</a></div><div class="ttdeci">static const char kMin[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03367">constraint_solver.h:3367</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntVarElement_html_adee444dbad18f8db71cbe93e54678f85"><div class="ttname"><a href="classoperations__research_1_1IntVarElement.html#adee444dbad18f8db71cbe93e54678f85">operations_research::IntVarElement::SetMax</a></div><div class="ttdeci">void SetMax(int64 m)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04633">constraint_solver.h:4633</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_aaca17b1e75c4e46f2efb5973e470561e"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#aaca17b1e75c4e46f2efb5973e470561e">operations_research::IntervalVar::OldStartMax</a></div><div class="ttdeci">virtual int64 OldStartMax() const =0</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a8ebee4942752665dac914898d2c1ff49"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a8ebee4942752665dac914898d2c1ff49">operations_research::Solver::MakeNeighborhoodLimit</a></div><div class="ttdeci">LocalSearchOperator * MakeNeighborhoodLimit(LocalSearchOperator *const op, int64 limit)</div><div class="ttdoc">Creates a local search operator that wraps another local search operator and limits the number of nei...</div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_aa3aadae79e53e0d0237126ab4e62b6bd"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#aa3aadae79e53e0d0237126ab4e62b6bd">operations_research::ModelVisitor::VisitIntegerExpressionArgument</a></div><div class="ttdeci">virtual void VisitIntegerExpressionArgument(const std::string &amp;arg_name, IntExpr *const argument)</div><div class="ttdoc">Visit integer expression argument.</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html"><div class="ttname"><a href="classoperations__research_1_1Assignment.html">operations_research::Assignment</a></div><div class="ttdoc">--— Assignment --—</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l05005">constraint_solver.h:5005</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_adf81a3dd11195fbf357fe5c9f0f9dc2c"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#adf81a3dd11195fbf357fe5c9f0f9dc2c">operations_research::ModelVisitor::kPack</a></div><div class="ttdeci">static const char kPack[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03376">constraint_solver.h:3376</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a406c32061db9fd011adb31709eab75ea"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a406c32061db9fd011adb31709eab75ea">operations_research::Solver::MakeIntervalVarArray</a></div><div class="ttdeci">void MakeIntervalVarArray(int count, int64 start_min, int64 start_max, int64 duration_min, int64 duration_max, int64 end_min, int64 end_max, bool optional, const std::string &amp;name, std::vector&lt; IntervalVar * &gt; *const array)</div><div class="ttdoc">This method fills the vector with 'count' interval var built with the corresponding parameters.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_af9171596e98a897628f751924979a3ab"><div class="ttname"><a href="classoperations__research_1_1Solver.html#af9171596e98a897628f751924979a3ab">operations_research::Solver::MakeBranchesLimit</a></div><div class="ttdeci">RegularLimit * MakeBranchesLimit(int64 branches)</div><div class="ttdoc">Creates a search limit that constrains the number of branches explored in the search tree.</div></div>
<div class="ttc" id="classoperations__research_1_1LocalSearchOperator_html"><div class="ttname"><a href="classoperations__research_1_1LocalSearchOperator.html">operations_research::LocalSearchOperator</a></div><div class="ttdoc">-------— Local search operators -------—</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solveri_8h_source.html#l00813">constraint_solveri.h:813</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a1ce9ae264e0bbde4bcd8c5b9fd97a7e2"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a1ce9ae264e0bbde4bcd8c5b9fd97a7e2">operations_research::Solver::MakeRankFirstInterval</a></div><div class="ttdeci">Decision * MakeRankFirstInterval(SequenceVar *const sequence, int index)</div><div class="ttdoc">Returns a decision that tries to rank first the ith interval var in the sequence variable.</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a5dbf21225962af3db13d216174989608"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a5dbf21225962af3db13d216174989608">operations_research::Assignment::SetObjectiveMin</a></div><div class="ttdeci">void SetObjectiveMin(int64 m)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a11ed2a5d7bb8fb1a8967fee572ab9c47"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a11ed2a5d7bb8fb1a8967fee572ab9c47">operations_research::Solver::NextSolution</a></div><div class="ttdeci">bool NextSolution()</div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_a5416b468bd7fa583482aa3a5affe906c"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#a5416b468bd7fa583482aa3a5affe906c">operations_research::IntervalVar::~IntervalVar</a></div><div class="ttdeci">~IntervalVar() override</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04353">constraint_solver.h:4353</a></div></div>
<div class="ttc" id="classoperations__research_1_1NumericalRevArray_html_ad69b795e0a7110fe1483711154e74d00"><div class="ttname"><a href="classoperations__research_1_1NumericalRevArray.html#ad69b795e0a7110fe1483711154e74d00">operations_research::NumericalRevArray::Incr</a></div><div class="ttdeci">void Incr(Solver *const s, int index)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03805">constraint_solver.h:3805</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVar_html_ad6271b4de12918697520817944165462"><div class="ttname"><a href="classoperations__research_1_1IntervalVar.html#ad6271b4de12918697520817944165462">operations_research::IntervalVar::StartExpr</a></div><div class="ttdeci">virtual IntExpr * StartExpr()=0</div><div class="ttdoc">These methods create expressions encapsulating the start, end and duration of the interval var.</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a83e14be9c6bba9abdd1949c25c32a60dab88a6a21271bd5f34e12ada996c0bfee"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a83e14be9c6bba9abdd1949c25c32a60dab88a6a21271bd5f34e12ada996c0bfee">operations_research::Solver::STARTS_AT</a></div><div class="ttdoc">t starts at d, i.e. Start(t) == d.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00659">constraint_solver.h:659</a></div></div>
<div class="ttc" id="classoperations__research_1_1SearchMonitor_html_a04a9e7423ec5aa466b7a7604eb107fbe"><div class="ttname"><a href="classoperations__research_1_1SearchMonitor.html#a04a9e7423ec5aa466b7a7604eb107fbe">operations_research::SearchMonitor::AcceptNeighbor</a></div><div class="ttdeci">virtual void AcceptNeighbor()</div><div class="ttdoc">After accepting a neighbor during local search.</div></div>
<div class="ttc" id="classoperations__research_1_1RevImmutableMultiMap_html"><div class="ttname"><a href="classoperations__research_1_1RevImmutableMultiMap.html">operations_research::RevImmutableMultiMap</a></div><div class="ttdoc">--— Immutable Multi Map --—</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solveri_8h_source.html#l00294">constraint_solveri.h:294</a></div></div>
<div class="ttc" id="classoperations__research_1_1ModelVisitor_html_ab5cacd4ab0f8a7b5bbedc3eb757281fd"><div class="ttname"><a href="classoperations__research_1_1ModelVisitor.html#ab5cacd4ab0f8a7b5bbedc3eb757281fd">operations_research::ModelVisitor::kSumEqual</a></div><div class="ttdeci">static const char kSumEqual[]</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03392">constraint_solver.h:3392</a></div></div>
<div class="ttc" id="classoperations__research_1_1Pack_html_a21511d7769c6d0d590e3e8a02892052f"><div class="ttname"><a href="classoperations__research_1_1Pack.html#a21511d7769c6d0d590e3e8a02892052f">operations_research::Pack::IsPossible</a></div><div class="ttdeci">bool IsPossible(int var_index, int bin_index) const</div></div>
<div class="ttc" id="classoperations__research_1_1InitAndGetValues_html_ac8c498a96d19ebb98b44b68b8f6820e8"><div class="ttname"><a href="classoperations__research_1_1InitAndGetValues.html#ac8c498a96d19ebb98b44b68b8f6820e8">operations_research::InitAndGetValues::begin</a></div><div class="ttdeci">Iterator begin()</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03929">constraint_solver.h:3929</a></div></div>
<div class="ttc" id="classoperations__research_1_1RevArray_html_ae2f2143174e00f93980d5804d3ff262e"><div class="ttname"><a href="classoperations__research_1_1RevArray.html#ae2f2143174e00f93980d5804d3ff262e">operations_research::RevArray::~RevArray</a></div><div class="ttdeci">~RevArray()</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03768">constraint_solver.h:3768</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_af46c19361350e8714e3749c9d70047cf"><div class="ttname"><a href="classoperations__research_1_1Solver.html#af46c19361350e8714e3749c9d70047cf">operations_research::Solver::MakeSortingConstraint</a></div><div class="ttdeci">Constraint * MakeSortingConstraint(const std::vector&lt; IntVar * &gt; &amp;vars, const std::vector&lt; IntVar * &gt; &amp;sorted)</div><div class="ttdoc">Creates a constraint binding the arrays of variables &quot;vars&quot; and &quot;sorted_vars&quot;: sorted_vars[0] must be...</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_ae63acd77b8c2ee40387795051298f659a0484f76eaad7b381c13bfd4ccd47ef68"><div class="ttname"><a href="classoperations__research_1_1Solver.html#ae63acd77b8c2ee40387795051298f659a0484f76eaad7b381c13bfd4ccd47ef68">operations_research::Solver::ASSIGN_CENTER_VALUE</a></div><div class="ttdoc">Selects the first possible value which is the closest to the center of the domain of the selected var...</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00359">constraint_solver.h:359</a></div></div>
<div class="ttc" id="structoperations__research_1_1DefaultPhaseParameters_html_a70d7630b38e05e7284641e04416fd570"><div class="ttname"><a href="structoperations__research_1_1DefaultPhaseParameters.html#a70d7630b38e05e7284641e04416fd570">operations_research::DefaultPhaseParameters::heuristic_num_failures_limit</a></div><div class="ttdeci">int heuristic_num_failures_limit</div><div class="ttdoc">The failure limit for each heuristic that we run.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00193">constraint_solver.h:193</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_a8fadec579649e0012765f94d99eaf598"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#a8fadec579649e0012765f94d99eaf598">operations_research::IntervalVarElement::SetEndRange</a></div><div class="ttdeci">void SetEndRange(int64 mi, int64 ma)</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04723">constraint_solver.h:4723</a></div></div>
<div class="ttc" id="classoperations__research_1_1AssignmentContainer_html_a716629cdc52bf32755b737c4ab1b1cad"><div class="ttname"><a href="classoperations__research_1_1AssignmentContainer.html#a716629cdc52bf32755b737c4ab1b1cad">operations_research::AssignmentContainer::CopyIntersection</a></div><div class="ttdeci">void CopyIntersection(const AssignmentContainer&lt; V, E &gt; &amp;container)</div><div class="ttdoc">Copies the elements of 'container' which are already in the calling container.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04860">constraint_solver.h:4860</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a5a4f58391d4317f078f4940adaeea72e"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a5a4f58391d4317f078f4940adaeea72e">operations_research::Solver::MakeOperator</a></div><div class="ttdeci">LocalSearchOperator * MakeOperator(const std::vector&lt; IntVar * &gt; &amp;vars, LocalSearchOperators op)</div><div class="ttdoc">--— Local Search Operators --—</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a6a8f7bc1b42272024cb04882c410894b"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a6a8f7bc1b42272024cb04882c410894b">operations_research::Solver::MakeIsGreaterCt</a></div><div class="ttdeci">Constraint * MakeIsGreaterCt(IntExpr *const left, IntExpr *const right, IntVar *const b)</div><div class="ttdoc">b == (left &gt; right)</div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a6c4750d9d038ef7c4fac71b6f3d12f46"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a6c4750d9d038ef7c4fac71b6f3d12f46">operations_research::Solver::MakeLocalSearchPhase</a></div><div class="ttdeci">DecisionBuilder * MakeLocalSearchPhase(Assignment *const assignment, LocalSearchPhaseParameters *const parameters)</div><div class="ttdoc">Local Search decision builders factories.</div></div>
<div class="ttc" id="classoperations__research_1_1SolutionCollector_html_a5014e4129cfdbc7b0f7f6c06b0283fd2"><div class="ttname"><a href="classoperations__research_1_1SolutionCollector.html#a5014e4129cfdbc7b0f7f6c06b0283fd2">operations_research::SolutionCollector::EndValue</a></div><div class="ttdeci">int64 EndValue(int n, IntervalVar *const var) const</div><div class="ttdoc">This is a shortcut to get the EndValue of 'var' in the nth solution.</div></div>
<div class="ttc" id="classoperations__research_1_1Assignment_html_a2ae9fa6611914148091bc9088fbd14e6"><div class="ttname"><a href="classoperations__research_1_1Assignment.html#a2ae9fa6611914148091bc9088fbd14e6">operations_research::Assignment::Activated</a></div><div class="ttdeci">bool Activated(const IntVar *const var) const</div></div>
<div class="ttc" id="classoperations__research_1_1AssignmentContainer_html_ae5f07b17110a4860e1801c0f6254e4a6"><div class="ttname"><a href="classoperations__research_1_1AssignmentContainer.html#ae5f07b17110a4860e1801c0f6254e4a6">operations_research::AssignmentContainer::elements</a></div><div class="ttdeci">const std::vector&lt; E &gt; &amp; elements() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04919">constraint_solver.h:4919</a></div></div>
<div class="ttc" id="classoperations__research_1_1PropagationBaseObject_html_a4d2ccb8a806df14394b3271791c81e61"><div class="ttname"><a href="classoperations__research_1_1PropagationBaseObject.html#a4d2ccb8a806df14394b3271791c81e61">operations_research::PropagationBaseObject::set_variable_to_clean_on_fail</a></div><div class="ttdeci">void set_variable_to_clean_on_fail(IntVar *v)</div><div class="ttdoc">Shortcut for variable cleaner.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l03190">constraint_solver.h:3190</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_aa843d980b4526a9b051e98e7f3425b40"><div class="ttname"><a href="classoperations__research_1_1Solver.html#aa843d980b4526a9b051e98e7f3425b40">operations_research::Solver::branches</a></div><div class="ttdeci">int64 branches() const</div><div class="ttdoc">The number of branches explored since the creation of the solver.</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l00969">constraint_solver.h:969</a></div></div>
<div class="ttc" id="classoperations__research_1_1IntervalVarElement_html_a036f95ee32fc4ea98e986d6f866cb524"><div class="ttname"><a href="classoperations__research_1_1IntervalVarElement.html#a036f95ee32fc4ea98e986d6f866cb524">operations_research::IntervalVarElement::EndMin</a></div><div class="ttdeci">int64 EndMin() const</div><div class="ttdef"><b>Definition:</b> <a href="constraint__solver_8h_source.html#l04689">constraint_solver.h:4689</a></div></div>
<div class="ttc" id="classoperations__research_1_1Solver_html_a543e7aa911009e1c4a6c33e82e49e582"><div class="ttname"><a href="classoperations__research_1_1Solver.html#a543e7aa911009e1c4a6c33e82e49e582">operations_research::Solver::Now</a></div><div class="ttdeci">absl::Time Now() const</div><div class="ttdoc">The 'absolute time' as seen by the solver.</div></div>
</div><!-- fragment --></div><!-- contents -->
</div>
<div id="footer-container">
<div id="footer">
</div>
</div>
</body>
</html>