Popülasyon, fitness, seçim, crossover ve mutasyon adımlarıyla çözüm uzayında evrimsel arama yapan metasezgisel yöntemdir.
Whitley tutorial, genetic algorithms ailesini evrimden esinlenen hesaplama modelleri olarak tanımlar: potansiyel çözümler chromosome-like veri yapılarıyla kodlanır ve iyi çözümlere daha fazla üreme fırsatı verilir.
Tipik akışta başlangıç popülasyonu üretilir, her birey fitness fonksiyonuyla değerlendirilir, daha iyi bireyler seçilir, crossover ile ebeveyn parçaları birleştirilir ve mutation ile çeşitlilik korunur.
Aşağıdaki uygulamalar PDF kaynaklarındaki pseudo kod akışını modern veri yapılarıyla ifade eder. Kenar durumları görünür bırakıldığı için örnekler doğrudan test edilebilir.
1function getFitness(candidate: string, target: string): number {2 let score = 0;3 for (let i = 0; i < candidate.length; i++) { if (candidate[i] === target[i]) score++; }4 return score;5}6function crossover(parentA: string, parentB: string): string {7 const midpoint = Math.floor(Math.random() * parentA.length);8 return parentA.slice(0, midpoint) + parentB.slice(midpoint);9}10function mutate(candidate: string, rate: number, alphabet: string): string {11 const chars = [...candidate];12 for (let i = 0; i < chars.length; i++) {13 if (Math.random() < rate) { chars[i] = alphabet[Math.floor(Math.random() * alphabet.length)]; }14 }15 return chars.join('');16}17function geneticAlgorithm(target: string, alphabet = '01', size = 100, rate = 0.01): string {18 let pop: string[] = Array.from({ length: size }, () =>19 Array.from({ length: target.length }, () => alphabet[Math.floor(Math.random() * alphabet.length)]).join('')20 );21 while (true) {22 pop.sort((a, b) => getFitness(b, target) - getFitness(a, target));23 if (pop[0] === target) return pop[0];24 const nextGen: string[] = pop.slice(0, Math.ceil(size * 0.1));25 while (nextGen.length < size) {26 const parentA = pop[Math.floor(Math.random() * (size / 2))];27 const parentB = pop[Math.floor(Math.random() * (size / 2))];28 let child = crossover(parentA, parentB);29 child = mutate(child, rate, alphabet);30 nextGen.push(child);31 }32 pop = nextGen;33 }34}Hedef kromozomu ve başlangıç popülasyonunu girin. Örnek: 1111; 0000,1010,0101,1100
Hedef kromozomu ve başlangıç popülasyonunu girin. Örnek: 1111; 0000,1010,0101,1100
En İyi Durum: O(G * P * F)
Ortalama Durum: O(G * P * F)
En Kötü Durum: O(G * P * F)
O(P * L) - Bu algoritmanın karmaşıklığı belirtilmemiş.
Genetic Algorithms Algoritması ile benzer veya alternatif olarak değerlendirilebilecek diğer başlıklar:
Tek aday çözüm üzerinde sıcaklık kontrollü olasılıksal arama yapar.
Komşu çözümler arasında iyileştirme arayan metasezgisel temeldir.
TSP rotalarını lokal hamlelerle iyileştiren sezgisel yöntemdir.