Beiträge von Nicholas1991

NetzUnity und Informatik-forum wurden zusammengelegt. Eine entsprechende Ankündigung wird demnächst noch folgen. Für 2025 ist hier einiges geplant! Bei Fragen bitte per DM an Maximilian Rupp wenden.


    Naja, wenn du eine fixe Struktur hast und eine Population von 100 Netzen, die bessere Hälfte überleben lässt, die andere Hälfte durch Fortpflanzung jeweils 2 der besseren neu durch mischt, dann noch eine kleine Mutationsrate hast, wo du aber doch das ganze Netz neuinitialisierst (mit Random-Werten). Dann sollte es auch irgendwann auf eine bessere Lösung konvergieren. (Zumindest würde ich mir das erwarten. Mit den gewählten Parametern kann man sich natürlich ewig rumspielen. Dafür braucht man bei solchen genetischen Algorithmen fast nichts wissen.)

    Hmm, ich werde es weiter probieren ^^. Also jetzt erst mal fixe Struktur ok.



    Naja, aber du weißt ja nicht, ob sich die durchgesetzte Struktur überhaupt eignet, das Problem noch zu lösen. Möglicherweise kann es dann auch nicht mehr durch einen Wechsel der Fortpflanzungsstrategie trainiert werden.

    Da hast du recht. Ich gehe wie s.o. vor.


    Danke schonmal

    Verständnisfragen:
    Was meinst du mit "Struktur"? (Die Anzahl der versteckten Ebenen? Die Anzahl der Neuronen?)

    Also mein Vorgehen ist ja so, dass ich zwei Netze vergleiche, das stärkere (mehr gelöste Aufgaben) nehme und dann mit einer gewissen Zufälligkeit, die vom Verhältnis der Stärken abhängt, einzelne Werte mutiere.
    Das heißt, dass irgendwann natürlich alle Netze die gleiche Anzahl Ebenen und Neuronen hat. Das meinte ich mit Struktur. Denn es wundert mich, dass das testen der Netze immer schneller geht, je weniger unterschiedliche Strukturen (anzahl Ebenen und Neuronen) ich habe. Obwohl die Anzahl an Operationen die für jede Generation durchgeführt werden müssen immer gleich ist! (Logisch da: Gleich viele Netze pro Generation, für jedes Netz stumpfer Algorithmus, der das Ausgangssignal ausgibt).


    Verständnisfragen:
    Was meinst du mit "gleich viele Aufgaben [lösen]"?

    Ich habe 40 Bilder: 20 X-Bilder und 20 O-Bilder. Jedes Netzt bekommt diese Bilder gegeben und soll mir sagen ob es ein X oder ein O ist. Heißt also 40 "Aufgaben". Gelöst ist die Aufgabe natürlich, wenn das Bild richtig interpretiert wurde. Die Fitness ergibt sich dann also durch: #(richtig erkannt)/#(gesamt).



    Es wäre mE sinnvoller, die Konvergenzrate fixer Strukturen zu testen und dann die am schnellsten konvergierende Struktur auszuwählen.

    Das Problem ist, dass bei mir nicht mal fixe Strukturen konvergieren. Durch die zufällige Permutation wird das Ergebnis jedesmal wieder beliebig schlecht oder gut (obwohl ich nur gaaaaanz wenig zufällig permutiere).
    Und die Idee war natürlich auch, dass sich die bessere Struktur bei den ersten paar Generationen durchsetzt und ich dann automatisch mit einer halbwegs brauchbaren arbeite. Es setzt sich zwar eine Struktur durch, jedesmal wenn ich das Programm starte (siehe vorigen Post von mir). Das Problem ist nur, dass danach eben nichts mehr konvergiert und sich alles äußerst für mich unerklärlich verhält (siehe vorigen Post).

    Ich gebe zu ohne Code ist hier wohl nur raten möglich, aber ich muss mal gucken ob ich den Code soweit zusammenschneiden kann, dass jemand überhaupt Lust hat da reinzuschauen ^^.

    Hallo Leute,

    Folgendes:
    Ich wollte ein Programm schreiben, dass selber lernt ein handschriftliches "X" von einem handschriftlichen "O" zu unterscheiden. Grundidee hierbei war soetwas wie Neuronale Netze zu verwenden. Ich hab also meine Eingänge (4096 Stück (64x64 Pixel) als boolean (schwarz oder weiß)) und dann ein in Ebenen gegliedertes Netz, was letzlich in einem Ausgangs-Neuron mündet.
    Jedes Neuron hat dabei einen Eingang für Signale von jedem Neuron aus der Vorgängerebene. Jedes dieser Signale ist an einen Multiplikator gekoppelt, der dem Signal mehr oder weniger Gewicht geben kann. Dann werden also die ganzen Multiplikatoren zusammenaddiert (true => +multi, false => -multi) und wenn ein Grenzwert überschritten wurde, dann sendet das Neuron true weiter, sonst false. Am Ende spuckt also das Ausgangsneuron true (für X) oder false (für O) aus.
    Jetzt starte ich mit sagen wir 100 zufällig generierten Netzen. Anschließend teste ich ihre Fähigkeit die Bilder zu unterscheiden. Der Fitnesswert ergibt sich einfach als Summe der gelösten Bilder (und die Nachkommastellen aus der Anzahl der Neuronen, aber der Betrag ist momentan unerheblich). Habe ich alle Fitnesswerte bestimmt, möchte ich die nächste Generation erzeugen. Dafür nehm ich mir je zwei Netze (zufällig, aber keines zwei mal) und übernehme für das neue Netz die Struktur des besseren. Anschließend ergibt sich aus dem Quotient aus der Fitness des schwächeren durch die Fitness des stärkeren eine Wahrscheinlichkeit für eine Mutation (die Struktur bleibt aus Einfachheitsgründen starr, nur die Zahlenwerte wie Multiplikatoren und Grenzwerte mutieren) die dann aus dem Gewichteten Mittel besteht - mit der Fitness zum Quadrat als Gewicht. Zusätzlich kann noch mit einer gaaanz kleinen Wahrscheinlichkeit, zufällig ein Wert mutieren.

    Treibe ich das Spiel jetzt mit sagen wir 500 Generationen passiert folgendes:

    • Die Anfangsgeneration ist recht symmetrisch um 50% Erfolg verteilt mit einem Spitzenreiter um die 80% i.d.R..
    • Mit zunehmender Generations-nummer dünnt die Verteilug aus (was ja denkbar ist, weil immer die bessere Struktur übernomme wird und somit keine so große Vielseitigkeit existiert! Allerdings sind die auftretenden Peaks zufällig und chaotisch.
    • Je mehr die Peak ausdünnen, desto schneller testet das Programm die Generationen durch, obwohl ich etwas derartiges nicht implementiert habe! Im Extremen heißt das, sobald nur noch ein Peak da ist, braucht er nur noch 1 Sekunde pro Generation (je nach Anfangseinstellungen) während er für die ersten noch gut 30 Sekunden gebraucht hat.
    • Existiert nur noch ein Peak (alle Netze lösen gleich viele Aufgaben), so gibt es zwei deutlich zu erkennende Schwerpunkte um die jede Generation scheinbar zufällig streut (25% ud 70%) (also immer wechselnd, da ja jede Generation nur noch einen Peak aufweist).

    Folgende Fragen stell ich mir deshalb:

    • Wie muss ich die Netze mutieren lassen, damit ich halbwegs konvergentes Verhalten gegen einen Wert von über 50% habe (vorzugsweise über 90% ^^)?
    • Ist Java tatsächlich so genial zu erkennen, dass irgendwann nur noch eine Struktur vorliegt, sodass mein Programm deshalb auf einmal so schnell arbeitet, oder muss ein Programm-Fehler vorliegen?
    • Wenn alle Netze die gleiche Struktur haben und deshalb alle Fragen gleich beantworten, wie kann es dann sein, dass wenn ich einzelne mutiere, trotzdem alle Netze immer noch die gleiche Anzahl an Fragen beantworten, die aber deutlich von der vorigen Generation abweicht!

    Vielen Dank für Tipps und Hinweise :)


    P.S.: Ich verwende momentan 20 X und 20 O Bilder.

    Hallo Leute,

    ich schreibe gerade an einem Programm wo ich etwas mit Verschlüsselung rumspiele. Jetzt ist Java ja bei AES standardmäßig begrenzt auf 128-bit aus welchen Gründen auch immer. Mein Programm soll jetzt, damit garantiert ist, dass es auch mit 192 und 256-bit funktioniert, automatisch die neuen policies installieren (keine Angst, das Programm ist nur für mich und meine Freunde).
    Jetzt ist es ja so, dass wenn ein jdk installiert ist, dass dann dort nach den Policy-Files gesucht wird, sonst im normalen JRE Ordner:

    Zitat

    It is determined based on whether you are running JCE on a JRE with or without the JDK installed. The JDK contains the JRE, but at a different level in the file hierarchy.


    Meine Frage ist, wie ich den

    Zitat

    <java-home>

    Ordner herausfinde, da nicht auf jedem System die Umgebungsvariable für Java eingetragen ist.
    Außerdem stellt sich mir die Frage, wie ich auf Updates von Java reagieren soll? Da ich nicht weiß ob sich der Ordner eventuell ändert. Und zudem möchte ich eigentlich mein Progamm so gestalten, dass es nichts außerhalb des Ordners ändert, aus dem es ausgeführt wird.

    Gibt es vielleicht eine Möglichkeit die Policies zum Start des Programmes mit einzubinden?

    LG und Danke im Voraus

    Hallo Leute,

    hab seit kürzerem ein seeeehr nerviges Problem mit Java. Wenn ich z.B. Maple oder ein eigenes Gui-Programm starte, dann wird das zwar angezeigt, aber sobald sich auf dem Gui etwas ändert, wird es einfach schwarz und bleibt schwarz. Mauserkennung, wenn man die Position der Button errät funktioniert noch. Oder aber (in Maple vorallem) hat Java einfach Probleme den Bildschirminhalt zu aktualisieren.
    Bräuchte dringend Hilfe, weil im Netz irgendwie nichts zu steht.

    LG

    Nicholas

    P.S.:
    Java 6 u 23
    Win7 64bit

    Hallo Leute,

    ich hab hier mal ein interessantes Problem zum Postinkrement wie ich finde. Gleich zu Anfang: Ja, ich weiß der Code unten ist weder hübsch noch sinnvoll ^^. Aber es geht hier mehr ums Verständnis wann der Postinkrement-Operator "aktiv" wird.

    Unten der Code gibt aus (bevor lange geraten wird): 9

    Also ist meine Sicht der Dinge:

    • Auf die Variable c wird erst mal 0 addiert, weil der Postinkrement Operator zunächst den Zugriff auf die Variable abwartet.
    • Während dem Vergleich ist c offensichtlich auch noch nicht inkrementiert worden, da ==1 mit false angegeben wird. Deshalb wird 9+c zurückgegeben.
    • Da die Position 9 im Array ausgelesen wurde, wurde auch zu diesem Zeitpunkt noch nicht inkrementiert.
    • Jetzt findet die Zuweisung statt und c ist und bleibt 9. Wo hat jetzt die Inkrementierung stattgefunden?

    Welche Zeichen im Code dienen Java als Signal dafür, dass inkrementiert werden sollte?

    Code
    public class TEST {
        public static void main(String[] args) {
            int[] a = {0,1,2,3,4,5,6,7,8,9,10};
            int c = 0;
            c = a[ ((c += c++)==1 ? 5+c:9+c) ];
            System.out.println(c);
        }
    }

    Hallo Leute,

    ich würde gerne einen JTree benutzen um eine Liste von Dateien vernünftig mit ihren Überordnern anzuzeigen. Soweit kein Problem. Jetzt hätte ich aber gerne noch zusätzlich rechtsbündig die Dateigröße auf der jeweiligen Höhe des Blattes oder Knotens. Zusammen mit den horizontalen Linien die man da einstellen kann säh das bestimmt sehr nett aus.
    Also so etwa (nur mit horizontalen linien eben und icons etc.):

    Code
    Gesamt         5MB
        Ordner1    3MB
           Datei1  1MB
           Datei2  2MB
        Datei2     2MB



    Ich hab versucht es über setCellRenderer(myRenderer) zu lösen, aber leider streckt der mein Panel, dass ich zurückgebe, nicht über den gesamten Viewport...

    Hat da jemand eine Idee? Vielleicht auch wie man es vielleicht sonst mit nem JTable machen könnte, sodass man da auch den Einschub immer entsprechend hat? Also die Icons auch eingeschoben sind?

    Das nimmt aber das ganze Tetris-feeling, wenn der Sound hinterher hinkt. Hmm... so schnell ist wohl nicht mit ner Lösung zu rechnen wenn ich jetzt den Bug-report sende :shinner:, muss das wohl irgendwie anders in den Griff bekommen. Mal schauen. Ich meld mich wenn ich nen sinnvollen Workaround gefunden habe.

    Das Problem



    Und hier wie es dazu kommt:
    Ich habe ein Tetris spiel für mich und meine Freunde, Verwandte etc. programmiert mit dem man seinen Highscore online hochladen und dann vergleichen kann. Das Spiel läuft super auf Windows XP und Vista. Unter Windows 7 (x64 getestet) kommt es allerdings immer zu abstürzen. Und zwar immer dann, wenn der aktuell zu platzierende Klotz zu schnell hintereinander gedreht wird. Denn jedes mal wenn sich der Klotz dreht, wird ein Klick-Sound abgespielt. Das scheint zum Absturz zu führen, da:

    Zitat

    # Problematic frame:
    # C [jsound.dll+0x13ec6]



    Ein Beispiel-Programm liegt im Anhang.

    Hier der Thread der jedes Mal aufgerufen wird, wenn der Block gedreht wird:



    Ist ja im Prinzip das, was man überall im Internet zu Java und Sound findet, hab da das Rad jetzt nicht neu erfunden.
    Und wie gesagt, das Poblem trat bisher NUR bei Win7 x64 auf. Sowohl mit Onbard-Sound als auch mit Soundkarte (Realtek HD und Creative X-Fi).

    Freu mich auf eure Ideen :D

    Eigentlich war ich ja ganz zufrieden mit meiner Klasse ^^
    ABER irgendwie ist das nicht ganz so geschickt gelöst, wenn die ganzen UI Werte in der Klasse sind. Wenn jetzt jemand die Klasse verwenden wollen würde aber sein GUI nur eigene UIs verwendet, dann ist das ja ziemlich unsauber, wenn er jetzt trotzdem bei jedem erstellten ChatTextField die Farbwerte angeben muss. Also muss ja wohl irgendwie eine UI Klasse her. Das Problem ist: Ich habe keine Ahnung wie ich das realisieren kann. Ob mir da jemand helfen möchte? Ich hab auch den SourceCode vom JTextField und JTextFieldUI aber irgendwie blick ich nicht ganz durch, weil da anscheinend so viel vererbt wurde, dass die Klassen halb leer sind und ich keine Methoden finde, die irgendwas mit Hintergrundfarbe oder so zu tun haben.

    Hier mal die Überarbeitete Version.
    Meintest du das so mit dem Hintergrund?

    das mit dem this()-Aufruf ging beim zweien Konstruktor nicht, weil ich da schon Methoden der Superklasse aufrufe. Und da muss dann erst der Super-Konstruktor aufgerufen werden. Dann kann aber nicht mehr der this() aufruf folgen ^^. Also muss ich da etwas mehr tippen.