Cosa sono esattamente gli algoritmi genetici e per quali tipi di problemi sono utili?


16

Ho notato che alcune domande su questo sito menzionano algoritmi genetici e mi ha fatto capire che non ne so davvero molto.

Ho già sentito il termine prima, ma non è qualcosa che io abbia mai usato, quindi non ho molta idea di come funzionano e per cosa sono utili. Tutto quello che so è che implicano una sorta di evoluzione e valori che cambiano casualmente.

Puoi darmi una breve spiegazione, preferibilmente includendo una sorta di esempio pratico che illustri i principi di base?

Risposte:


11

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.

inserisci qui la descrizione dell'immagine


Grazie per aver risposto a questa domanda qui! Anche se personalmente ritengo che questa sia una domanda ideale per AI SE, poiché è di base e "di alto livello", non essere timido nel dirigere l'OP e i lettori su Cross Validated per domande più avanzate sull'argomento, adatte a quello stack .
DukeZhou

8

Un algoritmo genetico è un algoritmo che genera in modo casuale un numero di soluzioni tentate per un problema. Questo insieme di soluzioni tentate è chiamato "popolazione".

Quindi cerca di vedere come queste soluzioni risolvono il problema, utilizzando una determinata funzione di fitness . Le soluzioni tentate con il miglior valore di fitness vengono utilizzate per generare una nuova popolazione. Questo può essere fatto apportando piccole modifiche alle soluzioni tentate (mutazione) o combinando le soluzioni tentate esistenti (crossover).

L'idea è che, nel tempo, emerge una soluzione tentata che abbia un valore di fitness abbastanza alto da risolvere il problema.

L'ispirazione per questo venne dalla teoria dell'evoluzione; le soluzioni più adatte sopravvivono e procreano.

Esempio 1

Supponiamo che stavi cercando il modo più efficiente per tagliare un numero di forme da un pezzo di legno. Vuoi sprecare meno legna possibile.

Le tue soluzioni tentate sarebbero disposizioni casuali di queste forme sul tuo pezzo di legno. La forma fisica sarebbe determinata da quanto poco legno sarebbe rimasto dopo aver tagliato le forme seguendo questa disposizione.
Meno legno rimane, migliore è la soluzione tentata.

Esempio 2

Supponiamo che stavi cercando di trovare un polinomio che passa attraverso un numero di punti. Le tue soluzioni tentate sarebbero polinomi casuali.
Per determinare l' idoneità di questi polinomi, si determina quanto si adattano ai punti indicati. (In questo caso particolare, probabilmente useresti il ​​metodo dei minimi quadrati per determinare quanto bene il polinomio si adatti ai punti). Nel corso di una serie di prove, otterrai polinomi che si adattano meglio ai punti, fino a quando non hai un polinomio che si adatta abbastanza bene ai punti.


Cosa si intende per soluzione , però? Potete darmi un esempio pratico con un problema specifico, così posso immaginare meglio come potrebbe essere?
Disincantato Lurker

@InquisitiveLurker Ho aggiunto esempi. Fammi sapere se non sono abbastanza chiari; Sarò felice di aggiornare la mia risposta.
SL Barth - Ripristina Monica il

6

Questa risposta richiede un esempio pratico di come si potrebbe usare uno, che cercherò di fornire oltre alle altre risposte. Sembrano essere in grado di spiegare in cosa consiste un algoritmo genetico. Quindi, questo darà un esempio.

Supponiamo che tu abbia una rete neurale (sebbene non sia l'unica applicazione di essa), che, da alcuni input dati, produrrà alcuni output. Un algoritmo genetico può creare una popolazione di questi, e vedendo quale output è il migliore, allevare e uccidere i membri della popolazione. Alla fine, questo dovrebbe ottimizzare la rete neurale se è abbastanza complicata.

Ecco una dimostrazione che ho fatto, che nonostante sia stato codificato male, potrebbe aiutarti a capire. http://khrabanas.github.io/projects/evo/evo.html Premi il pulsante di evoluzione e scherza con gli obiettivi.

Utilizza un semplice algoritmo genetico per allevare, mutare e decidere tra quale popolazione sopravvivere. A seconda del modo in cui sono impostate le variabili di input, la rete sarà in grado di raggiungere un certo livello di vicinanza ad esse, in questo modo la popolazione diventerà probabilmente un gruppo omogeneo, i cui risultati assomigliano agli obiettivi.

L'algoritmo genetico sta cercando di creare una sorta di "rete neurale" che, prendendo in RGB, produrrà un colore di output. Innanzitutto genera una popolazione casuale. Quindi prendendo 3 membri casuali dalla popolazione, selezionando quello con la forma fisica più bassa e rimuovendolo dalla popolazione. La forma fisica è uguale alla differenza nell'obiettivo in alto al quadrato + la differenza nell'obiettivo in basso al quadrato. Quindi alleva i due rimanenti insieme e aggiunge il bambino allo stesso posto nella popolazione del membro morto. Quando si verifica l'accoppiamento, esiste la possibilità che si verifichi una mutazione. Questa mutazione cambierà uno dei valori in modo casuale.

Come nota a margine, a causa di come è impostato, è impossibile che sia totalmente corretto in molti casi, sebbene raggiunga la relativa vicinanza.


6

Ci sono una serie di buone risposte che spiegano cosa sono gli algoritmi genetici e che danno esempi di applicazioni. Sto aggiungendo alcuni consigli di uso generale su cosa sono buoni, ma anche casi in cui NON dovresti usarli. Se il mio tono sembra duro, è perché l'uso di GA in uno dei casi nella sezione Non appropriato comporterà il rigetto istantaneo del tuo documento da qualsiasi giornale di alto livello.

Innanzitutto, il problema DEVE essere un problema di ottimizzazione. Devi definire una "funzione di fitness" che stai cercando di ottimizzare e devi avere un modo per misurarla.

Buona:

  • Le funzioni di crossover sono facili da definire e naturali : quando si ha a che fare con determinati tipi di dati, le funzioni di crossover / mutazione potrebbero essere facili da definire. Ad esempio, le stringhe (es. DNA o sequenze geniche) possono essere facilmente mutate collegando due stringhe candidate per ottenerne una nuova (ecco perché la natura usa algoritmi genetici!). Anche gli alberi (come alberi filogenetici o alberi di analisi) possono essere uniti, sostituendo un ramo di un albero con un ramo di un altro. Le forme (come le ali dell'aeroplano o le forme delle barche) possono essere facilmente mutate disegnando una griglia sulla forma e combinando diverse sezioni della griglia dai genitori per ottenere un bambino. Di solito questo significa che il tuo problema è composto da parti diverse e mettere insieme parti da soluzioni distinte è una valida soluzione candidata.
    • Ciò significa che se il problema è definito in uno spazio vettoriale in cui le coordinate non hanno alcun significato speciale, le GA non sono una buona scelta. Se è difficile formulare il tuo problema come GA, non ne vale la pena.
  • Valutazione della scatola nera : se per un candidato, la tua funzione di fitness viene valutata al di fuori del computer, i GA sono una buona idea. Ad esempio, se stai testando una forma ad ala in una galleria aerea, gli algoritmi genetici ti aiuteranno a generare forme candidate valide da provare.
    • Eccezione: simulazioni . Se la tua funzione di fitness sta misurando le prestazioni del design di un ugello e richiede di simulare la dinamica del fluido per ogni forma di ugello, i GA possono funzionare bene per te. Potrebbero funzionare anche se stai simulando un sistema fisico nel tempo e sei interessato a come il tuo progetto si esibisce nel corso dell'operazione, ad es. modellistica di modelli di locomozione . Tuttavia, in letteratura si stanno sviluppando metodi che usano equazioni differenziali parziali come vincoli, ad es. Ottimizzazione vincolata PDE , quindi questo potrebbe cambiare in futuro.

Non appropriato:

  • Puoi calcolare un gradiente per la tua funzione: se hai accesso al gradiente della tua funzione, puoi eseguire la discesa del gradiente, che in generale è molto più efficiente delle GA. La discesa gradiente può avere problemi con minimi locali (come anche GA) ma molti metodi sono stati studiati per mitigare questo.
  • Conosci la funzione fitness in forma chiusa : puoi probabilmente calcolare il gradiente. Molte lingue hanno librerie che supportano la differenziazione automatica , quindi non è nemmeno necessario farlo manualmente. Se la funzione non è differenziabile, è possibile utilizzare la discendenza da studente secondario .
  • Il tuo problema di ottimizzazione è di una forma nota, come un programma lineare o un programma quadratico : i GA (e i metodi di ottimizzazione della scatola nera in generale) sono molto inefficienti in termini di numero di candidati che devono valutare e, se possibile, è meglio evitarli.
  • Lo spazio della soluzione è ridotto : se riesci a grigliare in modo efficiente lo spazio di ricerca, puoi garantire di aver trovato la soluzione migliore e creare grafici di contorno dello spazio della soluzione per vedere se esiste un'area da esplorare ulteriormente.

Infine, se stai prendendo in considerazione una GA, prendi in considerazione lavori più recenti in Strategie evolutive. Sono di parte nei confronti di CMA-ES , che ritengo sia un buon algoritmo semplice che cattura la nozione di gradiente nel panorama del fitness in un modo in cui le GA tradizionali non lo fanno.


CMA-ES è utile per problemi in cui le soluzioni possono essere rappresentate come vettori a valore reale.
NietzscheanAI

5

Come osservato in un'altra risposta, tutto ciò che serve per applicare gli algoritmi genetici (GA) è rappresentare una potenziale soluzione al problema in una forma soggetta a crossover e mutazione. Idealmente, la funzione di fitness fornirà una sorta di feedback regolare sulla qualità di una soluzione, piuttosto che essere semplicemente un "Needle in a Haystack".

Ecco alcune caratteristiche dei problemi che gli algoritmi genetici (e in effetti la Metaheuristics in generale) sono utili per:

  • NP-completo - Il numero di possibili soluzioni al problema è esponenziale, ma il controllo della idoneità di una soluzione è relativamente economico (tecnicamente, con tempo polinomiale nella dimensione di input).
  • Scatola nera: i GA funzionano abbastanza bene anche se non si dispone di un modello particolarmente informato del problema da risolvere. Ciò significa che questi approcci sono utili anche come approccio di "prototipazione rapida" per risolvere i problemi.

Tuttavia, nonostante il loro uso diffuso per lo scopo, nota che il gas sono in realtà non ottimizzatori di funzione - meccanismi GA tendono a non esplorare le regioni 'periferiche' dello spazio di ricerca nella speranza di trovare qualche soluzione lontana di alta qualità, ma piuttosto creare un cluster intorno a più picchi facilmente raggiungibili nel "paesaggio fitness".

Maggiori dettagli sull'applicabilità dei GA sono forniti in un famoso primo documento "Cosa rende difficile un problema per un algoritmo genetico?"

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.