Algoritma Pencarian Evolusioner (Evolutionary Search) di C++- Penjelasan, Contoh, dan Kode

Algoritma Evolutionary Search adalah metode optimasi berdasarkan mekanisme evolusi alami. Algoritma ini mensimulasikan proses evolusi individu dalam suatu populasi lintas generasi untuk menemukan solusi terbaik dari suatu masalah.

Bagaimana itu bekerja

  1. Inisialisasi Populasi: Buat populasi awal dari individu yang dihasilkan secara acak.
  2. Evaluasi: Mengevaluasi kualitas setiap individu dalam populasi berdasarkan fungsi objektif atau kriteria evaluasi.
  3. Seleksi: Pilih subset individu terbaik dari populasi saat ini berdasarkan probabilitas atau kriteria seleksi.
  4. Evolusi: Buat generasi baru dengan menerapkan operasi persilangan dan mutasi pada individu terpilih.
  5. Iterasi: Ulangi langkah 2 hingga 4 selama beberapa generasi hingga solusi yang memuaskan tercapai atau sejumlah iterasi yang telah ditentukan tercapai.

Contoh: Mengoptimalkan Fibonacci Fungsi menggunakan Evolutionary Search

Perhatikan masalah optimisasi fungsi Fibonacci F(x) = F(x-1) + F(x-2) dengan F(0) = 0, F(1) = 1. Kita ingin mencari nilai x yang F(x) dimaksimalkan. Metode Evolutionary Search dapat menghasilkan populasi nilai x acak, mengembangkannya lintas generasi untuk menemukan nilai x optimal.

Contoh Kode di 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 metode Evolutionary Search untuk mengoptimalkan Fibonacci fungsi. Kami menghasilkan populasi nilai x acak, mengembangkannya dari generasi ke generasi dengan memilih individu terbaik dan menerapkan operasi persilangan dan mutasi.