Learn through the super-clean Baeldung Pro experience:
>> Membership and Baeldung Pro.
No ads, dark-mode and 6 months free of IntelliJ Idea Ultimate to start with.
Last updated: March 18, 2024
In this tutorial, we’ll study heuristics, metaheuristics, and probabilistic algorithms. We’ll focus on their definition, similarities, differences, and examples.
First, we’ll have a brief review on problem-solving and optimization problems in Computer Science, thus talking about the traditional techniques in these contexts. So, we’ll see particular concepts and features of heuristics, metaheuristics, and probabilistic algorithms. At last, we’ll compare them in a systematic summary.
Essentially, we use computing to solve a myriad of real-world problems.
For instance, we can employ graph theory and algorithms to define the shortest path between two specific points. Furthermore, we can calculate the best allocation of items in a bag according to size and weight.
Both scenarios previously cited are classical optimization problems in Computer Science which we call “The Travelling Salesman” and “The Knapsack Problem”, respectively.
To solve these problems, we can adopt several different strategies. Some strategies solve only a problem, while others are adjustable to tackle multiple ones.
Moreover, some strategies may find in global optima results. Other strategies, in turn, provide sub-optimal but sufficiently good outcomes.
In the last case, we can classify problem-solving strategies as exact or non-exact. Let’s take a look at this classification in the following subsection.
As previously discussed, the categories of exact and non-exact regard the probability of a problem-solving strategy getting the optimal result.
In summary, exact algorithms guarantee (with 100% probability) the achievement of the optimal solution to a given problem. Strategies such as brute-force algorithms are always exact ones.
Furthermore, we can have supporting heuristics to exact algorithms. According to the problem, we can employ heuristics to avoid bad choices and test only (and all) the promising results.
However, exact algorithms may demand more computational resources and execution time than we have to solve a problem. In such cases, non-exact strategies are the best options.
In this scenario, we work with algorithms that do not guarantee the globally optimal result. However, non-exact algorithms explore the problem in an intelligent way, thus finding good results in a feasible time with fewer resources.
So, heuristics, metaheuristics, and probabilistic algorithms are non-exact strategies. Some examples are greedy search algorithms, tabu search, and evolutionary strategies.
In the following sections, we’ll particularly see concepts and examples of heuristics, metaheuristics, and probabilistic algorithms.
A heuristic is a strategy that uses information about the problem being solved to find promising solutions.
According to the chosen heuristic for a specific problem, the objective is not necessarily finding the optimal solution but only finding a good enough solution. Heuristics based on greedy search are in this class, for example.
Other times, we can use heuristics not to find a result but to discard obviously bad results. In such a case, heuristics remove portions of the search space and test all the remaining possible results. We call these heuristics supporting heuristics.
Regardless of which heuristic we adopt, they have some common characteristics:
The following image depicts how an exact, supporting heuristic and greedy search-based heuristic tackles a simple traveling salesman problem:
In the image above, the final results are in red. So, the exact algorithm always gives globally optimal results. The exact algorithm with the supporting heuristic also found globally optimal results. At last, the heuristic may return the globally optimal result, but it depends on the parameters provided for the execution.
Similar to heuristics, metaheuristics aim to find promising results for a problem. However, the algorithm used for a metaheuristic is generic and can deal with different problems.
In this way, the characteristics of “non-measurable success” and “reasonable execution” are still the same as discussed for the heuristics. However, metaheuristics replace the principle of the problem-based design with the problem-independent design:
Famous examples of metaheuristics are genetic algorithms, particle swarm optimization, simulated annealing, and variable neighborhood search. However, of course, there exist many more.
Moreover, according to how a metaheuristic works to find results for a problem, we can divide them into three categories:
The following image shows a simple example of a traveling salesman problem being solved with a genetic algorithm, which is a population-based metaheuristic:
It is relevant to note that, in the specific case of a genetic metaheuristic, we can not infer the results by the inputs since there are stochastic operations to define when and how the intermediary results combine and modify.
We already talked about heuristic and metaheuristic algorithms which sacrifice the certainty of finding the optimal result to produce good enough results with feasible time and computational resources.
Moreover, we briefly discussed exact (also known as deterministic) algorithms that always return the optimal result for a given problem.
Probabilistic algorithms, in turn, are a class of non-exact strategies for problem-solving. However, unlike heuristics and metaheuristics, probabilistic algorithms are designed to get the optimal result.
But, probabilistic algorithms have only a high probability of finding the optimal result in a feasible time. So, these algorithms guarantee neither the optimal result nor a reduced execution time to find it.
It occurs because probabilistic algorithms employ some random elements. Thus, depending on the definition of these random elements in each execution, we can transform a complex problem into a simple one or an intractable one.
There exist three main categories of probabilistic algorithms:
Let’s consider a list of numbers and a Monte Carlo algorithm to check if there is a majority element (at least 50% + 1 occurrence) in that list. The algorithm selects a random number from the list and checks its occurrences, returning true if it is the majority number or false if it is not.
The pseudocode of the described algorithm follows:
algorithm MonteCarloMajority(numberList, lengthList):
// INPUT
// numberList = a list of numbers
// lengthList = the length of numberList
// OUTPUT
// Returns true if a randomly selected number appears more than lengthList / 2 times,
// and false otherwise
i <- RANDOM() mod lengthList
// RANDOM() returns a random number
j <- 0
c <- 0
while j < lengthList:
if numberList[i] = numberList[j]:
c <- c + 1
j <- j + 1 return c > lengthList / 2
So, if there is a majority element, the probability of returning a wrong result is less than . In this way, if we run this algorithm N times and always get false as a result, we improve its confidence and the probability of it being wrong decreases to
.
Of course, there is always a chance that a majority number exists. But, as the number of executions increases and we do not find this majority number, the probability of it existing turns negligible.
Nowadays, we use computer systems to solve multiple problems. Some problems are simple in terms of the currently available computing capabilities. In this case, we can employ exact algorithms to solve these problems, getting optimal results.
However, other problems are too complex to be solved with exact algorithms in a feasible time and using a reasonable amount of computational resources. So, we can use other classes of strategies to solve them. Examples are heuristics, metaheuristics, and probabilistic algorithms.
These other classes of algorithms can find the optimal result to a problem, like exact algorithms, but it is not guaranteed. However, these algorithms are faster and usually consume less computational resources than the exact alternatives.
The table below summarizes the characteristics of exact, heuristic, metaheuristic, and probabilistic algorithms.
| Exact Strategies | Heuristic Strategies | Metaheuritics Strategies | Probabilistic Strategies | |
|---|---|---|---|---|
| Optimal Result | Guaranteed | Not guaranteed | Not guaranteed | Not guaranteed |
| Correct Result | Guaranteed | Guaranteed | Guaranteed | Not guaranteed |
| Execution Time | Typically higher than the other alternatives | Typically fast | Tuning-dependent but typically fast | Probably fast |
| Notes | Mostly used when the optimal solution is strictly necessary | Problem-oriented algorithms | Generic algorithms adapted to solve specific problems | Three main categories: -Monte Carlo -Las Vegas -Sherwood |
In this tutorial, we studied heuristics, metaheuristics, and probabilistic strategies. At first, we briefly reviewed problem-solving in the context of computing. So, we specifically explored the characteristics of heuristics, metaheuristics, and probabilistic algorithms. Finally, we compared some characteristics of these different algorithm classes in a systematic summary.
We can conclude that non-exact strategies are crucial for solving computational problems. However, there are complex problems, and using exact algorithms to solve them is unfeasible. Thus, heuristics, metaheuristics, and probabilistic algorithms become viable options for solving these complex computational problems.