Un algoritmo genetico è un procedimento euristico di intelligenza artificiale per la risoluzione e l’ottimizzazione di problemi ispirato al processo di selezione naturale che governa l’evoluzione biologica.
L’algoritmo si basa sui concetti di “popolazione” e “individuo”: a partire da una popolazione iniziale di individui casuali, a ogni iterazione viene creata opportunamente una nuova popolazione dalla precedente, in base alla prestazione dei singoli individui.
Esso può essere suddiviso in diversi step:
Una volta settato l’obiettivo da raggiungere o i parametri su cui basare il calcolo delle performance è possibile ordinare gli individui e selezionare tra essi i generatori della prole: i più adatti avranno una maggiore probabilità di riprodursi.
In generale (ma non sempre) è anche molto importante includere nella funzione di valutazione degli individui il parametro “diversità”, perché permette di evitare che l’algoritmo si blocchi in corrispondenza di un massimo locale, magari ancora molto distante (e quindi difficilmente superabile dalle sole mutazioni) e molto inferiore rispetto al massimo globale che si desidera venga raggiunto, e di sfruttare al massimo il potere ricombinatorio fornito dal crossover.
Esistono numerose strategie di selezione, tra le più comuni:
in modo da non fare mai passi indietro nell’evoluzione della popolazione)
popolazione; il vincitore di ogni torneo è selezionato per la riproduzione)
propria idoneità, valutate precedentemente)
ereditato dai genitori)
Ottenute le coppie di individui da far riprodurre, entra in gioco il crossover:
alternatamente porzioni di genoma da uno e dall’altro genitore)
dall’altro genitore)
matematica applicata ai due genomi dei genitori)
Dopo aver generato la nuova popolazione, vengono applicate (casualmente e con una data probabilità) le mutazioni:
Il crossover e le mutazioni sono gli operatori genetici più comuni e agiscono a livello di individuo, tuttavia è possibile progettare algoritmi più complessi, che prendano in considerazione le interazioni tra gruppi diversi e agiscano a livello di comunità; alcuni esempi:
L’idea di fondo può essere sfruttata anche a livello di individuo, ad esempio introducendo una probabilità che arrivi un individuo originato in modo completamente casuale durante la fase di creazione di una nuova generazione (prendendo quindi il posto di un “figlio” della popolazione precedente).
Dalla mia esperienza, ritengo che lo studio di questa famiglia di algoritmi possa rappresentare un buon punto di partenza per i neofiti che desiderino approcciarsi al mondo dell’IA, in particolare perché è possibile creare piccoli progetti molto semplici per iniziare e man mano passare a problemi più articolati in modo graduale, fino ad arrivare a simulazioni anche molto complesse (nella gestione delle quali questo tipo di algoritmo, se tarato in modo appropriato, si dimostra molto potente ed efficace).
Per iniziare: Travelling salesman problem (http://www.theprojectspot.com/tutorial-post/applying-a-genetic-algorithm-to-the-travelling-salesman-problem/5).
MIT 6.034 Artificial Intelligence: https://www.youtube.com/watch?v=kHyNqSnzP8Y
Flexible Muscle Locomotion for Bipedal: https://www.youtube.com/watch?v=pgaEE27nsQw
MarI/O: https://www.youtube.com/watch?v=qv6UVOQ0F44
Google Chrome Dinosaur: https://www.youtube.com/watch?v=sB_IGstiWlc