Algorithme de recherche aléatoire (Random Search) en C++- Explication, exemple et code

L'algorithme de recherche aléatoire est une méthode de recherche basée sur la sélection aléatoire d'un ensemble de solutions dans l'espace de recherche et sur la vérification de leur capacité à résoudre le problème. Cette approche est souvent utilisée lorsqu'il n'y a pas d'information ou de stratégie spécifique pour guider la recherche.

Comment ça fonctionne

  1. Initialisation : commencer avec un ensemble de solutions initiales généré aléatoirement.
  2. Évaluation : évaluer la qualité de chaque solution en fonction de la fonction objective ou des critères d'évaluation.
  3. Sélection : sélectionnez un sous-ensemble des meilleures solutions de l'ensemble en fonction des probabilités ou de la sélection aléatoire.
  4. Test: Testez si les solutions sélectionnées sont capables de résoudre le problème.
  5. Répéter : Itérer à travers les étapes 2 à 4 jusqu'à ce qu'un résultat satisfaisant soit obtenu ou qu'un nombre prédéfini d'itérations soit atteint.

Exemple : Optimisation de la Fibonacci fonction

Considérons le problème d'optimisation de la Fibonacci fonction F(x) = F(x-1) + F(x-2) avec F(0) = 0, F(1) = 1. On veut trouver la valeur de x pour laquelle F(x) est maximisé. La méthode de recherche aléatoire peut sélectionner au hasard des valeurs de x, calculer la Fibonacci valeur à chaque x et choisir la valeur de x correspondant à la Fibonacci valeur la plus élevée obtenue.

Exemple de code en C++

#include <iostream>  
#include <cstdlib>  
#include <ctime>  
  
int fibonacci(int n) {  
    if(n <= 0) return 0;  
    if(n == 1) return 1;  
    return fibonacci(n- 1) + fibonacci(n- 2);  
}  
  
int randomSearchFibonacci(int maxIterations) {  
    int bestX = 0;  
    int bestValue = 0;  
  
    srand(time(0));  
  
    for(int i = 0; i < maxIterations; ++i) {  
        int x = rand() % maxIterations;  
        int value = fibonacci(x);  
        if(value > bestValue) {  
            bestValue = value;  
            bestX = x;  
        }  
    }  
  
    return bestX;  
}  
  
int main() {  
    int maxIterations = 20;  
    int result = randomSearchFibonacci(maxIterations);  
  
    std::cout << "Optimal x for maximum Fibonacci value: " << result << std::endl;  
  
    return 0;  
}  

Dans cet exemple, nous utilisons la méthode Random Search pour optimiser la Fibonacci fonction. Nous sélectionnons au hasard des valeurs de x, calculons la Fibonacci valeur à chaque x, puis choisissons la valeur de x correspondant à la Fibonacci valeur la plus élevée que nous avons calculée.