خوارزمية البحث التطوري (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 العشوائية ، ونطورها عبر الأجيال من خلال اختيار أفضل الأفراد وتطبيق عمليات التبادل والطفرات.