Willekeurig (Random Search) zoekalgoritme in C++- uitleg, voorbeeld en code

Het Random Search-algoritme is een zoekmethode die is gebaseerd op het willekeurig selecteren van een reeks oplossingen uit de zoekruimte en controleren of ze het probleem kunnen oplossen. Deze benadering wordt vaak gebruikt wanneer er geen specifieke informatie of strategie is om de zoektocht te begeleiden.

Hoe het werkt

  1. Initialisatie: begin met een willekeurig gegenereerde reeks initiële oplossingen.
  2. Evaluatie: Evalueer de kwaliteit van elke oplossing op basis van de objectieve functie of evaluatiecriteria.
  3. Selectie: Selecteer een subset van de beste oplossingen uit de set op basis van kansen of willekeurige selectie.
  4. Testen: Test of de geselecteerde oplossingen in staat zijn om het probleem op te lossen.
  5. Herhaal: herhaal de stappen 2 tot en met 4 totdat een bevredigend resultaat is bereikt of een vooraf bepaald aantal iteraties is bereikt.

Voorbeeld: de Fibonacci functie optimaliseren

Beschouw het optimalisatieprobleem van de Fibonacci functie F(x) = F(x-1) + F(x-2) met F(0) = 0, F(1) = 1. We willen de waarde van x vinden waarvoor F(x) is gemaximaliseerd. De willekeurige zoekmethode kan willekeurig waarden van x selecteren, de Fibonacci waarde bij elke x berekenen en de waarde van x kiezen die overeenkomt met de hoogst Fibonacci verkregen waarde.

Codevoorbeeld in 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;  
}  

In dit voorbeeld gebruiken we de Random Search-methode om de Fibonacci functie te optimaliseren. We selecteren willekeurig waarden van x, berekenen de Fibonacci waarde bij elke x en kiezen vervolgens de waarde van x die overeenkomt met de hoogste Fibonacci waarde die we hebben berekend.