C++ मधील उत्क्रांती शोध (Evolutionary Search) अल्गोरिदम- स्पष्टीकरण, उदाहरण आणि कोड

उत्क्रांती शोध अल्गोरिदम ही नैसर्गिक उत्क्रांतीच्या यंत्रणेवर आधारित एक ऑप्टिमायझेशन पद्धत आहे. हा अल्गोरिदम एखाद्या समस्येसाठी सर्वोत्तम उपाय शोधण्यासाठी पिढ्यानपिढ्या लोकसंख्येतील व्यक्तींच्या उत्क्रांती प्रक्रियेचे अनुकरण करतो.

हे कसे कार्य करते

  1. लोकसंख्या आरंभ करणे: यादृच्छिकपणे व्युत्पन्न केलेल्या व्यक्तींची प्रारंभिक लोकसंख्या तयार करा.
  2. मूल्यमापन: वस्तुनिष्ठ कार्य किंवा मूल्यमापन निकषांवर आधारित लोकसंख्येतील प्रत्येक व्यक्तीच्या गुणवत्तेचे मूल्यांकन करा.
  3. निवड: संभाव्यता किंवा निवड निकषांवर आधारित वर्तमान लोकसंख्येमधून सर्वोत्तम व्यक्तींचा उपसंच निवडा.
  4. उत्क्रांती: निवडलेल्या व्यक्तींना क्रॉसओवर आणि उत्परिवर्तन ऑपरेशन्स लागू करून नवीन पिढी तयार करा.
  5. पुनरावृत्ती: समाधानकारक समाधान मिळेपर्यंत किंवा पुनरावृत्तीची पूर्वनिर्धारित संख्या गाठेपर्यंत अनेक पिढ्यांमध्ये चरण 2 ते 4 पुनरावृत्ती करा.

उदाहरण: Fibonacci उत्क्रांती शोध वापरून कार्य ऑप्टिमाइझ करणे

Fibonacci F(0) = 0, F(1) = 1 सह F(x) = F(x-1) + F(x-2) फंक्शनची ऑप्टिमायझेशन समस्या विचारात घ्या. आम्हाला 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 मूल्यांची लोकसंख्या व्युत्पन्न करतो, सर्वोत्तम व्यक्ती निवडून आणि क्रॉसओवर आणि उत्परिवर्तन ऑपरेशन्स लागू करून त्यांना पिढ्यानपिढ्या विकसित करतो.