Programmazione

Sezione sulla programmazione Object Oriented in C++, C#, e Java

Informativa privacy e cookie

Simulatore di Evoluzione di Vita Artificiale basato su Algoritmi Genetici

Stella inattivaStella inattivaStella inattivaStella inattivaStella inattiva
 

 

Il progetto, attualmente in fase pre realese, con solo scopo di studio e nessun fine commerciale, vuole simulare l'evoluzione di creature virtuali ispirate alle stelle marine e immerse in un ambiente virtuale 3D dotato di fonti di cibo e di predatori, mediante l'utilizzo degli algoritmi genetici e della programmazione evolutiva. Nel seguito del post potete usare on line il simulatore, monitorare l'evoluzione della popolazione di stelle marine, modificare alcuni paramentri come il mutation rate, la finestra di accoppiamento, i pesi per il fitnes dell'algoritmo e altro.

Programma scritto in C# con il motore grafico Unity3D versione personal. Non scopi commerciali ma solo studio.

 

Attendi l'avvio del programma poi interagisci con il mouse usando i pannelli dell'interfaccia per cambiare visuale da 3D panoramica a 3D Top a 3D segui.

Puoi usare le interfacce per aprire il "monitor Stelle" e osservare verso quale tipo di Stella l'evoluzione converge oppure modificare i paramentri dagli altri pannelli di controllo ecc.

 

Introduzione

In questo articolo si esplora una tecnica di programmazione, che trae ispirazione dell'evoluzione naturale delle forme di vita organica.

Questa tecnica di "programmazione evolutiva" ricerca una "soluzione"che adatta se stessa per migliorarsi rispetto a un certo "problema da risolvere".La soluzione al problema quindi si ottiene dopo un certo  numero di "generazioni di soluzioni" che hanno percorso una certa evoluzione per risolvere il problema dato (il quale problema a sua volta potrebbe anche non essere statico ma variare nel tempo e il sistema fornisce semprenuove soluzioni che si adattano anche a tale cambiamento).

Questo modo di procedere fa emergere una "evoluzione selettiva delle soluzioni" che si manifesta quando si scelgono, tra tutte le soluzioni di una data generazione, solo quelle il cui errore rispetto al problema da risolvere è il minore possibile, o in parole analoghe, solo quelle che si avvicinano di più alla soluzione "giusta". Dato che nella maggior parte dei casi non si conosce a priori una soluzione ottima, valutare quanto le soluzioni trovate dall'Algoritmo Genetico siano vicine a quella ottima può essere complicato, ma esiste un metodo con il quale si può assegnare un "fattore di idoneità" di una soluzione a risolvere il problema che prende il nome di "fitness" che permette di valutare quanto, ad ogni generazione, le soluzioni trovate siano adatte. e quelle con fitness maggiore vengono ricombinate tra loro per creare una nuova generazione di soluzioni possibili, che produrranno a loro volta, soluzioni sempre più adatte a risolvere il problema. Intuitivamente si comprende che è un modello semplificato dell'evoluzione darwiniana delle specie, le quali migliorano se stesse in funzione delle caratteristiche del proprio ambiente per sopravvivere in esso.

Questa tecnica di programmazione si chiama Programmazione Genetica o anche Programmazione Evolutivaedun Algoritmo Genetico è quel metodo con il quale si può implementare una tale evoluzione delle soluzioni a un dato problema.

Se sostituiamo quindi la parola "soluzione" con "creatura" e le parole "problema da risolvere" con "sopravvivere nell'ambiente in cui la creatura è immersa" ciò che otteniamo è un sistema nel quale creature virtuali si evolvono per adattarsi al proprio ambiente virtuale. Creature dotate in un proprio DNA digitale che codifica il genotipo della soluzione ovvero una descrizione binaria delle caratteristiche della creatura. Tale descrizione numerica farà emergere, a seconda di come la creatura digitale decodificherà tali geni per assemblarsi in una creatura fisica, un fenotipo anche molto più complesso della semplice rappresentazione numerica. Tale fenotipo potrà esprimersi sia in caratteristiche fisiche sia in caratteristiche comportamentali. L'osservazione di tale evoluzione virtuale all'interno di un sistemadi simulazione di vita artificiale però non vuole fornire le risposte ai quesiti sull'evoluzione del mondo reale, cioè al perché nel mondo tangibilecerte creature adottano determinate soluzioni che ritroviamo in natura. Piuttosto tale sistema virtuale vuole fornire una chiave di lettura e una consapevolezza delfunzionamento dei meccanismi e degli equilibri che qualsiasi sistema (reale o virtuale) tende a raggiungere spontaneamente quando possiede una certa dinamicità e una certainterattività tra le sue componenti, per bilanciare le proprie variabili quando queste sono dipendenti le une dalle altre (es. Predatori,cibo,risorse, Stelle Marineecc).

In un sistema inerme, statico, non vi può essere evoluzione. Ma in un sistema dinamico, composto da svariate entità indipendenti, che possono anche completamente ignorare il funzionamento delle une verso le altre, ma che hanno ognuna propri scopi, proprie regole interne,propri comportamenti locali, specifiche caratteristiche sensoriali e motorie;In un sistema dinamico come questo, in cui tutte le entità vengono immerse e lasciate interagire tra di loro si potrà osservare il manifestarsi spontaneo non solo di una certa evoluzione ma anche di certi "comportamentiglobali emergenti" non programmati alla sorgentema che emergono spontanei in quanto somma dei "singoli comportamenti locali" delle entità nella simulazione, in parole più dirette un sistema del genere farà emergere una certa selezione evolutiva delle creature virtualie un determinato comportamento, sia locale delle singole entità sia globale di tutto il sistema,in quanto frutto delle interazioni delle sue singole parti in modi anche non previsti dal programmatore o dall'osservatore del sistema.

Questo sistema ovviamente, come già detto, non è finalizzato a risolvere o svelare i quesiti sull’evoluzione del mondo tangibile, in quanto occorrerebbe simulare ad un livello di dettaglio tale che la simulazione stessa diventerebbe un mondo intrigato come il mondo reale che simula, ma questo sistema vuole indagare su quali siano e come sono relazionati tra loro i meccanismi che regolano l'evoluzione in una direzione piuttosto che un'altra. In particolare in questo studio, si cerca di indagare su quale equilibrio raggiunga una creatura virtuale, che si ispira a una creatura del mondo tangibile come una stella Marina, in un ambiente dotato di cibo limitato, predatori e topologia del fondale. Ciò che ci incuriosisce è verificare quale sia la configurazione migliore che le stelle marine virtuali autonomamente trovano evolvendosi, in termini di numero di punte, forma delle punte (lunghezza e spessore), dimensione del disco interno e del disco esterno, e ci interessa anche analizzare e studiare i rapporti tra tali caratteristiche, per esempio emerge spontanea una sezione aurea tra il disco interno e il disco esterno? O emerge spontanea tra l’angolo delle punte o la loro lunghezza e spessore?

Quindi nel seguito illustreremo come progettiamo una Stella Marina Virtuale, il suo DNA digitale, la sua popolazione e l'algoritmo genetico che farà evolvere la specie,immersa in un ambiente marino virtuale, dotato di cibo, predatori e topologia simile a un fondale marino tangibile.

L'algoritmo genetico che implementeremo per far evolvere popolazioni di Stelle Marine Virtuali ci mostrerà, se adottano per evoluzione una certa forma e un certo numero di punte, riuscirà a sopravvivere in quel ambiente e proveremo a indagare se la formare il numero di punte possano avere una qualche ragione geometrica particolare per determinare il successo di una tipologia di stella (per esempio una se una stella a 5 punte con determinate proporzioni auree tra raggio interno e raggio esternorispetto ad altre emerga spontanea nel simulatore come è accaduto in natura)o se il numero di punte che emergeranno sia il naturale compromesso tra beneficio che produce una punta e costo in termini di energia per gestirla, e in questo caso, cosi come in natura, variando la tipologia dell'ambiente, varierà anche soluzione adottata dalla stella marina virtuale. Nei prossimi paragrafi verrà quindi modellata l'entità Stella Marina Virtuale scendendo nel dettaglio, descrivendo anche il codice che traduce il genotipo nel fenotipo, e parleremo di come dalla forma e dal numero delle punte e del disco interno della stella possano emergere caratteristiche come velocità movimento, forza apertura cibo, velocità di nutrimento, consumo di energia, capacità di sopravvivere a attacchi stancando una delle punte, capacita percettive ecc.Verranno illustrati anche gli altri elementi del simulatore e il funzionamento dell'algoritmo genetico.

 

Comments powered by CComment

© 2018 sito prototipale studio di GiuseppeGi