Algorithm ya Utafutaji wa Mageuzi ni mbinu ya uboreshaji kulingana na utaratibu wa mageuzi asilia. Kanuni hii huiga mchakato wa mageuzi wa watu binafsi katika idadi ya watu katika vizazi ili kupata suluhu bora la tatizo.
Inavyofanya kazi
- Uanzishaji wa Idadi ya Watu: Unda idadi ya awali ya watu waliozalishwa bila mpangilio.
- Tathmini: Tathmini ubora wa kila mtu katika idadi ya watu kulingana na kazi lengo au vigezo vya tathmini.
- Uteuzi: Chagua kikundi kidogo cha watu bora zaidi kutoka kwa idadi ya sasa kulingana na uwezekano au vigezo vya uteuzi.
- Mageuzi: Unda kizazi kipya kwa kutumia shughuli za mabadiliko na mabadiliko kwa watu waliochaguliwa.
- Kurudia: Rudia hatua 2 hadi 4 kwa vizazi vingi hadi suluhu ya kuridhisha ipatikane au idadi iliyobainishwa ya marudio ifikiwe.
Mfano: Kuboresha Fibonacci Kazi kwa kutumia Utafutaji wa Mageuzi
Fikiria tatizo la uboreshaji la Fibonacci chaguo za kukokotoa F(x) = F(x-1) + F(x-2) pamoja na F(0) = 0, F(1) = 1. Tunataka kupata thamani ya x ambayo kwayo F(x) imekuzwa. Mbinu ya Utafutaji wa Mageuzi inaweza kuzalisha idadi ya thamani za x nasibu, kuzibadilisha katika vizazi kadhaa ili kupata thamani mojawapo ya x.
Mfano wa Msimbo katika 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;
}
Katika mfano huu, tunatumia mbinu ya Utafutaji wa Mageuzi ili kuboresha Fibonacci utendakazi. Tunazalisha idadi ya thamani za x nasibu, kuzibadilisha katika vizazi kwa kuchagua watu bora zaidi na kutumia shughuli za mabadiliko na mabadiliko.