Ciao. La nostra ospite, questa settimana, è Stephanie Forrest, che è Professoressa di Informatica all'università del New Mexico, dove dirige il laboratorio di Calcolo Adattivo. Stephanie è anche un professore esterno al Santa Fe Institute e membro del Consiglio di Istituto Scientifico. Steph a lavorato per molti anni all'intersezione di informatica e biologia ed è un'esperta di algoritmi genetici che abbiamo studiato in questa unità. Quindi benvenuta, Steph Grazie mille! E' un piacere. Quindi è molto tempo che studiate gli algoritmi genetici abbiamo anche lavorato insieme su progetti di algoritmi genetici ma voglio portare la vostra attenzione sul perché sono importanti nello studio dei sistemi complessi. La prima cosa è che gli algoritmi genetici possono essere visti come un semplice modello di evoluzione darwiniana. Quindi, da un punto di vista della modellazione, essi catturano uno dei più importanti e misteriosi processi sulla terra - l'evoluzione. La seconda cosa è che il modello evolutivo darwiniano può anche essere visto come una specie di progetto di strategia. E' un progetto di strategia che è stato largamente usato in natura ma anche adottato come algoritmo di calcolo per aiutare a creare sistemi di ingegneria. E quindi gli algoritmi genetici sono largamente utilizzati anche in ingegneria. Quindi per andare avanti perché diciamo che l'evoluzione è misteriosa? Bene, perché prima di tutto nessuno puoi guardarla e dire "è questa". Quindi è un processo che, ritornando a Darwin, è stato proposto come spiegazione per capire come, il mondo in cui viviamo, diventa. Ma questo non è un processo che possiamo osservare. E molto difficile studiarlo sperimentalmente. Ci sono ora alcuni sistemi sperimentali che si possono studiare neile provette, come virus e batteri che seguono l'evoluzione e quindi possiamo studiarli sperimentalmente. Ma penso - quando confrontiamo il mondo intorno a noi è qualcosa di misterioso come il mondo diviene e sebbene io tenda a credere che il mondo è prodotto dall'evoluzione, non è sempre banale capire come può essere accaduto meccanicamente. Suppongo - d'altra parte - un altro misterioso aspetto dell'evoluzione sono le grandi transizioni in cui il sistema che si sta evolvendo compie un grande cambiamento organizzativo e l'azione, l'azione evolutiva ha luogo ad un differente livello organizzativo. E penso che persino oggi molti studiosi di evoluzione non potrebbero affermare di capire come questi cambiamenti possano aver avuto luogo. Quindi tu dici che gli algoritmi genetici sono modelli dell'evoluzione. Pensi che ci possono dare un'intuizione dell'evoluzione biologica? Sì. Potreste chiedere: "Come?". Bene, sono stati usati per modellare molti tipi di processi evolutivi di avvenimenti naturali - non solo biologici, a proposito. Ma nel regno delle scienze sociali potete pensare agli algoritmi genetici per modellare come si diffonde l'innovazione in una comunità. E come - si sono scritti dei libri sulla diffusione dell'innovazione e l'idea è che c'è veramente quell'idea e le mode si diffondono nella popolazione in un processo non diverso dalla evoluzione darwiniana. Quindi pensi che l'evoluzione darwiniana è un'idea utile, non solo in biologia, ma in altri campi. Assolutamente, assolutamente. Non affermerei che è solo un'idea. ovviamente, penso che sia un'idea importante, e certamente importante in molti sistemi complessi. Quindi su che cosa stai lavorando adesso? Di che cosa sei entusiasta? In particolare nel campo degli algoritmi. genetici Dieci anni fa ero interessata al mio vecchio campo, bene, sono stata sempre interessata al mio vecchio campo, ma particolarmente interessata al software. Sto pensando a come le infrastrutture software, cioè grandi collezioni di software per esempio, tutti i programmi che risiedono nel disco del computer che sono collegati a Internet - come queste collezioni cambiano nel tempo e se sono o meno soggette al processo evolutivo. E con questo mi sono interessata un po' più direttamente se fosse possibile o no l'evoluzione del software. Per esempio, potremmo progettare un programma anziché assumere un programmatore per scriverlo, potremmo utilizzare processi di evoluzione per produrre programmi. E sebbene non posso affermare che ho risolto questo problema, esattamente, questo mi ha portata in un problema più semplice che è usare l'evoluzione per evolvere e riparare i difetti o bug del software. Quindi l'idea è che tu mi dai un programma difettoso e faccio un certo numero di copie, tipicamente 40 copie del programma, e ciascuna di queste copie ha qualche mutazione casuale, non diversa dalla evoluzione genetica - da mutazioni genetiche - e poi noi usiamo un algoritmo genetico per selezionare i membri della popolazione che si adattano meglio, che passano - nel nostro caso l'adattamento è misurato in termini di suit di test di regressione. E dopo alcune generazioni l'evoluzione misteriosamente produce un programma che in molti casi elimina il bug. Wow. E' interessante. Lascerai i programmatori senza lavoro? Bene, potenzialmente. Voglio dire, penso che il software sia un grosso collo di bottiglia. E la manutenzione del software è un grosso collo di bottiglia. Quindi guardi all'economia del calcolo e dove vengono spesi i soldi, il 90% del costo del software è la manutenzione, cioè risolvere i problemi del software che sono stati identificati. Uno studi di due anni fa ha stimato i costi degli errori del software come 0,6% del PIL americano, che è un impatto economico significante. Quindi, anche se non togliamo il lavoro a tutti i programmatori, se acceleriamo la loro produttività forse sia proponendo soluzioni che loro possono controllare e decidere se accettare, o sostituendoli nel noioso compito di correggere i piccoli errori e lasciando che affrontino errori interessanti e complessi che non possono rimanere. Quindi quanto è lontano ciò da un prodotto commerciale? Bene, è molto lontano dall'essere un prodotto commerciale, ma fino ad ora siamo open source, in dominio pubblico, quindi tutti i nostri programmi sono disponibili sul nostro sito. Dovrei dire che non faccio questo lavoro da sola, lo faccio in collaborazione con un professore dell'Università della Virginia, che sa molto dell'ingegneria del software, e dei linguaggi di programmazione rispetto a me. Si chiama Westley Weimer. E noi due abbiamo - penso che entrambi ci siamo sorpresi per i risultati positivi del progetto. Recentemente abbiamo completato un grande studio su più di 150 bug selezionati casualmente e siamo riusciti a correggerne più del 50% al primo tentativo. Wow, questo è molto interessante. Grazie, è molto più di quello che riescono a fare molte persone. Meglio di ciò che posso fare io, è imbarazzante ammetterlo, ma - Bene, non ne hai bisogno se hai un algoritmo genetico che lo fa. Bene, ma come lo usiamo e come lo inseriamo nel programma generale è ancora una domanda aperta, per noi. Quindi hai parlato di questa idea di algoritmi genetici che creano automaticamente dei programmi, non solo li correggono. So che c'è un grande campo, chiamato programmazione genetica, che ha provato ad affrontarlo. Quanto pensi che sia difficile questo? Abbiamo visto un esempio nel nostro corso creando un semplice programma per muovere un robot su uno schermo e fargli fare certe azioni. Ma la domanda è quanto è difficile allargare il problema a programmi veramente complessi? Pensi che succederà? Non credo che succederà presto. Infatti, voglio farvi notare che il problema che affronta l'algoritmo genetico è un problema che inizia da zero. E una delle ragioni per cui siamo stati capaci di avere un tale successo nel dominio del correggere gli errori del software è che stiamo iniziando da un programma che è corretto al 99,999%. E' corretto in tutto eccetto che c'è un bug. E stiamo cercando di correggere il bug. Gli studiosi dei programmi genetici cominciano dall'altro capo e non so quale capo sia migliore sul lungo periodo. La mia teoria è prendere quello che abbiamo fatto con i programmi di lavoro, o parzialmente i programmi di lavoro e guardare avanti iniziando a pensare come aggiungere funzionalità ad un programma che già in parte sta lavorando. E forse questa è la differenza tra l'evoluzione e l'origine della vita. Non lo so. Bene, grazie . E' stato bellissimo. Prego. E' divertente e i sistemi complessi sono meravigliosi. Ok, grazie.