algoritmo genètico
in informatica, classe di algoritmi che rappresenta l'esempio più noto della programmazione evolutiva, cioè modello di computazione basato sulla competizione fra approssimazioni alla soluzione corretta di un problema computazionale, ispirata dalle teorie dell'evoluzione. Gli elementi più adatti al contesto sopravvivvono e trasmettono le proprie caratteristiche, variate per effetto di mutazioni casuali, alle generazioni successive. Nella programmazione evolutiva gli elementi in competizione sono le strutture dati che codificano la soluzione di un problema. La tecnica di soluzione prevede che a ogni ciclo tutte le descrizioni esistenti siano eseguite su un certo insieme di dati. Per ogni soluzione si misura il cosiddetto grado di fitness, cioè di adeguatezza (per esempio la distanza dalla soluzione corretta se nota, costo computazionale, ecc.). Di quelle che superano un certo livello, alcune sono mantenute inalterate nella generazione successiva, mentre altre vengono trasformate attraverso operazioni di tipo "genetico" (mutazioni di parametri di una soluzione, combinazioni di soluzioni esistenti), in modo da creare una progenie. Il ciclo prosegue fino a che non si soddisfa un qualche criterio finale (per esempio le soluzioni adatte a un ciclo differiscono di poco da quelle del ciclo precedente). Gli algoritmi genetici sono particolarmente adatti alla soluzione di problemi di ottimizzazione per cui le soluzioni esatte sono generalmente costose in termini di tempo o di occupazione dello spazio, mentre la ricerca di soluzioni approssimate, mediante algoritmi classici, può ottenere risultati subottimali.