Credito:Shutterstock
E se i computer potessero programmarsi da soli? Invece del laborioso lavoro di capire come un computer potrebbe risolvere un problema e poi scrivere precise istruzioni in codice, tutto quello che dovresti fare è dirgli quello che vuoi e il computer genererà un algoritmo che risolve il tuo problema.
Entra nel calcolo evolutivo, che può essere visto come un tipo di intelligenza artificiale e una branca dell'apprendimento automatico. Suggerito per la prima volta negli anni '50, il calcolo evolutivo è l'idea che un computer può evolvere le proprie soluzioni ai problemi, piuttosto che gli esseri umani devono passare attraverso una serie di passaggi possibilmente complessi per scrivere il programma per computer da soli. In teoria, ciò significherebbe che i programmi per computer che potrebbero richiedere settimane per essere programmati manualmente potrebbero essere pronti in pochi minuti.
Questa idea ha permesso ai computer di risolvere problemi complessi che potrebbero non essere ben compresi e che sono difficili da affrontare per gli esseri umani. Gli scienziati informatici hanno utilizzato il calcolo evolutivo su molti problemi, compresa la formulazione del miglior mix di ingredienti per l'alimentazione dei gamberetti, ottimizzazione del portafoglio, telecomunicazioni, giochi e confezionamento automatizzato.
E i ricercatori che studiano il calcolo evolutivo da oltre 60 anni hanno fatto enormi progressi. È anche oggetto di diverse riviste scientifiche. Ancora, come ho notato in un recente articolo, l'idea non è ancora ampiamente utilizzata al di fuori della comunità di ricerca. Allora perché l'informatica evolutiva non si sta evolvendo più velocemente?
Come funziona il calcolo evolutivo?
Il calcolo evolutivo si basa sui principi dell'evoluzione naturale di Charles Darwin, comunemente noto come sopravvivenza del più adatto. Questo è, i membri più deboli (meno adattati) di una specie muoiono e i più forti sopravvivono. Per molte generazioni, la specie si evolverà per adattarsi meglio al suo ambiente.
Albero di programmazione genetica. Credito:Wikimedia
Nel calcolo evolutivo, il computer crea una popolazione di potenziali soluzioni a un problema. Queste sono spesso soluzioni casuali, quindi è improbabile che risolvano il problema affrontato o addirittura si avvicinino. Ma alcuni saranno leggermente migliori di altri. Il computer può scartare le peggiori soluzioni, trattenere i migliori e utilizzarli per "allevare" più potenziali soluzioni. Parti di soluzioni diverse verranno combinate (questo è spesso chiamato "crossover") per creare una nuova generazione di soluzioni che possono quindi essere testate e il processo ricomincia.
Un altro elemento importante del calcolo evolutivo, come con la selezione naturale, è mutazione. Ogni tanto un piccolo, viene apportata una modifica casuale a una delle soluzioni testate. Ciò significa che possono essere create nuove potenziali soluzioni che non sarebbero possibili semplicemente utilizzando il crossover.
Si spera che una combinazione di crossover e mutazione produca nuove potenziali soluzioni migliori dei loro "genitori". Questo potrebbe non accadere ogni volta, ma man mano che vengono prodotte più generazioni, è più probabile che emergano soluzioni migliori. Non è insolito che il calcolo evolutivo coinvolga molti milioni di generazioni, proprio come la selezione naturale può impiegare molti milioni di anni per alterare notevolmente una specie vivente.
Uno dei tipi più popolari di calcolo evolutivo è la programmazione genetica. Ciò implica che un programma per computer evolva un altro programma di lavoro per affrontare un problema specifico. L'utente fornisce una certa misura di ciò che comprende un buon programma e poi il processo evolutivo prende il sopravvento, speriamo di restituire un programma che risolva il problema.
Possiamo far risalire la programmazione genetica alla fine degli anni '80, con uno dei principali sostenitori di essere John Koza. Ma anche se da allora ha compiuto significativi progressi nella ricerca, la programmazione genetica non viene utilizzata quotidianamente da organizzazioni commerciali o utenti di computer domestici. Considerato quanto possa essere difficile sviluppare sistemi software che funzionino in modo efficace ed efficiente, sembrerebbe sensato far sì che i computer aiutino nello stesso modo in cui stanno cambiando molti altri settori.
Perché non è stato adottato il calcolo evolutivo?
Il settore commerciale non ha abbracciato il calcolo evolutivo come ha altre tecnologie sviluppate dai ricercatori. Per esempio, La stampa 3D è stata inventata negli anni '80 e dopo un lungo periodo di sviluppo viene ora utilizzata nella produzione industriale e persino dalle persone nelle loro case. Allo stesso modo, realtà aumentata, la realtà virtuale e l'intelligenza artificiale sono emerse dalla comunità di ricerca e sono diventati prodotti importanti per le grandi aziende tecnologiche.
Uno dei problemi chiave che frenano il calcolo evolutivo è l'incapacità dei ricercatori di concentrarsi sui problemi che il settore commerciale riconoscerebbe. Per esempio, gli scienziati informatici hanno studiato a fondo come il calcolo evolutivo potrebbe essere utilizzato per programmare gli orari degli esami o elaborare percorsi per i veicoli.
Ma i ricercatori spesso studiano solo versioni semplificate di problemi che sono di scarsa utilità nel mondo reale. Per esempio, molte simulazioni di percorso di veicoli implicano il calcolo della distanza tra due punti utilizzando una linea retta. I percorsi dei veicoli nel mondo reale raramente seguono linee rette, e devono fare i conti con sistemi a senso unico, guasti, questioni legali (come quanto tempo prima che un conducente debba riposare), vincoli di tempo e molto altro ancora. Però, this complexity is actually where evolutionary computation could help. If you can adequately define the problem as it occurs in the real world, then the evolutionary algorithm should be able to deal with its complexity.
Another problem is that the solutions evolutionary computation generates are often hard to explain. Per esempio, even though a genetic programming system might create a solution with a perfect outcome, how it actually works might be a mystery to a human programmer as the system may have produced complex code that is difficult to interpret and understand.
An evolutionary computation system is also complex to implement and support and this may put off some commercial organisations. It would help if there was an easy-to-use framework that hid much of the underlying complexity. While these frameworks exist in the scientific community, they are not easily accessible by the commercial sector, never mind home users.
IBM's famous computer architect Frederick Brooks said that you cannot tackle increasingly large software development projects simply by throwing more people at them. It would be an immense help to the software development industry if, instead of having to manually develop every piece of a system, developers could specify the requirements of its key parts and let an evolutionary process deliver the solutions.
Questo articolo è stato originariamente pubblicato su The Conversation. Leggi l'articolo originale.