[[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 reverting certain moves are prohibited. If the tabu tenure is sometimes higher and sometimes lower the search is more likely to take different directions and thus escape the cycling trap. 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 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 a max value. 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 parameter (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, as the values felt too high for small problems, 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). To determine even better default values requires extensive paramter tests on a number of benchmark problems of different size and is work for the future. [[Image(aspiration_default.png)]] Fig. 1 == Parameters == ||= Parameter =||= Description =|| || !AlternativeAspirationTenure || The time t that a move will be remembered for the alternative aspiration condition. If this value exceeds !MaximumIterations the alternative aspiration criterion is not used. The parameter !UseAlternativeAspiration is adapted accordingly if you change this value. || || Analyzer || The analyzers that are applied after each iteration. || || !MaximumIterations || The number of iterations that the algorithm should run. Again if this value exceeds !AlternativeAspirationTenure the parameter !UseAlternativeAspiration is adapted accordingly. || || !MaximumTabuTenure || The maximum tabu tenure. This will be preinitialized to either 8*N or 1.1*N depending on whether !UseNewTabuTenureAdaptionScheme is true or not. || || !MinimumTabuTenure || The minimum tabu tenure is unused (and set to 0) if !UseNewTabuTenureAdaptionScheme is set to true or otherwise initialized to 0.9*N. || || 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. This is useful when you want to track at which iteration the algorithm found the optimum. It should however be set to false when the optimal quality is not known. || || !UseAlternativeAspiration || True if the alternative aspiration condition should be used that takes moves that have not been made for some time above others. Enabling this will set !AlternativeAspirationTenure to a default value, disabling this option will set the tenure to the maximum integer value. || || !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.