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.