Algoritmu ta' Tiftix Evoluzzjonarju (Evolutionary Search) f'C++- Spjegazzjoni, Eżempju u Kodiċi

L-algoritmu ta 'Tiftix Evoluzzjonarju huwa metodu ta' ottimizzazzjoni bbażat fuq il-mekkaniżmu tal-evoluzzjoni naturali. Dan l-algoritmu jissimula l-proċess ta 'evoluzzjoni ta' individwi fi ħdan popolazzjoni madwar ġenerazzjonijiet biex tinstab l-aħjar soluzzjoni għal problema.

Kif taħdem

  1. Inizjalizzazzjoni tal-Popolazzjoni: Oħloq popolazzjoni inizjali ta 'individwi ġġenerati b'mod każwali.
  2. Evalwazzjoni: Evalwa l-kwalità ta 'kull individwu fil-popolazzjoni abbażi tal-funzjoni oġġettiva jew kriterji ta' evalwazzjoni.
  3. Għażla: Agħżel subsett tal-aħjar individwi mill-popolazzjoni attwali abbażi tal-probabbiltajiet jew kriterji tal-għażla.
  4. Evoluzzjoni: Oħloq ġenerazzjoni ġdida billi tapplika operazzjonijiet ta 'crossover u mutazzjoni għall-individwi magħżula.
  5. Iterazzjoni: Irrepeti l-passi 2 sa 4 fuq ġenerazzjonijiet multipli sakemm tinkiseb soluzzjoni sodisfaċenti jew jintlaħaq numru predefinit ta' iterazzjonijiet.

Eżempju: Ottimizzazzjoni tal- Fibonacci Funzjoni bl-użu tat-Tiftix Evoluzzjonarju

Ikkunsidra l-problema ta’ ottimizzazzjoni tal- Fibonacci funzjoni F(x) = F(x-1) + F(x-2) b’F(0) = 0, F(1) = 1. Irridu nsibu l-valur ta’ x li għalih F(x) huwa massimizzat. Il-metodu ta' Tiftix Evoluzzjonarju jista' jiġġenera popolazzjoni ta' valuri x każwali, jevolvihom fuq ġenerazzjonijiet biex isib l-aħjar valur x.

Eżempju ta' Kodiċi f'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;  
}  

F'dan l-eżempju, nużaw il-metodu ta 'Tiftix Evoluzzjonarju biex nottimizzaw il- Fibonacci funzjoni. Aħna niġġeneraw popolazzjoni ta 'valuri x każwali, nevolvuhom bejn il-ġenerazzjonijiet billi nagħżlu l-aħjar individwi u napplikaw operazzjonijiet ta' crossover u mutazzjoni.