Gli algoritmi evolutivi sono una famiglia di algoritmi di ottimizzazione basati sul principio della selezione naturale darwiniana . Come parte della selezione naturale, un determinato ambiente ha una popolazione di individui che competono per la sopravvivenza e la riproduzione. La capacità di ciascun individuo di raggiungere questi obiettivi determina la possibilità di avere figli, in altre parole di trasmettere i propri geni alla prossima generazione di individui, che per ragioni genetiche avranno maggiori possibilità di fare bene, ancora meglio, nel realizzarli due obiettivi.
Questo principio di miglioramento continuo nel corso delle generazioni è adottato da algoritmi evolutivi per ottimizzare le soluzioni a un problema. Nella generazione iniziale , una popolazione composta da individui diversi viene generata casualmente o con altri metodi. Un individuo è una soluzione al problema, più o meno buono: la qualità dell'individuo rispetto al problema si chiama idoneità , il che riflette l'adeguatezza della soluzione al problema da risolvere. Maggiore è l'idoneità di un individuo, maggiore è la probabilità che passi un po 'o tutto il suo genotipo agli individui della prossima generazione.
Un individuo è codificato come un genotipo , che può avere qualsiasi forma, come un vettore ** bit ( algoritmi genetici ) o un vettore reale (strategie di evoluzione). Ogni genotipo viene trasformato in fenotipo quando si valuta l'individuo, cioè quando viene calcolata la sua idoneità. In alcuni casi, il fenotipo è identico al genotipo: si chiama codifica diretta . Altrimenti, la codifica si chiama indiretta. Ad esempio, supponiamo di voler ottimizzare le dimensioni di un parallelepipedo rettangolare definito da lunghezza, altezza e larghezza. Per semplificare l'esempio, supponiamo che queste tre quantità siano numeri interi compresi tra 0 e 15. Possiamo quindi descriverle ognuna usando un numero binario a 4 bit. Un esempio di potenziale soluzione potrebbe essere il genotipo 0001 0111 01010. Il fenotipo corrispondente è un parallelepipedo di lunghezza 1, altezza 7 e larghezza 10.
Durante il passaggio dalla vecchia alla nuova generazione vengono chiamati operatori di variazione , il cui scopo è manipolare gli individui. Esistono due tipi distinti di operatori di variazione:
- gli operatori di mutazione , che vengono utilizzati per introdurre variazioni all'interno dello stesso individuo delle mutazioni genetiche;
- gli operatori di crossover , che vengono utilizzati per attraversare almeno due diversi genotipi, come incroci genetici da riproduzione.
Gli algoritmi evolutivi si sono dimostrati validi in vari campi come la ricerca operativa, la robotica, la biologia, le sfumature o la crittografia. Inoltre, possono ottimizzare più obiettivi contemporaneamente e possono essere utilizzati come scatole nere perché non assumono alcuna proprietà nel modello matematico da ottimizzare. La loro unica vera limitazione è la complessità computazionale.