Anwendung soll eigenständige Weiterentwicklung vollziehn
-
Wieso nicht eine Skriptsprache implementieren?
Die Erweiterungen kannst du so in eine Datei schreiben und ausführen
-
Dynamisch Code zu generieren kann schon Sinn machen und in LISP ist das auch durchaus üblich, aber niemand würde auf die Idee kommen in einem C++ Programm sowas zu machen
-
für sowas ist python ziemlich gut geeignet, da gibts auch schon mehrere libs für:
http://www.paraschopra.com/sourcecode/GP/index.php
http://www.freenet.org.nz/python/pygene/
http://sourceforge.net/projects/pygp/
-
Ein Programm das selbstständig neuen code implementiert einfügt und ausführt... hmmmmmmmm :xmas2:
-
Hi,
ich sehe den Nutzen von selbstmodifizierendem Code nicht so richtig.
Ein Programm kann immer nur die Änderungen an seinem Code vornehmen, die Du bereits beim Entwurf vorgesehen hast. Wenn Du aber schon beim Entwurf selber weist, welche Modifikationen du dem Programm ermöglichen willst, dann kannst Du sie auch gleich einprogrammieren.
Ob das nun durch Paraetrisieren erfolgt oder durch Vererbung z.B. unter Verwendung von Fabrikmethoden das ist dann nur noch eine Frage der konkreten Realisierung.
Ein gutes Beispiel eines sich selbst optimierenden Programs ist das alte Novell-Serversystem. Das reagiert mit seinem Verhaltensehr gut auf sich ändernde Anforderungen, aber da wird kein Quelltext umgeschrieben, sondern lediglich vom System selbst an den Stellschrauben des Systems gedreht.Gruß Mümmel
-
@muemmel
Ich kenne mich mit Evolutionary Programming nicht genau aus. Aber so weit ich weiß nimmt man einfach bestehenden Code, der das Problem vielleicht schon löst (aber eben noch nicht perfekt) oder zumindest den gewünschten Lösungsansatz enthält und modifiziert dann diesen Code. In dem man Operationen hinzufügt, wegnimmt oder Parameter anpasst etc. Dann bewertet man den Code im Vergleich zum vorherigen Code, ob die Lösung besser oder schlechter ist und wenn sie besser ist, dann nimmt man den neuen Code als Ausgangsbasis für die nächste Mutation.Deshalb ist Lisp in dem Bereich ja auch _die_ Sprache, weil Code und Daten in Lisp das gleiche sind und wegen der Verschachtelung und der eher funktionalen Programmierung die Abhängigkeiten einfach aufschlüsseln kann und so die Mutationen eben sinnvoller betreiben kann.
-
muemmel schrieb:
Wenn Du aber schon beim Entwurf selber weist, welche Modifikationen du dem Programm ermöglichen willst, dann kannst Du sie auch gleich einprogrammieren.
das schliesst das anpassen nicht aus. du kannst oft nicht alle kombinationen erstellen. wir generieren fuer shader anhand von 'umgebungsparametern' zur laufzeit neue binaries, wir haben dabei weit mehr als 80bit an moeglichen kombinationen. schon fuer den cache von 2millionen dauert das bauen ewigkeiten. 80bit waere der tod, wie du dir sicher vorstellen kannst.
@topic
ich hab mal aus einem contest einen c-compiler in einer sourcedatei gefunden. den hab ich dann benutzt um zur laufzeit code zu generieren zum rasterisieren von code und bei einem weiteren program zum generieren eines raytracers der die scenenhierarchy im code eingebunden hat. das war recht spassig, aber leider langsammer als code mit vc++ generiert (wenn auch der zur laufzeit daten verarbeotem musste die in meinem experiment statisch waren, aber ich glaube der compiler in einer sourcedatei hat ueberhaupt keine optimierungen gemacht).ich wuerde an deiner stelle einfach den sourcecode auswerfen der in ein dll project includiert wird, das dann per gcc bauen und dynamisch einladen. sowas in der art hab ich mal benutzt, wobei bei mir ein server pro user in der dll assemblerstuecke zusammengewuerfelt und signiert hat. das hat wunderbar funktioniert. ist aber natuerlich nicht so optimal, gcc kann mit den richtigen flags weit aus besseren code generieren.
:xmas2: :xmas1:
-
So , zuerst einmal danke für die KONSTRUKTIVEN beiträge. Hab mich in der Zwischenzeit auch mal mit Mutationsengins ausseinandergesetzt. Jedoch meine ich gelesen zu haben , dass der prinzipielle code trotzdem gleich bleibt , was nicht optimal wäre.
Ich ignoriere an diese stelle mal die weniger angebrachten Aussagen einiger Benutzer und gehe mal auf die Fragen ein.
Warum nicht .NET oder Java: Ganz einfache Sache , da ich nicht von einer Laufzeitumgebung abhängig sein möchte , da diese zum einen sehreinschränkend sein kann und zum anderen auch etzwas an der Performance zieht. (Erfahrung)
Warum ich das machen will: Ist doch für die Fragestellung nicht relevant. Wer es dennoch wissen will kann mich ja persönlich Fragen.
Die vielen GUTEN Vorschläge (Lisp etc.) werd ich mir mal ansehn. Eine DLL würde ich aus diversen Gründen nur ungern verwenden , ich hätte das shon gerne in einer einzigen Datei und eine Scriptsprache würde ich aus selbigen Gründen auch nur ungern verwenden , da das Programm sich selbst auch eventuell für Linux erweitern soll (Ich weriss was ich machen muss und wie es anzuwenden wäre).
Wenn jemandem noch Lösungen einfallen kann er diese auch noch gern posten.
-
Pria schrieb:
Warum ich das machen will: Ist doch für die Fragestellung nicht relevant.
Doch. Du meinst eine Lösung für dein Problem zu haben, bei der du Code generieren willt. Vielleicht gibt es aber eine viel einfacher Lösung.
-
Hurd wird morgen fertig
Es hört sich so an wie das Perpetuum Mobile. Vermutlich hat das Projekt auch
vergleichbare Chancen.Um zu funktionieren müßte das Programm zur Feststellung kommen "hier muß ich etwas
tun", dann die Aufgabenstellung bzw das Problem forumulieren, dann einen Algorythmus
dazu entwickeln. Die technische Umsetzung dürfte dabei marginal sein.Denn man los. So etwas würde mir viel Arbeit ersparen ...