📄 easylocaltemplates_cpp-source.html
字号:
01116 p_nhe->RandomMove(current_state,current_move);
01117 <a class="code" href="class_easylocal__MoveRunner.html#b3">ComputeMoveCost</a>();
01118 }
01119
01124 template <class Input, class State, class Move>
<a name="l01125"></a><a class="code" href="class_easylocal__HillClimbing.html#b1">01125</a> <font class="keywordtype">void</font> HillClimbing<Input,State,Move>::InitializeRun()<font class="keyword"></font>
01126 <font class="keyword"> </font>{
01127 MoveRunner<Input,State,Move>::InitializeRun();
01128 assert(max_idle_iteration > 0);
01129 }
01130
01135 template <class Input, class State, class Move>
<a name="l01136"></a><a class="code" href="class_easylocal__HillClimbing.html#b2">01136</a> <font class="keywordtype">void</font> HillClimbing<Input,State,Move>::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 <class Input, class State, class Move>
<a name="l01147"></a><a class="code" href="class_easylocal__HillClimbing.html#b3">01147</a> <font class="keywordtype">bool</font> HillClimbing<Input,State,Move>::StopCriterion()<font class="keyword"></font>
01148 <font class="keyword"> </font>{ <font class="keywordflow">return</font> number_of_iterations - iteration_of_best >= max_idle_iteration; }
01149
01154 template <class Input, class State, class Move>
<a name="l01155"></a><a class="code" href="class_easylocal__HillClimbing.html#b4">01155</a> <font class="keywordtype">bool</font> HillClimbing<Input,State,Move>::AcceptableMove()<font class="keyword"></font>
01156 <font class="keyword"> </font>{ <font class="keywordflow">return</font> current_move_cost <= 0; }
01157
01162 template <class Input, class State, class Move>
<a name="l01163"></a><a class="code" href="class_easylocal__HillClimbing.html#b5">01163</a> <font class="keywordtype">void</font> HillClimbing<Input,State,Move>::StoreMove()<font class="keyword"></font>
01164 <font class="keyword"> </font>{
01165 <font class="keywordflow">if</font> (fabs(current_move_cost) < EPS)
01166 {
01167 iteration_of_best = number_of_iterations;
01168 }
01169 }
01170
01176 template <class Input, class State, class Move>
<a name="l01177"></a><a class="code" href="class_easylocal__HillClimbing.html#a0">01177</a> <font class="keywordtype">void</font> HillClimbing<Input,State,Move>::Print(std::ostream & os)<font class="keyword"> const</font>
01178 <font class="keyword"> </font>{
01179 MoveRunner<Input,State,Move>::Print(os);
01180 os << <font class="stringliteral">"PATAMETERS: "</font> << std::endl;
01181 os << <font class="stringliteral">" Max idle iteration : "</font> << max_idle_iteration << std::endl;
01182 os << <font class="stringliteral">" Max iteration : "</font> << max_iteration << std::endl;
01183 os << <font class="stringliteral">"RESULTS : "</font> << std::endl;
01184 os << <font class="stringliteral">" Number of iterations : "</font> << number_of_iterations << std::endl;
01185 os << <font class="stringliteral">" Iteration of best : "</font> << iteration_of_best << std::endl;
01186 os << <font class="stringliteral">" Current state [cost: "</font>
01187 << current_state_cost << <font class="stringliteral">"] "</font> << std::endl;
01188 os << current_state << std::endl;
01189 os << std::endl;
01190 }
01191
01192 <font class="comment">// Steepest Descent</font>
01193
01202 template <class Input, class State, class Move>
<a name="l01203"></a><a class="code" href="class_easylocal__SteepestDescent.html#b0">01203</a> SteepestDescent<Input,State,Move>::SteepestDescent(StateManager<Input,State>* s, NeighborhoodExplorer<Input,State,Move>* ne, Input* in)
01204 : MoveRunner<Input,State,Move>(s, ne, in, "Runner name", "Steepest Descent")
01205 {}
01206
01210 template <class Input, class State, class Move>
<a name="l01211"></a><a class="code" href="class_easylocal__SteepestDescent.html#b5">01211</a> <font class="keywordtype">void</font> SteepestDescent<Input,State,Move>::SelectMove()<font class="keyword"> </font>
01212 <font class="keyword"> </font>{ current_move_cost = p_nhe->BestMove(current_state,current_move); }
01213
01218 template <class Input, class State, class Move>
<a name="l01219"></a><a class="code" href="class_easylocal__SteepestDescent.html#b1">01219</a> <font class="keywordtype">void</font> SteepestDescent<Input,State,Move>::InitializeRun()<font class="keyword"></font>
01220 <font class="keyword"> </font>{
01221 MoveRunner<Input,State,Move>::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 <class Input, class State, class Move>
<a name="l01230"></a><a class="code" href="class_easylocal__SteepestDescent.html#b3">01230</a> <font class="keywordtype">bool</font> SteepestDescent<Input,State,Move>::StopCriterion()<font class="keyword"></font>
01231 <font class="keyword"> </font>{ <font class="keywordflow">return</font> current_move_cost >= 0; }
01232
01236 template <class Input, class State, class Move>
<a name="l01237"></a><a class="code" href="class_easylocal__SteepestDescent.html#b4">01237</a> <font class="keywordtype">bool</font> SteepestDescent<Input,State,Move>::AcceptableMove()<font class="keyword"></font>
01238 <font class="keyword"> </font>{ <font class="keywordflow">return</font> current_move_cost < 0; }
01239
01244 template <class Input, class State, class Move>
<a name="l01245"></a><a class="code" href="class_easylocal__SteepestDescent.html#b2">01245</a> <font class="keywordtype">void</font> SteepestDescent<Input,State,Move>::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 <class Input, class State, class Move>
<a name="l01257"></a><a class="code" href="class_easylocal__SteepestDescent.html#a0">01257</a> <font class="keywordtype">void</font> SteepestDescent<Input,State,Move>::Print(std::ostream & os)<font class="keyword"> const</font>
01258 <font class="keyword"> </font>{
01259 MoveRunner<Input,State,Move>::Print(os);
01260 os << <font class="stringliteral">"PATAMETERS: "</font> << std::endl;
01261 os << <font class="stringliteral">" Max iteration : "</font> << max_iteration << std::endl;
01262 os << <font class="stringliteral">"RESULTS : "</font> << std::endl;
01263 os << <font class="stringliteral">" Number of iterations : "</font> << number_of_iterations << std::endl;
01264 os << <font class="stringliteral">" Current state [cost: "</font>
01265 << current_state_cost << <font class="stringliteral">"] "</font> << std::endl;
01266 os << current_state << std::endl;
01267 os << std::endl;
01268 }
01269
01270 <font class="comment">// Tabu Search</font>
01271
01281 template <class Input, class State, class Move>
<a name="l01282"></a><a class="code" href="class_easylocal__TabuSearch.html#b0">01282</a> TabuSearch<Input,State,Move>::TabuSearch(StateManager<Input,State>* s, NeighborhoodExplorer<Input,State,Move>* ne, TabuListManager<Move>* tlm, Input* in)
01283 : MoveRunner<Input,State,Move>(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->SetProhibitionManager(p_pm);
01291 }
01292
01298 template <class Input, class State, class Move>
<a name="l01299"></a><a class="code" href="class_easylocal__TabuSearch.html#a2">01299</a> <font class="keywordtype">void</font> TabuSearch<Input,State,Move>::SetInput(Input* in)<font class="keyword"> </font>
01300 <font class="keyword"> </font>{
01301 MoveRunner<Input,State,Move>::SetInput(in);
01302 best_state.SetInput(in);
01303 }
01304
01308 template <class Input, class State, class Move>
<a name="l01309"></a><a class="code" href="class_easylocal__TabuSearch.html#a0">01309</a> <font class="keywordtype">void</font> TabuSearch<Input,State,Move>::ReadParameters()<font class="keyword"></font>
01310 <font class="keyword"> </font>{
01311 <font class="keywordtype">int</font> min_tabu, max_tabu;
01312 std::cout << <font class="stringliteral">"TABU SEARCH -- INPUT PARAMETERS"</font> << std::endl;
01313 std::cout << <font class="stringliteral">"Length of the tabu list (min,max): "</font>;
01314 std::cin >> min_tabu >> max_tabu;
01315 p_pm->SetLength(min_tabu,max_tabu);
01316 std::cout << <font class="stringliteral">"Number of idle iterations: "</font>;
01317 std::cin >> max_idle_iteration;
01318 }
01319
01327 template <class Input, class State, class Move>
<a name="l01328"></a><a class="code" href="class_easylocal__TabuSearch.html#b1">01328</a> <font class="keywordtype">void</font> TabuSearch<Input,State,Move>::SetTabuListManager(TabuListManager<Move>* 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->SetLength(min_tabu,max_tabu);
01333 p_nhe->SetProhibitionManager(p_pm);
01334 }
01335
01336
01341 template <class Input, class State, class Move>
<a name="l01342"></a><a class="code" href="class_easylocal__TabuSearch.html#b2">01342</a> <font class="keywordtype">void</font> TabuSearch<Input,State,Move>::InitializeRun()<font class="keyword"></font>
01343 <font class="keyword"> </font>{
01344 MoveRunner<Input,State,Move>::InitializeRun();
01345 assert(max_idle_iteration > 0);
01346 p_pm->Clean();
01347 }
01348
01353 template <class Input, class State, class Move>
<a name="l01354"></a><a class="code" href="class_easylocal__TabuSearch.html#b4">01354</a> <font class="keywordtype">void</font> TabuSearch<Input,State,Move>::SelectMove()<font class="keyword"> </font>
01355 <font class="keyword"> </font>{ current_move_cost = p_nhe->BestNonProhibitedMove(current_state, current_move, current_state_cost, best_state_cost); }
01356
01361 template <class Input, class State, class Move>
<a name="l01362"></a><a class="code" href="class_easylocal__TabuSearch.html#b3">01362</a> <font class="keywordtype">bool</font> TabuSearch<Input,State,Move>::StopCriterion()<font class="keyword"></font>
01363 <font class="keyword"> </font>{ <font class="keywordflow">return</font> number_of_iterations - iteration_of_best >= max_idle_iteration; }
01364
01370 template <class Input, class State, class Move>
<a name="l01371"></a><a class="code" href="class_easylocal__TabuSearch.html#b5">01371</a> <font class="keywordtype">bool</font> TabuSearch<Input,State,Move>::AcceptableMove()<font class="keyword"> </font>{ <font class="keywordflow">return</font> <font class="keyword">true</font>; }
01372
01373
01379 template <class Input, class State, class Move>
<a name="l01380"></a><a class="code" href="class_easylocal__TabuSearch.html#a3">01380</a> <font class="keywordtype">void</font> TabuSearch<Input,State,Move>::SetParameters(<font class="keyword">const</font> ParameterBox& 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<Input,State,Move>::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->SetLength(min_tabu,max_tabu);
01387 }
01388
01
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -