(Evolutionary Search) C++ मा विकासवादी खोज एल्गोरिदम- व्याख्या, उदाहरण, र कोड

इभोलुसनरी खोज एल्गोरिथ्म प्राकृतिक विकासको संयन्त्रमा आधारित एक अनुकूलन विधि हो। यो एल्गोरिथ्मले समस्याको लागि उत्तम समाधान खोज्नको लागि पुस्ताहरूमा जनसंख्या भित्र व्यक्तिहरूको विकास प्रक्रियालाई अनुकरण गर्दछ।

यो कसरी काम गर्दछ

  1. जनसंख्या प्रारम्भिकरण: अनियमित रूपमा उत्पन्न व्यक्तिहरूको प्रारम्भिक जनसंख्या सिर्जना गर्नुहोस्।
  2. मूल्याङ्कन: वस्तुगत कार्य वा मूल्याङ्कन मापदण्डको आधारमा जनसंख्यामा प्रत्येक व्यक्तिको गुणस्तरको मूल्याङ्कन गर्नुहोस्।
  3. चयन: सम्भाव्यता वा चयन मापदण्डको आधारमा हालको जनसंख्याबाट उत्कृष्ट व्यक्तिहरूको उपसमूह चयन गर्नुहोस्।
  4. इभोलुसन: चयन गरिएका व्यक्तिहरूमा क्रसओभर र उत्परिवर्तन कार्यहरू लागू गरेर नयाँ पुस्ता सिर्जना गर्नुहोस्।
  5. पुनरावृत्ति: सन्तोषजनक समाधान प्राप्त नभएसम्म वा पुनरावृत्तिहरूको पूर्वनिर्धारित संख्या नपुगेसम्म चरणहरू 2 देखि 4 सम्म धेरै पुस्ताहरूमा दोहोर्याउनुहोस्।

उदाहरण: Fibonacci इभोलुसनरी खोज प्रयोग गरेर प्रकार्यलाई अनुकूलन गर्ने

Fibonacci प्रकार्य F(x) = F(x-1) + F(x-2) F(0) = 0, F(1) = 1 को अप्टिमाइजेसन समस्यालाई विचार गर्नुहोस्। हामी x को मान पत्ता लगाउन चाहन्छौं जसको लागि F(x) अधिकतम गरिएको छ। इभोलुसनरी खोज विधिले अनियमित x मानहरूको जनसंख्या उत्पन्न गर्न सक्छ, तिनीहरूलाई इष्टतम x मान फेला पार्नका लागि पुस्ताहरूमा विकसित गर्न सक्छ।

C++ मा कोड उदाहरण

#include <iostream>  
#include <vector>  
#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 evolutionSearchFibonacci(int populationSize, int numGenerations) {  
    srand(time(0));  
  
    std::vector<int> population(populationSize);  
    for(int i = 0; i < populationSize; ++i) {  
        population[i] = rand() % populationSize;  
    }  
  
    for(int gen = 0; gen < numGenerations; ++gen) {  
        int bestIndex = 0;  
        for(int i = 1; i < populationSize; ++i) {  
            if(fibonacci(population[i]) > fibonacci(population[bestIndex])) {  
                bestIndex = i;  
            }  
        }  
  
        // Crossover and mutation operations can be applied here  
  
        // Example: Replace the worst individual with the best individual  
        population[0] = population[bestIndex];  
    }  
  
    return population[0];  
}  
  
int main() {  
    int populationSize = 50;  
    int numGenerations = 100;  
    int result = evolutionSearchFibonacci(populationSize, numGenerations);  
  
    std::cout << "Optimal x for maximum Fibonacci value: " << result << std::endl;  
  
    return 0;  
}  

Fibonacci यस उदाहरणमा, हामी प्रकार्य अनुकूलन गर्न इभोलुसनरी खोज विधि प्रयोग गर्छौं । हामी यादृच्छिक x मानहरूको जनसंख्या उत्पन्न गर्छौं, उत्कृष्ट व्यक्तिहरू छनौट गरेर र क्रसओभर र उत्परिवर्तन कार्यहरू लागू गरेर तिनीहरूलाई पुस्ताहरूमा विकसित गर्छौं।