În general
Algoritmii genetici sunt buni la rezolvarea problemelor care includ stabilirea orarului și programarea. Aceștia au fost, de asemenea, aplicați în inginerie. Aceștia sunt adesea utilizați pentru a rezolva probleme de optimizare globală.
Ca regulă generală, algoritmii genetici ar putea fi utili în domenii cu probleme care au un peisaj de fitness complex, deoarece amestecul este conceput pentru a îndepărta populația de optimi locali în care un algoritm tradițional de urcare pe dealuri ar putea rămâne blocat. Operatorii de încrucișare utilizați în mod obișnuit nu pot modifica nicio populație uniformă. Mutația singură poate asigura ergodicitatea procesului general al algoritmului genetic (văzut ca un lanț Markov).
Exemple de probleme rezolvate cu ajutorul algoritmilor genetici includ: oglinzi proiectate pentru a canaliza lumina soarelui către un colector solar, antene proiectate pentru a capta semnale radio în spațiu, metode de mers pe jos pentru figuri de calculator, proiectarea optimă a corpurilor aerodinamice în câmpuri de curgere complexe.
În Manualul său de proiectare a algoritmilor, Skiena ne sfătuiește să nu folosim algoritmi genetici pentru orice sarcină: "Este destul de nefiresc să modelăm aplicațiile în termeni de operatori genetici precum mutația și încrucișarea pe șiruri de biți. Pseudobiologia adaugă un alt nivel de complexitate între tine și problema ta. În al doilea rând, algoritmii genetici durează foarte mult timp în cazul problemelor non-triviale. [...] Analogia cu evoluția - unde progresul semnificativ necesită [sic] milioane de ani - poate fi foarte potrivită. [...] Nu am întâlnit niciodată o problemă în care algoritmii genetici să mi se pară calea potrivită pentru a o ataca. Mai mult, nu am văzut niciodată rezultate de calcul raportate cu ajutorul algoritmilor genetici care să mă fi impresionat favorabil. Rămâneți la recoacerea simulată pentru nevoile dumneavoastră de voodoo de căutare euristică."
Jocuri de masă
Jocurile de societate sunt o parte foarte relevantă a domeniului algoritmilor genetici aplicați la problemele din teoria jocurilor. O mare parte din primele lucrări privind inteligența computațională și jocurile au fost orientate către jocurile de societate clasice, cum ar fi tic-tac-toe,[3] șah și dame.[4] În prezent, în majoritatea cazurilor, jocurile de societate pot fi jucate de un calculator la un nivel mai ridicat decât cel al celor mai buni oameni, chiar și cu ajutorul tehnicilor de căutare exhaustivă oarbă. Go este o excepție notabilă de la această tendință și a rezistat până în prezent atacurilor mașinilor. Cei mai buni jucători de Go pe calculator joacă acum la nivelul unui bun începător.[5][6] Se spune că strategia de Go se bazează în mare măsură pe recunoașterea modelelor, și nu doar pe analiza logică, ca în cazul șahului și al altor jocuri mai independente de piese. Factorul enorm de ramificare efectivă necesar pentru găsirea unor soluții de înaltă calitate restricționează foarte mult capacitatea de anticipare care poate fi utilizată în cadrul unei căutări de secvențe de mutări.
Jocuri pe calculator
Algoritmul genetic poate fi utilizat în jocurile pe calculator pentru a crea inteligență artificială (calculatorul joacă împotriva ta). Acest lucru permite o experiență de joc mai realistă; dacă un jucător uman poate găsi o secvență de pași care să ducă întotdeauna la succes chiar și atunci când se repetă în diferite jocuri, nu mai poate exista nicio provocare. În schimb, dacă o tehnică de învățare, cum ar fi un algoritm genetic pentru un strateg, poate evita repetarea greșelilor din trecut, jocul va fi mai ușor de jucat.
Algoritmii genetici au nevoie de următoarele părți:
- O metodă de reprezentare a provocării în termeni de soluție (de exemplu, dirijarea soldaților într-un atac într-un joc de strategie)
- O funcție de fitness sau de evaluare pentru a determina calitatea unei instanțe (de exemplu, măsurarea pagubelor provocate adversarului în cadrul unui astfel de atac).
Funcția de fitness acceptă o instanțiere modificată a unei entități și îi măsoară calitatea. Această funcție este adaptată la domeniul problemei. În multe cazuri, în special cele care implică optimizarea codului, funcția de fitness poate fi pur și simplu o funcție de sincronizare a sistemului. Odată ce sunt definite o reprezentare genetică și o funcție de fitness, un algoritm genetic va instanția candidații inițiali, așa cum s-a descris anterior, și apoi se va îmbunătăți prin aplicarea repetitivă a operatorilor de mutație, încrucișare, inversare și selecție (așa cum sunt definiți în funcție de domeniul problemei).