Heuristics and Metaheuristics are two terms, which are widely used in computer science. The definitions of the terms are unclear and the distinction between them vague. So in the post, I try to present my understanding of the same. The material provided below is a collection from different sources of the Internet.
Heuristics – For a given problem, when finding a solution through exhaustive search is impractical, we use a heuristic to find a solution. Heuristics can be “good guess” from the solution space. Heuristics are speedy and find an approximate solution. Heuristic solutions are found by trading optimality, completeness, accuracy and/or processing speed. Heuristics are often problem-dependent, that is, you define and heuristic for a given problem. A heuristic exploits problem-dependent information to find a ‘good enough’ solution to an specific problem
Metaheuristics – Metaheuristics make few assumptions about the optimization problem being solved, and so they usable for a variety of problems. Compared to simpler heuristics, metaheuristics are more abstract procedures that use low-level heuristics; thus, metaheuristics use concrete heuristics (or algorithms). Metaheuristics do not guarantee that a globally optimal solution can be found on some class of problems. Metaheuristics are problem-independent techniques that can be applied to a broad range of problems. A metaheuristic knows nothing about the problem it will be applied, it can treat functions as black boxes. Metaheuristics are, like design patterns, general algorithmic ideas that can be applied to a broad range of problems. While there is no commonly accepted definition for the term metaheuristic, there are properties that characterize most metaheuristics:
- Metaheuristics are strategies that guide the search process.
- The goal is to efficiently explore the search space in order to find near–optimal solutions.
- Techniques which constitute metaheuristic algorithms range from simple local search procedures to complex learning processes.
- Metaheuristic algorithms are approximate and usually non-deterministic.
- Metaheuristics are not problem-specific.