Seite 1 von 3

mutierende Software

Verfasst: 30.07.2010 15:57
von teamO
Hi an alle,

Seit einiger Zeit beschäftigt mich die folgende Frage: Ist es möglich ein Programm zu schreiben, dass - der Evolution nachempfunden - sich immer wieder kopiert und dabei "Fehler" oder "Mutationen" einbaut und dann diese mutierten Kopien ausführt (sofern sie lauffähig sind...) und sich so immer weiter entwickelt?

mich interessiert hier weniger die praktische Umsetzbarkeit (dh. eigentlich interessiert es mich schon, aber ich glaub nicht, dass ich als Einzelperson und hobbyprogrammierer sowas jemals hinbekomm...), sondern eher was ihr glaubt, ob es theoretisch möglich wäre.

Meine erste Idee war es ein einfaches Programm zu schreiben, dass nichts tut, außer Kopien von sich zu erzeugen und dabei manchmal zufällig neue bytes einzufügen, oder bestehende zu verändern. Aber als ich mich dann aber ein bisschen in maschienencode eingelesen hab, bin ich schnell zu dem Ergebnis gekommen, dass dabei dann vielleicht 0.0001% oder noch weniger (jedenfalls viel zu wenig) der erzeugten Mutationen lauffähig wären.

Dann habe ich mir überlegt, dass man vielleicht ähnlich dem "horizontalen Gentransfer" in der Natur (dabei wird DNA von anderen Lebewesen in das eigene Erbgut eingebaut) die Festplatte nach anderen ausführbaren Dateien durchsuchen könnte und daraus schnipsel in die Kopie einfügen könnte. das würde den Anteil der ausführbaren dateien vermutlich um ein paar Größenordnungen erhöhen. Wahrscheinlich wäre er aber immer noch viel zu klein.

Möglicherweise könnte man auch eine einfache Programmiersprache verwenden. In der exe wird auch der Sorcecode des Programms gespeichert. Der wird dann verändert. Zum Besipiel indem zufällig Befehle aus einer Befehlsbiliothek ausgewählt werden (syntax muss natürlich auch beachtet werden...). Dann wird der code kompiliert (wenn das fehlschlägt werden andere befehle ausgewählt und erneut kompiliert) und in die exe kommt dann logischerweise der veränderte sorcecode.
Das Elternprogramm könnte dann gelöscht werden, damit die Festplatte nicht ihre Kapazitätsgrenze erreicht...

Dann würde noch ein Mechanismus zur Selektion fehlen, aber ich denke das wäre einfacher zu Realisieren als die Mutation. Man könnte die Programme zum Beispiel um eine knappe Ressouce (zb. CPU-Kapazität, Festplattenkapatzität, RAM) konkurieren lassen.

Was haltet ihr von den Ideen? Habt ihr andere Vorschläge?

Grüße, TeamO

Re: mutierende Software

Verfasst: 30.07.2010 16:11
von DarkDragon
Die nächst höhere Stufe als Bytekombinationen zu testen wäre es dann Bytes sinnvoll einzufügen, d.h. die OpCodes eben so einsetzen wie sie sinn machen, bzw. zumindest halbwegs. Also sowas wie Jumps in den ungültigen Speicherbereich weglassen etc..
Aber ich würde sowieso auf eine ganz andere Ebene runtergehen und nur Turingmaschinen oder WHILE/GOTO Programme bzw. µ rekursive Funktionen modifizieren. Das macht dann auf jeden Fall mehr Sinn wenn man da was einfügt/entfernt etc.
Nur für sowas wie "der stärkere gewinnt" wie in Darwins Evolutionstheorie muss man dann auch noch eine Schnittstelle implementieren, durch die ein Programm ein anderes "töten" kann.
Was ich allerdings auch sehr interessant finde ist sowas hier:
http://www.youtube.com/watch?v=F0OHycypSG8
Soweit ich weiß haben die Wesen einige Jahre lang ihr eigenes Verhalten erlernt und können jetzt ein Ziel erreichen.

Re: mutierende Software

Verfasst: 30.07.2010 18:43
von mbuettner
Also so in der Form wüsste ich nicht, das es geht, aber schau mal bei Wikipedia unter Game of Life (http://de.wikipedia.org/wiki/Game_of_Life)

Re: mutierende Software

Verfasst: 30.07.2010 18:44
von ZeHa
Naja der wesentliche Unterschied wird wahrscheinlich darin liegen, daß bei einem Programm ein einziges geändertes Bit/Byte mit großer Wahrscheinlichkeit dazu führen wird, daß es komplett nicht mehr lauffähig ist (es sei denn, man erwischt z.B. einen GUI-String, aber das Ergebnis ist dann auch nicht grad spektakulär :mrgreen: ). Wenn dagegen ein Lebewesen in irgendeiner Form mutiert, dann ist das (meines Wissens nach) so, daß die Änderungen sehr geringfügig sind (z.B. die Augen können ein bißchen besser mit Dunkelheit umgehen oder die Zehen werden ein kleines wenig länger, kA), und sich dadurch über die Jahre hinweg etwas neues bilden kann. Natürlich gibt es auch wesentlich sichtbarere Mutationen, z.B. daß ein Wesen drei Augen hat statt zwei, aber das ist ja erstens sehr selten und wird dann auch meist nicht weitervererbt.

Jedenfalls halte ich sowas bei Software für ausgeschlossen, denn wie schon gesagt, die meisten Mutationen die durch "fehlerhaftes Kopieren" entstehen (in der Biologie ist das meines Wissens der gleiche Grund) sind hinterher an irgendeiner Stelle kaputt. Man müßte es also eher hinkriegen, daß ein Programm sich nur minimal ändert, ohne damit den Programmfluß komplett zu verhindern.

Du könntest aber zum Experimentieren eine ganz simple, eigene "Sprache" erfinden (oder sowas wie Brainfuck nehmen) mit einem Interpreter und dann ein Programm schreiben, das das Programm nach jedem Durchlauf kopiert mit einer gewissen Fehlerrate. Wenn die Sprache und auch das darin geschriebene Programm entsprechend designed ist, könnte sich damit vielleicht schon eher was cooles ergeben. Man bräuchte so eine Art unveränderbares Hauptprogramm und dann den veränderlichen Teil eher so "konfigurationsmäßig" bzw. skriptartig, sodaß z.B. das Hauptprogramm ein festes Gerüst darstellt und nur an bestimmten Stellen der Skript-Code ausgeführt wird.

Re: mutierende Software

Verfasst: 30.07.2010 19:21
von NicTheQuick
Es gibt schon Programme, die sich selbst ändern um ihre eigenen Fehler zu kompensieren. Diese entbuggen sich sozusagen von selbst. <)

Und ein Kommilitone von mir interessiert sich auch gerade sehr für dieses Thema im Rahmen seiner Bachelor-Arbeit und hat auch schon etwas gefunden, wo man Javacode zur Laufzeit ändern kann. Dabei schmiert das Programm aber auch direkt ab, sobald man Syntaxfehler injiziert hat.

Re: mutierende Software

Verfasst: 30.07.2010 19:34
von Vera
ZeHa hat geschrieben:Naja der wesentliche Unterschied wird wahrscheinlich darin liegen, daß bei einem Programm ein einziges geändertes Bit/Byte mit großer Wahrscheinlichkeit dazu führen wird, daß es komplett nicht mehr lauffähig ist
Ja und wenn man berücksichtigt, dass der Mensch nur 10% seines Gehirns nutzt, also die Natur immer großzügige Kapazitäten anbietet, müßte der Code mit viel, scheinbar unnützen Funktionen aufgefüllt werden.
Hinzu kommt, dass 'Evolution' nicht vornehmlich durchs 1:1 kopieren erfolgt (wir ja keine Klone), sondern bei einer neuen Vermischung (Anordnung) passieren kann.

Also müßte ein Programm auf ein Funtionsrepertoire zugreifen können, das jeweils neu eingebunden und strukturiert wird, woraus sich neue Abläufe ergeben können sollten.

Ein Editor mutiert zu einer Gedichtsmaschine durch kreative Nutzung der Rechtschreibkontrolle.

Eine 'Programmevolution' durch Kopiermutation kann nicht ausgeschlossen werden, aber ich halte es für ziemlich unwahrscheinlich.

Gruß ~ Vera

Re: mutierende Software

Verfasst: 30.07.2010 19:39
von STARGÅTE
Ich glaube das sich Programme kopieren können und sich dabei verändern können geht relativ leicht "mit den richtigen Mitteln".
Wo ich das Problem sehe ist jedoch, wie ein Computer entscheiden will, ob sein produziertes Kind besser ist als er ?
Ich meine mit einfachen Größen vergleichen ist es ja nicht getan: Kind läuft schneller, also besser, Kind kann mehr, also besser.

Da mag vllt hier und da zum Ziel führen (mutierende Software), jedoch nicht zur echten Evolution ...
Dafür "denken" maschienen noch zu einfach.

Vielleicht kommt diese Evolution näher wenn sich die Digitale Welt die Quantenmechanik zu nutze macht.

Re: mutierende Software

Verfasst: 30.07.2010 19:53
von Josh
Vera hat geschrieben:Ja und wenn man berücksichtigt, dass der Mensch nur 10% seines Gehirns nutzt, also die Natur immer großzügige Kapazitäten anbietet, müßte der Code mit viel, scheinbar unnützen Funktionen aufgefüllt werden.
dann muss man auch noch berücksichtigen, wie lange sich diese 10% gehirn im laufe eines menschenlebens noch mit sachen wie z.b. sex beschäftigen, obwohl die reine arbeit um ein paar kinder zu zeugen in ein paar minuten erledigt wäre. wahrscheinlich müsste dann der code mit 99,99% unnützen sachen aufgefüllt werden :mrgreen:

Re: mutierende Software

Verfasst: 30.07.2010 22:29
von Thorium
Ich sehe den Sinn dahinter nicht so richtig.

Der Denkansatz CPU-Instruktionen mit DNA Bausteinen zu vergleichen hinkt.
Man könnte sich einen Satz an Funktionen schreiben, die in sich immer funktionieren, egal was aussen rumm passiert. Diese können dann beliebig neu geordnet werden. Ein nächster Schritt wäre es einen Baustein Parameter erzeugen zu lassen, die der andere nutzt.

Das könnte man sich auch ziemlich simpel grafisch ausgeben lassen.

Der praktische Nutzen ist gleich 0.

Re: mutierende Software

Verfasst: 31.07.2010 13:57
von ZeHa
Das was Vera sagt ist auch sehr wichtig, hab ich gar nicht drangedacht. Wir vermehren uns ja tatsächlich nicht durch eigenes Kopieren, sondern durch Mischen. Das heißt Du müßtest z.B. Microsoft Word und OpenOffice Writer sich paaren lassen, ein paar Dinge mutieren lassen und dann schauen, was hinterher dabei rauskommt :mrgreen: