A hyper-heuristic is a search methodology or learning mechanism for selecting or generating heuristics to solve computationally difficult problems. A hyper-heuristic operates on a search space formed by heuristics or heuristic components rather than solutions, directly.

A goal of hyper-heuristic research is to raise the level of generality of search methods by providing high level strategies, and associated directly-usable software components, that are useful across different problem domains rather than for a single one. Hyper-heuristics Flexible framework (HyFlex) is an interface defining a set of communication methods between the problem domain related and solver components to achieve this purpose. HyFlex is a tool for researchers as well as practitioners to develop new cross-domain solving methods and solve their problems with minimal effort.

A crucial aspect of hyper-heuristic research is that it should make full use of machine learning and other methods. In modern terminology, this may now be phrased as the usage of data science techniques in order to control and generate (meta)heuristics.

General Description

HyFlex (Hyper-heuristics Flexible framework) is a  framework for the implementation and comparison of different iterative general-purpose heuristic search algorithms (also called hyper-heuristics). The framework appeals to modularity and the idea of decomposing a heuristic search algorithm into two main parts:

  1. A general-purpose part: the competing algorithms or hyper-heuristics.
  2. The problem-specific parts: provided by the HyFlex framework.

In the hyper-heuristics literature, this idea is also referred to as the domain barrier  between the low-level heuristics and the hyper-heuristic.

Fig 1. Modularity of heuristic search algorithms. Separation between the problem-specific and the general-purpose parts, both of which are reusable and interchangeable through the HyFlex interface.

Fig. 2. The hyper-heuristic framework featuring the domain barrier, the hyper-heuristic layer and the problem domain layer.