mutierende Software
Verfasst: 30.07.2010 15:57
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
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