The architecture of EasyLocal++
The problem representation belongs to the lowest level of the hierarchy and must be defined in terms of a set of Basic Data classes (computing capabilities are not required). They maintain the states of the search space, the moves, and the input/output data. The Basic Data classes are supplied to the other classes of the framework by means of template instantiation.
The local search problem is then embodied in what we call Helpers. These classes perform actions related to some specific aspects of the search, such as maintaining the states or exploring the neighborhood of a solution.
The Runners represent the algorithmic core of the framework. They are responsible for performing a run of a local search metaheuristic, starting from an initial state and leading to a final one. Each runner has many data objects for representing the state of the search (current state, best state, current move, number of iterations, ...), and it maintains links to all the helpers, which are invoked for performing problem-related tasks on its own data. Several common metaheuristics have already been implemented within EasyLocal; e.g., Hill Climbing, Simulated Annealing and Tabu Search.
The Solvers represent the external software layer of EasyLocal. They control the search by generating the initial solutions, and deciding how, and in which sequence, runners have to be activated (e.g., tandem, multistart, hybrid search). This allows, for instance, to design new combinations of basic metaheuristics and/or hybrid methods. In addition, solvers communicate with the external environment, by getting the input and delivering the output, and they are linked to one or more runners and to some of the helpers.
