OpenTS asks you to define basic elements common to all tabu searches and then performs iterations based on these elements. The key elements you must define, that is create Java classes for, are
OpenTS uses these elements to search the solution space. Given a starting, or current, solution, the move manager is asked to generate a list of moves for the iteration. OpenTS uses the objective function to determine the value of the solution that would result from each of these moves. With the help of the tabu list, OpenTS determines which move is the best, and that move operates on the starting, or current, solution which results in a new current solution. The figure below shows this process graphically.
OpenTS makes adding dynamic tabu search techniques, such as strategic oscillation or reactive tabu lists, easy through its efficient event mechanism that models Java's proven event mechanism. OpenTS fires the following events at the appropriate time:
A reactive tabu list, for example, could be attached to the tabu search as a listener (as defined by the TabuSearchListener interface) and adjust its tabu tenure based on the frequency and recency of when unimproving moves are made. Listeners are attached and removed in the same way that Sun's Java components are attached and removed. For example, if you had an OpenTS tabu search object named tabuSearch and a tabu list named tabuList that implemented TabuSearchListener, you would attach the tabu list to the tabu search with the following line:
Of course you do not need to use one of the tabu search elements as a listener. You may have a Java class that reports the progress of the tabu search instead.