उत्क्रांती शोध अल्गोरिदम ही नैसर्गिक उत्क्रांतीच्या यंत्रणेवर आधारित एक ऑप्टिमायझेशन पद्धत आहे. हा अल्गोरिदम एखाद्या समस्येसाठी सर्वोत्तम उपाय शोधण्यासाठी पिढ्यानपिढ्या लोकसंख्येतील व्यक्तींच्या उत्क्रांती प्रक्रियेचे अनुकरण करतो.
हे कसे कार्य करते
- लोकसंख्या आरंभ करणे: यादृच्छिकपणे व्युत्पन्न केलेल्या व्यक्तींची प्रारंभिक लोकसंख्या तयार करा.
- मूल्यमापन: वस्तुनिष्ठ कार्य किंवा मूल्यमापन निकषांवर आधारित लोकसंख्येतील प्रत्येक व्यक्तीच्या गुणवत्तेचे मूल्यांकन करा.
- निवड: संभाव्यता किंवा निवड निकषांवर आधारित वर्तमान लोकसंख्येमधून सर्वोत्तम व्यक्तींचा उपसंच निवडा.
- उत्क्रांती: निवडलेल्या व्यक्तींना क्रॉसओवर आणि उत्परिवर्तन ऑपरेशन्स लागू करून नवीन पिढी तयार करा.
- पुनरावृत्ती: समाधानकारक समाधान मिळेपर्यंत किंवा पुनरावृत्तीची पूर्वनिर्धारित संख्या गाठेपर्यंत अनेक पिढ्यांमध्ये चरण 2 ते 4 पुनरावृत्ती करा.
उदाहरण: Fibonacci उत्क्रांती शोध वापरून कार्य ऑप्टिमाइझ करणे
Fibonacci F(0) = 0, F(1) = 1 सह F(x) = F(x-1) + F(x-2) फंक्शनची ऑप्टिमायझेशन समस्या विचारात घ्या. आम्हाला 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 मूल्यांची लोकसंख्या व्युत्पन्न करतो, सर्वोत्तम व्यक्ती निवडून आणि क्रॉसओवर आणि उत्परिवर्तन ऑपरेशन्स लागू करून त्यांना पिढ्यानपिढ्या विकसित करतो.