In generale
Gli algoritmi genetici sono bravi a risolvere problemi che includono la pianificazione e la programmazione degli orari. Sono stati applicati anche all'ingegneria. Sono spesso usati per risolvere problemi di ottimizzazione globale.
Come regola generale, gli algoritmi genetici potrebbero essere utili in domini problematici che hanno un paesaggio di fitness complesso, in quanto il crossover è progettato per spostare la popolazione lontano dagli ottimali locali in cui un algoritmo tradizionale di hill climbing potrebbe rimanere bloccato. Gli operatori di crossover comunemente usati non possono cambiare una popolazione uniforme. La mutazione da sola può fornire l'ergodicità del processo generale dell'algoritmo genetico (visto come una catena di Markov).
Esempi di problemi risolti da algoritmi genetici includono: specchi progettati per incanalare la luce del sole in un collettore solare, antenne progettate per raccogliere segnali radio nello spazio, metodi di camminata per figure di computer, progettazione ottimale di corpi aerodinamici in campi di flusso complessi
Nel suo Algorithm Design Manual, Skiena sconsiglia gli algoritmi genetici per qualsiasi compito: "È abbastanza innaturale modellare le applicazioni in termini di operatori genetici come mutazione e crossover su stringhe di bit. La pseudobiologia aggiunge un altro livello di complessità tra voi e il vostro problema. In secondo luogo, gli algoritmi genetici richiedono un tempo molto lungo su problemi non banali. [...] L'analogia con l'evoluzione - dove un progresso significativo richiede [sic] milioni di anni - può essere abbastanza appropriata. [...] Non ho mai incontrato alcun problema in cui gli algoritmi genetici mi sembrassero il modo giusto per attaccarlo. Inoltre, non ho mai visto alcun risultato computazionale riportato utilizzando algoritmi genetici che mi abbia favorevolmente impressionato. Continuate a usare l'annealing simulato per le vostre esigenze di ricerca euristica voodoo".
Giochi da tavolo
I giochi da tavolo sono una parte molto rilevante dell'area degli algoritmi genetici applicati a problemi di teoria dei giochi. Gran parte dei primi lavori sull'intelligenza computazionale e i giochi erano diretti verso i classici giochi da tavolo, come il tic-tac-toe,[3] gli scacchi e la dama. [4] I giochi da tavolo possono ora, nella maggior parte dei casi, essere giocati da un computer ad un livello superiore a quello dei migliori esseri umani, anche con tecniche di ricerca esaustiva alla cieca. Il Go è una nota eccezione a questa tendenza, e finora ha resistito all'attacco delle macchine. I migliori giocatori di computer di Go ora giocano al livello di un buon principiante. [5][6] Si dice che la strategia di Go faccia molto affidamento sul riconoscimento dei modelli, e non solo sull'analisi logica come negli scacchi e in altri giochi più indipendenti dal pezzo. L'enorme fattore di ramificazione effettivo richiesto per trovare soluzioni di alta qualità limita pesantemente il look-ahead che può essere usato all'interno di una sequenza di mosse di ricerca.
Giochi per computer
L'algoritmo genetico può essere usato nei giochi per computer per creare intelligenza artificiale (il computer gioca contro di voi). Questo permette un'esperienza di gioco più realistica; se un giocatore umano può trovare una sequenza di passi che portano sempre al successo anche se ripetuti in giochi diversi, non può rimanere una sfida. Al contrario, se una tecnica di apprendimento come un algoritmo genetico per uno stratega può evitare di ripetere gli errori del passato, il gioco avrà più giocabilità.
Gli algoritmi genetici richiedono le seguenti parti:
- Un metodo per rappresentare la sfida in termini di soluzione (ad esempio, instradare i soldati in un attacco in un gioco di strategia)
- Una funzione di fitness o di valutazione per determinare la qualità di un'istanza (per esempio una misura del danno fatto a un avversario in un attacco).
La funzione di fitness accetta un'istanza mutata di un'entità e misura la sua qualità. Questa funzione è personalizzata al dominio del problema. In molti casi, in particolare quelli che coinvolgono l'ottimizzazione del codice, la funzione di fitness può essere semplicemente una funzione di temporizzazione del sistema. Una volta che una rappresentazione genetica e una funzione di fitness sono definite, un algoritmo genetico istanzia i candidati iniziali come descritto prima, e poi migliora attraverso l'applicazione ripetitiva degli operatori di mutazione, crossover, inversione e selezione (come definito in base al dominio del problema).