Hallo Unser Gastbeitrag diese Woche ist Stephanie Forrest. Sie ist Professor für Computerwissenschaften an der Universität von New Mexiko, wo sie die das Adaptive Computation Labor leitet Stephanie ist darüberhinaus externe Professorin am Santa Fe Institut und Mit-Vorsitzende des Wissenschaftsausschussess des Instituts Steph hat für viele Jahre an der Schnittstelle von Computerwissenschaften und Biologie gearbeitet, und sie ist Experte von Genetischen Algorithmen - die wir in dieser Lektion studiert haben. Willkommen, Steph! Vielen Dank. Es ist grossartig hier zu sein. Ich weiss dass du dich mit Genetischen Algorithmen seit langer Zeit beschäftigst wir haben sogar mal zusammen an Projekten mit Genetischen Algorithmen gearbeitet Aber ich wöllte gern deine Meinung hören, warum Genetische Algorithmen für das Studium komplexer Systeme von Relevanz sind Zum einen, Genetische Algorithmen können als ein einfaches Modell Darwin'scher Evolution betrachtet werden. Aus einer Modellperspektive betrachtet, erfassen sie einen der wichtigsten und mysteriösesten Prozesse auf der Welt: Evolution Zum anderen, kann das Modell der Darwin'schen Evolution auch als eine Art von Design-Strategie betrachtet werden. Es ist eine Design-Strategie, die umfassend in der Natur verwendet wurde, aber genauso auch als rechnergestützter Algorithmus eingesetzt wurde, um sich entwickelnde Systeme mit konzipieren zu helfen Genetische Algorithmen wurden demnach auch umfassend in der Entwicklung eingesetzt. Daran anknüpfend, Warum sagst du, dass die Evolution mysteriös ist? Nun ja, zum einen, man kann nicht draufschauen. Es ist ein Prozess der auf Darwin zurück geht Es war beabsichtigt als eine Erklärung wie die Welt, in der wir leben entstanden ist. Aber das ist kein Prozess den wir beobachten können bzw., es ist sehr schwierig diesen experimentell zu studieren. Es gibt jetzt einige experimentelle Systeme, die man im Reagenzglas studieren kann, wie Viren, Bakterien - die der Evolution ausgesetzt sind. Und diese kann man experimentell studieren. Aber ich glaube, wenn wir uns unser Umfeld näher betrachten ist es schon ein Mysterium (für mich), wie die Welt entstanden ist, und wie sogar - auch wenn ich dazu tendiere zu glauben dass die Welt durch Evolution entstanden ist - ist es nicht so trivial zu verstehen, wie das alles mechanisch geschehen ist. Und ein anderer Punkt ist, ein weiterer mysteriöser Aspekt der Evolution sind die sogenannten Hauptwechsel (major transitions), bei denen das sich entwickelnde System einigen bedeutenden organisatorischen Veränderungen ausgesetzt ist und wo der evolutorische Akt auf einer anderen organisatorischen Ebene stattfindet Und ich glaube, dass sogar heute, die meisten Menschen in der Evolution nicht behaupten würden sagen zu können, wie diese Veränderungen stattfinden. Du sagtest, dass Genetische Algorithmen Modelle für Evolution sind. Glaubst du, dass sie es vermögen uns irgendwelche Einsichten zu vermitteln in die biologische Evolution? Das denke ich, ja. Wie, so magst du fragen. Sie sind dazu verwendet worden, viele Arten von natürlich auftretenden, evolutionären Prozessen zu modellieren. - und im Übrigen: nicht nur biologischen - auf dem Gebiet der Sozialwissenschaften wurden die Genetischen Algorithmen in Modellen verwendet, wie Innovation sich in einer Gemeinschaft verbreitet. Leute haben Bücher über die Ausbreitung von Innovationen geschrieben. Und der Gedanke darin ist geknüpft daran, dass Ideen und Modeerscheinungen sich in der Population verbreiten durch einen Prozess, der der Darwin'schen Evolution nicht unähnlich ist. So, glaubst du dass die Darwin'sche Evolution eine nützliche Idee ist - nicht nur in Biologie sondern auch in anderen Bereichen? Absolut. Absolut. Ich würde nicht behaupten es wäre die einzigste Idee. Aber ich denke es ist eine wichtige Idee. Und ganz sicher relevant für das Studium komplexer Systeme. An was arbeitest du aktuell? Was reizt dich am meisten, speziell auf dem Gebiet der Genetischen Algorithmen? Vor ungefähr 10 Jahren fing ich an mich für mein Gebiet zu interessieren. Ich meine, ich war immer an meinem eigenen Gebiet interessiert. Aber ich fing besonders an mich für das Gebiet der Software zu interessieren. Darüber nachzudenken, wie Software-Infrastruktur, also grosse Sammlungen von Software zum Beispiel, all die Programme die sich auf Computer-Datenträgern befinden, welche mit dem Internet verbunden sind Wie diese grosse Ansammlung sich im Laufe der Zeit verändert, und ob diese Gegenstand evolutorischer Prozesse sind. Und dadurch wuchs mein Interesse daran ob es möglich wäre, Software evolutorisch zu entwickeln zum Beispiel, könnten wir ein Programm konzipieren anstatt einen hoch-trainierten Programmierer anzustellen, der das Programm schriebe. Könnten wir nicht evolutionäre Prozesse nutzen, um Programme zu erstellen? Und obwohl ich nicht behaupten könnte, dass ich jetzt genau dieses Problem gelöst habe führte mich dies zu einem potentiell leichteren Problem welches Evolution nutzt um Reparaturen an Softwarefehlern oder Bugs voranzutreiben Die Idee dabei ist, dass ich mir ein fehlerhaftes Programm vornehme und ich mache eine Anzahl von Kopien vielleicht so um die vierzig, und jede dieser Kopien hat einige zufällige Mutationen - nicht unähnlich den genetischen Mutationen - und dann verwenden wir einen Genetischen Algorithmus um die Mitglieder der Population zu selektieren, die am fittesten sind. In unserem Falle würde Fitness gemessen werden am Fortschritt der Testläufe. Und nach einigen Generationen würde Evolution - unmysteriös - ein Programm erschaffen, welches in vielen Fällen den Softwarefehler repariert hat. Das ist beeindruckend. Machst du Programmer damit arbeitslos? Hm. Potentiell ja. Ich denke jedoch das Software ein riesiger Flaschenhals ist. Und auch Software-Pflege ist ein riesiger Flaschenhals. Wenn wir uns die Ökonomie der Informatik anschauen, und wofür das Geld ausgegeben wird ... 90 Prozent der Softwarekosten fliesst in die Wartung. Und das meiste davon ist Debugging - das Ausbessern von identifizierten Softwarefehlern. Eine Studie, die jetzt ein paar Jahre alt ist, schätzte dass die Kosten von Softwarefehlern auf 0.6 Prozent des US-Bruttoinlandsprodukts. Und das ist ein signifikanter ökonomischer Einfluss. Wir werden sicherlich nicht alle Programmierer arbeitslos machen aber wir können sehr wohl ihre Produktivität erhöhen dadurch dass wir entweder Korrekturen vorschlagen und sie können das nachprüfen und entscheiden, ob sie das so akzeptieren wollen, oder wir übernehmen die mühsamen Tests und korrigieren kleine Fehler. Und überlassen es den Programmieren die interessanteren und komplexeren Fehler zu korrigieren. Ich schätze das wäre ein akzeptables Resultat. Wie weit ist dies von einem kommerziellen Produkt entfernt? Ziemlich weit. Wir haben darüber nachgedacht, aber bisher sind wir die Open-Source-Public-Domain-Route gegangen Alle unserer Programme sind verfügbar auf unserer Webseite. Ich sollte erwähnen, dass ich diese Arbeit nicht allein tue. Ich mache sie in Zusammenarbeit mit einem Professor der Universität von Virginia, der deutlich mehr von Softwareentwicklung und Programmiersprachen versteht, als ich es tue Sein Name ist Westley Weimer. Und wir beide haben uns gegenseitig überrascht, wie gut dieses Projekt gediehen ist. Kürzlich haben wir eine grosse Studie von über 150 Softwarefehlern fertiggestellt Welche zufällig ausgewählt waren. Und wir haben ziemlich verlässlich mehr als 50 Prozent korrigieren können. Beim ersten Versuch. Wow. Das ist wirklich beeindruckend. Danke. Das ist besser als die meisten Menschen tun könnten. Besser als ich es könnte, an diesem Punkt. - Es ist ein bisschen peinlich das zuzugeben. Du brauchst es ja auch nicht, wenn du deinen Genetischen Algorithmus hast, der das tun kann. Wie wir verwenden es und wie wir es in die Mainstream-Informatik einbringen werden ist noch immer eine offene Frage für uns. Du erwähntest die Idee von Genetischen Algorithmen, die automatisch Programme erstellen und nicht nur deren Fehler korrigieren. Es gibt da dieses grossen Bereich, Genetisches Programmieren, welcher versucht dieses Thema zu adressieren. Wie schwierig, glaubst du, ist solch ein Problem? Wir haben im Unterricht uns dazu ein Beispiel angeschaut ein einfaches Programm erstellend, einen Roboter auf dem Monitor herumzubewegen, verschiedene Aktionen ausführend. Die Frage ist, wie schwierig ist es dies mit komplexen Programmieren gleichzusetzen? Glaubst du das dies passieren könnte? Ich glaube nicht, dass dies auf die Schnelle passieren wird. Und in der Tat würde ich sagen, dass das Problem dass das Genetische Programmieren anspricht, bezieht sich auf das Problem des 'Bei-Null-Anfangens' Die Gründe dass wir in der Lage waren so erfolgreich zu sein wie wir waren in der Domäne der Fehlerkorrekturen war dass wir mit einem Programm angefangen haben, welches zu 99.999 Prozent korrekt war. Es war in jeder Hinsicht korrekt, ausser eines einzigen Fehlers. Wir haben lediglich versucht diesen einen Fehler zu korrigieren. Beim Genetischen Programmieren fangen die Leute am anderen Ende an. Und ich weiss nicht, welches Ende langfristig besser abschneiden wird. Meine Theorie wäre es, zu nehmen was wir geleistet haben mit funktionierenden oder teilweise funktionierenden Programmen und damit nach vorne zu schauen und darüber nachzudenken, wie man zu einem bereits funktionierenden oder teil-funktionierenden Programm noch Funktionalität hinzufügen kann. Vielleicht ist das der Unterschied zwischen Evolution und dem Ursprung des Lebens. Ich weiss es nicht. In Ordnung. Vielen herzlichen Dank. Das war wirklich grossartig. Gerne geschehen. Es hat Spass gemacht. Und komplexe Systeme sind etwas wunderbares. Okay. Danke.