Algoritma Carian Evolusi (Evolutionary Search) dalam C++- Penjelasan, Contoh dan Kod

Algoritma Evolutionary Search ialah kaedah pengoptimuman berdasarkan mekanisme evolusi semula jadi. Algoritma ini mensimulasikan proses evolusi individu dalam populasi merentas generasi untuk mencari penyelesaian terbaik bagi sesuatu masalah.

Bagaimana ia berfungsi

  1. Permulaan Populasi: Buat populasi awal individu yang dijana secara rawak.
  2. Penilaian: Menilai kualiti setiap individu dalam populasi berdasarkan fungsi objektif atau kriteria penilaian.
  3. Pemilihan: Pilih subset individu terbaik daripada populasi semasa berdasarkan kebarangkalian atau kriteria pemilihan.
  4. Evolusi: Cipta generasi baharu dengan menggunakan operasi silang dan mutasi kepada individu yang dipilih.
  5. Lelaran: Ulang langkah 2 hingga 4 dalam beberapa generasi sehingga penyelesaian yang memuaskan dicapai atau bilangan lelaran yang telah ditetapkan dicapai.

Contoh: Mengoptimumkan Fibonacci Fungsi menggunakan Carian Evolusi

Pertimbangkan masalah pengoptimuman fungsi Fibonacci F(x) = F(x-1) + F(x-2) dengan F(0) = 0, F(1) = 1. Kami ingin mencari nilai x yang mana F(x) dimaksimumkan. Kaedah Carian Evolusi boleh menjana populasi nilai x rawak, mengembangkannya merentas generasi untuk mencari nilai x optimum.

Contoh Kod dalam 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;  
}  

Dalam contoh ini, kami menggunakan kaedah Carian Evolusi untuk mengoptimumkan Fibonacci fungsi. Kami menjana populasi nilai x rawak, mengembangkannya merentas generasi dengan memilih individu terbaik dan menggunakan operasi silang dan mutasi.