[[PageOutline]] = Robust Taboo Search = == Introduction == This algorithm was first described in [ [#Tai91 Tai91] ]. It is among the most cited algorithms to solve instances of the quadratic assignment problem (QAP). There are two main differences to a "standard" tabu search: 1. The tenure of tabu elements is a random variable instead of a static value. 2. The algorithm features a long-term diversification method which favors moves that have not been performed in a long time. If a move would assign to facilities to locations that both have not been assigned to for a long number of iterations then the move is performed regardless of quality. If there are multiple of these moves in one iteration the best one is performed. The introduction of randomness in the tabu search makes the search more robust in that it can escape cycling (also see the [ReactiveTabuSearch Reactive Tabu Search]). Cycling is the behavior when the tabu search returns to the same solution over and over. The length of such a cycle is greater than the tabu tenure since during the tenure moves are prohibited. The long-term diversification helps the algorithm when it is stuck in a certain sub-space of the fitness landscape. This could happen when single elements of the solution have a high weight on the fitness function and are thus very unlikely to be moved as soon as they're arranged "optimally" with respect to a number of options. By forcing the search to move to configurations that have not been visited a long time it is able to escape such sub-spaces. == Implementation in HeuristicLab == The implementation in !HeuristicLab is closely related to the implementations given by Eric Taillard himself on his [http://mistic.heig-vd.ch/taillard/ webpage]. Taillard has given two implementations: An older one written for C++ compilers and a newer one written for C compilers. Apart from language specific differences, the two algorithms mainly differ in the aspect of tabu tenure adaption. In the C++ version the tabu tenure is set as described in the original publication as a uniformly distributed random variable between min and max. In the newer C version however the tabu tenure is set to //x^3^ * max// and rounded down with //x// being a uniformly distributed random variable in the interval (0;1]. The final interval thus is between [0;max], but skewed towards lower values. In !HeuristicLab you can choose between either adaption scheme through the option //!UseNewTabuTenureAdaptionScheme // (set it to false for the old min-max approach, true for the newer way). Apart from the approach itself some default values have also changed. In the C++ implementation the aspiration tenure (called //!AlternativeAspirationTenure //in !HeuristicLab) is set to N^2^/2, while in the C implementation it is set to 5*N^2^. In !HeuristicLab we did not use either scheme, but performed a linear regression on the parameters Taillard has given in his results tables (see Fig. 1). The regression model and thus the parameter is determined by //203*N-2274// and was lower-bounded by 100 for small N. The min and max parameters are adapted similar to the implementations (min = 0.9*N, max = 1.1*N when the old adaption scheme is used, min = 0, max = 8*N when !UseNewTabuTenureAdaptionScheme is set to true). [[Image(aspiration_default.png)]] Fig. 1 == Parameters == ||= Parameter =||= Description =|| || !AlternativeAspirationTenure || The time t that a move will be remembered for the alternative aspiration condition. || || Analyzer || The analyzers that are applied after each iteration. || || !MaximumIterations || The number of iterations that the algorithm should run. || || !MaximumTabuTenure || The maximum tabu tenure. || || !MinimumTabuTenure || The minimum tabu tenure (unused if !UseNewTabuTenureAdaptionScheme is set to true) || || Seed || The random seed used to initialize the new pseudo random number generator. || || !SetSeedRandomly || True if the random seed should be set to a random value, otherwise false. || || !TerminateOnOptimalSolution || True when the algorithm should stop if it reached a quality equal or smaller to the !BestKnownQuality. || || !UseAlternativeAspiration || True if the alternative aspiration condition should be used that takes moves that have not been made for some time above others. || || !UseNewTabuTenureAdaptionScheme || In an updated version of his implementation, Eric Taillard introduced a different way to change the tabu tenure. Instead of setting it uniformly between min and max, it will be set between 0 and max according to a right-skewed distribution. Set this option to false if you want to optimize using the earlier 1991 version, and set to true if you want to optimize using the newer version. Please note that the !MinimumTabuTenure parameter has no effect in the new version. || == References == [ [=#Tai91 Tai91] ] Taillard, E. 1991. Robust Taboo Search for the Quadratic Assignment Problem. //Parallel Computing// 17, pp. 443-455.