Forum: PC-Programmierung Genetische Algorithmen: Vererbung/Kreuzung auf Programmebene


von Kaj G. (Firma: RUB) (bloody)


Lesenswert?

Ich beschäftige mich gerade ein wenig mit Genetischen Algorithmen / 
Evolutionsstrategien.
Dabei stellt sich mir jetzt folgende Frage:

Gibt es Vererbung/Kreuzung auf Programmebene?

Sinngemäß so: Es gibt Programm A und Programm B.
Programm A und B finden sich, steigen in die virtuelle Kiste, und raus 
kommt Programm C mit vererbten Eigenschaften aus Programm A und B.

Hat da jemand vielleicht ein, zwei Schlagworte nach denen man in diesem 
Zusammenhang suchen kann?

Grüße

von Irgendwer (Gast)


Lesenswert?


von c. m. (Gast)


Lesenswert?

ich kenne genetische algorithmen nur im zusammenhang mit 
parametrisierten systemen, bei denen in jeder generation die am besten 
abschneidenden individuen gekreuzt werden.
ganze programme, die code an nachkommen vererben, um bessere 
programmpopulationen zu erzeugen… oh jeh ;)

von Narf (Gast)


Lesenswert?


von Wolfgang A. (Gast)


Lesenswert?

Kaj G. schrieb:
> Sinngemäß so: Es gibt Programm A und Programm B.
> Programm A und B finden sich, steigen in die virtuelle Kiste, und raus
> kommt Programm C mit vererbten Eigenschaften aus Programm A und B.

Das würde voraussetzen, das Programm A und B "genetisch" so weit 
verwandt sind, dass lebensfähige Nachkommen entstehen können. Das 
funktioniert auf Parameterebene. Nichtlineare Suchstrategien nutzen das 
gerne. Das Trainieren von neuronalen Netzen ist eine weitere Anwendung.

von Kaj G. (Firma: RUB) (bloody)


Lesenswert?

Irgendwer schrieb:
> https://de.wikipedia.org/wiki/Objektorientierte_Pr...
Nicht lesen und nicht verstehen, aber hauptsache irgendeinen Mist 
posten. Ab in die Ecke mit Dir! OOP hat absolut gar nichts mit meiner 
Frage zu tun.

c. m. schrieb:
> ganze programme, die code an nachkommen vererben, um bessere
> programmpopulationen zu erzeugen… oh jeh ;)
Stell dir vor, du kreuzt Windowsversionen, immer und immer wieder und 
irgendwann kommt durch die Evolution ein Linux dabei raus :P

Wolfgang A. schrieb:
> Das würde voraussetzen, das Programm A und B "genetisch" so weit
> verwandt sind, dass lebensfähige Nachkommen entstehen können.
Das habe ich jetzt implizit vorausgesetzt. Das eine Kreuzung aus MS-Calc 
und dem MS-Sperrbildschirm nicht sinnvoll ist sollte klar sein :D
Ich könnte mir das ganze so vorstellen (und zur vereifnachung nehmen wir 
jetzt mal eine Scriptsprache als Beispiel, z.B. Python):

Man hat 2 Scripte wo Code drin steht.
Beide Scripte sind eigenständige Programme.
Bestimmte Codeabschnitte markiert man nun als "vererbbar".

Jetzt könnte es ein drittes Programm geben (der Paarungsakt sozusagen) 
das die beiden Scripte nach vererbbaren Eigenschaften durchsucht, und in 
einer neuen Datei rekombiniert -> Programm C ist geboren.

Für compilierte Sprachen wie C köntne ich mir statt der 
Code-/Scriptdateien Libs vorstellen.

Der "Paarungsakt" wäre der "Genetische Algorithmus" und die vererbbaren 
Eigenschaften von Programm A und B wären die "Parameter" dazu.
Könnte man das so stehen lassen?
Wie könnte man den "Paarungsakt" bezeichnen?
Wäre das so eine Art Linker/Codegenerator?

Grüße

von fry (Gast)


Lesenswert?

Das Hauptproblem ist, dass eine Script-Sprache oder auch jede andere 
Programmiersprache sehr komplex ist und du durch Zufall + 
Selektion(=Evolution) keinen lauffähigen Code in einem annehmbaren 
Zeitfenster erzeugen kannst.

Man muss sich also von dieser sehr komplexen Ebene lösen und dafür habe 
ich vor einiger Zeit mal etwas im Netz gefunden:

http://www.millermattson.com/dave/?p=174

Wirklich ein guter Artikel mit tollem Beispiel. Wenn du was Schönes 
damit bastelst, kannst du es hier  ja mal teilen, würde mich nämlich 
auch sehr interssieren.

von Paul B. (paul_baumann)


Lesenswert?

Kaj G. schrieb:
> Gibt es Vererbung/Kreuzung auf Programmebene?

Das nehme ich an, denn meine Mutter konnte noch schlechter programmieren 
als ich.

mfG Paul

von Fpgakuechle K. (Gast)


Lesenswert?

Kaj G. schrieb:

>
> Gibt es Vererbung/Kreuzung auf Programmebene?

> Hat da jemand vielleicht ein, zwei Schlagworte nach denen man in diesem
> Zusammenhang suchen kann?
>
> Grüße

"Core war" ist eine akademische Spielerei aus den 80igern in der 
Programme in einer Assemblerähnlichen Sprache gegeneinander "kämpfen". 
Daraus haben sich auch Ansätze entwickelt Evolution in Pseudo-Assembler 
nachzuempfinden:

http://www.koth.org/info/evolving_warriors.html

https://de.wikipedia.org/wiki/Core_War
https://de.wikipedia.org/wiki/Avida

MfG,

von Kaj G. (Firma: RUB) (bloody)


Lesenswert?

Danke fry und Fpga Kuechle, ich werd mir die Links gleich mal anschauen 
:)

von Gustl B. (-gb-)


Lesenswert?

Das hat sogar mal Jemand mit Hardware gemacht, also ein Fpga mit Zufall 
konfiguriert und dann jeweils die Bitstreams gemixt und das vererbt was 
am ehesten das Ziel erfüllt hat. Keine Ahnung ob das auch mit modernen 
FPGAs noch geht, aber war sehr cool.
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.50.9691

von Irgendwer (Gast)


Lesenswert?

Kaj G. schrieb:
> Irgendwer schrieb:
>> https://de.wikipedia.org/wiki/Objektorientierte_Pr...
> Nicht lesen und nicht verstehen, aber hauptsache irgendeinen Mist
> posten. Ab in die Ecke mit Dir! OOP hat absolut gar nichts mit meiner
> Frage zu tun.
Ich halt halt Fehler begangen anzunehmen deine Frage währe ernst gemeint 
und nur etwas unglücklich formuliert. Aber Hauptsachen mal irgendeinen 
beleidigenden mist geantwortet anstatt die Antwort zu ignorieren oder 
mal drüber nachzudenken ob die eigene Frage vielleicht etwas mehr 
Erläuterung bedarf?

Kaj G. schrieb:
> Stell dir vor, du kreuzt Windowsversionen, immer und immer wieder und
> irgendwann kommt durch die Evolution ein Linux dabei raus :P
Auf so einen wirren Blödsinn kann ja kein normaler kommen...

von Fpgakuechle K. (Gast)


Lesenswert?

Gustl B. schrieb:
> Das hat sogar mal Jemand mit Hardware gemacht, also ein Fpga mit Zufall
> konfiguriert und dann jeweils die Bitstreams gemixt und das vererbt was
> am ehesten das Ziel erfüllt hat. Keine Ahnung ob das auch mit modernen
> FPGAs noch geht, aber war sehr cool.
> http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.50.9691

Hm, darüber habe ich vor Jahrzehnten in der ct gelesen. Das kam aus dem 
Bereich Spracherkennung, das System konnte das gesprochene "Ja" von 
gesprochenen "Nein" unterscheiden. War wohl sehr speziell auf diesen 
Ur-FPGA XC6200 zugeschnitten: 
http://web.cecs.pdx.edu/~mperkows/temp/May13/PE014.XC6200Ahmad.pdf

Mal schnell nach Adrian Thompson gesucht findet das:
https://shop.heise.de/katalog/der-evolution-ihre-tricks-abgucken
http://www.damninteresting.com/on-the-origin-of-circuits/
https://en.wikipedia.org/wiki/Evolvable_hardware

Das trifft aber IMHO eher auf das Konzept: "Das
funktioniert auf Parameterebene." als auf Programm-Code zusammenwürfeln.

MfG,

von Daniel A. (daniel-a)


Lesenswert?

Kaj G. schrieb:
> Jetzt könnte es ein drittes Programm geben (der Paarungsakt sozusagen)
> das die beiden Scripte nach vererbbaren Eigenschaften durchsucht, und in
> einer neuen Datei rekombiniert -> Programm C ist geboren.

Das Erscheint mir nicht besonders sinvoll. Was nützt es, wenn ein 
Programm Funktionen übernimmt, auf welche es nicht zugreift weile es 
nichts damit anzufangen weiss? Bzw. wie soll das Programm enscheiden, 
wann es welche Funktionen verwendensoll?

Ich habe einmal mit einem fixen Funktionsumfang und Punkten in einem 2D 
Raum + etwas Zufall experimentiert:
https://old.danielabrecht.ch/Projekte/Simulationen/evolutionaererAlgorithmus/

Das Program habe ich geschrieben, als ich noch am C++ lernen war, daher 
enthält es einige unschönheiten und fehler. Man kann aber dennoch 
spannende Dinge sehen, z.B. fliehen die Punkte manchmal vor ihren 
Feinden oder verfolgen sie, oder es entsteht ein schwarm... Am ende 
sterben aber immer alle oder die Roten aus.

Ich habe später mal versucht das selbe in JavaScript zu machen. Ich 
hatte dort weniger spezifische funktionen, mit der die Punkte mehr 
machen hätten können. Dabei habe ich etwas wichtiges gelernt: Wenn man 
zuviel Spielraum lässt werden sinvolle Kombinationen derart 
unwarscheinlich, dass diese nichtmehr entstehen, und es passiert nichts 
spannendes mehr.

von Gustl B. (-gb-)


Lesenswert?

Also Thompson hat tatsächlich einfach Bitfiles gemixt und damit neu 
konfiguriert, also kein HDL Code. Auf Sprachebene wie bei C stelle ich 
mir das sehr schwierig vor weil die Syntax ja stimmen muss und nicht ein 
einzelnes Bit unabhängig von allen anderen Bits eine Eigenschaft (wie im 
Bitstream) festlegt. Man könnte das dann höchstens auf größerer Ebene 
machen, also ein Gen ist das nicht ein Bit sondern bei C eine in sich 
funktionierende abgeschlossene Anweisung. Oder ein AMS Befehl.

Mit FPGAs finde ich das sehr spannend weil heutzutage sind die ja 
partiell rekonfigurierbar, man könnte also das komplett im FPGA laufen 
lassen die Evolution. Das Mixen der Bitfiles, die Evaluation der 
aktuellen Generation und die Konfiguration. So dass man am Ende sehr 
viele Generationen in sehr kurzer Zeit durchspielen kann und sehr viel 
schneller zu einem guten Ergebnis kommt wie wenn man das mit dem 
Computer macht.

von Patrick (Gast)


Lesenswert?

Kaj G. schrieb:
> Sinngemäß so: Es gibt Programm A und Programm B.
> Programm A und B finden sich, steigen in die virtuelle Kiste, und raus
> kommt Programm C mit vererbten Eigenschaften aus Programm A und B.

Nichts anderes macht dieses Forum hier.

Ein Anfänger kommt mit einem Programm A, das nicht tut, was er möchte. 
Einer der Möchtegernprofis erinnert sich an Programm B, das zwar etwas 
ganz anderes tut, aber da in beiden das Wort "int" vorkommt, denkt er, 
dass es geeignet wäre, dem Anfänger zu helfen.
Aus beiden Ansätzen friemelt Möchtegernprofi Programm C. Das tut auch 
nicht, was Anfänger möchte, aber sowas von gar nicht mehr. Das Wort 
"int" kommt in C noch häufiger vor als in A und B.
Also in jeder Hinsicht ein evolutionärer Erfolg.

von Richard H. (richard_h27)


Lesenswert?

Vielleicht geht es gar nicht um den evolutionären Erfolg, sondern man 
möchte möglichst viele ausgefallene Varianten der Kreuzung darstellen, 
wie in diesen zahlreichen Filmen im Internet, die auch überwiegend* 
Praktiken zeigen, die zu keinem evolutionären Erfolg führen können.

* Meine Enschätzung, ich habe aber nicht alle Filme gesehen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.