Anwendung soll eigenständige Weiterentwicklung vollziehn



  • Moin,
    ich möchte ein intelligentes Programm schreiben , dass sich eigenständig an seine Umgebung anpasst. Dabei soll es sich selbst nach bedarf neuen Code hinzufügen und nicht benötigten entfernen können. Mein ziel ist es eine art KI zu studienzwecken zu entwickeln.

    Dabei habe ich allerdings zwei fragen:

    Als C#- und Java-Entwickler bin ich es gewohnt , direkten zugriff auf einen Kompiler zu haben ,der zur Laufzeit neue Instanzen meines Programms werfen kann. Jetzt stellt sich die Frage , wie es in C++ zu handhaben wäre.

    Ist es zudem sinnvoll einen Kompiler zu verwenden oder gibt es andere Möglichkeiten , sodass sich die Anwendung auf villeicht nur eine EXE beschränkt und zu dem perform läuft?

    Bedanke mich schonmal für die Hilfe.



  • Wenn du C# und Java eh schon kannst, wieso nimmst du dann nicht die?



  • Pria schrieb:

    Als C#- und Java-Entwickler bin ich es gewohnt , direkten zugriff auf einen Kompiler zu haben ,der zur Laufzeit neue Instanzen meines Programms werfen kann. Jetzt stellt sich die Frage , wie es in C++ zu handhaben wäre.

    z.b. mit sowas: http://www.softintegration.com/
    🙂



  • Lisp



  • mhm
    KI
    mach mal.

    Und verwende bitte Assembler dafür, dann kannst du wenigstens als Entschuldigung vorschieben dass Assembler jo SOOO kompliziert ist wenn nie etwas daraus wird.
    🙄



  • ich sag auch lisp.



  • hustbaer schrieb:

    mhm
    KI
    mach mal.

    Und verwende bitte Assembler dafür, dann kannst du wenigstens als Entschuldigung vorschieben dass Assembler jo SOOO kompliziert ist wenn nie etwas daraus wird.
    🙄

    Du bist ein Depp. Es steht nirgendswo geschrieben, dass so etwas nicht möglich ist. Deine eigenen Limits solltest du nicht auf andere Mitmenschen aufprojezieren. Begnüge dich damit dass DU es nicht kannst und versuch nicht andere zu demotivieren nur weil du der Dumme bist.



  • warum nicht bei c# bleiben - da kannst du ja dynamische assemblies generieren und ausfuehren

    aber ehrlich?
    das projekt klingt nach etwas was sowieso nichts wird {o;

    ich dachte auch mal an einem projekt eines "etwas" was "waechst" "lernt" usw - wie n tamagotchi #gg - nur ich hab genug andere projekte und weiss - ich wuerds eh nicht fertig machen (oder gar fertig "bekommen") #gg

    aber hei - mein derzeitiges projekt sieht auch vor das ich dynamische assemblies erstelle und bereits vorhandene modifiziere - viel erfolg {=



  • Pria schrieb:

    Moin,
    ich möchte ein intelligentes Programm schreiben , dass sich eigenständig an seine Umgebung anpasst. Dabei soll es sich selbst nach bedarf neuen Code hinzufügen und nicht benötigten entfernen können. Mein ziel ist es eine art KI zu studienzwecken zu entwickeln.

    Entweder ist die Umgbung so einfach, dass es sich nicht wirklich lohnt Code zu generieren, sondern nur ein paar beliebig kombinierbare Kommandos ausreichen, oder du generierst zufälligen Code, was wenig Erfolg haben wird, oder du überschätzt dich gewaltig, weil richtigen Code schreiebn schon für die meisten Menschen zu kompliziert ist und du nicht annähernd an den menschlichen Verstand ran kommen wirst, bei den Fragen die du stellst. Was für Code soll den generiert werden?



  • Reisswolf schrieb:

    hustbaer schrieb:

    mhm
    KI
    mach mal.

    Und verwende bitte Assembler dafür, dann kannst du wenigstens als Entschuldigung vorschieben dass Assembler jo SOOO kompliziert ist wenn nie etwas daraus wird.
    🙄

    Du bist ein Depp. Es steht nirgendswo geschrieben, dass so etwas nicht möglich ist. Deine eigenen Limits solltest du nicht auf andere Mitmenschen aufprojezieren. Begnüge dich damit dass DU es nicht kannst und versuch nicht andere zu demotivieren nur weil du der Dumme bist.

    ROFL 😃
    Der Depp bist du hübsch selber



  • Wie schon bereits gesagt: Lisp und Evolutionary Computing.



  • 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.


Anmelden zum Antworten