Computazione evolutiva

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

La computazione evolutiva è un sottocampo dell'intelligenza artificiale che consiste principalmente nell'ottimizzazione iterativa continua e combinatoria della soluzione di un problema. È nata durante gli anni sessanta guidata dall'idea di automatizzare la risoluzione di problemi.

La computazione evolutiva utilizza una progressione iterativa, ad esempio la crescita o lo sviluppo di una popolazione. La popolazione viene successivamente selezionata con una ricerca casuale guidata sfruttando processi paralleli per raggiungere l'obiettivo. Tali processi sono spesso ispirati ai meccanismi dell'evoluzione proposti da Charles Darwin. L'evoluzione può produrre processi altamente ottimizzati, ha dunque numerose applicazioni nell'ambito dell'informatica.

Storia[modifica | modifica wikitesto]

L'uso dei principi darwiniani per risolvere problemi in modo automatico risale agli anni Cinquanta. Prima degli anni Sessanta, questa idea era stata sviluppata in tre luoghi diversi in maniera non correlata.

La programmazione evolutiva fu introdotta da Lawrence J. Fogel negli Stati Uniti, mentre John Henry Holland definì il suo metodo un Algoritmo genetico. In Germania Ingo Rechenberg e Hans-Paul Schwefel introdussero le strategie evolutive. Queste aree si svilupparono in modo separato per circa quindici anni. All'inizio degli anni Novanta furono unificati, essendo considerati diversi rappresentanti di un'unica tecnologia, detta computazione evolutiva. Sempre all'inizio degli anni Novanta emerse una nuova corrente, che seguiva l'idea in generale: la programmazione genetica. Sin dagli anni Novanta, la computazione evolutiva è diventata essenzialmente computazione swarm-based, e gli algoritmi ispirati alla natura stanno diventando sempre più importanti.

Questi termini mostrano che il campo generale è definito con il termine computazione evolutiva, mentre la programmazione evolutiva, le strategie evolutive, gli algoritmi genetici e la programmazione genetica sono delle sotto aree.

Simulazioni di evoluzione utilizzando degli algoritmi evolutivi e la vita artificiale cominciarono con il lavoro di Nils Aall Barricelli negli anni Sessanta, sviluppato ed esteso poi da Alex Fraser, che pubblicò una serie di ricerche scientifiche sulla simulazione della selezione artificiale.[1] L'evoluzione artificiale divenne un metodo di ottimizzazione riconosciuto grazie al lavoro di Ingo Rechenberg, che tra gli anni Sessanta e Settanta usò le strategie evolutive per risolvere problemi di natura ingegneristica molto complessi.[2] Gli algoritmi genetici divennero popolari grazie agli scritti di John Henry Holland.[3] Il crescente interesse accademico e il considerevole aumento del potere computazionale dei calcolatori portò allo sviluppo di applicazioni pratiche, tra cui l'evoluzione automatica dei programmi sui calcolatori.[4] Gli algoritmi evolutivi sono ora usati per risolvere problemi multidimensionale in maniera più efficiente dei software prodotti da progettisti umani, e permettono anche di ottimizzare la progettazione di tali sistemi.[5]

Tecniche[modifica | modifica wikitesto]

Le tecniche di computazione evolutiva impiegano soprattutto degli algoritmi meta-euristici di ottimizzazione matematica. In generale, il campo include:

Algoritmi evolutivi[modifica | modifica wikitesto]

Lo stesso argomento in dettaglio: Algoritmo evolutivo.

Gli algoritmi evolutivi sono un sottoinsieme della computazione evolutiva, poiché in genere impiegano solo tecniche che sfruttano meccanismi ispirati dall'evoluzione biologica, come la riproduzione, le mutazioni, la ricombinazione, la selezione naturale e la sopravvivenza del più forte. Le soluzioni candidate per l'ottimizzazione del problema rappresentano gli individui della popolazione, e la funzione di fitness determina l'ambiente in cui la soluzione "vive". L'evoluzione della popolazione si ottiene ripetendo in maniera iterata le operazioni descritte sopra.

Alla base del processo vi sono due elementi chiave: la ricombinazione e la mutazione, le quali creano la diversità necessaria e l'introduzione di nuovi elementi, mentre la selezione agisce come un fattore per migliorare la qualità degli individui in una popolazione.

Molti aspetti di tale processo evolutivo sono stocastici. Le informazioni modificate tramite ricombinazione e mutazione sono scelti raramente. Dall'altro lato, gli operatori di selezione possono essere sia stocastici che deterministici. Nel primo caso, gli individui con una funzione di fitness più elevata hanno maggiori possibilità di essere selezionati rispetto agli individui con una funzione di fitness più bassa, ma di solito anche gli individui più deboli hanno qualche possibilità di riprodursi e sopravvivere.

Nomi illustri nel campo della computazione evolutiva[modifica | modifica wikitesto]

Note[modifica | modifica wikitesto]

  1. ^ Fraser AS, Monte Carlo analyses of genetic models, in Nature, vol. 181, n. 4603, 1958, pp. 208–9, DOI:10.1038/181208a0, PMID 13504138.
  2. ^ (DE) Ingo Rechenberg, Evolutionsstrategie – Optimierung technischer Systeme nach Prinzipien der biologischen Evolution (PhD thesis), Fromman-Holzboog, 1973.
  3. ^ John H. Holland, Adaptation in Natural and Artificial Systems, University of Michigan Press, 1975, ISBN 0-262-58111-6.
  4. ^ John R. Koza, Genetic Programming: On the Programming of Computers by Means of Natural Selection, MIT Press, 1992, ISBN 0-262-11170-5.
  5. ^ Jamshidi M, Tools for intelligent control: fuzzy controllers, neural networks and genetic algorithms, in Philosophical Transactions of the Royal Society A, vol. 361, n. 1809, 2003, pp. 1781–808, DOI:10.1098/rsta.2003.1225, PMID 12952685.

Bibliografia[modifica | modifica wikitesto]

Voci correlate[modifica | modifica wikitesto]

Altri progetti[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]

Controllo di autoritàLCCN (ENsh95003989 · J9U (ENHE987007546715505171
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica