⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 easylocaltemplates_cpp-source.html

📁 一个tabu search算法框架
💻 HTML
📖 第 1 页 / 共 5 页
字号:
01116     p_nhe->RandomMove(current_state,current_move); 
01117     <a class="code" href="class_easylocal__MoveRunner.html#b3">ComputeMoveCost</a>();
01118   }
01119 
01124   template &lt;class Input, class State, class Move&gt;
<a name="l01125"></a><a class="code" href="class_easylocal__HillClimbing.html#b1">01125</a>   <font class="keywordtype">void</font> HillClimbing&lt;Input,State,Move&gt;::InitializeRun()<font class="keyword"></font>
01126 <font class="keyword">  </font>{ 
01127     MoveRunner&lt;Input,State,Move&gt;::InitializeRun(); 
01128     assert(max_idle_iteration &gt; 0);
01129   }
01130 
01135   template &lt;class Input, class State, class Move&gt;
<a name="l01136"></a><a class="code" href="class_easylocal__HillClimbing.html#b2">01136</a>   <font class="keywordtype">void</font> HillClimbing&lt;Input,State,Move&gt;::TerminateRun()<font class="keyword"></font>
01137 <font class="keyword">  </font>{ 
01138     best_state = current_state;
01139     best_state_cost = current_state_cost;
01140   }
01141 
01146   template &lt;class Input, class State, class Move&gt;
<a name="l01147"></a><a class="code" href="class_easylocal__HillClimbing.html#b3">01147</a>   <font class="keywordtype">bool</font> HillClimbing&lt;Input,State,Move&gt;::StopCriterion()<font class="keyword"></font>
01148 <font class="keyword">  </font>{ <font class="keywordflow">return</font> number_of_iterations - iteration_of_best &gt;= max_idle_iteration; }
01149 
01154   template &lt;class Input, class State, class Move&gt;
<a name="l01155"></a><a class="code" href="class_easylocal__HillClimbing.html#b4">01155</a>   <font class="keywordtype">bool</font> HillClimbing&lt;Input,State,Move&gt;::AcceptableMove()<font class="keyword"></font>
01156 <font class="keyword">  </font>{ <font class="keywordflow">return</font> current_move_cost &lt;= 0; }
01157 
01162   template &lt;class Input, class State, class Move&gt;
<a name="l01163"></a><a class="code" href="class_easylocal__HillClimbing.html#b5">01163</a>   <font class="keywordtype">void</font> HillClimbing&lt;Input,State,Move&gt;::StoreMove()<font class="keyword"></font>
01164 <font class="keyword">  </font>{ 
01165     <font class="keywordflow">if</font> (fabs(current_move_cost) &lt; EPS)
01166       {
01167         iteration_of_best = number_of_iterations;
01168       }
01169   }
01170 
01176   template &lt;class Input, class State, class Move&gt;
<a name="l01177"></a><a class="code" href="class_easylocal__HillClimbing.html#a0">01177</a>   <font class="keywordtype">void</font> HillClimbing&lt;Input,State,Move&gt;::Print(std::ostream &amp; os)<font class="keyword"> const</font>
01178 <font class="keyword">  </font>{ 
01179     MoveRunner&lt;Input,State,Move&gt;::Print(os);
01180     os &lt;&lt; <font class="stringliteral">"PATAMETERS: "</font> &lt;&lt; std::endl;
01181     os &lt;&lt; <font class="stringliteral">"  Max idle iteration : "</font> &lt;&lt; max_idle_iteration &lt;&lt; std::endl;
01182     os &lt;&lt; <font class="stringliteral">"  Max iteration : "</font> &lt;&lt; max_iteration &lt;&lt; std::endl;
01183     os &lt;&lt; <font class="stringliteral">"RESULTS : "</font> &lt;&lt; std::endl;
01184     os &lt;&lt; <font class="stringliteral">"  Number of iterations : "</font> &lt;&lt; number_of_iterations &lt;&lt; std::endl;
01185     os &lt;&lt; <font class="stringliteral">"  Iteration of best : "</font> &lt;&lt; iteration_of_best &lt;&lt; std::endl;
01186     os &lt;&lt; <font class="stringliteral">"  Current state [cost: "</font> 
01187        &lt;&lt; current_state_cost &lt;&lt; <font class="stringliteral">"] "</font> &lt;&lt; std::endl;
01188     os &lt;&lt; current_state &lt;&lt; std::endl;
01189     os &lt;&lt; std::endl;
01190   }
01191 
01192   <font class="comment">// Steepest Descent</font>
01193 
01202   template &lt;class Input, class State, class Move&gt;
<a name="l01203"></a><a class="code" href="class_easylocal__SteepestDescent.html#b0">01203</a>   SteepestDescent&lt;Input,State,Move&gt;::SteepestDescent(StateManager&lt;Input,State&gt;* s, NeighborhoodExplorer&lt;Input,State,Move&gt;* ne, Input* in)
01204     : MoveRunner&lt;Input,State,Move&gt;(s, ne, in, "Runner name", "Steepest Descent")
01205   {}
01206 
01210   template &lt;class Input, class State, class Move&gt;   
<a name="l01211"></a><a class="code" href="class_easylocal__SteepestDescent.html#b5">01211</a>   <font class="keywordtype">void</font> SteepestDescent&lt;Input,State,Move&gt;::SelectMove()<font class="keyword"> </font>
01212 <font class="keyword">  </font>{ current_move_cost = p_nhe-&gt;BestMove(current_state,current_move); }
01213 
01218   template &lt;class Input, class State, class Move&gt;
<a name="l01219"></a><a class="code" href="class_easylocal__SteepestDescent.html#b1">01219</a>   <font class="keywordtype">void</font> SteepestDescent&lt;Input,State,Move&gt;::InitializeRun()<font class="keyword"></font>
01220 <font class="keyword">  </font>{ 
01221     MoveRunner&lt;Input,State,Move&gt;::InitializeRun(); 
01222     current_move_cost = -1; <font class="comment">// needed for passing the first time </font>
01223                             <font class="comment">// the StopCriterion test</font>
01224   }
01225 
01229   template &lt;class Input, class State, class Move&gt;
<a name="l01230"></a><a class="code" href="class_easylocal__SteepestDescent.html#b3">01230</a>   <font class="keywordtype">bool</font> SteepestDescent&lt;Input,State,Move&gt;::StopCriterion()<font class="keyword"></font>
01231 <font class="keyword">  </font>{ <font class="keywordflow">return</font> current_move_cost &gt;= 0; }
01232 
01236   template &lt;class Input, class State, class Move&gt;
<a name="l01237"></a><a class="code" href="class_easylocal__SteepestDescent.html#b4">01237</a>   <font class="keywordtype">bool</font> SteepestDescent&lt;Input,State,Move&gt;::AcceptableMove()<font class="keyword"></font>
01238 <font class="keyword">  </font>{ <font class="keywordflow">return</font> current_move_cost &lt; 0; }
01239 
01244   template &lt;class Input, class State, class Move&gt;
<a name="l01245"></a><a class="code" href="class_easylocal__SteepestDescent.html#b2">01245</a>   <font class="keywordtype">void</font> SteepestDescent&lt;Input,State,Move&gt;::TerminateRun()<font class="keyword"></font>
01246 <font class="keyword">  </font>{ 
01247     best_state = current_state;
01248     best_state_cost = current_state_cost;
01249   }
01250   
01256   template &lt;class Input, class State, class Move&gt;
<a name="l01257"></a><a class="code" href="class_easylocal__SteepestDescent.html#a0">01257</a>   <font class="keywordtype">void</font> SteepestDescent&lt;Input,State,Move&gt;::Print(std::ostream &amp; os)<font class="keyword"> const</font>
01258 <font class="keyword">  </font>{  
01259     MoveRunner&lt;Input,State,Move&gt;::Print(os);
01260     os &lt;&lt; <font class="stringliteral">"PATAMETERS: "</font> &lt;&lt; std::endl;
01261     os &lt;&lt; <font class="stringliteral">"  Max iteration : "</font> &lt;&lt; max_iteration &lt;&lt; std::endl;
01262     os &lt;&lt; <font class="stringliteral">"RESULTS : "</font> &lt;&lt; std::endl;
01263     os &lt;&lt; <font class="stringliteral">"  Number of iterations : "</font> &lt;&lt; number_of_iterations &lt;&lt; std::endl;
01264     os &lt;&lt; <font class="stringliteral">"  Current state [cost: "</font> 
01265        &lt;&lt; current_state_cost &lt;&lt; <font class="stringliteral">"] "</font> &lt;&lt; std::endl;
01266     os &lt;&lt; current_state &lt;&lt; std::endl;
01267     os &lt;&lt; std::endl;
01268   }
01269 
01270   <font class="comment">// Tabu Search</font>
01271   
01281   template &lt;class Input, class State, class Move&gt;
<a name="l01282"></a><a class="code" href="class_easylocal__TabuSearch.html#b0">01282</a>   TabuSearch&lt;Input,State,Move&gt;::TabuSearch(StateManager&lt;Input,State&gt;* s, NeighborhoodExplorer&lt;Input,State,Move&gt;* ne, TabuListManager&lt;Move&gt;* tlm, Input* in)
01283     : MoveRunner&lt;Input,State,Move&gt;(s, ne, in, "Runner name", "Tabu Search")
01284   { 
01285     <font class="keywordflow">if</font> (in != NULL)
01286       best_state.SetInput(in);
01287         
01288     <a class="code" href="class_easylocal__TabuSearch.html#b1">SetTabuListManager</a>(tlm); 
01289     p_pm = tlm;
01290     p_nhe-&gt;SetProhibitionManager(p_pm);
01291   }
01292 
01298   template &lt;class Input, class State, class Move&gt;
<a name="l01299"></a><a class="code" href="class_easylocal__TabuSearch.html#a2">01299</a>   <font class="keywordtype">void</font> TabuSearch&lt;Input,State,Move&gt;::SetInput(Input* in)<font class="keyword"> </font>
01300 <font class="keyword">  </font>{ 
01301     MoveRunner&lt;Input,State,Move&gt;::SetInput(in);
01302     best_state.SetInput(in); 
01303   }
01304 
01308   template &lt;class Input, class State, class Move&gt;
<a name="l01309"></a><a class="code" href="class_easylocal__TabuSearch.html#a0">01309</a>   <font class="keywordtype">void</font> TabuSearch&lt;Input,State,Move&gt;::ReadParameters()<font class="keyword"></font>
01310 <font class="keyword">  </font>{
01311     <font class="keywordtype">int</font> min_tabu, max_tabu;
01312     std::cout &lt;&lt; <font class="stringliteral">"TABU SEARCH -- INPUT PARAMETERS"</font> &lt;&lt; std::endl;
01313     std::cout &lt;&lt; <font class="stringliteral">"Length of the tabu list (min,max): "</font>;
01314     std::cin &gt;&gt; min_tabu &gt;&gt; max_tabu;
01315     p_pm-&gt;SetLength(min_tabu,max_tabu);
01316     std::cout &lt;&lt; <font class="stringliteral">"Number of idle iterations: "</font>;
01317     std::cin &gt;&gt; max_idle_iteration;
01318   }
01319 
01327   template &lt;class Input, class State, class Move&gt;
<a name="l01328"></a><a class="code" href="class_easylocal__TabuSearch.html#b1">01328</a>   <font class="keywordtype">void</font> TabuSearch&lt;Input,State,Move&gt;::SetTabuListManager(TabuListManager&lt;Move&gt;* tlm, <font class="keywordtype">int</font> min_tabu, <font class="keywordtype">int</font> max_tabu)<font class="keyword"></font>
01329 <font class="keyword">  </font>{ 
01330     p_pm = tlm;
01331     <font class="keywordflow">if</font> (max_tabu != 0) <font class="comment">// if min_tabu and max_tabu are properly set</font>
01332       p_pm-&gt;SetLength(min_tabu,max_tabu);
01333     p_nhe-&gt;SetProhibitionManager(p_pm);
01334   }
01335 
01336 
01341   template &lt;class Input, class State, class Move&gt;
<a name="l01342"></a><a class="code" href="class_easylocal__TabuSearch.html#b2">01342</a>   <font class="keywordtype">void</font> TabuSearch&lt;Input,State,Move&gt;::InitializeRun()<font class="keyword"></font>
01343 <font class="keyword">  </font>{
01344     MoveRunner&lt;Input,State,Move&gt;::InitializeRun(); 
01345     assert(max_idle_iteration &gt; 0);
01346     p_pm-&gt;Clean();
01347   }
01348 
01353   template &lt;class Input, class State, class Move&gt;
<a name="l01354"></a><a class="code" href="class_easylocal__TabuSearch.html#b4">01354</a>   <font class="keywordtype">void</font> TabuSearch&lt;Input,State,Move&gt;::SelectMove()<font class="keyword"> </font>
01355 <font class="keyword">  </font>{ current_move_cost = p_nhe-&gt;BestNonProhibitedMove(current_state, current_move, current_state_cost, best_state_cost); }
01356 
01361   template &lt;class Input, class State, class Move&gt;  
<a name="l01362"></a><a class="code" href="class_easylocal__TabuSearch.html#b3">01362</a>   <font class="keywordtype">bool</font> TabuSearch&lt;Input,State,Move&gt;::StopCriterion()<font class="keyword"></font>
01363 <font class="keyword">  </font>{ <font class="keywordflow">return</font> number_of_iterations - iteration_of_best &gt;= max_idle_iteration; }
01364 
01370   template &lt;class Input, class State, class Move&gt;  
<a name="l01371"></a><a class="code" href="class_easylocal__TabuSearch.html#b5">01371</a>   <font class="keywordtype">bool</font> TabuSearch&lt;Input,State,Move&gt;::AcceptableMove()<font class="keyword"> </font>{ <font class="keywordflow">return</font> <font class="keyword">true</font>; }
01372 
01373   
01379   template &lt;class Input, class State, class Move&gt;  
<a name="l01380"></a><a class="code" href="class_easylocal__TabuSearch.html#a3">01380</a>   <font class="keywordtype">void</font> TabuSearch&lt;Input,State,Move&gt;::SetParameters(<font class="keyword">const</font> ParameterBox&amp; pb)<font class="keyword"></font>
01381 <font class="keyword">  </font>{
01382     <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> min_tabu, max_tabu;
01383     MoveRunner&lt;Input,State,Move&gt;::SetParameters(pb);
01384     pb.Get(<font class="stringliteral">"min tenure"</font>, min_tabu);
01385     pb.Get(<font class="stringliteral">"max tenure"</font>, max_tabu);
01386     p_pm-&gt;SetLength(min_tabu,max_tabu);
01387   }
01388 
01

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -