Algorithm ya Utafutaji Nasibu (Random Search) katika C++- Maelezo, Mfano na Msimbo

Kanuni ya Utafutaji Nasibu ni mbinu ya utafutaji inayotegemea kuchagua nasibu seti ya suluhu kutoka kwa nafasi ya utafutaji na kuangalia kama zinaweza kutatua tatizo. Mbinu hii hutumiwa mara nyingi wakati hakuna taarifa maalum au mkakati wa kuongoza utafutaji.

Inavyofanya kazi

  1. Uanzishaji: Anza na seti ya suluhu za awali zilizozalishwa bila mpangilio.
  2. Tathmini: Tathmini ubora wa kila suluhisho kulingana na utendakazi lengwa au vigezo vya tathmini.
  3. Uteuzi: Chagua kikundi kidogo cha suluhu bora zaidi kutoka kwa seti kulingana na uwezekano au uteuzi wa nasibu.
  4. Majaribio: Jaribu ikiwa suluhu zilizochaguliwa zinaweza kutatua tatizo.
  5. Rudia: Rudia kupitia hatua ya 2 hadi 4 hadi matokeo ya kuridhisha yapatikane au idadi iliyobainishwa ya marudio ifikiwe.

Mfano: Kuboresha Fibonacci Kazi

Fikiria tatizo la uboreshaji la Fibonacci chaguo za kukokotoa F(x) = F(x-1) + F(x-2) pamoja na F(0) = 0, F(1) = 1. Tunataka kupata thamani ya x ambayo kwayo F(x) imekuzwa. Mbinu ya Utafutaji Nasibu inaweza kuchagua thamani za x kwa nasibu, kukokotoa Fibonacci thamani katika kila x, na kuchagua thamani ya x inayolingana na Fibonacci thamani ya juu zaidi iliyopatikana.

Mfano wa Msimbo katika 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;  
}  

Katika mfano huu, tunatumia Mbinu ya Utafutaji Nasibu ili kuboresha Fibonacci utendakazi. Tunachagua thamani za x kwa nasibu, kukokotoa Fibonacci thamani katika kila x, na kisha kuchagua thamani ya x inayolingana na Fibonacci thamani ya juu zaidi tuliyokokotoa.