Files
ortools-clone/docs/cpp/cp__model__lns_8h_source.html
2021-01-26 11:34:47 +01:00

732 lines
169 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

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

<!-- HTML header for doxygen 1.8.18-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>OR-Tools: cp_model_lns.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="styleSheet.tmp.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="orLogo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">OR-Tools
&#160;<span id="projectnumber">8.2</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('cp__model__lns_8h_source.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">cp_model_lns.h</div> </div>
</div><!--header-->
<div class="contents">
<a href="cp__model__lns_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="preprocessor">#ifndef OR_TOOLS_SAT_CP_MODEL_LNS_H_</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#define OR_TOOLS_SAT_CP_MODEL_LNS_H_</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; </div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &quot;absl/container/flat_hash_map.h&quot;</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &quot;absl/random/bit_gen_ref.h&quot;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &quot;absl/synchronization/mutex.h&quot;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &quot;absl/types/span.h&quot;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="integral__types_8h.html">ortools/base/integral_types.h</a>&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="cp__model_8pb_8h.html">ortools/sat/cp_model.pb.h</a>&quot;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="sat_2model_8h.html">ortools/sat/model.h</a>&quot;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="subsolver_8h.html">ortools/sat/subsolver.h</a>&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="synchronization_8h.html">ortools/sat/synchronization.h</a>&quot;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="adaptative__parameter__value_8h.html">ortools/util/adaptative_parameter_value.h</a>&quot;</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceoperations__research.html">operations_research</a> {</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">namespace </span>sat {</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="comment">// Neighborhood returned by Neighborhood generators.</span></div>
<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="structoperations__research_1_1sat_1_1_neighborhood.html"> 34</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structoperations__research_1_1sat_1_1_neighborhood.html">Neighborhood</a> {</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="comment">// True if neighborhood generator was able to generate a neighborhood.</span></div>
<div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="structoperations__research_1_1sat_1_1_neighborhood.html#a04d448b3000c058b67ad17541473a317"> 36</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood.html#a04d448b3000c058b67ad17541473a317">is_generated</a> = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; </div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="comment">// True if the CpModelProto below is not the same as the base model.</span></div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="comment">// This is not expected to happen often but allows to handle this case</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="comment">// properly.</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="structoperations__research_1_1sat_1_1_neighborhood.html#a8e672808c179f95cf4c626aef798bbc7"> 41</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood.html#a8e672808c179f95cf4c626aef798bbc7">is_reduced</a> = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; </div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="comment">// Relaxed model. Any feasible solution to this &quot;local&quot; model should be a</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="comment">// feasible solution to the base model too.</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="structoperations__research_1_1sat_1_1_neighborhood.html#ae580758c31ce30f5e52d9a732efd1267"> 45</a></span>&#160; CpModelProto <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood.html#ae580758c31ce30f5e52d9a732efd1267">cp_model</a>;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="comment">// Neighborhood Id. Used to identify the neighborhood by a generator.</span></div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="comment">// Currently only used by WeightedRandomRelaxationNeighborhoodGenerator.</span></div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="comment">// TODO(user): Make sure that the id is unique for each generated</span></div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="comment">// neighborhood for each generator.</span></div>
<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="structoperations__research_1_1sat_1_1_neighborhood.html#a309a18d48fc959a6d664a9573ccb4971"> 51</a></span>&#160; <a class="code" href="integral__types_8h.html#a7cde0074dfd288f2d70c0e035dacb28a">int64</a> <span class="keywordtype">id</span> = 0;</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; </div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="comment">// Used for identifying the source of the neighborhood if it is generated</span></div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="comment">// using solution repositories.</span></div>
<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="structoperations__research_1_1sat_1_1_neighborhood.html#aaed94da4e4845ead42773bd4468a8899"> 55</a></span>&#160; std::string <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood.html#aaed94da4e4845ead42773bd4468a8899">source_info</a> = <span class="stringliteral">&quot;&quot;</span>;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;};</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="comment">// Contains pre-computed information about a given CpModelProto that is meant</span></div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="comment">// to be used to generate LNS neighborhood. This class can be shared between</span></div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="comment">// more than one generator in order to reduce memory usage.</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">// Note that its implement the SubSolver interface to be able to Synchronize()</span></div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="comment">// the bounds of the base problem with the external world.</span></div>
<div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html"> 64</a></span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html">NeighborhoodGeneratorHelper</a> : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1sat_1_1_sub_solver.html">SubSolver</a> {</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a08c018489eb0c4c309f144780ebb8cce">NeighborhoodGeneratorHelper</a>(CpModelProto <span class="keyword">const</span>* <a class="code" href="cp__model__solver_8cc.html#a6ac76d8a372013f67c4973012948ec84">model_proto</a>,</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; SatParameters <span class="keyword">const</span>* <a class="code" href="cp__model__fz__solver_8cc.html#a10a1eab179b472c030bdc2a2efef7219">parameters</a>,</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <a class="code" href="classoperations__research_1_1sat_1_1_shared_response_manager.html">SharedResponseManager</a>* <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a0e31a4150ae965379d0f05d51a0c1673">shared_response</a>,</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <a class="code" href="classoperations__research_1_1_shared_time_limit.html">SharedTimeLimit</a>* shared_time_limit = <span class="keyword">nullptr</span>,</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <a class="code" href="classoperations__research_1_1sat_1_1_shared_bounds_manager.html">SharedBoundsManager</a>* shared_bounds = <span class="keyword">nullptr</span>);</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; </div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="comment">// SubSolver interface.</span></div>
<div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#ab25d3ac59ae6adc23d30b5fdc892b812"> 73</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#ab25d3ac59ae6adc23d30b5fdc892b812">TaskIsAvailable</a>()<span class="keyword"> override </span>{ <span class="keywordflow">return</span> <span class="keyword">false</span>; }</div>
<div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a600568ec5f62e9175d11d08920d1bab1"> 74</a></span>&#160; std::function&lt;void()&gt; <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a600568ec5f62e9175d11d08920d1bab1">GenerateTask</a>(<a class="code" href="integral__types_8h.html#a7cde0074dfd288f2d70c0e035dacb28a">int64</a> task_id)<span class="keyword"> override </span>{ <span class="keywordflow">return</span> {}; }</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#afa21407ae134806ac4337d0b2473b210">Synchronize</a>() <span class="keyword">override</span>;</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; </div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="comment">// Returns the LNS fragment where the given variables are fixed to the value</span></div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="comment">// they take in the given solution.</span></div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood.html">Neighborhood</a> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a586408c556a6e1732ac80d8df9cdee5b">FixGivenVariables</a>(</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keyword">const</span> CpSolverResponse&amp; initial_solution,</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; variables_to_fix) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; </div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="comment">// Returns the neighborhood where the given constraints are removed.</span></div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood.html">Neighborhood</a> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#ac0763b7b9e44b9b30e78b9dd4da8e98a">RemoveMarkedConstraints</a>(</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; constraints_to_remove) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; </div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="comment">// Returns the LNS fragment which will relax all inactive variables and all</span></div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="comment">// variables in relaxed_variables.</span></div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood.html">Neighborhood</a> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a8735c6fd1459361aa6696a77f8042bf1">RelaxGivenVariables</a>(</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keyword">const</span> CpSolverResponse&amp; initial_solution,</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; relaxed_variables) <span class="keyword">const</span>;</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"> 93</span>&#160; <span class="comment">// Returns a trivial model by fixing all active variables to the initial</span></div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="comment">// solution values.</span></div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood.html">Neighborhood</a> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a307d968091a3bddbbce257cca9b79fbb">FixAllVariables</a>(<span class="keyword">const</span> CpSolverResponse&amp; initial_solution) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; </div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="comment">// Return a neighborhood that correspond to the full problem.</span></div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood.html">Neighborhood</a> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a15cb168917371b5fb2d17b00e640de63">FullNeighborhood</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; </div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="comment">// Indicates if the variable can be frozen. It happens if the variable is non</span></div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="comment">// constant, and if it is a decision variable, or if</span></div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="comment">// focus_on_decision_variables is false.</span></div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a3536511769245b28739a715de62b0193">IsActive</a>(<span class="keywordtype">int</span> <a class="code" href="expr__array_8cc.html#a472a99923cbe11ae7b5a5d157d9ad465">var</a>) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; </div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="comment">// Returns the list of &quot;active&quot; variables.</span></div>
<div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a9cbca4684dddbad2d60b4dbcb1f90aba"> 106</a></span>&#160; <span class="keyword">const</span> std::vector&lt;int&gt;&amp; <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a9cbca4684dddbad2d60b4dbcb1f90aba">ActiveVariables</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> active_variables_; }</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; </div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="comment">// Constraints &lt;-&gt; Variables graph.</span></div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="comment">// Note that only non-constant variable are listed here.</span></div>
<div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#ac3e42ca3d76c8f2ce836a85688768672"> 110</a></span>&#160; <span class="keyword">const</span> std::vector&lt;std::vector&lt;int&gt;&gt;&amp; <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#ac3e42ca3d76c8f2ce836a85688768672">ConstraintToVar</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">return</span> constraint_to_var_;</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; }</div>
<div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a126969fed21452a041a7014fb86ff105"> 113</a></span>&#160; <span class="keyword">const</span> std::vector&lt;std::vector&lt;int&gt;&gt;&amp; <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a126969fed21452a041a7014fb86ff105">VarToConstraint</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">return</span> var_to_constraint_;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; </div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="comment">// Returns all the constraints indices of a given type.</span></div>
<div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a6aef4ca16709a75231ee1691c306c641"> 118</a></span>&#160; <span class="keyword">const</span> absl::Span&lt;const int&gt; <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a6aef4ca16709a75231ee1691c306c641">TypeToConstraints</a>(</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; ConstraintProto::ConstraintCase type)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">if</span> (type &gt;= type_to_constraints_.size()) <span class="keywordflow">return</span> {};</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">return</span> absl::MakeSpan(type_to_constraints_[type]);</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; }</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; </div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="comment">// The initial problem.</span></div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="comment">// Note that the domain of the variables are not updated here.</span></div>
<div class="line"><a name="l00126"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a9f348ae7c22fbaa73b72bc976455ab14"> 126</a></span>&#160; <span class="keyword">const</span> CpModelProto&amp; <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a9f348ae7c22fbaa73b72bc976455ab14">ModelProto</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> model_proto_; }</div>
<div class="line"><a name="l00127"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#af4a8d38991f3497e048a3b56b830087f"> 127</a></span>&#160; <span class="keyword">const</span> SatParameters&amp; <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#af4a8d38991f3497e048a3b56b830087f">Parameters</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> parameters_; }</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; </div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="comment">// This mutex must be acquired before calling any of the function that access</span></div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="comment">// data that can be updated by Synchronize().</span></div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="comment">// TODO(user): Refactor the class to be thread-safe instead, it should be</span></div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="comment">// safer and more easily maintenable. Some complication with accessing the</span></div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="comment">// variable&lt;-&gt;constraint graph efficiently though.</span></div>
<div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a49496d349c274724b25a6b077cc8fdb4"> 135</a></span>&#160; absl::Mutex* <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a49496d349c274724b25a6b077cc8fdb4">MutableMutex</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> &amp;mutex_; }</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; </div>
<div class="line"><a name="l00137"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a0e31a4150ae965379d0f05d51a0c1673"> 137</a></span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1sat_1_1_shared_response_manager.html">SharedResponseManager</a>&amp; <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a0e31a4150ae965379d0f05d51a0c1673">shared_response</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">return</span> *shared_response_;</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; }</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; </div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="comment">// Recompute most of the class member. This needs to be called when the</span></div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="comment">// domains of the variables are updated.</span></div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordtype">void</span> RecomputeHelperData();</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; </div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="comment">// Indicates if a variable is fixed in the model.</span></div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordtype">bool</span> IsConstant(<span class="keywordtype">int</span> <a class="code" href="expr__array_8cc.html#a472a99923cbe11ae7b5a5d157d9ad465">var</a>) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; </div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keyword">const</span> SatParameters&amp; parameters_;</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keyword">const</span> CpModelProto&amp; model_proto_;</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordtype">int</span> shared_bounds_id_;</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <a class="code" href="classoperations__research_1_1_shared_time_limit.html">SharedTimeLimit</a>* shared_time_limit_;</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <a class="code" href="classoperations__research_1_1sat_1_1_shared_bounds_manager.html">SharedBoundsManager</a>* shared_bounds_;</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <a class="code" href="classoperations__research_1_1sat_1_1_shared_response_manager.html">SharedResponseManager</a>* shared_response_;</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <a class="code" href="classoperations__research_1_1sat_1_1_shared_relaxation_solution_repository.html">SharedRelaxationSolutionRepository</a>* shared_relaxation_solutions_;</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; </div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="comment">// This proto will only contain the field variables() with an updated version</span></div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="comment">// of the domains compared to model_proto_.variables(). We do it like this to</span></div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="comment">// reduce the memory footprint of the helper when the model is large.</span></div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="comment">// TODO(user): Use custom domain repository rather than a proto?</span></div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; CpModelProto model_proto_with_only_variables_;</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"> 164</span>&#160; <span class="keyword">mutable</span> absl::Mutex mutex_;</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; </div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="comment">// Constraints by types.</span></div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; std::vector&lt;std::vector&lt;int&gt;&gt; type_to_constraints_;</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; </div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="comment">// Variable-Constraint graph.</span></div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; std::vector&lt;std::vector&lt;int&gt;&gt; constraint_to_var_;</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; std::vector&lt;std::vector&lt;int&gt;&gt; var_to_constraint_;</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; </div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="comment">// The set of active variables, that is the list of non constant variables if</span></div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="comment">// parameters_.focus_on_decision_variables() is false, or the list of non</span></div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="comment">// constant decision variables otherwise. It is stored both as a list and as a</span></div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="comment">// set (using a Boolean vector).</span></div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; std::vector&lt;bool&gt; active_variables_set_;</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; std::vector&lt;int&gt; active_variables_;</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;};</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; </div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;<span class="comment">// Base class for a CpModelProto neighborhood generator.</span></div>
<div class="line"><a name="l00182"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html"> 182</a></span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html">NeighborhoodGenerator</a> {</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a60349be3472ae33af45a70cd5480a7e3"> 184</a></span>&#160; <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a60349be3472ae33af45a70cd5480a7e3">NeighborhoodGenerator</a>(<span class="keyword">const</span> std::string&amp; <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a1d89c28bd42ba9a52da008bb69367171">name</a>,</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html">NeighborhoodGeneratorHelper</a> <span class="keyword">const</span>* helper)</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; : <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a723d30392e2c4f36252de0528a1b246d">name_</a>(<a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a1d89c28bd42ba9a52da008bb69367171">name</a>), <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#acbd503b89d1dc3dd85dfa9e0e5058472">helper_</a>(*helper), difficulty_(0.5) {}</div>
<div class="line"><a name="l00187"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a186eb8a0761d3a80e350e5d6eb6412a1"> 187</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a186eb8a0761d3a80e350e5d6eb6412a1">~NeighborhoodGenerator</a>() {}</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; </div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="comment">// Generates a &quot;local&quot; subproblem for the given seed.</span></div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="comment">// The difficulty will be in [0, 1] and is related to the asked neighborhood</span></div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="comment">// size (and thus local problem difficulty). A difficulty of 0.0 means empty</span></div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="comment">// neighborhood and a difficulty of 1.0 means the full problem. The algorithm</span></div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="comment">// should try to generate a neighborhood according to this difficulty which</span></div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="comment">// will be dynamically adjusted depending on whether or not we can solve the</span></div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="comment">// subproblem in a given time limit.</span></div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="comment">// The given initial_solution should contain a feasible solution to the</span></div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="comment">// initial CpModelProto given to this class. Any solution to the returned</span></div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="comment">// CPModelProto should also be valid solution to the same initial model.</span></div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="comment">// This function should be thread-safe.</span></div>
<div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a09fa0632fb0484300de153adb79f071d"> 203</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood.html">Neighborhood</a> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a09fa0632fb0484300de153adb79f071d">Generate</a>(<span class="keyword">const</span> CpSolverResponse&amp; initial_solution,</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordtype">double</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a43616719fac14b34582903ef03d114ac">difficulty</a>, absl::BitGenRef random) = 0;</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">// Returns true if the neighborhood generator can generate a neighborhood.</span></div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a34c45a33de4f8a713e99bbf97d8d08d6">ReadyToGenerate</a>() <span class="keyword">const</span>;</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">// Returns true if the neighborhood generator generates relaxation of the</span></div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="comment">// given problem.</span></div>
<div class="line"><a name="l00211"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a0c8b86bd60b4fc70cb653a12d50c2ce8"> 211</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a0c8b86bd60b4fc70cb653a12d50c2ce8">IsRelaxationGenerator</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">false</span>; }</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; </div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="comment">// Uses UCB1 algorithm to compute the score (Multi armed bandit problem).</span></div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="comment">// Details are at</span></div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="comment">// https://lilianweng.github.io/lil-log/2018/01/23/the-multi-armed-bandit-problem-and-its-solutions.html.</span></div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="comment">// &#39;total_num_calls&#39; should be the sum of calls across all generators part of</span></div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="comment">// the multi armed bandit problem.</span></div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="comment">// If the generator is called less than 10 times then the method returns</span></div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="comment">// infinity as score in order to get more data about the generator</span></div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="comment">// performance.</span></div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordtype">double</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a8c5aac83a5aea832261e7a5ab425e54b">GetUCBScore</a>(<a class="code" href="integral__types_8h.html#a7cde0074dfd288f2d70c0e035dacb28a">int64</a> total_num_calls) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; </div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="comment">// Adds solve data about one &quot;solved&quot; neighborhood.</span></div>
<div class="line"><a name="l00224"></a><span class="lineno"><a class="line" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html"> 224</a></span>&#160; <span class="keyword">struct </span><a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html">SolveData</a> {</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="comment">// Neighborhood Id. Used to identify the neighborhood by a generator.</span></div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="comment">// Currently only used by WeightedRandomRelaxationNeighborhoodGenerator.</span></div>
<div class="line"><a name="l00227"></a><span class="lineno"><a class="line" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#ac9a13145434b16b5645828ffa1ebad02"> 227</a></span>&#160; <a class="code" href="integral__types_8h.html#a7cde0074dfd288f2d70c0e035dacb28a">int64</a> <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#ac9a13145434b16b5645828ffa1ebad02">neighborhood_id</a> = 0;</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; </div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="comment">// The status of the sub-solve.</span></div>
<div class="line"><a name="l00230"></a><span class="lineno"><a class="line" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a91dacddd9f775730c8d424d2ab4d76ac"> 230</a></span>&#160; <a class="code" href="namespaceoperations__research_1_1sat.html#aedc4ddb96acc28481c09828d2e016815">CpSolverStatus</a> <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a91dacddd9f775730c8d424d2ab4d76ac">status</a> = <a class="code" href="namespaceoperations__research_1_1sat.html#aedc4ddb96acc28481c09828d2e016815a6ce26a62afab55d7606ad4e92428b30c">CpSolverStatus::UNKNOWN</a>;</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; </div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="comment">// The difficulty when this neighborhood was generated.</span></div>
<div class="line"><a name="l00233"></a><span class="lineno"><a class="line" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a71013162baa979e0b8780100905cf700"> 233</a></span>&#160; <span class="keywordtype">double</span> <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a71013162baa979e0b8780100905cf700">difficulty</a> = 0.0;</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; </div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="comment">// The determinitic time limit given to the solver for this neighborhood.</span></div>
<div class="line"><a name="l00236"></a><span class="lineno"><a class="line" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a4f572c68b7bf3aac70b3f5292398ff7b"> 236</a></span>&#160; <span class="keywordtype">double</span> <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a4f572c68b7bf3aac70b3f5292398ff7b">deterministic_limit</a> = 0.0;</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; </div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="comment">// The time it took to solve this neighborhood.</span></div>
<div class="line"><a name="l00239"></a><span class="lineno"><a class="line" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#afc5fa55f61560324377e4f42d4a9211f"> 239</a></span>&#160; <span class="keywordtype">double</span> <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#afc5fa55f61560324377e4f42d4a9211f">deterministic_time</a> = 0.0;</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; </div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="comment">// Objective information. These only refer to the &quot;internal&quot; objective</span></div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="comment">// without scaling or offset so we are exact and it is always in the</span></div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="comment">// minimization direction.</span></div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="comment">// - The initial best objective is the one of the best known solution at the</span></div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="comment">// time the neighborhood was generated.</span></div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="comment">// - The base objective is the one of the base solution from which this</span></div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="comment">// neighborhood was generated.</span></div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="comment">// - The new objective is the objective of the best solution found by</span></div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="comment">// solving the neighborhood.</span></div>
<div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a2b7499dfe1d827cdca46593256705cd4"> 250</a></span>&#160; IntegerValue <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a2b7499dfe1d827cdca46593256705cd4">initial_best_objective</a> = IntegerValue(0);</div>
<div class="line"><a name="l00251"></a><span class="lineno"><a class="line" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a1092ef5699db303eacd67586fe6273f4"> 251</a></span>&#160; IntegerValue <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a1092ef5699db303eacd67586fe6273f4">base_objective</a> = IntegerValue(0);</div>
<div class="line"><a name="l00252"></a><span class="lineno"><a class="line" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a6bdd919d4fe97909496a23f7d85b5d8e"> 252</a></span>&#160; IntegerValue <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a6bdd919d4fe97909496a23f7d85b5d8e">new_objective</a> = IntegerValue(0);</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; </div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="comment">// Bounds data is only used by relaxation neighborhoods.</span></div>
<div class="line"><a name="l00255"></a><span class="lineno"><a class="line" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a2579a2fccfe41ac8b5d8dac1c7f93607"> 255</a></span>&#160; IntegerValue <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a2579a2fccfe41ac8b5d8dac1c7f93607">initial_best_objective_bound</a> = IntegerValue(0);</div>
<div class="line"><a name="l00256"></a><span class="lineno"><a class="line" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#abfd9e74380811ea081037db464d22f2f"> 256</a></span>&#160; IntegerValue <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#abfd9e74380811ea081037db464d22f2f">new_objective_bound</a> = IntegerValue(0);</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; </div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="comment">// This is just used to construct a deterministic order for the updates.</span></div>
<div class="line"><a name="l00259"></a><span class="lineno"><a class="line" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a00195aa190a0eea4cd4ab808056bfbfd"> 259</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a00195aa190a0eea4cd4ab808056bfbfd">operator&lt;</a>(<span class="keyword">const</span> <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html">SolveData</a>&amp; o)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">return</span> std::tie(<a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a91dacddd9f775730c8d424d2ab4d76ac">status</a>, <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a71013162baa979e0b8780100905cf700">difficulty</a>, <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a4f572c68b7bf3aac70b3f5292398ff7b">deterministic_limit</a>,</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#afc5fa55f61560324377e4f42d4a9211f">deterministic_time</a>, <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a2b7499dfe1d827cdca46593256705cd4">initial_best_objective</a>,</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a1092ef5699db303eacd67586fe6273f4">base_objective</a>, <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a6bdd919d4fe97909496a23f7d85b5d8e">new_objective</a>,</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a2579a2fccfe41ac8b5d8dac1c7f93607">initial_best_objective_bound</a>, <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#abfd9e74380811ea081037db464d22f2f">new_objective_bound</a>,</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#ac9a13145434b16b5645828ffa1ebad02">neighborhood_id</a>) &lt;</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; std::tie(o.<a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a91dacddd9f775730c8d424d2ab4d76ac">status</a>, o.<a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a71013162baa979e0b8780100905cf700">difficulty</a>, o.<a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a4f572c68b7bf3aac70b3f5292398ff7b">deterministic_limit</a>,</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; o.<a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#afc5fa55f61560324377e4f42d4a9211f">deterministic_time</a>, o.<a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a2b7499dfe1d827cdca46593256705cd4">initial_best_objective</a>,</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; o.<a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a1092ef5699db303eacd67586fe6273f4">base_objective</a>, o.<a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a6bdd919d4fe97909496a23f7d85b5d8e">new_objective</a>,</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; o.<a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a2579a2fccfe41ac8b5d8dac1c7f93607">initial_best_objective_bound</a>, o.<a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#abfd9e74380811ea081037db464d22f2f">new_objective_bound</a>,</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; o.<a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#ac9a13145434b16b5645828ffa1ebad02">neighborhood_id</a>);</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; }</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_1sat_1_1_neighborhood_generator.html#a24d01ebae72ddcb6d698c97add3f41a5"> 272</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a24d01ebae72ddcb6d698c97add3f41a5">AddSolveData</a>(<a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html">SolveData</a> data) {</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; absl::MutexLock mutex_lock(&amp;<a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a9e87d3b4ec76aff1ff99016ce9a8dd73">mutex_</a>);</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; solve_data_.push_back(data);</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; }</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; </div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="comment">// Process all the recently added solve data and update this generator</span></div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="comment">// score and difficulty.</span></div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a9ca5b99b3550503ca7bad8418e133156">Synchronize</a>();</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; </div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="comment">// Returns a short description of the generator.</span></div>
<div class="line"><a name="l00282"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a1d89c28bd42ba9a52da008bb69367171"> 282</a></span>&#160; std::string <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a1d89c28bd42ba9a52da008bb69367171">name</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a723d30392e2c4f36252de0528a1b246d">name_</a>; }</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; </div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="comment">// Number of times this generator was called.</span></div>
<div class="line"><a name="l00285"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#aa3c8c5ea258e51976ee346183f19b461"> 285</a></span>&#160; <a class="code" href="integral__types_8h.html#a7cde0074dfd288f2d70c0e035dacb28a">int64</a> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#aa3c8c5ea258e51976ee346183f19b461">num_calls</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; absl::MutexLock mutex_lock(&amp;<a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a9e87d3b4ec76aff1ff99016ce9a8dd73">mutex_</a>);</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">return</span> num_calls_;</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; }</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; </div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="comment">// Number of time the neighborhood was fully solved (OPTIMAL/INFEASIBLE).</span></div>
<div class="line"><a name="l00291"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a9377c60c33cbae3a602a38995e8e0359"> 291</a></span>&#160; <a class="code" href="integral__types_8h.html#a7cde0074dfd288f2d70c0e035dacb28a">int64</a> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a9377c60c33cbae3a602a38995e8e0359">num_fully_solved_calls</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; absl::MutexLock mutex_lock(&amp;<a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a9e87d3b4ec76aff1ff99016ce9a8dd73">mutex_</a>);</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordflow">return</span> num_fully_solved_calls_;</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; }</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; </div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="comment">// The current difficulty of this generator</span></div>
<div class="line"><a name="l00297"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a43616719fac14b34582903ef03d114ac"> 297</a></span>&#160; <span class="keywordtype">double</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a43616719fac14b34582903ef03d114ac">difficulty</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; absl::MutexLock mutex_lock(&amp;<a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a9e87d3b4ec76aff1ff99016ce9a8dd73">mutex_</a>);</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">return</span> difficulty_.<a class="code" href="classoperations__research_1_1_adaptive_parameter_value.html#a374f9f0250d7e270cc4bf301edb46523">value</a>();</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; }</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; </div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="comment">// The current time limit that the sub-solve should use on this generator.</span></div>
<div class="line"><a name="l00303"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#ae6e428960282281b0cc3d4ea0427a610"> 303</a></span>&#160; <span class="keywordtype">double</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#ae6e428960282281b0cc3d4ea0427a610">deterministic_limit</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; absl::MutexLock mutex_lock(&amp;<a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a9e87d3b4ec76aff1ff99016ce9a8dd73">mutex_</a>);</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">return</span> deterministic_limit_;</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; }</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; </div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="comment">// The sum of the deterministic time spent in this generator.</span></div>
<div class="line"><a name="l00309"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#ae525d235b02bcfc962d845e28f5f0125"> 309</a></span>&#160; <span class="keywordtype">double</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#ae525d235b02bcfc962d845e28f5f0125">deterministic_time</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; absl::MutexLock mutex_lock(&amp;<a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a9e87d3b4ec76aff1ff99016ce9a8dd73">mutex_</a>);</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">return</span> deterministic_time_;</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; }</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; </div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keyword">protected</span>:</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="comment">// Triggered with each call to Synchronize() for each recently added</span></div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="comment">// SolveData. This is meant to be used for processing feedbacks by specific</span></div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="comment">// neighborhood generators to adjust the neighborhood generation process.</span></div>
<div class="line"><a name="l00318"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#ac497558c5257914ba8ffdc4e95e59c21"> 318</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#ac497558c5257914ba8ffdc4e95e59c21">AdditionalProcessingOnSynchronize</a>(<span class="keyword">const</span> <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html">SolveData</a>&amp; solve_data) {}</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; </div>
<div class="line"><a name="l00320"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a723d30392e2c4f36252de0528a1b246d"> 320</a></span>&#160; <span class="keyword">const</span> std::string <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a723d30392e2c4f36252de0528a1b246d">name_</a>;</div>
<div class="line"><a name="l00321"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#acbd503b89d1dc3dd85dfa9e0e5058472"> 321</a></span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html">NeighborhoodGeneratorHelper</a>&amp; <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#acbd503b89d1dc3dd85dfa9e0e5058472">helper_</a>;</div>
<div class="line"><a name="l00322"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a9e87d3b4ec76aff1ff99016ce9a8dd73"> 322</a></span>&#160; <span class="keyword">mutable</span> absl::Mutex <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a9e87d3b4ec76aff1ff99016ce9a8dd73">mutex_</a>;</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; </div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; std::vector&lt;SolveData&gt; solve_data_;</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; </div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="comment">// Current parameters to be used when generating/solving a neighborhood with</span></div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="comment">// this generator. Only updated on Synchronize().</span></div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <a class="code" href="classoperations__research_1_1_adaptive_parameter_value.html">AdaptiveParameterValue</a> difficulty_;</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordtype">double</span> deterministic_limit_ = 0.1;</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; </div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="comment">// Current statistics of the last solved neighborhood.</span></div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="comment">// Only updated on Synchronize().</span></div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <a class="code" href="integral__types_8h.html#a7cde0074dfd288f2d70c0e035dacb28a">int64</a> num_calls_ = 0;</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <a class="code" href="integral__types_8h.html#a7cde0074dfd288f2d70c0e035dacb28a">int64</a> num_fully_solved_calls_ = 0;</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <a class="code" href="integral__types_8h.html#a7cde0074dfd288f2d70c0e035dacb28a">int64</a> num_consecutive_non_improving_calls_ = 0;</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordtype">double</span> deterministic_time_ = 0.0;</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keywordtype">double</span> current_average_ = 0.0;</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;};</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; </div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;<span class="comment">// Pick a random subset of variables.</span></div>
<div class="line"><a name="l00342"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_simple_neighborhood_generator.html"> 342</a></span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1sat_1_1_simple_neighborhood_generator.html">SimpleNeighborhoodGenerator</a> : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html">NeighborhoodGenerator</a> {</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00344"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_simple_neighborhood_generator.html#af69bb9fef52993c8ea1e967039583e86"> 344</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classoperations__research_1_1sat_1_1_simple_neighborhood_generator.html#af69bb9fef52993c8ea1e967039583e86">SimpleNeighborhoodGenerator</a>(</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html">NeighborhoodGeneratorHelper</a> <span class="keyword">const</span>* helper, <span class="keyword">const</span> std::string&amp; <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a1d89c28bd42ba9a52da008bb69367171">name</a>)</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; : <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html">NeighborhoodGenerator</a>(<a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a1d89c28bd42ba9a52da008bb69367171">name</a>, helper) {}</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood.html">Neighborhood</a> <a class="code" href="classoperations__research_1_1sat_1_1_simple_neighborhood_generator.html#a8afb8ece44037532a15303d3533bdced">Generate</a>(<span class="keyword">const</span> CpSolverResponse&amp; initial_solution,</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keywordtype">double</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a43616719fac14b34582903ef03d114ac">difficulty</a>, absl::BitGenRef random) <span class="keyword">final</span>;</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;};</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"> 351</span>&#160;<span class="comment">// Pick a random subset of variables that are constructed by a BFS in the</span></div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;<span class="comment">// variable &lt;-&gt; constraint graph. That is, pick a random variable, then all the</span></div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;<span class="comment">// variable connected by some constraint to the first one, and so on. The</span></div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;<span class="comment">// variable of the last &quot;level&quot; are selected randomly.</span></div>
<div class="line"><a name="l00355"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_variable_graph_neighborhood_generator.html"> 355</a></span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1sat_1_1_variable_graph_neighborhood_generator.html">VariableGraphNeighborhoodGenerator</a> : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html">NeighborhoodGenerator</a> {</div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00357"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_variable_graph_neighborhood_generator.html#a7c2e3be0221c9e8d25ee4c5023da94c4"> 357</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classoperations__research_1_1sat_1_1_variable_graph_neighborhood_generator.html#a7c2e3be0221c9e8d25ee4c5023da94c4">VariableGraphNeighborhoodGenerator</a>(</div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html">NeighborhoodGeneratorHelper</a> <span class="keyword">const</span>* helper, <span class="keyword">const</span> std::string&amp; <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a1d89c28bd42ba9a52da008bb69367171">name</a>)</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; : <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html">NeighborhoodGenerator</a>(<a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a1d89c28bd42ba9a52da008bb69367171">name</a>, helper) {}</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood.html">Neighborhood</a> <a class="code" href="classoperations__research_1_1sat_1_1_variable_graph_neighborhood_generator.html#a8afb8ece44037532a15303d3533bdced">Generate</a>(<span class="keyword">const</span> CpSolverResponse&amp; initial_solution,</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordtype">double</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a43616719fac14b34582903ef03d114ac">difficulty</a>, absl::BitGenRef random) <span class="keyword">final</span>;</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"> 363</span>&#160; </div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;<span class="comment">// Pick a random subset of constraint and relax all of their variables. We are a</span></div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;<span class="comment">// bit smarter than this because after the first contraint is selected, we only</span></div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160;<span class="comment">// select constraints that share at least one variable with the already selected</span></div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;<span class="comment">// constraints. The variable from the &quot;last&quot; constraint are selected randomly.</span></div>
<div class="line"><a name="l00368"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_constraint_graph_neighborhood_generator.html"> 368</a></span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1sat_1_1_constraint_graph_neighborhood_generator.html">ConstraintGraphNeighborhoodGenerator</a> : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html">NeighborhoodGenerator</a> {</div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00370"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_constraint_graph_neighborhood_generator.html#ad2ac901759c4a6edf1c88a1c9c380381"> 370</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classoperations__research_1_1sat_1_1_constraint_graph_neighborhood_generator.html#ad2ac901759c4a6edf1c88a1c9c380381">ConstraintGraphNeighborhoodGenerator</a>(</div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html">NeighborhoodGeneratorHelper</a> <span class="keyword">const</span>* helper, <span class="keyword">const</span> std::string&amp; <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a1d89c28bd42ba9a52da008bb69367171">name</a>)</div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; : <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html">NeighborhoodGenerator</a>(<a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a1d89c28bd42ba9a52da008bb69367171">name</a>, helper) {}</div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood.html">Neighborhood</a> <a class="code" href="classoperations__research_1_1sat_1_1_constraint_graph_neighborhood_generator.html#a8afb8ece44037532a15303d3533bdced">Generate</a>(<span class="keyword">const</span> CpSolverResponse&amp; initial_solution,</div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keywordtype">double</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a43616719fac14b34582903ef03d114ac">difficulty</a>, absl::BitGenRef random) <span class="keyword">final</span>;</div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;};</div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; </div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;<span class="comment">// Helper method for the scheduling neighborhood generators. Returns the model</span></div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;<span class="comment">// as neighborhood for the given set of intervals to relax. For each no_overlap</span></div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;<span class="comment">// constraints, it adds strict relation order between the non-relaxed intervals.</span></div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;Neighborhood <a class="code" href="namespaceoperations__research_1_1sat.html#ad57491858f7814f0a03845022b6de35e">GenerateSchedulingNeighborhoodForRelaxation</a>(</div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keyword">const</span> absl::Span&lt;const int&gt; intervals_to_relax,</div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keyword">const</span> CpSolverResponse&amp; initial_solution,</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keyword">const</span> NeighborhoodGeneratorHelper&amp; helper);</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"> 385</span>&#160;<span class="comment">// Only make sense for scheduling problem. This select a random set of interval</span></div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;<span class="comment">// of the problem according to the difficulty. Then, for each no_overlap</span></div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;<span class="comment">// constraints, it adds strict relation order between the non-relaxed intervals.</span></div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;<span class="comment">//</span></div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;<span class="comment">// TODO(user): Also deal with cumulative constraint.</span></div>
<div class="line"><a name="l00390"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_scheduling_neighborhood_generator.html"> 390</a></span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1sat_1_1_scheduling_neighborhood_generator.html">SchedulingNeighborhoodGenerator</a> : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html">NeighborhoodGenerator</a> {</div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00392"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_scheduling_neighborhood_generator.html#a290a392b71763eec83b7f69dc53781d6"> 392</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classoperations__research_1_1sat_1_1_scheduling_neighborhood_generator.html#a290a392b71763eec83b7f69dc53781d6">SchedulingNeighborhoodGenerator</a>(</div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html">NeighborhoodGeneratorHelper</a> <span class="keyword">const</span>* helper, <span class="keyword">const</span> std::string&amp; <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a1d89c28bd42ba9a52da008bb69367171">name</a>)</div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; : <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html">NeighborhoodGenerator</a>(<a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a1d89c28bd42ba9a52da008bb69367171">name</a>, helper) {}</div>
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; </div>
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood.html">Neighborhood</a> <a class="code" href="classoperations__research_1_1sat_1_1_scheduling_neighborhood_generator.html#a8afb8ece44037532a15303d3533bdced">Generate</a>(<span class="keyword">const</span> CpSolverResponse&amp; initial_solution,</div>
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="keywordtype">double</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a43616719fac14b34582903ef03d114ac">difficulty</a>, absl::BitGenRef random) <span class="keyword">final</span>;</div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;};</div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; </div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160;<span class="comment">// Similar to SchedulingNeighborhoodGenerator except the set of intervals that</span></div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160;<span class="comment">// are relaxed are from a specific random time interval.</span></div>
<div class="line"><a name="l00402"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_scheduling_time_window_neighborhood_generator.html"> 402</a></span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1sat_1_1_scheduling_time_window_neighborhood_generator.html">SchedulingTimeWindowNeighborhoodGenerator</a> : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html">NeighborhoodGenerator</a> {</div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00404"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_scheduling_time_window_neighborhood_generator.html#a2ea0f2091a27219aa8345fff8068eedc"> 404</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classoperations__research_1_1sat_1_1_scheduling_time_window_neighborhood_generator.html#a2ea0f2091a27219aa8345fff8068eedc">SchedulingTimeWindowNeighborhoodGenerator</a>(</div>
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html">NeighborhoodGeneratorHelper</a> <span class="keyword">const</span>* helper, <span class="keyword">const</span> std::string&amp; <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a1d89c28bd42ba9a52da008bb69367171">name</a>)</div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; : <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html">NeighborhoodGenerator</a>(<a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a1d89c28bd42ba9a52da008bb69367171">name</a>, helper) {}</div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; </div>
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood.html">Neighborhood</a> <a class="code" href="classoperations__research_1_1sat_1_1_scheduling_time_window_neighborhood_generator.html#a8afb8ece44037532a15303d3533bdced">Generate</a>(<span class="keyword">const</span> CpSolverResponse&amp; initial_solution,</div>
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keywordtype">double</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a43616719fac14b34582903ef03d114ac">difficulty</a>, absl::BitGenRef random) <span class="keyword">final</span>;</div>
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160;};</div>
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; </div>
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160;<span class="comment">// Generates a neighborhood by fixing the variables to solutions reported in</span></div>
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160;<span class="comment">// various repositories. This is inspired from RINS published in &quot;Exploring</span></div>
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160;<span class="comment">// relaxation induced neighborhoods to improve MIP solutions&quot; 2004 by E. Danna</span></div>
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;<span class="comment">// et.</span></div>
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160;<span class="comment">//</span></div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160;<span class="comment">// If incomplete_solutions is provided, this generates a neighborhood by fixing</span></div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;<span class="comment">// the variable values to a solution in the SharedIncompleteSolutionManager and</span></div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160;<span class="comment">// ignores the other repositories.</span></div>
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;<span class="comment">//</span></div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160;<span class="comment">// Otherwise, if response_manager is not provided, this generates a neighborhood</span></div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160;<span class="comment">// using only the linear/general relaxation values. The domain of the variables</span></div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160;<span class="comment">// are reduced to the integer values around their lp solution/relaxation</span></div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160;<span class="comment">// solution values. This was published in &quot;RENS The Relaxation Enforced</span></div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160;<span class="comment">// Neighborhood&quot; 2009 by Timo Berthold.</span></div>
<div class="line"><a name="l00426"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_relaxation_induced_neighborhood_generator.html"> 426</a></span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1sat_1_1_relaxation_induced_neighborhood_generator.html">RelaxationInducedNeighborhoodGenerator</a> : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html">NeighborhoodGenerator</a> {</div>
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00428"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_relaxation_induced_neighborhood_generator.html#a04aa59221e89859285d2224a198d5a5f"> 428</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classoperations__research_1_1sat_1_1_relaxation_induced_neighborhood_generator.html#a04aa59221e89859285d2224a198d5a5f">RelaxationInducedNeighborhoodGenerator</a>(</div>
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html">NeighborhoodGeneratorHelper</a> <span class="keyword">const</span>* helper,</div>
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1sat_1_1_shared_response_manager.html">SharedResponseManager</a>* response_manager,</div>
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1sat_1_1_shared_relaxation_solution_repository.html">SharedRelaxationSolutionRepository</a>* <a class="code" href="cp__model__solver_8cc.html#a2a2278bd1fb787198e496b7d443a05e8">relaxation_solutions</a>,</div>
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1sat_1_1_shared_l_p_solution_repository.html">SharedLPSolutionRepository</a>* <a class="code" href="cp__model__solver_8cc.html#a5c52f4ef9698913ed16c67a4a6cec606">lp_solutions</a>,</div>
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <a class="code" href="classoperations__research_1_1sat_1_1_shared_incomplete_solution_manager.html">SharedIncompleteSolutionManager</a>* <a class="code" href="cp__model__solver_8cc.html#a6bc4d701f71d498e82a3d45adde9a2e4">incomplete_solutions</a>,</div>
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="keyword">const</span> std::string&amp; <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a1d89c28bd42ba9a52da008bb69367171">name</a>)</div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; : <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html">NeighborhoodGenerator</a>(<a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a1d89c28bd42ba9a52da008bb69367171">name</a>, helper),</div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; response_manager_(response_manager),</div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; relaxation_solutions_(<a class="code" href="cp__model__solver_8cc.html#a2a2278bd1fb787198e496b7d443a05e8">relaxation_solutions</a>),</div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; lp_solutions_(<a class="code" href="cp__model__solver_8cc.html#a5c52f4ef9698913ed16c67a4a6cec606">lp_solutions</a>),</div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; incomplete_solutions_(<a class="code" href="cp__model__solver_8cc.html#a6bc4d701f71d498e82a3d45adde9a2e4">incomplete_solutions</a>) {</div>
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <a class="code" href="base_2logging_8h.html#a3e1cfef60e774a81f30eaddf26a3a274">CHECK</a>(lp_solutions_ != <span class="keyword">nullptr</span> || relaxation_solutions_ != <span class="keyword">nullptr</span> ||</div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <a class="code" href="cp__model__solver_8cc.html#a6bc4d701f71d498e82a3d45adde9a2e4">incomplete_solutions</a> != <span class="keyword">nullptr</span>);</div>
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; }</div>
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; </div>
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="comment">// Both initial solution and difficulty values are ignored.</span></div>
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood.html">Neighborhood</a> <a class="code" href="classoperations__research_1_1sat_1_1_relaxation_induced_neighborhood_generator.html#a8afb8ece44037532a15303d3533bdced">Generate</a>(<span class="keyword">const</span> CpSolverResponse&amp; initial_solution,</div>
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keywordtype">double</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a43616719fac14b34582903ef03d114ac">difficulty</a>, absl::BitGenRef random) <span class="keyword">final</span>;</div>
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; </div>
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="comment">// Returns true if the required solutions are available.</span></div>
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1sat_1_1_relaxation_induced_neighborhood_generator.html#a18bd97b50e3170dabf1f537e19695054">ReadyToGenerate</a>() <span class="keyword">const override</span>;</div>
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; </div>
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1sat_1_1_shared_response_manager.html">SharedResponseManager</a>* response_manager_;</div>
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1sat_1_1_shared_relaxation_solution_repository.html">SharedRelaxationSolutionRepository</a>* relaxation_solutions_;</div>
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="keyword">const</span> <a class="code" href="classoperations__research_1_1sat_1_1_shared_l_p_solution_repository.html">SharedLPSolutionRepository</a>* lp_solutions_;</div>
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <a class="code" href="classoperations__research_1_1sat_1_1_shared_incomplete_solution_manager.html">SharedIncompleteSolutionManager</a>* incomplete_solutions_;</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"> 457</span>&#160; </div>
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;<span class="comment">// Generates a relaxation of the original model by removing a consecutive span</span></div>
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;<span class="comment">// of constraints starting at a random index. The number of constraints removed</span></div>
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;<span class="comment">// is in sync with the difficulty passed to the generator.</span></div>
<div class="line"><a name="l00461"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_consecutive_constraints_relaxation_neighborhood_generator.html"> 461</a></span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1sat_1_1_consecutive_constraints_relaxation_neighborhood_generator.html">ConsecutiveConstraintsRelaxationNeighborhoodGenerator</a></div>
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html">NeighborhoodGenerator</a> {</div>
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00464"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_consecutive_constraints_relaxation_neighborhood_generator.html#a23c196ccae7ce05ad735bd5def5a9052"> 464</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classoperations__research_1_1sat_1_1_consecutive_constraints_relaxation_neighborhood_generator.html#a23c196ccae7ce05ad735bd5def5a9052">ConsecutiveConstraintsRelaxationNeighborhoodGenerator</a>(</div>
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html">NeighborhoodGeneratorHelper</a> <span class="keyword">const</span>* helper, <span class="keyword">const</span> std::string&amp; <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a1d89c28bd42ba9a52da008bb69367171">name</a>)</div>
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; : <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html">NeighborhoodGenerator</a>(<a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a1d89c28bd42ba9a52da008bb69367171">name</a>, helper) {}</div>
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood.html">Neighborhood</a> <a class="code" href="classoperations__research_1_1sat_1_1_consecutive_constraints_relaxation_neighborhood_generator.html#a8afb8ece44037532a15303d3533bdced">Generate</a>(<span class="keyword">const</span> CpSolverResponse&amp; initial_solution,</div>
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordtype">double</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a43616719fac14b34582903ef03d114ac">difficulty</a>, absl::BitGenRef random) <span class="keyword">final</span>;</div>
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; </div>
<div class="line"><a name="l00470"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_consecutive_constraints_relaxation_neighborhood_generator.html#a674468b66860a4942dea730f9731c5cf"> 470</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1sat_1_1_consecutive_constraints_relaxation_neighborhood_generator.html#a674468b66860a4942dea730f9731c5cf">IsRelaxationGenerator</a>()<span class="keyword"> const override </span>{ <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div>
<div class="line"><a name="l00471"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_consecutive_constraints_relaxation_neighborhood_generator.html#a18bd97b50e3170dabf1f537e19695054"> 471</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1sat_1_1_consecutive_constraints_relaxation_neighborhood_generator.html#a18bd97b50e3170dabf1f537e19695054">ReadyToGenerate</a>()<span class="keyword"> const override </span>{ <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div>
<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;};</div>
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; </div>
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;<span class="comment">// Generates a relaxation of the original model by removing some constraints</span></div>
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160;<span class="comment">// randomly with a given weight for each constraint that controls the</span></div>
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160;<span class="comment">// probability of constraint getting removed. The number of constraints removed</span></div>
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160;<span class="comment">// is in sync with the difficulty passed to the generator. Higher weighted</span></div>
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160;<span class="comment">// constraints are more likely to get removed.</span></div>
<div class="line"><a name="l00479"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_weighted_random_relaxation_neighborhood_generator.html"> 479</a></span>&#160;<span class="keyword">class </span><a class="code" href="classoperations__research_1_1sat_1_1_weighted_random_relaxation_neighborhood_generator.html">WeightedRandomRelaxationNeighborhoodGenerator</a></div>
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; : <span class="keyword">public</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html">NeighborhoodGenerator</a> {</div>
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <a class="code" href="classoperations__research_1_1sat_1_1_weighted_random_relaxation_neighborhood_generator.html#a325f8d16767c3a3912e429d856171150">WeightedRandomRelaxationNeighborhoodGenerator</a>(</div>
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html">NeighborhoodGeneratorHelper</a> <span class="keyword">const</span>* helper, <span class="keyword">const</span> std::string&amp; <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a1d89c28bd42ba9a52da008bb69367171">name</a>);</div>
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; </div>
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="comment">// Generates the neighborhood as described above. Also stores the removed</span></div>
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="comment">// constraints indices for adjusting the weights.</span></div>
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <a class="code" href="structoperations__research_1_1sat_1_1_neighborhood.html">Neighborhood</a> <a class="code" href="classoperations__research_1_1sat_1_1_weighted_random_relaxation_neighborhood_generator.html#a8afb8ece44037532a15303d3533bdced">Generate</a>(<span class="keyword">const</span> CpSolverResponse&amp; initial_solution,</div>
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="keywordtype">double</span> <a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a43616719fac14b34582903ef03d114ac">difficulty</a>, absl::BitGenRef random) <span class="keyword">final</span>;</div>
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; </div>
<div class="line"><a name="l00490"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_weighted_random_relaxation_neighborhood_generator.html#a674468b66860a4942dea730f9731c5cf"> 490</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1sat_1_1_weighted_random_relaxation_neighborhood_generator.html#a674468b66860a4942dea730f9731c5cf">IsRelaxationGenerator</a>()<span class="keyword"> const override </span>{ <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div>
<div class="line"><a name="l00491"></a><span class="lineno"><a class="line" href="classoperations__research_1_1sat_1_1_weighted_random_relaxation_neighborhood_generator.html#a18bd97b50e3170dabf1f537e19695054"> 491</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classoperations__research_1_1sat_1_1_weighted_random_relaxation_neighborhood_generator.html#a18bd97b50e3170dabf1f537e19695054">ReadyToGenerate</a>()<span class="keyword"> const override </span>{ <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div>
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; </div>
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="comment">// Adjusts the weights of the constraints removed to get the neighborhood</span></div>
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="comment">// based on the solve_data.</span></div>
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="keywordtype">void</span> AdditionalProcessingOnSynchronize(<span class="keyword">const</span> SolveData&amp; solve_data) <span class="keyword">override</span></div>
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; ABSL_EXCLUSIVE_LOCKS_REQUIRED(<a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a9e87d3b4ec76aff1ff99016ce9a8dd73">mutex_</a>);</div>
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; </div>
<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="comment">// Higher weighted constraints are more likely to get removed.</span></div>
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; std::vector&lt;double&gt; constraint_weights_;</div>
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keywordtype">int</span> num_removable_constraints_ = 0;</div>
<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; </div>
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="comment">// Indices of the removed constraints per generated neighborhood.</span></div>
<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; absl::flat_hash_map&lt;int64, std::vector&lt;int&gt;&gt; removed_constraints_</div>
<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; ABSL_GUARDED_BY(<a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a9e87d3b4ec76aff1ff99016ce9a8dd73">mutex_</a>);</div>
<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; </div>
<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="comment">// TODO(user): Move this to parent class if other generators start using</span></div>
<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="comment">// feedbacks.</span></div>
<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <a class="code" href="integral__types_8h.html#a7cde0074dfd288f2d70c0e035dacb28a">int64</a> next_available_id_ ABSL_GUARDED_BY(<a class="code" href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a9e87d3b4ec76aff1ff99016ce9a8dd73">mutex_</a>) = 0;</div>
<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160;};</div>
<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; </div>
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160;} <span class="comment">// namespace sat</span></div>
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160;} <span class="comment">// namespace operations_research</span></div>
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; </div>
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// OR_TOOLS_SAT_CP_MODEL_LNS_H_</span></div>
<div class="ttc" id="aadaptative__parameter__value_8h_html"><div class="ttname"><a href="adaptative__parameter__value_8h.html">adaptative_parameter_value.h</a></div></div>
<div class="ttc" id="abase_2logging_8h_html_a3e1cfef60e774a81f30eaddf26a3a274"><div class="ttname"><a href="base_2logging_8h.html#a3e1cfef60e774a81f30eaddf26a3a274">CHECK</a></div><div class="ttdeci">#define CHECK(condition)</div><div class="ttdef"><b>Definition:</b> <a href="base_2logging_8h_source.html#l00495">base/logging.h:495</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1_adaptive_parameter_value_html"><div class="ttname"><a href="classoperations__research_1_1_adaptive_parameter_value.html">operations_research::AdaptiveParameterValue</a></div><div class="ttdef"><b>Definition:</b> <a href="adaptative__parameter__value_8h_source.html#l00037">adaptative_parameter_value.h:37</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1_adaptive_parameter_value_html_a374f9f0250d7e270cc4bf301edb46523"><div class="ttname"><a href="classoperations__research_1_1_adaptive_parameter_value.html#a374f9f0250d7e270cc4bf301edb46523">operations_research::AdaptiveParameterValue::value</a></div><div class="ttdeci">double value() const</div><div class="ttdef"><b>Definition:</b> <a href="adaptative__parameter__value_8h_source.html#l00070">adaptative_parameter_value.h:70</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1_shared_time_limit_html"><div class="ttname"><a href="classoperations__research_1_1_shared_time_limit.html">operations_research::SharedTimeLimit</a></div><div class="ttdef"><b>Definition:</b> <a href="time__limit_8h_source.html#l00338">time_limit.h:338</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_consecutive_constraints_relaxation_neighborhood_generator_html"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_consecutive_constraints_relaxation_neighborhood_generator.html">operations_research::sat::ConsecutiveConstraintsRelaxationNeighborhoodGenerator</a></div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00461">cp_model_lns.h:462</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_consecutive_constraints_relaxation_neighborhood_generator_html_a18bd97b50e3170dabf1f537e19695054"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_consecutive_constraints_relaxation_neighborhood_generator.html#a18bd97b50e3170dabf1f537e19695054">operations_research::sat::ConsecutiveConstraintsRelaxationNeighborhoodGenerator::ReadyToGenerate</a></div><div class="ttdeci">bool ReadyToGenerate() const override</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00471">cp_model_lns.h:471</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_consecutive_constraints_relaxation_neighborhood_generator_html_a23c196ccae7ce05ad735bd5def5a9052"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_consecutive_constraints_relaxation_neighborhood_generator.html#a23c196ccae7ce05ad735bd5def5a9052">operations_research::sat::ConsecutiveConstraintsRelaxationNeighborhoodGenerator::ConsecutiveConstraintsRelaxationNeighborhoodGenerator</a></div><div class="ttdeci">ConsecutiveConstraintsRelaxationNeighborhoodGenerator(NeighborhoodGeneratorHelper const *helper, const std::string &amp;name)</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00464">cp_model_lns.h:464</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_consecutive_constraints_relaxation_neighborhood_generator_html_a674468b66860a4942dea730f9731c5cf"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_consecutive_constraints_relaxation_neighborhood_generator.html#a674468b66860a4942dea730f9731c5cf">operations_research::sat::ConsecutiveConstraintsRelaxationNeighborhoodGenerator::IsRelaxationGenerator</a></div><div class="ttdeci">bool IsRelaxationGenerator() const override</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00470">cp_model_lns.h:470</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_consecutive_constraints_relaxation_neighborhood_generator_html_a8afb8ece44037532a15303d3533bdced"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_consecutive_constraints_relaxation_neighborhood_generator.html#a8afb8ece44037532a15303d3533bdced">operations_research::sat::ConsecutiveConstraintsRelaxationNeighborhoodGenerator::Generate</a></div><div class="ttdeci">Neighborhood Generate(const CpSolverResponse &amp;initial_solution, double difficulty, absl::BitGenRef random) final</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8cc_source.html#l00720">cp_model_lns.cc:720</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_constraint_graph_neighborhood_generator_html"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_constraint_graph_neighborhood_generator.html">operations_research::sat::ConstraintGraphNeighborhoodGenerator</a></div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00368">cp_model_lns.h:368</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_constraint_graph_neighborhood_generator_html_a8afb8ece44037532a15303d3533bdced"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_constraint_graph_neighborhood_generator.html#a8afb8ece44037532a15303d3533bdced">operations_research::sat::ConstraintGraphNeighborhoodGenerator::Generate</a></div><div class="ttdeci">Neighborhood Generate(const CpSolverResponse &amp;initial_solution, double difficulty, absl::BitGenRef random) final</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8cc_source.html#l00417">cp_model_lns.cc:417</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_constraint_graph_neighborhood_generator_html_ad2ac901759c4a6edf1c88a1c9c380381"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_constraint_graph_neighborhood_generator.html#ad2ac901759c4a6edf1c88a1c9c380381">operations_research::sat::ConstraintGraphNeighborhoodGenerator::ConstraintGraphNeighborhoodGenerator</a></div><div class="ttdeci">ConstraintGraphNeighborhoodGenerator(NeighborhoodGeneratorHelper const *helper, const std::string &amp;name)</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00370">cp_model_lns.h:370</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_helper_html"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html">operations_research::sat::NeighborhoodGeneratorHelper</a></div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00064">cp_model_lns.h:64</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_helper_html_a08c018489eb0c4c309f144780ebb8cce"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a08c018489eb0c4c309f144780ebb8cce">operations_research::sat::NeighborhoodGeneratorHelper::NeighborhoodGeneratorHelper</a></div><div class="ttdeci">NeighborhoodGeneratorHelper(CpModelProto const *model_proto, SatParameters const *parameters, SharedResponseManager *shared_response, SharedTimeLimit *shared_time_limit=nullptr, SharedBoundsManager *shared_bounds=nullptr)</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8cc_source.html#l00032">cp_model_lns.cc:32</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_helper_html_a0e31a4150ae965379d0f05d51a0c1673"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a0e31a4150ae965379d0f05d51a0c1673">operations_research::sat::NeighborhoodGeneratorHelper::shared_response</a></div><div class="ttdeci">const SharedResponseManager &amp; shared_response() const</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00137">cp_model_lns.h:137</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_helper_html_a126969fed21452a041a7014fb86ff105"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a126969fed21452a041a7014fb86ff105">operations_research::sat::NeighborhoodGeneratorHelper::VarToConstraint</a></div><div class="ttdeci">const std::vector&lt; std::vector&lt; int &gt; &gt; &amp; VarToConstraint() const</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00113">cp_model_lns.h:113</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_helper_html_a15cb168917371b5fb2d17b00e640de63"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a15cb168917371b5fb2d17b00e640de63">operations_research::sat::NeighborhoodGeneratorHelper::FullNeighborhood</a></div><div class="ttdeci">Neighborhood FullNeighborhood() const</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8cc_source.html#l00172">cp_model_lns.cc:172</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_helper_html_a307d968091a3bddbbce257cca9b79fbb"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a307d968091a3bddbbce257cca9b79fbb">operations_research::sat::NeighborhoodGeneratorHelper::FixAllVariables</a></div><div class="ttdeci">Neighborhood FixAllVariables(const CpSolverResponse &amp;initial_solution) const</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8cc_source.html#l00245">cp_model_lns.cc:245</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_helper_html_a3536511769245b28739a715de62b0193"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a3536511769245b28739a715de62b0193">operations_research::sat::NeighborhoodGeneratorHelper::IsActive</a></div><div class="ttdeci">bool IsActive(int var) const</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8cc_source.html#l00162">cp_model_lns.cc:162</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_helper_html_a49496d349c274724b25a6b077cc8fdb4"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a49496d349c274724b25a6b077cc8fdb4">operations_research::sat::NeighborhoodGeneratorHelper::MutableMutex</a></div><div class="ttdeci">absl::Mutex * MutableMutex() const</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00135">cp_model_lns.h:135</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_helper_html_a586408c556a6e1732ac80d8df9cdee5b"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a586408c556a6e1732ac80d8df9cdee5b">operations_research::sat::NeighborhoodGeneratorHelper::FixGivenVariables</a></div><div class="ttdeci">Neighborhood FixGivenVariables(const CpSolverResponse &amp;initial_solution, const std::vector&lt; int &gt; &amp;variables_to_fix) const</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8cc_source.html#l00182">cp_model_lns.cc:182</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_helper_html_a600568ec5f62e9175d11d08920d1bab1"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a600568ec5f62e9175d11d08920d1bab1">operations_research::sat::NeighborhoodGeneratorHelper::GenerateTask</a></div><div class="ttdeci">std::function&lt; void()&gt; GenerateTask(int64 task_id) override</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00074">cp_model_lns.h:74</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_helper_html_a6aef4ca16709a75231ee1691c306c641"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a6aef4ca16709a75231ee1691c306c641">operations_research::sat::NeighborhoodGeneratorHelper::TypeToConstraints</a></div><div class="ttdeci">const absl::Span&lt; const int &gt; TypeToConstraints(ConstraintProto::ConstraintCase type) const</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00118">cp_model_lns.h:118</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_helper_html_a8735c6fd1459361aa6696a77f8042bf1"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a8735c6fd1459361aa6696a77f8042bf1">operations_research::sat::NeighborhoodGeneratorHelper::RelaxGivenVariables</a></div><div class="ttdeci">Neighborhood RelaxGivenVariables(const CpSolverResponse &amp;initial_solution, const std::vector&lt; int &gt; &amp;relaxed_variables) const</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8cc_source.html#l00231">cp_model_lns.cc:231</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_helper_html_a9cbca4684dddbad2d60b4dbcb1f90aba"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a9cbca4684dddbad2d60b4dbcb1f90aba">operations_research::sat::NeighborhoodGeneratorHelper::ActiveVariables</a></div><div class="ttdeci">const std::vector&lt; int &gt; &amp; ActiveVariables() const</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00106">cp_model_lns.h:106</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_helper_html_a9f348ae7c22fbaa73b72bc976455ab14"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#a9f348ae7c22fbaa73b72bc976455ab14">operations_research::sat::NeighborhoodGeneratorHelper::ModelProto</a></div><div class="ttdeci">const CpModelProto &amp; ModelProto() const</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00126">cp_model_lns.h:126</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_helper_html_ab25d3ac59ae6adc23d30b5fdc892b812"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#ab25d3ac59ae6adc23d30b5fdc892b812">operations_research::sat::NeighborhoodGeneratorHelper::TaskIsAvailable</a></div><div class="ttdeci">bool TaskIsAvailable() override</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00073">cp_model_lns.h:73</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_helper_html_ac0763b7b9e44b9b30e78b9dd4da8e98a"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#ac0763b7b9e44b9b30e78b9dd4da8e98a">operations_research::sat::NeighborhoodGeneratorHelper::RemoveMarkedConstraints</a></div><div class="ttdeci">Neighborhood RemoveMarkedConstraints(const std::vector&lt; int &gt; &amp;constraints_to_remove) const</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8cc_source.html#l00216">cp_model_lns.cc:216</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_helper_html_ac3e42ca3d76c8f2ce836a85688768672"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#ac3e42ca3d76c8f2ce836a85688768672">operations_research::sat::NeighborhoodGeneratorHelper::ConstraintToVar</a></div><div class="ttdeci">const std::vector&lt; std::vector&lt; int &gt; &gt; &amp; ConstraintToVar() const</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00110">cp_model_lns.h:110</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_helper_html_af4a8d38991f3497e048a3b56b830087f"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#af4a8d38991f3497e048a3b56b830087f">operations_research::sat::NeighborhoodGeneratorHelper::Parameters</a></div><div class="ttdeci">const SatParameters &amp; Parameters() const</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00127">cp_model_lns.h:127</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_helper_html_afa21407ae134806ac4337d0b2473b210"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator_helper.html#afa21407ae134806ac4337d0b2473b210">operations_research::sat::NeighborhoodGeneratorHelper::Synchronize</a></div><div class="ttdeci">void Synchronize() override</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8cc_source.html#l00052">cp_model_lns.cc:52</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_html"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator.html">operations_research::sat::NeighborhoodGenerator</a></div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00182">cp_model_lns.h:182</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_html_a09fa0632fb0484300de153adb79f071d"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a09fa0632fb0484300de153adb79f071d">operations_research::sat::NeighborhoodGenerator::Generate</a></div><div class="ttdeci">virtual Neighborhood Generate(const CpSolverResponse &amp;initial_solution, double difficulty, absl::BitGenRef random)=0</div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_html_a0c8b86bd60b4fc70cb653a12d50c2ce8"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a0c8b86bd60b4fc70cb653a12d50c2ce8">operations_research::sat::NeighborhoodGenerator::IsRelaxationGenerator</a></div><div class="ttdeci">virtual bool IsRelaxationGenerator() const</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00211">cp_model_lns.h:211</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_html_a186eb8a0761d3a80e350e5d6eb6412a1"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a186eb8a0761d3a80e350e5d6eb6412a1">operations_research::sat::NeighborhoodGenerator::~NeighborhoodGenerator</a></div><div class="ttdeci">virtual ~NeighborhoodGenerator()</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00187">cp_model_lns.h:187</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_html_a1d89c28bd42ba9a52da008bb69367171"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a1d89c28bd42ba9a52da008bb69367171">operations_research::sat::NeighborhoodGenerator::name</a></div><div class="ttdeci">std::string name() const</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00282">cp_model_lns.h:282</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_html_a24d01ebae72ddcb6d698c97add3f41a5"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a24d01ebae72ddcb6d698c97add3f41a5">operations_research::sat::NeighborhoodGenerator::AddSolveData</a></div><div class="ttdeci">void AddSolveData(SolveData data)</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00272">cp_model_lns.h:272</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_html_a34c45a33de4f8a713e99bbf97d8d08d6"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a34c45a33de4f8a713e99bbf97d8d08d6">operations_research::sat::NeighborhoodGenerator::ReadyToGenerate</a></div><div class="ttdeci">virtual bool ReadyToGenerate() const</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8cc_source.html#l00254">cp_model_lns.cc:254</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_html_a43616719fac14b34582903ef03d114ac"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a43616719fac14b34582903ef03d114ac">operations_research::sat::NeighborhoodGenerator::difficulty</a></div><div class="ttdeci">double difficulty() const</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00297">cp_model_lns.h:297</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_html_a60349be3472ae33af45a70cd5480a7e3"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a60349be3472ae33af45a70cd5480a7e3">operations_research::sat::NeighborhoodGenerator::NeighborhoodGenerator</a></div><div class="ttdeci">NeighborhoodGenerator(const std::string &amp;name, NeighborhoodGeneratorHelper const *helper)</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00184">cp_model_lns.h:184</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_html_a723d30392e2c4f36252de0528a1b246d"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a723d30392e2c4f36252de0528a1b246d">operations_research::sat::NeighborhoodGenerator::name_</a></div><div class="ttdeci">const std::string name_</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00320">cp_model_lns.h:320</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_html_a8c5aac83a5aea832261e7a5ab425e54b"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a8c5aac83a5aea832261e7a5ab425e54b">operations_research::sat::NeighborhoodGenerator::GetUCBScore</a></div><div class="ttdeci">double GetUCBScore(int64 total_num_calls) const</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8cc_source.html#l00258">cp_model_lns.cc:258</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_html_a9377c60c33cbae3a602a38995e8e0359"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a9377c60c33cbae3a602a38995e8e0359">operations_research::sat::NeighborhoodGenerator::num_fully_solved_calls</a></div><div class="ttdeci">int64 num_fully_solved_calls() const</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00291">cp_model_lns.h:291</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_html_a9ca5b99b3550503ca7bad8418e133156"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a9ca5b99b3550503ca7bad8418e133156">operations_research::sat::NeighborhoodGenerator::Synchronize</a></div><div class="ttdeci">void Synchronize()</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8cc_source.html#l00265">cp_model_lns.cc:265</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_html_a9e87d3b4ec76aff1ff99016ce9a8dd73"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#a9e87d3b4ec76aff1ff99016ce9a8dd73">operations_research::sat::NeighborhoodGenerator::mutex_</a></div><div class="ttdeci">absl::Mutex mutex_</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00322">cp_model_lns.h:322</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_html_aa3c8c5ea258e51976ee346183f19b461"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#aa3c8c5ea258e51976ee346183f19b461">operations_research::sat::NeighborhoodGenerator::num_calls</a></div><div class="ttdeci">int64 num_calls() const</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00285">cp_model_lns.h:285</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_html_ac497558c5257914ba8ffdc4e95e59c21"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#ac497558c5257914ba8ffdc4e95e59c21">operations_research::sat::NeighborhoodGenerator::AdditionalProcessingOnSynchronize</a></div><div class="ttdeci">virtual void AdditionalProcessingOnSynchronize(const SolveData &amp;solve_data)</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00318">cp_model_lns.h:318</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_html_acbd503b89d1dc3dd85dfa9e0e5058472"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#acbd503b89d1dc3dd85dfa9e0e5058472">operations_research::sat::NeighborhoodGenerator::helper_</a></div><div class="ttdeci">const NeighborhoodGeneratorHelper &amp; helper_</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00321">cp_model_lns.h:321</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_html_ae525d235b02bcfc962d845e28f5f0125"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#ae525d235b02bcfc962d845e28f5f0125">operations_research::sat::NeighborhoodGenerator::deterministic_time</a></div><div class="ttdeci">double deterministic_time() const</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00309">cp_model_lns.h:309</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_neighborhood_generator_html_ae6e428960282281b0cc3d4ea0427a610"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_neighborhood_generator.html#ae6e428960282281b0cc3d4ea0427a610">operations_research::sat::NeighborhoodGenerator::deterministic_limit</a></div><div class="ttdeci">double deterministic_limit() const</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00303">cp_model_lns.h:303</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_relaxation_induced_neighborhood_generator_html"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_relaxation_induced_neighborhood_generator.html">operations_research::sat::RelaxationInducedNeighborhoodGenerator</a></div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00426">cp_model_lns.h:426</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_relaxation_induced_neighborhood_generator_html_a04aa59221e89859285d2224a198d5a5f"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_relaxation_induced_neighborhood_generator.html#a04aa59221e89859285d2224a198d5a5f">operations_research::sat::RelaxationInducedNeighborhoodGenerator::RelaxationInducedNeighborhoodGenerator</a></div><div class="ttdeci">RelaxationInducedNeighborhoodGenerator(NeighborhoodGeneratorHelper const *helper, const SharedResponseManager *response_manager, const SharedRelaxationSolutionRepository *relaxation_solutions, const SharedLPSolutionRepository *lp_solutions, SharedIncompleteSolutionManager *incomplete_solutions, const std::string &amp;name)</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00428">cp_model_lns.h:428</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_relaxation_induced_neighborhood_generator_html_a18bd97b50e3170dabf1f537e19695054"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_relaxation_induced_neighborhood_generator.html#a18bd97b50e3170dabf1f537e19695054">operations_research::sat::RelaxationInducedNeighborhoodGenerator::ReadyToGenerate</a></div><div class="ttdeci">bool ReadyToGenerate() const override</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8cc_source.html#l00603">cp_model_lns.cc:603</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_relaxation_induced_neighborhood_generator_html_a8afb8ece44037532a15303d3533bdced"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_relaxation_induced_neighborhood_generator.html#a8afb8ece44037532a15303d3533bdced">operations_research::sat::RelaxationInducedNeighborhoodGenerator::Generate</a></div><div class="ttdeci">Neighborhood Generate(const CpSolverResponse &amp;initial_solution, double difficulty, absl::BitGenRef random) final</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8cc_source.html#l00627">cp_model_lns.cc:627</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_scheduling_neighborhood_generator_html"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_scheduling_neighborhood_generator.html">operations_research::sat::SchedulingNeighborhoodGenerator</a></div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00390">cp_model_lns.h:390</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_scheduling_neighborhood_generator_html_a290a392b71763eec83b7f69dc53781d6"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_scheduling_neighborhood_generator.html#a290a392b71763eec83b7f69dc53781d6">operations_research::sat::SchedulingNeighborhoodGenerator::SchedulingNeighborhoodGenerator</a></div><div class="ttdeci">SchedulingNeighborhoodGenerator(NeighborhoodGeneratorHelper const *helper, const std::string &amp;name)</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00392">cp_model_lns.h:392</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_scheduling_neighborhood_generator_html_a8afb8ece44037532a15303d3533bdced"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_scheduling_neighborhood_generator.html#a8afb8ece44037532a15303d3533bdced">operations_research::sat::SchedulingNeighborhoodGenerator::Generate</a></div><div class="ttdeci">Neighborhood Generate(const CpSolverResponse &amp;initial_solution, double difficulty, absl::BitGenRef random) final</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8cc_source.html#l00565">cp_model_lns.cc:565</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_scheduling_time_window_neighborhood_generator_html"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_scheduling_time_window_neighborhood_generator.html">operations_research::sat::SchedulingTimeWindowNeighborhoodGenerator</a></div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00402">cp_model_lns.h:402</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_scheduling_time_window_neighborhood_generator_html_a2ea0f2091a27219aa8345fff8068eedc"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_scheduling_time_window_neighborhood_generator.html#a2ea0f2091a27219aa8345fff8068eedc">operations_research::sat::SchedulingTimeWindowNeighborhoodGenerator::SchedulingTimeWindowNeighborhoodGenerator</a></div><div class="ttdeci">SchedulingTimeWindowNeighborhoodGenerator(NeighborhoodGeneratorHelper const *helper, const std::string &amp;name)</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00404">cp_model_lns.h:404</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_scheduling_time_window_neighborhood_generator_html_a8afb8ece44037532a15303d3533bdced"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_scheduling_time_window_neighborhood_generator.html#a8afb8ece44037532a15303d3533bdced">operations_research::sat::SchedulingTimeWindowNeighborhoodGenerator::Generate</a></div><div class="ttdeci">Neighborhood Generate(const CpSolverResponse &amp;initial_solution, double difficulty, absl::BitGenRef random) final</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8cc_source.html#l00576">cp_model_lns.cc:576</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_shared_bounds_manager_html"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_shared_bounds_manager.html">operations_research::sat::SharedBoundsManager</a></div><div class="ttdef"><b>Definition:</b> <a href="synchronization_8h_source.html#l00344">synchronization.h:344</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_shared_incomplete_solution_manager_html"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_shared_incomplete_solution_manager.html">operations_research::sat::SharedIncompleteSolutionManager</a></div><div class="ttdef"><b>Definition:</b> <a href="synchronization_8h_source.html#l00151">synchronization.h:151</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_shared_l_p_solution_repository_html"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_shared_l_p_solution_repository.html">operations_research::sat::SharedLPSolutionRepository</a></div><div class="ttdef"><b>Definition:</b> <a href="synchronization_8h_source.html#l00135">synchronization.h:135</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_shared_relaxation_solution_repository_html"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_shared_relaxation_solution_repository.html">operations_research::sat::SharedRelaxationSolutionRepository</a></div><div class="ttdef"><b>Definition:</b> <a href="synchronization_8h_source.html#l00126">synchronization.h:127</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_shared_response_manager_html"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_shared_response_manager.html">operations_research::sat::SharedResponseManager</a></div><div class="ttdef"><b>Definition:</b> <a href="synchronization_8h_source.html#l00166">synchronization.h:166</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_simple_neighborhood_generator_html"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_simple_neighborhood_generator.html">operations_research::sat::SimpleNeighborhoodGenerator</a></div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00342">cp_model_lns.h:342</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_simple_neighborhood_generator_html_a8afb8ece44037532a15303d3533bdced"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_simple_neighborhood_generator.html#a8afb8ece44037532a15303d3533bdced">operations_research::sat::SimpleNeighborhoodGenerator::Generate</a></div><div class="ttdeci">Neighborhood Generate(const CpSolverResponse &amp;initial_solution, double difficulty, absl::BitGenRef random) final</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8cc_source.html#l00358">cp_model_lns.cc:358</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_simple_neighborhood_generator_html_af69bb9fef52993c8ea1e967039583e86"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_simple_neighborhood_generator.html#af69bb9fef52993c8ea1e967039583e86">operations_research::sat::SimpleNeighborhoodGenerator::SimpleNeighborhoodGenerator</a></div><div class="ttdeci">SimpleNeighborhoodGenerator(NeighborhoodGeneratorHelper const *helper, const std::string &amp;name)</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00344">cp_model_lns.h:344</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_sub_solver_html"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_sub_solver.html">operations_research::sat::SubSolver</a></div><div class="ttdef"><b>Definition:</b> <a href="subsolver_8h_source.html#l00041">subsolver.h:41</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_variable_graph_neighborhood_generator_html"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_variable_graph_neighborhood_generator.html">operations_research::sat::VariableGraphNeighborhoodGenerator</a></div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00355">cp_model_lns.h:355</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_variable_graph_neighborhood_generator_html_a7c2e3be0221c9e8d25ee4c5023da94c4"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_variable_graph_neighborhood_generator.html#a7c2e3be0221c9e8d25ee4c5023da94c4">operations_research::sat::VariableGraphNeighborhoodGenerator::VariableGraphNeighborhoodGenerator</a></div><div class="ttdeci">VariableGraphNeighborhoodGenerator(NeighborhoodGeneratorHelper const *helper, const std::string &amp;name)</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00357">cp_model_lns.h:357</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_variable_graph_neighborhood_generator_html_a8afb8ece44037532a15303d3533bdced"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_variable_graph_neighborhood_generator.html#a8afb8ece44037532a15303d3533bdced">operations_research::sat::VariableGraphNeighborhoodGenerator::Generate</a></div><div class="ttdeci">Neighborhood Generate(const CpSolverResponse &amp;initial_solution, double difficulty, absl::BitGenRef random) final</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8cc_source.html#l00366">cp_model_lns.cc:366</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_weighted_random_relaxation_neighborhood_generator_html"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_weighted_random_relaxation_neighborhood_generator.html">operations_research::sat::WeightedRandomRelaxationNeighborhoodGenerator</a></div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00479">cp_model_lns.h:480</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_weighted_random_relaxation_neighborhood_generator_html_a18bd97b50e3170dabf1f537e19695054"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_weighted_random_relaxation_neighborhood_generator.html#a18bd97b50e3170dabf1f537e19695054">operations_research::sat::WeightedRandomRelaxationNeighborhoodGenerator::ReadyToGenerate</a></div><div class="ttdeci">bool ReadyToGenerate() const override</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00491">cp_model_lns.h:491</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_weighted_random_relaxation_neighborhood_generator_html_a325f8d16767c3a3912e429d856171150"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_weighted_random_relaxation_neighborhood_generator.html#a325f8d16767c3a3912e429d856171150">operations_research::sat::WeightedRandomRelaxationNeighborhoodGenerator::WeightedRandomRelaxationNeighborhoodGenerator</a></div><div class="ttdeci">WeightedRandomRelaxationNeighborhoodGenerator(NeighborhoodGeneratorHelper const *helper, const std::string &amp;name)</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8cc_source.html#l00755">cp_model_lns.cc:756</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_weighted_random_relaxation_neighborhood_generator_html_a674468b66860a4942dea730f9731c5cf"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_weighted_random_relaxation_neighborhood_generator.html#a674468b66860a4942dea730f9731c5cf">operations_research::sat::WeightedRandomRelaxationNeighborhoodGenerator::IsRelaxationGenerator</a></div><div class="ttdeci">bool IsRelaxationGenerator() const override</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00490">cp_model_lns.h:490</a></div></div>
<div class="ttc" id="aclassoperations__research_1_1sat_1_1_weighted_random_relaxation_neighborhood_generator_html_a8afb8ece44037532a15303d3533bdced"><div class="ttname"><a href="classoperations__research_1_1sat_1_1_weighted_random_relaxation_neighborhood_generator.html#a8afb8ece44037532a15303d3533bdced">operations_research::sat::WeightedRandomRelaxationNeighborhoodGenerator::Generate</a></div><div class="ttdeci">Neighborhood Generate(const CpSolverResponse &amp;initial_solution, double difficulty, absl::BitGenRef random) final</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8cc_source.html#l00849">cp_model_lns.cc:849</a></div></div>
<div class="ttc" id="acp__model_8pb_8h_html"><div class="ttname"><a href="cp__model_8pb_8h.html">cp_model.pb.h</a></div></div>
<div class="ttc" id="acp__model__fz__solver_8cc_html_a10a1eab179b472c030bdc2a2efef7219"><div class="ttname"><a href="cp__model__fz__solver_8cc.html#a10a1eab179b472c030bdc2a2efef7219">parameters</a></div><div class="ttdeci">SatParameters parameters</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__fz__solver_8cc_source.html#l00108">cp_model_fz_solver.cc:108</a></div></div>
<div class="ttc" id="acp__model__solver_8cc_html_a2a2278bd1fb787198e496b7d443a05e8"><div class="ttname"><a href="cp__model__solver_8cc.html#a2a2278bd1fb787198e496b7d443a05e8">relaxation_solutions</a></div><div class="ttdeci">SharedRelaxationSolutionRepository * relaxation_solutions</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__solver_8cc_source.html#l02109">cp_model_solver.cc:2109</a></div></div>
<div class="ttc" id="acp__model__solver_8cc_html_a5c52f4ef9698913ed16c67a4a6cec606"><div class="ttname"><a href="cp__model__solver_8cc.html#a5c52f4ef9698913ed16c67a4a6cec606">lp_solutions</a></div><div class="ttdeci">SharedLPSolutionRepository * lp_solutions</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__solver_8cc_source.html#l02110">cp_model_solver.cc:2110</a></div></div>
<div class="ttc" id="acp__model__solver_8cc_html_a6ac76d8a372013f67c4973012948ec84"><div class="ttname"><a href="cp__model__solver_8cc.html#a6ac76d8a372013f67c4973012948ec84">model_proto</a></div><div class="ttdeci">CpModelProto const * model_proto</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__solver_8cc_source.html#l02104">cp_model_solver.cc:2104</a></div></div>
<div class="ttc" id="acp__model__solver_8cc_html_a6bc4d701f71d498e82a3d45adde9a2e4"><div class="ttname"><a href="cp__model__solver_8cc.html#a6bc4d701f71d498e82a3d45adde9a2e4">incomplete_solutions</a></div><div class="ttdeci">SharedIncompleteSolutionManager * incomplete_solutions</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__solver_8cc_source.html#l02111">cp_model_solver.cc:2111</a></div></div>
<div class="ttc" id="aexpr__array_8cc_html_a472a99923cbe11ae7b5a5d157d9ad465"><div class="ttname"><a href="expr__array_8cc.html#a472a99923cbe11ae7b5a5d157d9ad465">var</a></div><div class="ttdeci">IntVar * var</div><div class="ttdef"><b>Definition:</b> <a href="expr__array_8cc_source.html#l01858">expr_array.cc:1858</a></div></div>
<div class="ttc" id="aintegral__types_8h_html"><div class="ttname"><a href="integral__types_8h.html">integral_types.h</a></div></div>
<div class="ttc" id="aintegral__types_8h_html_a7cde0074dfd288f2d70c0e035dacb28a"><div class="ttname"><a href="integral__types_8h.html#a7cde0074dfd288f2d70c0e035dacb28a">int64</a></div><div class="ttdeci">int64_t int64</div><div class="ttdef"><b>Definition:</b> <a href="integral__types_8h_source.html#l00034">integral_types.h:34</a></div></div>
<div class="ttc" id="anamespaceoperations__research_1_1sat_html_ad57491858f7814f0a03845022b6de35e"><div class="ttname"><a href="namespaceoperations__research_1_1sat.html#ad57491858f7814f0a03845022b6de35e">operations_research::sat::GenerateSchedulingNeighborhoodForRelaxation</a></div><div class="ttdeci">Neighborhood GenerateSchedulingNeighborhoodForRelaxation(const absl::Span&lt; const int &gt; intervals_to_relax, const CpSolverResponse &amp;initial_solution, const NeighborhoodGeneratorHelper &amp;helper)</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8cc_source.html#l00472">cp_model_lns.cc:472</a></div></div>
<div class="ttc" id="anamespaceoperations__research_1_1sat_html_aedc4ddb96acc28481c09828d2e016815"><div class="ttname"><a href="namespaceoperations__research_1_1sat.html#aedc4ddb96acc28481c09828d2e016815">operations_research::sat::CpSolverStatus</a></div><div class="ttdeci">CpSolverStatus</div><div class="ttdef"><b>Definition:</b> <a href="cp__model_8pb_8h_source.html#l00222">cp_model.pb.h:222</a></div></div>
<div class="ttc" id="anamespaceoperations__research_1_1sat_html_aedc4ddb96acc28481c09828d2e016815a6ce26a62afab55d7606ad4e92428b30c"><div class="ttname"><a href="namespaceoperations__research_1_1sat.html#aedc4ddb96acc28481c09828d2e016815a6ce26a62afab55d7606ad4e92428b30c">operations_research::sat::UNKNOWN</a></div><div class="ttdeci">@ UNKNOWN</div><div class="ttdef"><b>Definition:</b> <a href="cp__model_8pb_8h_source.html#l00223">cp_model.pb.h:223</a></div></div>
<div class="ttc" id="anamespaceoperations__research_html"><div class="ttname"><a href="namespaceoperations__research.html">operations_research</a></div><div class="ttdoc">The vehicle routing library lets one model and solve generic vehicle routing problems ranging from th...</div><div class="ttdef"><b>Definition:</b> <a href="dense__doubly__linked__list_8h_source.html#l00021">dense_doubly_linked_list.h:21</a></div></div>
<div class="ttc" id="asat_2model_8h_html"><div class="ttname"><a href="sat_2model_8h.html">model.h</a></div></div>
<div class="ttc" id="astructoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data_html"><div class="ttname"><a href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html">operations_research::sat::NeighborhoodGenerator::SolveData</a></div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00224">cp_model_lns.h:224</a></div></div>
<div class="ttc" id="astructoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data_html_a00195aa190a0eea4cd4ab808056bfbfd"><div class="ttname"><a href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a00195aa190a0eea4cd4ab808056bfbfd">operations_research::sat::NeighborhoodGenerator::SolveData::operator&lt;</a></div><div class="ttdeci">bool operator&lt;(const SolveData &amp;o) const</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00259">cp_model_lns.h:259</a></div></div>
<div class="ttc" id="astructoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data_html_a1092ef5699db303eacd67586fe6273f4"><div class="ttname"><a href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a1092ef5699db303eacd67586fe6273f4">operations_research::sat::NeighborhoodGenerator::SolveData::base_objective</a></div><div class="ttdeci">IntegerValue base_objective</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00251">cp_model_lns.h:251</a></div></div>
<div class="ttc" id="astructoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data_html_a2579a2fccfe41ac8b5d8dac1c7f93607"><div class="ttname"><a href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a2579a2fccfe41ac8b5d8dac1c7f93607">operations_research::sat::NeighborhoodGenerator::SolveData::initial_best_objective_bound</a></div><div class="ttdeci">IntegerValue initial_best_objective_bound</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00255">cp_model_lns.h:255</a></div></div>
<div class="ttc" id="astructoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data_html_a2b7499dfe1d827cdca46593256705cd4"><div class="ttname"><a href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a2b7499dfe1d827cdca46593256705cd4">operations_research::sat::NeighborhoodGenerator::SolveData::initial_best_objective</a></div><div class="ttdeci">IntegerValue initial_best_objective</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00250">cp_model_lns.h:250</a></div></div>
<div class="ttc" id="astructoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data_html_a4f572c68b7bf3aac70b3f5292398ff7b"><div class="ttname"><a href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a4f572c68b7bf3aac70b3f5292398ff7b">operations_research::sat::NeighborhoodGenerator::SolveData::deterministic_limit</a></div><div class="ttdeci">double deterministic_limit</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00236">cp_model_lns.h:236</a></div></div>
<div class="ttc" id="astructoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data_html_a6bdd919d4fe97909496a23f7d85b5d8e"><div class="ttname"><a href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a6bdd919d4fe97909496a23f7d85b5d8e">operations_research::sat::NeighborhoodGenerator::SolveData::new_objective</a></div><div class="ttdeci">IntegerValue new_objective</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00252">cp_model_lns.h:252</a></div></div>
<div class="ttc" id="astructoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data_html_a71013162baa979e0b8780100905cf700"><div class="ttname"><a href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a71013162baa979e0b8780100905cf700">operations_research::sat::NeighborhoodGenerator::SolveData::difficulty</a></div><div class="ttdeci">double difficulty</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00233">cp_model_lns.h:233</a></div></div>
<div class="ttc" id="astructoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data_html_a91dacddd9f775730c8d424d2ab4d76ac"><div class="ttname"><a href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#a91dacddd9f775730c8d424d2ab4d76ac">operations_research::sat::NeighborhoodGenerator::SolveData::status</a></div><div class="ttdeci">CpSolverStatus status</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00230">cp_model_lns.h:230</a></div></div>
<div class="ttc" id="astructoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data_html_abfd9e74380811ea081037db464d22f2f"><div class="ttname"><a href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#abfd9e74380811ea081037db464d22f2f">operations_research::sat::NeighborhoodGenerator::SolveData::new_objective_bound</a></div><div class="ttdeci">IntegerValue new_objective_bound</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00256">cp_model_lns.h:256</a></div></div>
<div class="ttc" id="astructoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data_html_ac9a13145434b16b5645828ffa1ebad02"><div class="ttname"><a href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#ac9a13145434b16b5645828ffa1ebad02">operations_research::sat::NeighborhoodGenerator::SolveData::neighborhood_id</a></div><div class="ttdeci">int64 neighborhood_id</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00227">cp_model_lns.h:227</a></div></div>
<div class="ttc" id="astructoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data_html_afc5fa55f61560324377e4f42d4a9211f"><div class="ttname"><a href="structoperations__research_1_1sat_1_1_neighborhood_generator_1_1_solve_data.html#afc5fa55f61560324377e4f42d4a9211f">operations_research::sat::NeighborhoodGenerator::SolveData::deterministic_time</a></div><div class="ttdeci">double deterministic_time</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00239">cp_model_lns.h:239</a></div></div>
<div class="ttc" id="astructoperations__research_1_1sat_1_1_neighborhood_html"><div class="ttname"><a href="structoperations__research_1_1sat_1_1_neighborhood.html">operations_research::sat::Neighborhood</a></div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00034">cp_model_lns.h:34</a></div></div>
<div class="ttc" id="astructoperations__research_1_1sat_1_1_neighborhood_html_a04d448b3000c058b67ad17541473a317"><div class="ttname"><a href="structoperations__research_1_1sat_1_1_neighborhood.html#a04d448b3000c058b67ad17541473a317">operations_research::sat::Neighborhood::is_generated</a></div><div class="ttdeci">bool is_generated</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00036">cp_model_lns.h:36</a></div></div>
<div class="ttc" id="astructoperations__research_1_1sat_1_1_neighborhood_html_a8e672808c179f95cf4c626aef798bbc7"><div class="ttname"><a href="structoperations__research_1_1sat_1_1_neighborhood.html#a8e672808c179f95cf4c626aef798bbc7">operations_research::sat::Neighborhood::is_reduced</a></div><div class="ttdeci">bool is_reduced</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00041">cp_model_lns.h:41</a></div></div>
<div class="ttc" id="astructoperations__research_1_1sat_1_1_neighborhood_html_aaed94da4e4845ead42773bd4468a8899"><div class="ttname"><a href="structoperations__research_1_1sat_1_1_neighborhood.html#aaed94da4e4845ead42773bd4468a8899">operations_research::sat::Neighborhood::source_info</a></div><div class="ttdeci">std::string source_info</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00055">cp_model_lns.h:55</a></div></div>
<div class="ttc" id="astructoperations__research_1_1sat_1_1_neighborhood_html_ae580758c31ce30f5e52d9a732efd1267"><div class="ttname"><a href="structoperations__research_1_1sat_1_1_neighborhood.html#ae580758c31ce30f5e52d9a732efd1267">operations_research::sat::Neighborhood::cp_model</a></div><div class="ttdeci">CpModelProto cp_model</div><div class="ttdef"><b>Definition:</b> <a href="cp__model__lns_8h_source.html#l00045">cp_model_lns.h:45</a></div></div>
<div class="ttc" id="asubsolver_8h_html"><div class="ttname"><a href="subsolver_8h.html">subsolver.h</a></div></div>
<div class="ttc" id="asynchronization_8h_html"><div class="ttname"><a href="synchronization_8h.html">synchronization.h</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.18-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_a7cc1eeded8f693d0da6c729bc88c45a.html">ortools</a></li><li class="navelem"><a class="el" href="dir_dddac007a45022d9da6ea1dee012c3b9.html">sat</a></li><li class="navelem"><a class="el" href="cp__model__lns_8h.html">cp_model_lns.h</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.9.1 </li>
</ul>
</div>
</body>
</html>