[ Home | Docs | News | Resources | Download] |
GAUL Documentation: Tabu-Search |
Very Brief Tabu-Search Primer The Tabu search has been proven effective at solving many search and optimisation problems. It is a heuristic method which guides a local search procedure to explore the search space in such a way that entrapment in local minima is avoided. Unlike simple hill-climbing search techniques, but like simulated annealling, the Tabu search often moves from a current solution to one which is worse, with the expectation that this move will eventually lead to an even better solution. The basic Tabu search algorithm is illustrated below, along with a number of important terms:
In the above algorithm, N and M are both adjustable parameters. Further Information About Tabu-Search Tabu-Search Implemented in GAUL The Tabu search is implemented in GAUL and demonstrated in examples/pingpong_tabu.c and examples/pingpong_tabu2.c. The fitness evaluation function defined for use by the evolutionary algorithms is also utilised by the Tabu search routine. The local moves are generated by using the mutation operator. Note that performance may be enhanced greatly if this mutation operator contains a local search procedure, but this must be implemented by the programmer if desired. The additional parameters that are required are specified using the "ga_population_set_tabu_parameters()" function. The optimisation is initiated by the "ga_tabu()" function. ga_population_set_tabu_parameters( pop, /* population *pop */ ga_tabu_check_integer, /* GAtabu_accept tabu acceptance criterion */ 50, /* const int tabu list length */ 20 /* const int tabu neighbourhood search count */ ); The "GAtabu_accept" parameter is a function that applies the Tabu and aspiration criteria, given a single putative solution and single tabu solution. Simple functions are provided by GAUL for its built-in chromosome types. The use of custom, problem specific, versions is strongly recommended. The third and fourth parameters should be selected on a problem-by-problem basis to facilitate efficient, but effective, optimisation. They relate to M and N, respectively, in the above algorithm. ga_tabu( pop, /* population *pop */ solution, /* entity *initial */ 50 /* const int max_iterations */ ); "ga_tabu()" takes a single entity as its second argument. This is used as the initial solution. Passing NULL is valid; a NULL entity parameter causes a random solution to be generated by applying the seed operator. The initial solution will be overwritten by the results of the Tabu search procedure. |
[ BACK TO TOP | NEXT SECTION OF TUTORIAL ]
[ Home | Docs | News | Resources | Download] |
Hosted by: |
© 2002-2003, "Stewart Adcock" <stewart@linux-domain.com> All rights reserved. |
All trademarks on this page are probably owned by their respective companies. You can insert you own favourite disclaimer here. |