C++ میں ارتقائی تلاش (Evolutionary Search) کا الگورتھم- وضاحت، مثال اور کوڈ

ارتقائی تلاش کا الگورتھم قدرتی ارتقاء کے طریقہ کار پر مبنی ایک اصلاحی طریقہ ہے۔ یہ الگورتھم کسی مسئلے کا بہترین حل تلاش کرنے کے لیے نسل در نسل آبادی کے اندر افراد کے ارتقاء کے عمل کو نقل کرتا ہے۔

یہ کیسے کام کرتا ہے

  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 اقدار کی آبادی پیدا کرتے ہیں، بہترین افراد کو منتخب کرکے اور کراس اوور اور میوٹیشن آپریشنز کو لاگو کرکے نسل در نسل ان کو تیار کرتے ہیں۔