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<Input,State,Move>::GetCurrentState()<font class="keyword"> </font>
00854 <font class="keyword"> </font>{ <font class="keywordflow">return</font> current_state; }
00855
00861 template <class Input, class State, class Move>
<a name="l00862"></a><a class="code" href="class_easylocal__MoveRunner.html#a5">00862</a> fvalue MoveRunner<Input,State,Move>::CurrentStateCost()<font class="keyword"> </font>
00863 <font class="keyword"> </font>{ <font class="keywordflow">return</font> current_state_cost; }
00864
00870 template <class Input, class State, class Move>
<a name="l00871"></a><a class="code" href="class_easylocal__MoveRunner.html#a6">00871</a> State MoveRunner<Input,State,Move>::GetBestState()<font class="keyword"> </font>
00872 <font class="keyword"> </font>{ <font class="keywordflow">return</font> best_state; }
00873
00879 template <class Input, class State, class Move>
<a name="l00880"></a><a class="code" href="class_easylocal__MoveRunner.html#a7">00880</a> fvalue MoveRunner<Input,State,Move>::BestStateCost()<font class="keyword"> </font>
00881 <font class="keyword"> </font>{ <font class="keywordflow">return</font> best_state_cost; }
00882
00887 template <class Input, class State, class Move>
<a name="l00888"></a><a class="code" href="class_easylocal__MoveRunner.html#a8">00888</a> <font class="keywordtype">void</font> MoveRunner<Input,State,Move>::ComputeCost()<font class="keyword"> </font>
00889 <font class="keyword"> </font>{ current_state_cost = p_sm->CostFunction(current_state); }
00890
00896 template <class Input, class State, class Move>
<a name="l00897"></a><a class="code" href="class_easylocal__MoveRunner.html#a9">00897</a> <font class="keywordtype">bool</font> MoveRunner<Input,State,Move>::LowerBoundReached()<font class="keyword"> </font>
00898 <font class="keyword"> </font>{ <font class="keywordflow">return</font> current_state_cost == 0; }
00899
00905 template <class Input, class State, class Move>
<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<Input,State,Move>::NumberOfIterations()<font class="keyword"> const </font>
00907 <font class="keyword"> </font>{ <font class="keywordflow">return</font> number_of_iterations; }
00908
00914 template <class Input, class State, class Move>
<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<Input,State,Move>::MaxIteration()<font class="keyword"> const </font>
00916 <font class="keyword"> </font>{ <font class="keywordflow">return</font> max_iteration; }
00917
00922 template <class Input, class State, class Move>
<a name="l00923"></a><a class="code" href="class_easylocal__MoveRunner.html#a12">00923</a> <font class="keywordtype">void</font> MoveRunner<Input,State,Move>::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 <class Input, class State, class Move>
<a name="l00932"></a><a class="code" href="class_easylocal__MoveRunner.html#a16">00932</a> <font class="keywordtype">void</font> MoveRunner<Input,State,Move>::SetParameters(<font class="keyword">const</font> ParameterBox& 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 <class Input, class State, class Move>
<a name="l00942"></a><a class="code" href="class_easylocal__MoveRunner.html#a1">00942</a> <font class="keywordtype">void</font> MoveRunner<Input,State,Move>::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>() && !<a class="code" href="class_easylocal__MoveRunner.html#b6">StopCriterion</a>() && !<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 << <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 <class Input, class State, class Move>
<a name="l00967"></a><a class="code" href="class_easylocal__MoveRunner.html#b9">00967</a> <font class="keywordtype">void</font> MoveRunner<Input,State,Move>::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->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->MakeMove(current_state,current_move);
00977 <font class="preprocessor">#ifdef COST_DEBUG</font>
00978 <font class="preprocessor"></font> fvalue ncost = p_sm->CostFunction(current_state);
00979 <font class="keywordflow">if</font> (<a class="code" href="namespace_easylocal.html#a4">distance</a>(ncost,(ocost+current_move_cost)) > EPS)
00980 {
00981 std::cerr << <font class="stringliteral">"Error in computing delta_cost: "</font>
00982 << ncost-(ocost+current_move_cost) << std::endl;
00983 std::cerr << <font class="stringliteral">"Current iteration : "</font> << number_of_iterations << std::endl;
00984 std::cerr << <font class="stringliteral">"Previous state : "</font> << std::endl;
00985 std::cerr << previous_state << std::endl;
00986 std::cerr << <font class="stringliteral">"Current state : "</font> << std::endl;
00987 std::cerr << current_state << std::endl;
00988 p_nhe->PrintMoveInfo(previous_state,current_move,std::cerr);
00989 <font class="keywordtype">char</font> s[3];
00990 std::cout << <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 << number_of_iterations << <font class="stringliteral">"\t"</font> << current_state_cost << std::endl;
00997 <font class="preprocessor">#endif</font>
00998 <font class="preprocessor"></font> }
00999
01005 template <class Input, class State, class Move>
<a name="l01006"></a><a class="code" href="class_easylocal__MoveRunner.html#a2">01006</a> <font class="keywordtype">void</font> MoveRunner<Input,State,Move>::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 < 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 <class Input, class State, class Move>
<a name="l01028"></a><a class="code" href="class_easylocal__MoveRunner.html#b3">01028</a> <font class="keywordtype">void</font> MoveRunner<Input,State,Move>::ComputeMoveCost()<font class="keyword"> </font>
01029 <font class="keyword"> </font>{ current_move_cost = p_nhe->DeltaCostFunction(current_state,current_move); }
01030
01034 template <class Input, class State, class Move>
<a name="l01035"></a><a class="code" href="class_easylocal__MoveRunner.html#b4">01035</a> <font class="keywordtype">void</font> MoveRunner<Input,State,Move>::UpdateIterationCounter()<font class="keyword"> </font>
01036 <font class="keyword"> </font>{ number_of_iterations++; }
01037
01045 template <class Input, class State, class Move>
<a name="l01046"></a><a class="code" href="class_easylocal__MoveRunner.html#b5">01046</a> <font class="keywordtype">bool</font> MoveRunner<Input,State,Move>::MaxIterationExpired()<font class="keyword"> </font>
01047 <font class="keyword"> </font>{ <font class="keywordflow">return</font> number_of_iterations > max_iteration; }
01048
01053 template <class Input, class State, class Move>
<a name="l01054"></a><a class="code" href="class_easylocal__MoveRunner.html#b8">01054</a> <font class="keywordtype">bool</font> MoveRunner<Input,State,Move>::AcceptableMove()<font class="keyword"> </font>
01055 <font class="keyword"> </font>{ <font class="keywordflow">return</font> <font class="keyword">true</font>; }
01056
01060 template <class Input, class State, class Move>
<a name="l01061"></a><a class="code" href="class_easylocal__MoveRunner.html#b11">01061</a> <font class="keywordtype">void</font> MoveRunner<Input,State,Move>::UpdateStateCost()<font class="keyword"> </font>
01062 <font class="keyword"> </font>{ current_state_cost += current_move_cost; }
01063
01067 template <class Input, class State, class Move>
<a name="l01068"></a><a class="code" href="class_easylocal__MoveRunner.html#b1">01068</a> <font class="keywordtype">void</font> MoveRunner<Input,State,Move>::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 <class Input, class State, class Move>
<a name="l01092"></a><a class="code" href="class_easylocal__HillClimbing.html#b0">01092</a> HillClimbing<Input,State,Move>::HillClimbing(StateManager<Input,State>* s, NeighborhoodExplorer<Input,State,Move>* ne, Input* in)
01093 : MoveRunner<Input,State,Move>(s, ne, in, "Runner name", "Hill Climbing")
01094 {
01095 <font class="comment">// max_idle_iteration = 0; </font>
01096 }
01097
01101 template <class Input, class State, class Move>
<a name="l01102"></a><a class="code" href="class_easylocal__HillClimbing.html#a1">01102</a> <font class="keywordtype">void</font> HillClimbing<Input,State,Move>::ReadParameters()<font class="keyword"> </font>
01103 <font class="keyword"> </font>{
01104 std::cout << <font class="stringliteral">"HILL CLIMBING -- INPUT PARAMETERS"</font> << std::endl;
01105 std::cout << <font class="stringliteral">"Number of idle iterations: "</font>;
01106 std::cin >> max_idle_iteration;
01107 }
01108
01113 template <class Input, class State, class Move>
<a name="l01114"></a><a class="code" href="class_easylocal__HillClimbing.html#b6">01114</a> <font class="keywordtype">void</font> HillClimbing<Input,State,Move>::SelectMove()<font class="keyword"> </font>
01115 <font class="keyword"> </font>{
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?