md`# Algoritmi genetici
Gli algoritmi genetici sono una classe di algoritmi che mimano il comportamento dei sistemi evolutivi per determinare soluzioni a problemi spesso molto complessi.
Così come gli organismi viventi, tramite la riproduzione, mischiano i loro caratteri genetici il proprio adattamento all'ambiente, gli algoritmi genetici "migliorano" le possibili soluzioni ad un problema generando nuove soluzioni dalle precedenti.
La soluzione ad un problema è come l'individuo in una popolazione. Essa presenta un "genoma", ovvero delle caratteristiche peculiari che la rappresentano.
## Accoppiamento
Durante l'esecuzione dell'algoritmo genetico diverse soluzioni vengono "accoppiate" e i loro genomi vengono "mischiati". Le nuove soluzioni che si generano a partire da queste possono essere migliori o peggiori delle soluzioni genitrici. Qualora fossero migliori, queste verranno selezionate per produrre nuove popolazioni di soluzioni.
## Mutazioni
Una singola mutazione (individuo) può subire una mutazione casuale. Tali mutazioni possono essere costruttive o distruttive: sarà la selezione "naturale" a deciderne l'esito.
Dopo diverse iterazioni, se l'algoritmo sta funzionando, si osserverà l'emergere di una popolazione di soluzioni sempre migliori. Queste rappresenteranno la soluzione al problema iniziale.
## Il problema del commesso viaggiatore
Uno dei tipici problemi risolvibili mediante algoritmi genetici è il cosidetto [Problema del commesso viaggiatore](https://it.wikipedia.org/wiki/Problema_del_commesso_viaggiatore).
Dato un insieme di città, e note le distanze tra ciascuna coppia di esse, trovare il tragitto di minima percorrenza che un commesso viaggiatore deve seguire per visitare tutte le città una ed una sola volta e ritornare alla città di partenza.
Ecco una possibile [implementazione](https://observablehq.com/@john-clarke/genetic-algorithm-tsp) della soluzione.
## Il problema del "Calendario dei consigli di classe"
Quanti Consigli di classe (CDC) si possono calendarizzare nella stessa fascia oraria? Ci sono infatti CDC *incompatibili* tra di loro, nel senso che alcuni di essi condividono gli stessi insegnanti e non possono essere quindi svolti in contemporanea. Un algoritmo genetico può trovare le migliori possibili soluzioni.
## Automobili "genetiche"
Ed ecco l'implementazione di un algoritmo genetico che seleziona la migliore macchina da corsa in una [gara virtuale](https://rednuht.org/genetic_cars_2/) tra automobili.
## Riferimenti
1. https://towardsdatascience.com/a-gentle-introduction-to-genetic-algorithms-c5bc15827e2d
`