easylocaltemplates_cpp-source.html

来自「一个tabu search算法框架」· HTML 代码 · 共 865 行 · 第 1/5 页

HTML
865
字号
00845   }
00846 
00852   template <class Input, class State, class Move>
<a name="l00853"></a><a class="code" href="class_easylocal__MoveRunner.html#a4">00853</a>   State MoveRunner&lt;Input,State,Move&gt;::GetCurrentState()<font class="keyword"> </font>
00854 <font class="keyword">  </font>{ <font class="keywordflow">return</font> current_state; }
00855 
00861   template &lt;class Input, class State, class Move&gt;
<a name="l00862"></a><a class="code" href="class_easylocal__MoveRunner.html#a5">00862</a>   fvalue MoveRunner&lt;Input,State,Move&gt;::CurrentStateCost()<font class="keyword"> </font>
00863 <font class="keyword">  </font>{ <font class="keywordflow">return</font> current_state_cost; }
00864 
00870   template &lt;class Input, class State, class Move&gt;
<a name="l00871"></a><a class="code" href="class_easylocal__MoveRunner.html#a6">00871</a>   State MoveRunner&lt;Input,State,Move&gt;::GetBestState()<font class="keyword"> </font>
00872 <font class="keyword">  </font>{ <font class="keywordflow">return</font> best_state; }
00873 
00879   template &lt;class Input, class State, class Move&gt;
<a name="l00880"></a><a class="code" href="class_easylocal__MoveRunner.html#a7">00880</a>   fvalue MoveRunner&lt;Input,State,Move&gt;::BestStateCost()<font class="keyword"> </font>
00881 <font class="keyword">  </font>{ <font class="keywordflow">return</font> best_state_cost; }
00882 
00887   template &lt;class Input, class State, class Move&gt;
<a name="l00888"></a><a class="code" href="class_easylocal__MoveRunner.html#a8">00888</a>   <font class="keywordtype">void</font> MoveRunner&lt;Input,State,Move&gt;::ComputeCost()<font class="keyword">  </font>
00889 <font class="keyword">  </font>{ current_state_cost = p_sm-&gt;CostFunction(current_state); }
00890 
00896   template &lt;class Input, class State, class Move&gt;
<a name="l00897"></a><a class="code" href="class_easylocal__MoveRunner.html#a9">00897</a>   <font class="keywordtype">bool</font> MoveRunner&lt;Input,State,Move&gt;::LowerBoundReached()<font class="keyword"> </font>
00898 <font class="keyword">  </font>{ <font class="keywordflow">return</font> current_state_cost == 0; }
00899 
00905   template &lt;class Input, class State, class Move&gt;
<a name="l00906"></a><a class="code" href="class_easylocal__MoveRunner.html#a10">00906</a>   <font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> MoveRunner&lt;Input,State,Move&gt;::NumberOfIterations()<font class="keyword"> const </font>
00907 <font class="keyword">  </font>{ <font class="keywordflow">return</font> number_of_iterations; }
00908 
00914   template &lt;class Input, class State, class Move&gt;
<a name="l00915"></a><a class="code" href="class_easylocal__MoveRunner.html#a11">00915</a>   <font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> MoveRunner&lt;Input,State,Move&gt;::MaxIteration()<font class="keyword"> const </font>
00916 <font class="keyword">  </font>{ <font class="keywordflow">return</font> max_iteration; }
00917 
00922   template &lt;class Input, class State, class Move&gt;
<a name="l00923"></a><a class="code" href="class_easylocal__MoveRunner.html#a12">00923</a>   <font class="keywordtype">void</font> MoveRunner&lt;Input,State,Move&gt;::SetMaxIteration(<font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> max)<font class="keyword">  </font>
00924 <font class="keyword">  </font>{ max_iteration = max; }
00925 
00931   template &lt;class Input, class State, class Move&gt;
<a name="l00932"></a><a class="code" href="class_easylocal__MoveRunner.html#a16">00932</a>   <font class="keywordtype">void</font> MoveRunner&lt;Input,State,Move&gt;::SetParameters(<font class="keyword">const</font> ParameterBox&amp; pb)<font class="keyword"></font>
00933 <font class="keyword">  </font>{   
00934     pb.Get(<font class="stringliteral">"max idle iteration"</font>,max_idle_iteration);
00935     pb.Get(<font class="stringliteral">"max iteration"</font>, max_iteration);
00936   }
00937 
00941   template &lt;class Input, class State, class Move&gt;
<a name="l00942"></a><a class="code" href="class_easylocal__MoveRunner.html#a1">00942</a>   <font class="keywordtype">void</font> MoveRunner&lt;Input,State,Move&gt;::Go()<font class="keyword"></font>
00943 <font class="keyword">  </font>{ 
00944     assert(current_state_set);
00945     <a class="code" href="class_easylocal__MoveRunner.html#b1">InitializeRun</a>();
00946     <font class="keywordflow">while</font> (!<a class="code" href="class_easylocal__MoveRunner.html#b5">MaxIterationExpired</a>() &amp;&amp; !<a class="code" href="class_easylocal__MoveRunner.html#b6">StopCriterion</a>() &amp;&amp; !<a class="code" href="class_easylocal__MoveRunner.html#a9">LowerBoundReached</a>())
00947       { 
00948         <a class="code" href="class_easylocal__MoveRunner.html#b4">UpdateIterationCounter</a>();
00949         <a class="code" href="class_easylocal__MoveRunner.html#b7">SelectMove</a>();
00950 <font class="preprocessor">#ifdef TRACE_MOVES</font>
00951 <font class="preprocessor"></font>        <a class="code" href="class_easylocal__MoveRunner.html#a15">Print</a>(); std::cerr &lt;&lt; <font class="stringliteral">"press any key ... "</font>; std::cin.get();
00952 <font class="preprocessor">#endif</font>
00953 <font class="preprocessor"></font>        <font class="keywordflow">if</font> (<a class="code" href="class_easylocal__MoveRunner.html#b8">AcceptableMove</a>())
00954           { 
00955             <a class="code" href="class_easylocal__MoveRunner.html#b9">MakeMove</a>();
00956             <a class="code" href="class_easylocal__MoveRunner.html#b11">UpdateStateCost</a>();
00957             <a class="code" href="class_easylocal__MoveRunner.html#b10">StoreMove</a>();
00958           }
00959       }
00960     <a class="code" href="class_easylocal__MoveRunner.html#b2">TerminateRun</a>();
00961   }
00962 
00966   template &lt;class Input, class State, class Move&gt;
<a name="l00967"></a><a class="code" href="class_easylocal__MoveRunner.html#b9">00967</a>   <font class="keywordtype">void</font> MoveRunner&lt;Input,State,Move&gt;::MakeMove()<font class="keyword"> </font>
00968 <font class="keyword">  </font>{ 
00969 <font class="preprocessor">#ifdef TRACE_MOVES</font>
00970 <font class="preprocessor"></font>    p_nhe-&gt;PrintMoveInfo(current_state,current_move,std::cerr);
00971 <font class="preprocessor">#endif</font>
00972 <font class="preprocessor"></font><font class="preprocessor">#ifdef COST_DEBUG</font>
00973 <font class="preprocessor"></font>    fvalue ocost = current_state_cost;
00974     State previous_state = current_state;
00975 <font class="preprocessor">#endif</font>
00976 <font class="preprocessor"></font>    p_nhe-&gt;MakeMove(current_state,current_move); 
00977 <font class="preprocessor">#ifdef COST_DEBUG</font>
00978 <font class="preprocessor"></font>    fvalue ncost = p_sm-&gt;CostFunction(current_state);
00979     <font class="keywordflow">if</font> (<a class="code" href="namespace_easylocal.html#a4">distance</a>(ncost,(ocost+current_move_cost)) &gt; EPS)
00980       {
00981         std::cerr &lt;&lt; <font class="stringliteral">"Error in computing delta_cost: "</font> 
00982                   &lt;&lt; ncost-(ocost+current_move_cost) &lt;&lt; std::endl;
00983         std::cerr &lt;&lt; <font class="stringliteral">"Current iteration : "</font> &lt;&lt; number_of_iterations &lt;&lt; std::endl;
00984         std::cerr &lt;&lt; <font class="stringliteral">"Previous state : "</font> &lt;&lt; std::endl;
00985         std::cerr &lt;&lt; previous_state &lt;&lt; std::endl;
00986         std::cerr &lt;&lt; <font class="stringliteral">"Current state : "</font> &lt;&lt; std::endl;
00987         std::cerr &lt;&lt; current_state &lt;&lt; std::endl;
00988         p_nhe-&gt;PrintMoveInfo(previous_state,current_move,std::cerr);
00989         <font class="keywordtype">char</font> s[3];
00990         std::cout &lt;&lt; <font class="stringliteral">"Press enter to continue..."</font>;
00991         std::cin.getline(s,3);
00992       }
00993 <font class="preprocessor">#endif</font>
00994 <font class="preprocessor"></font><font class="preprocessor">#ifdef PLOT_DATA</font>
00995 <font class="preprocessor"></font>    assert(pos); <font class="comment">// the plot output stream must be set</font>
00996     *pos &lt;&lt; number_of_iterations &lt;&lt; <font class="stringliteral">"\t"</font> &lt;&lt; current_state_cost &lt;&lt; std::endl;
00997 <font class="preprocessor">#endif</font>
00998 <font class="preprocessor"></font>  }
00999 
01005   template &lt;class Input, class State, class Move&gt;
<a name="l01006"></a><a class="code" href="class_easylocal__MoveRunner.html#a2">01006</a>   <font class="keywordtype">void</font> MoveRunner&lt;Input,State,Move&gt;::Step(<font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> n)<font class="keyword"></font>
01007 <font class="keyword">  </font>{ 
01008     assert(current_state_set);
01009     <font class="keywordflow">for</font> (<font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> i = 0; i &lt; n; i++) 
01010       { 
01011         <a class="code" href="class_easylocal__MoveRunner.html#b4">UpdateIterationCounter</a>();
01012         <a class="code" href="class_easylocal__MoveRunner.html#b7">SelectMove</a>();
01013         <font class="keywordflow">if</font> (<a class="code" href="class_easylocal__MoveRunner.html#b8">AcceptableMove</a>())
01014           { <a class="code" href="class_easylocal__MoveRunner.html#b9">MakeMove</a>();
01015           <a class="code" href="class_easylocal__MoveRunner.html#b11">UpdateStateCost</a>();
01016           <a class="code" href="class_easylocal__MoveRunner.html#b10">StoreMove</a>();
01017           <font class="keywordflow">if</font> (<a class="code" href="class_easylocal__MoveRunner.html#a9">LowerBoundReached</a>())
01018             <font class="keywordflow">break</font>;
01019           }
01020       }
01021   }
01022 
01027   template &lt;class Input, class State, class Move&gt;
<a name="l01028"></a><a class="code" href="class_easylocal__MoveRunner.html#b3">01028</a>   <font class="keywordtype">void</font> MoveRunner&lt;Input,State,Move&gt;::ComputeMoveCost()<font class="keyword"> </font>
01029 <font class="keyword">  </font>{ current_move_cost = p_nhe-&gt;DeltaCostFunction(current_state,current_move); }
01030 
01034   template &lt;class Input, class State, class Move&gt;
<a name="l01035"></a><a class="code" href="class_easylocal__MoveRunner.html#b4">01035</a>   <font class="keywordtype">void</font> MoveRunner&lt;Input,State,Move&gt;::UpdateIterationCounter()<font class="keyword"> </font>
01036 <font class="keyword">  </font>{ number_of_iterations++; }
01037 
01045   template &lt;class Input, class State, class Move&gt;
<a name="l01046"></a><a class="code" href="class_easylocal__MoveRunner.html#b5">01046</a>   <font class="keywordtype">bool</font> MoveRunner&lt;Input,State,Move&gt;::MaxIterationExpired()<font class="keyword"> </font>
01047 <font class="keyword">  </font>{ <font class="keywordflow">return</font> number_of_iterations &gt; max_iteration; }
01048 
01053   template &lt;class Input, class State, class Move&gt;
<a name="l01054"></a><a class="code" href="class_easylocal__MoveRunner.html#b8">01054</a>   <font class="keywordtype">bool</font> MoveRunner&lt;Input,State,Move&gt;::AcceptableMove()<font class="keyword"> </font>
01055 <font class="keyword">  </font>{ <font class="keywordflow">return</font> <font class="keyword">true</font>; }
01056 
01060   template &lt;class Input, class State, class Move&gt;
<a name="l01061"></a><a class="code" href="class_easylocal__MoveRunner.html#b11">01061</a>   <font class="keywordtype">void</font> MoveRunner&lt;Input,State,Move&gt;::UpdateStateCost()<font class="keyword"> </font>
01062 <font class="keyword">  </font>{ current_state_cost += current_move_cost; }
01063 
01067   template &lt;class Input, class State, class Move&gt;
<a name="l01068"></a><a class="code" href="class_easylocal__MoveRunner.html#b1">01068</a>   <font class="keywordtype">void</font> MoveRunner&lt;Input,State,Move&gt;::InitializeRun()<font class="keyword"></font>
01069 <font class="keyword">  </font>{
01070     number_of_iterations = 0;
01071     iteration_of_best = 0;
01072     <a class="code" href="class_easylocal__MoveRunner.html#a8">ComputeCost</a>();
01073     best_state = current_state;
01074     best_state_cost = current_state_cost;
01075   }
01076 
01077   <font class="comment">// Actual Runners</font>
01078 
01079 
01080   <font class="comment">// Hill Climbing</font>
01081   
01082 
01091   template &lt;class Input, class State, class Move&gt;
<a name="l01092"></a><a class="code" href="class_easylocal__HillClimbing.html#b0">01092</a>   HillClimbing&lt;Input,State,Move&gt;::HillClimbing(StateManager&lt;Input,State&gt;* s, NeighborhoodExplorer&lt;Input,State,Move&gt;* ne, Input* in)
01093     : MoveRunner&lt;Input,State,Move&gt;(s, ne, in, "Runner name", "Hill Climbing")
01094   { 
01095     <font class="comment">//  max_idle_iteration = 0; </font>
01096   }
01097 
01101   template &lt;class Input, class State, class Move&gt;   
<a name="l01102"></a><a class="code" href="class_easylocal__HillClimbing.html#a1">01102</a>   <font class="keywordtype">void</font> HillClimbing&lt;Input,State,Move&gt;::ReadParameters()<font class="keyword"> </font>
01103 <font class="keyword">  </font>{ 
01104     std::cout &lt;&lt; <font class="stringliteral">"HILL CLIMBING -- INPUT PARAMETERS"</font> &lt;&lt; std::endl;
01105     std::cout &lt;&lt; <font class="stringliteral">"Number of idle iterations: "</font>;
01106     std::cin &gt;&gt; max_idle_iteration;
01107   }
01108   
01113   template &lt;class Input, class State, class Move&gt;   
<a name="l01114"></a><a class="code" href="class_easylocal__HillClimbing.html#b6">01114</a>   <font class="keywordtype">void</font> HillClimbing&lt;Input,State,Move&gt;::SelectMove()<font class="keyword"> </font>
01115 <font class="keyword">  </font>{ 

⌨️ 快捷键说明

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