@@ -7193,14 +7193,274 @@ \subsubsection{Tournament selection}
71937193la quale include nella nuova popolazione il migliore individuo della corrente (mantieni
71947194sempre il migliori individuo trovato finora).
71957195
7196+ \subsubsection {Crossover }
7197+ L'operatore di \textbf {crossover } combina $ k\geq 2 $ individui per generarne altri $ k$ .
7198+ I più comuni impostano $ k=2 $ e sono:
7199+ \begin {itemize }
7200+ \item \textit {simple crossover }:
7201+ \begin {itemize }
7202+ \item estrarre una posizione casuale con una probabilità uniforme.
7203+ \item dividere la codifica in due parti nella posizione estratta.
7204+ \item scambiare le parti finali delle codifiche dei due individui
7205+ \begin {figure }[H]
7206+ \centering
7207+ \includegraphics [scale=0.5]{images/crossover_1.png}
7208+ \end {figure }
7209+ \end {itemize }
7210+ \item \textit {double crossover }:
7211+ \begin {itemize }
7212+ \item estrarre una posizione casuale con una probabilità uniforme.
7213+ \item dividere la codifica in due parti nella posizione estratta.
7214+ \item scambiare le parti estreme delle codifiche dei due individui
7215+ \begin {figure }[H]
7216+ \centering
7217+ \includegraphics [scale=0.5]{images/crossover_2.png}
7218+ \end {figure }
7219+ \end {itemize }
7220+ \end {itemize }
7221+ Generalizzando si ottiene che:
7222+ \begin {itemize }
7223+ \item $ \alpha $ \textit { points crossover }:
7224+ \begin {itemize }
7225+ \item si estraggono $ \alpha $ posizioni casuali con una probabilità uniforme.
7226+ \item si divide la codifica in $ \alpha +1 $ parti alle posizioni estratte.
7227+ \item si scambiano le parti dispari delle codifiche dei due individui (prima, terza, $ \dots $ )
7228+ \end {itemize }
7229+ \end {itemize }
7230+ Per piccoli valori di $ \alpha $ , questo implica un \textit {bias posizionale }: simboli
7231+ chiusi nella codifica tendono a rimanere chiusi. Per cancellare questo bias, uno
7232+ può adottare:
7233+ \begin {itemize }
7234+ \item \textit {uniform crossover }:
7235+ \begin {itemize }
7236+ \item costruire un vettore casuale binario $ m\in U(\mathbb {B}^n)$ ("maschera").
7237+ \item se $ m_i=1 $ scambia i simboli in posizione $ i$ dei due individui,
7238+ se $ m_i=0 $ li mantiene invariati.
7239+ \begin {figure }[H]
7240+ \centering
7241+ \includegraphics [scale=0.5]{images/uniform_crossover.png}
7242+ \end {figure }
7243+ \end {itemize }
7244+ \end {itemize }
71967245
7246+ \paragraph {Crossover vs Scatter Search e Path Relinking }\mbox {}\\
7247+ L'operatore di crossover assomiglia alla fase di ricombinazione di SS e PR. Le
7248+ principali differenze sono:
7249+ \begin {enumerate }
7250+ \item ricombina i simboli delle codifiche, anziché:
7251+ \begin {itemize }
7252+ \item ricombinare le soluzioni (SS)
7253+ \item esegue una catena di scambi sulle soluzioni (PR)
7254+ \end {itemize }
7255+ \item opera sull'intera popolazione, anziché solo su un set di riferimento $ R$
7256+ \item opera su coppie casuali di individui, anziché scansionare metodicamente tutte le
7257+ coppie di soluzioni di $ R$
7258+ \item genera una coppia di nuovi individui, anziché
7259+ \begin {itemize }
7260+ \item generare una singola soluzione intermedia (SS)
7261+ \item visitando le soluzioni intermedie e scegliendone una (PR)
7262+ \end {itemize }
7263+ \item i nuovi individui entrano nella popolazione, invece di diventare candidati per
7264+ l'insieme di riferimento.
7265+ \end {enumerate }
7266+ \subsubsection {Mutation }
7267+ L'operatore \textit {mutation } modifica un individuo per generarne uno simile.
7268+ \begin {itemize }
7269+ \item scansiona e codifica $ \xi $ un simbolo alla volta
7270+ \item decide con una probabilità $ \pi _m$ di modificare il simbolo corrente.
7271+ \end {itemize }
7272+ Il tipo di modifica solitamente dipende dalla codifica:
7273+ \begin {itemize }
7274+ \item \textbf {codifiche binarie } (\textit {binary encodings }): ribaltano $ \xi _i$ in $ \xi _i':=1 -\xi _1 $
7275+ \item \textbf {stringhe simboliche } (\textit {symbol strings }): sostituiscono
7276+ $ \xi _c$ con un simbolo casuale $ \xi '_c\in B_c\setminus \{ \xi _c\} $ selezionato con
7277+ una probabilità uniforme.
7278+ \item \textbf {permutazioni }: sono presenti molte proposte.
7279+ \begin {itemize }
7280+ \item scambio di due elementi casuali nella permutazione (\textit {swap })
7281+ \item inversione dell'allungamento tra due posizioni casuali della permutazione
7282+ \item $ \dots $
7283+ \end {itemize }
7284+ \end {itemize }
7285+ \paragraph {Mutation vs euristiche di scambio }\mbox {}\\
7286+ L'operatore \textit {mutation } ha delle forti relazioni con le operazioni di scambio. Le
7287+ principali differenze sono che:
7288+ \begin {enumerate }
7289+ \item modifica i simboli di una codifica, anziché scambiando gli elementi di una
7290+ soluzione.
7291+ \item opera su simboli casuali, anziché esplorare un vicinato sistematicamente.
7292+ \item opera su un numero casuale di simboli, anziché scambiando un numero fisso
7293+ di elementi.
7294+ \end {enumerate }
71977295
7296+ \subsubsection {Il problema di fattibilità }
7297+ Se la codifica non è completamente invertibile, crossover e mutation talvolta possono generare
7298+ codifiche che non corrispondono a soluzioni fattibili.
7299+ Noi distinguiamo tra:
7300+ \begin {itemize }
7301+ \item \textit {codifiche fattibili } (\textit {feasible encodings }) che corrispondono a soluzioni fattibili.
7302+ \item \textit {codifiche infattibili } (\textit {unfeasible encodings }) che corrispondono
7303+ a leciti (legal), ma infattibili sottoinsiemi.
7304+ \end {itemize }
7305+ L'esistenza di codifiche infattibili implica molteplici svantaggi:
7306+ \begin {itemize }
7307+ \item \textbf {inefficienza }: tempo computazionale perso nella gestione di oggetti inutili.
7308+ \item \textbf {inefficacia }: l'euristica esplora meno soluzioni (possibilmente, nessuna).
7309+ \item \textbf {problemi di progettazione }: la fitness deve essere definita su sottoinsiemi infattibili.
7310+ \end {itemize }
7311+ Qui sono presenti tre approcci principali per affrontare questo problema:
7312+ \begin {enumerate }
7313+ \item codifiche speciali e operatori (evitare o limitare la non fattibilità).
7314+ \item procedure di riparazione (rendere la non fattibilità fattibile).
7315+ \item funzioni di penalità (accettare la non fattibilità, ma scoraggiarla).
7316+ \end {enumerate }
71987317
7318+ \subsubsection {Codifiche speciali e operatori }
7319+ L'idea consiste nell'investigare:
7320+ \begin {itemize }
7321+ \item codifiche che (quasi) sempre restituiscono soluzioni fattibili, come:
7322+ \begin {itemize }
7323+ \item codifiche di permutazione (permutation1 encodings) e decodifiche
7324+ order-first split-second, per problemi di partizione (CMSTP, VRP, $ \dots $ ).
7325+ \item codifiche di permutazione e euristica costruttiva per la decodifica,
7326+ di problemi di scheduling (PSMP, $ \dots $ )
7327+ \end {itemize }
7328+ \item operatori crossover e mutation che mantengono la fattibilità, come:
7329+ \begin {itemize }
7330+ \item operatori che simulano $ k$ -scambi per il TSP
7331+ \end {itemize }
7332+ \end {itemize }
7333+ Questi metodi:
7334+ \begin {itemize }
7335+ \item tendono ad approssimare da vicino l'euristica dello scambio e della
7336+ ricombinazione basata sul concetto di vicinato.
7337+ \item abbandonare l'idea di astrazione e concentrarsi sul problema specifico,
7338+ contrariamente agli algoritmi genetici classici.
7339+ \end {itemize }
71997340
7341+ \subsubsection {Procedure di riparazione }
7342+ Una procedura di riparazione $ x_R(\xi )$
7343+ \begin {itemize }
7344+ \item riceve una codifica $ \xi $ che restituisce un sottoinsieme non fattibile
7345+ $ x(\xi )\notin X$
7346+ \item restituisce una soluzione fattibile $ x_R\in X$
7347+ \end {itemize }
7348+ Questa procedure è applicata ad ogni codifica non fattibile $ \xi\in\Xi ^{(g)}$
7349+ \begin {itemize }
7350+ \item in alcuni metodi la codifica $ \xi (x_R(x(\xi )))$ sostituisce $ \xi $ in $ X^{(g)}$
7351+ \item in altre $ \xi $ rimane in $ \Xi ^{(g)}$ e $ x_R(\xi )$ è utilizzata solo per aggiornare $ x^*$
7352+ \end {itemize }
7353+ La prima famiglia di metodi: mantiene una popolazione di soluzioni fattibili. Ma
7354+ introducono:
7355+ \begin {itemize }
7356+ \item un forte bias in favore di codifiche fattibili
7357+ \item un bias in favore delle soluzioni fattibili più facilmente ottenibili
7358+ con la procedura di riparazione.
7359+ \end {itemize }
7360+ \subsubsection {Funzioni di penalità }
7361+ \paragraph {Misurando la non fattibilità }\mbox {}\\
7362+ Se la funzione obiettivo è estesa ai sottoinsiemi non fattibili $ x\in 2 ^B\setminus X$ ,
7363+ la funzione fitness $ \phi (\xi )$ può essere estesa ad una qualsiasi codifica, ma
7364+ molti sottoinsiemi non fattibili hanno una fitness più grande della soluzione ottimale.
7365+ L'operatore \textit {selection } tende a favorire certi sottoinsiemi infattibili. Per
7366+ evitare questo, la funzione di fitness deve combinare:
7367+ \begin {itemize }
7368+ \item la funzione obiettivo $ f(x(\xi ))$
7369+ \item una misura di non fattibilità $ \psi (x(\xi ))$
7370+ \[
7371+ \begin {cases }
7372+ \psi (x(\xi ))=0 & \text {se }x(\xi )\in X\\
7373+ \psi (x(\xi ))>0 & \text {se }x(\xi )\notin X
7374+ \end {cases }
7375+ \]
7376+ \end {itemize }
7377+ Se i vincoli del problema sono espressi da uguaglianze o disuguaglianze, $ \psi (x)$ può
7378+ essere definito come la somma pesata delle violazioni.
7379+ \textit {Come definire i pesi? }\textit {Sono fissi, variabili o adattivi? }
7380+ \paragraph {Definizione della fitness }\mbox {}\\
7381+ Le combinazioni più tipiche sono:
7382+ \begin {itemize }
7383+ \item \textbf {penalità assoluta }: date due codifiche $ \xi $ e $ \xi '$
7384+ \begin {itemize }
7385+ \item se entrambe sono fattibili, quella con la $ f$ più piccola è migliore.
7386+ \item se esattamente una è fattibile, quella fattibile è migliore dell'altra.
7387+ \item se entrambe non sono fattibili, quella con il $ \psi $ più piccolo è migliore
7388+ (\textit {adatta per "rank selection" e "tournament selection" }).
7389+ \end {itemize }
72007390
7391+ \item \textbf {penalità proporzionale }: le codifiche infattibili hanno una penalità
7392+ che è crescente con la violazione.
7393+ $$ \varphi (\xi )=f(x(\xi ))-\alpha\psi (x(\xi ))+M\;\; \text {per i problemi di massimizzazione}$$
7394+ $$ \varphi (\xi )=-f(x(\xi ))-\alpha\psi (x(\xi ))+M\;\; \text {per i problemi di minimizzazione}$$
7395+ dove l'offset $ M$ garantisce che $ \varphi (\xi )\geq 0 $ per tutte le codifiche.
7396+ \item \textbf {penalità ottenuta da riparazione }:
7397+ cioè mantenere la codifica non fattibile, ma derivarne la fitness
7398+ dal valore obiettivo della soluzione riparata
7399+ $$ \varphi (\xi )=f(x_R(\xi ))\text { o }\varphi (\xi )=UB-f(x_R(\xi ))$$
7400+ visto che solitamente $ f(x_R(x(\xi )))\geq f(x(\xi ))$
7401+ \end {itemize }
72017402
7403+ \paragraph {Regolazione del peso }\mbox {}\\
7404+ Sperimentalmente, è meglio utilizzare la più piccola penalità effettiva:
7405+ \begin {itemize }
7406+ \item se la penalità è troppo piccola, troppo poche soluzioni possibile sono trovate.
7407+ \item se la penalità è troppo grande, la ricerca è confinata in una parte della
7408+ regione fattibile.
7409+ \end {itemize }
7410+ Un buon valore del parametro $ \alpha $ può essere trovato regolando:
7411+ \begin {itemize }
7412+ \item \textbf {metodi dinamici }: incrementando $ \alpha $ lungo il tempo
7413+ (\textit {prima si raggiungono buoni sottoinsieme, dopo si rafforza
7414+ la fattibilità }).
7415+ \item \textbf {metodi adattivi }: aggiornare $ \alpha $ in base alla situazione
7416+ \begin {itemize }
7417+ \item incrementa $ \alpha $ quando codifiche non fattibili dominano la popolazione.
7418+ \item decrementa $ \alpha $ quando codifiche fattibili dominano
7419+ \end {itemize }
7420+ \item \textbf {metodi evolutivi }: codifica $ \alpha $ in ogni individuo, in modo
7421+ da selezionare e rifinire entrambe le soluzione ed il parametro dell'algoritmo.
7422+ \end {itemize }
72027423
7424+ \subsubsection {Algoritmi memetici }
7425+ Algoritmi memetici (Moscato, 1989) sono ispirati dal concetto di "meme" (Dawkins, 1989)
7426+ il quale è l'unità di base di informazione culturale riproducibile.
7427+ \begin {itemize }
7428+ \item i geni sono selezionati solo al livello di espressione fenotipica.
7429+ \item i meme si adattano direttamente, come nell'evoluzione larmarckiana.
7430+ \end {itemize }
7431+ Fuori dalla metafora, gli algoritmi memetici si combinano:
7432+ \begin {itemize }
7433+ \item operatori \textit {"genotipici" } che manipolano le codifiche (crossover e mutation).
7434+ \item operatori \textit {"fenotipici" } cje manipolano le soluzioni (ricerca locale).
7435+ \end {itemize }
7436+ In breve, le soluzioni si migliorano con gli scambi prima della ricodifica. Diversi
7437+ parametri determinano come applicare la ricerca locale:
7438+ \begin {itemize }
7439+ \item quanto spesso (ad ogni generazione, or dopo una sufficiente diversificazione)
7440+ \item a quali individui (tutti, i migliori, i più diversificati)
7441+ \item per quanto tempo (fino ad un ottimo locale, oltre, or fermandosi prima)
7442+ \item con quale metodo (steepest descnt, VNS, ILS, $ \dots $ )
7443+ \end {itemize }
72037444
7204-
7445+ \subsubsection {Strategie evolutive }
7446+ Sono state proposte da Rachenberg e Schwefel (1971). Le principali differenze
7447+ rispetto alla genetica classica sono:
7448+ \begin {itemize }
7449+ \item le soluzioni sono codificate in vettori reali
7450+ \item una piccola popolazione di $ \mu $ individui generano $ \lambda $ candidati
7451+ discendenti (originalmente, $ \mu =1 $ ).
7452+ \item i nuovi individui competono per costruire la nuova popolazione
7453+ \begin {itemize }
7454+ \item nella strategia $ (\mu ,\lambda )$ i migliori $ \mu $ discendenti
7455+ sostituiscono la popolazione originale, anche se alcuni sono dominati
7456+ \item nella strategia $ (\mu +\lambda )$ i migliori $ \mu $ individui
7457+ complessivamente (predecessori o discendenti) sopravvivono nella nuova
7458+ popolazione
7459+ \end {itemize }
7460+ \item l'operatore \textit {mutation } somma alle codifiche un rumore casuale
7461+ con una distribuzione normale di media zero
7462+ $$ \xi ':=\xi +\delta \text { con }\delta\in N(0 ,\delta )$$
7463+ \item originalmente l'operatore di \textit {crossover } non era utilizzato (ora lo è)
7464+ \end {itemize }
72057465
72067466\end {document }
0 commit comments