Q - Learning Algorithmus Bug

Feeder

Bekanntes Mitglied
Hey,

nachdem ich versucht habe der Stackoverflowcommunity eine bessere Antwort herauszulocken, versuche ich es mal hier.
Ich versuche eine AI zu entwickeln, die zum späteren Teil einmal Astroids spielt. Nun soll aber das Q - Learning zu nächst allgemein funktionieren.
Die Brain Klasse sieht wie folgt aus:


Java:
package rlgame;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.encog.engine.network.activation.ActivationLOG;
import org.encog.engine.network.activation.ActivationLinear;
import org.encog.engine.network.activation.ActivationSigmoid;
import org.encog.engine.network.activation.ActivationSoftMax;
import org.encog.ml.data.MLData;
import org.encog.ml.data.MLDataSet;
import org.encog.ml.data.basic.BasicMLData;
import org.encog.ml.data.basic.BasicMLDataSet;
import org.encog.neural.networks.BasicNetwork;
import org.encog.neural.networks.layers.BasicLayer;
import org.encog.neural.networks.training.propagation.back.Backpropagation;

public class Brain {
    private ArrayList<ArrayList<Tuple>> biglist = new ArrayList<ArrayList<Tuple>>();
    BasicNetwork nn;
    BasicNetwork oldnn;
    private int index = 0;
    MLDataSet set = new BasicMLDataSet();

    public Brain() {
        nn = new BasicNetwork();
        nn.addLayer(new BasicLayer(new ActivationLinear(),true,29));
        nn.addLayer(new BasicLayer(new ActivationSigmoid(),true,20));
        nn.addLayer(new BasicLayer(new ActivationSigmoid(),true,20));
        nn.addLayer(new BasicLayer(new ActivationLinear(),false,5));
        nn.getStructure().finalizeStructure();
        nn.reset();
        oldnn = (BasicNetwork) nn.clone();
      
    }
  

    public void rlearn(ArrayList<Tuple> tupels, double learningrate, double discountfactor, boolean rememberTuples) {
        if(rememberTuples)biglist.add(tupels);
      
        //newQ = sum of all rewards you have got through
        for(int i = tupels.size()-1; i > 0; i--) {
            MLData in = new BasicMLData(29);
            MLData out = new BasicMLData(5);
          
            //Add State as in
            int index = 0;
            for(double w : tupels.get(i).statefirst.elements) {
                in.add(index++, w);
            }
          
            //Now start updating Q - Values
            double qnew = 0;
            if(i <= tupels.size()-2){
                qnew = tupels.get(i).rewardafter + discountfactor*qMax(tupels.get(i).stateafter);
            } else {
                qnew = tupels.get(i).rewardafter;
            }
          
            tupels.get(i).qactions.elements[tupels.get(i).actionTaken] = qnew;
            //Add Q Values as out
            index = 0;
            for(double w : tupels.get(i).qactions.elements) {
                out.add(index++, w);
            }
           
          
            set.add(in, out);          
        }
      
      
    }
      
    private double qMax(VectorND stateafter) {
        double[] qactions = oldnn.compute(new BasicMLData(stateafter.elements)).getData();
        double max = Double.MIN_VALUE;
        for(double w : qactions) {
            if(w > max) {
                max = w;
            }
        }
        return max;
    }


    public double[] getOutput(MLData input) {
        return nn.compute(input).getData();
    }
  
    public void experienceReplay(double learningRate, double discountFactor) {
  
        for(int i = 0; i < 10; i++) {
            Collections.shuffle(biglist);
            List<ArrayList<Tuple>> list = biglist.subList(0, (int)(biglist.size()*0.3));
            for(ArrayList<Tuple> tuples : list) {
                rlearn(tuples,learningRate, discountFactor, false);
            }
            Backpropagation prop = new Backpropagation(nn, set);
            prop.setLearningRate(learningRate);
            prop.iteration(10);
            System.out.println(prop.getError());
        }
      
        oldnn = (BasicNetwork) nn.clone();
        if(biglist.size() > 10000) {
            System.out.println("List trimmed.");
            while(biglist.size() > 10000) {
                biglist.remove(biglist.size()-1);
            }
        }
        set = new BasicMLDataSet();

    }
    public void addTuples(ArrayList<Tuple> tuples) {
        biglist.add(tuples);
    }


}

Die rLearn Methode evaluiert den Fehler bzw. den neuen Q - value, während die experienceReplay Methode versucht dem Netz etwas beizubringen. Unglücklicherweise ist in dieser Klasse ein ziemlich idiotischer Bug, ich weiß nur nicht wo... Ich benutze ein älteres Netz um den maximalen Q - Value des jeweils nächsten States zu berechnen, das soll Stabilität gewährleisten.

Das Tuplecode findet sich hier:

Code:
package rlgame;

import java.util.ArrayList;

public class Tuple {
    VectorND statefirst = new VectorND();
    VectorND stateafter = new VectorND();
    VectorND qactions = new VectorND();
    double rewardafter;
    int actionTaken;

}



package rlgame;
import java.util.ArrayList;
public class Tuple {
VectorND statefirst = new VectorND();
VectorND stateafter = new VectorND();
VectorND qactions = new VectorND();
double rewardafter;
int actionTaken;
}

Den gesamten Code findet ihr hier:

https://github.com/SuchtyTV/RLearningBird
 

httpdigest

Top Contributor
Ja, was läuft denn falsch? Aktuell hast du nur Code gepostet, gesagt, `Die rLearn Methode evaluiert den Fehler bzw. den neuen Q - value, während die experienceReplay Methode versucht dem Netz etwas beizubringen.`, wozu man nur sagen kann "aha" und dann erwähnst du, dass irgendwo in dem Code ein Fehler ist, ohne darauf hinzuweisen, wo denn die Diskrepanz zwischen dem, was der Code tut und dem, was du erwartest, liegt.
Dann wäre meine erste Frage also erstmal: Woher weißt du denn, dass in dem Code ein Fehler ist? Worin äußert sich das?
 

Feeder

Bekanntes Mitglied
Der Punkt geht an dich.
Naja zum einen sind die Fehler nach der Backpropagation viel zu groß.
Ich habe nun die Sigmoidfunktionen mit Logarithmen ausgetauscht.
Nachdem sind die Fehler im Bereich 0 bis 20; besser...
Die Q-Funktion wird dennoch nicht korrekt approximiert. (vielleicht ein Overfit, was ich aber nicht annehme)
Außerdem erhalte ich immer ein OutOfMemoryError (den ich zwar fixen kann, dennoch trotzdem nicht sicher bin wo der her rührt.)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
F KI / Machine Learning Parameter verschachtelte for Schleifen Allgemeine Java-Themen 2
F KI / Machine Learning Parameter verschachtelte for Schleifen Allgemeine Java-Themen 1
windl Text mining / deep learning Allgemeine Java-Themen 0
F Machine-learning Framework Allgemeine Java-Themen 0
T Datenbank oder Filesystem? (E-Learning) Allgemeine Java-Themen 2
B Algorithmus für Arbeit mit fehlenden Listenelementen? Allgemeine Java-Themen 1
schegga_B AES-Algorithmus in javax.crypto Allgemeine Java-Themen 3
M Laufzeit des Prim Algorithmus Allgemeine Java-Themen 3
O Newton Algorithmus Java Allgemeine Java-Themen 1
CptK Backpropagation Algorithmus Allgemeine Java-Themen 6
N Google Authenticator Algorithmus (SHA1) Allgemeine Java-Themen 1
gotzi242 Schatzsuche mithilfe eines O(log n) Algorithmus Allgemeine Java-Themen 2
Zrebna Quicksort-Algorithmus - zufälliges Pivot wählen Allgemeine Java-Themen 6
L Klassen Algorithmus für das folgende Problem entwickeln? Allgemeine Java-Themen 30
B Algorithmus Warteschlange Ringpuffer wirklich fehlerfrei Allgemeine Java-Themen 8
M Probleme mit Negamax-Algorithmus Allgemeine Java-Themen 29
M Salesman Problem - Bruteforce Algorithmus Allgemeine Java-Themen 23
M Minmax Algorithmus Verständnisproblem Allgemeine Java-Themen 2
H Rundreise frage (Algorithmus) Allgemeine Java-Themen 18
F KMP-Algorithmus Allgemeine Java-Themen 9
S Algorithmus welcher True-Werte in einem Array findet und auswertet. Allgemeine Java-Themen 5
U Methoden Algorithmus MergeSort String [ ] array sortieren programmieren Allgemeine Java-Themen 17
P MinMax Algorithmus Allgemeine Java-Themen 0
J Abhängigkeit zwischen Rechenzeit und Speicherbedarf in einen Algorithmus Allgemeine Java-Themen 7
K Djikstra-Algorithmus Allgemeine Java-Themen 1
T Minimax/Alphabeta Algorithmus hängt sich auf (?) Allgemeine Java-Themen 2
M Algorithmus zum Zahlen einteilen Allgemeine Java-Themen 8
O Best Practice Hilfe bei Algorithmus gesucht Allgemeine Java-Themen 10
S Algorithmus um Objekte auf einer Flaeche mit gleichem Abstand anzuordnen..? Allgemeine Java-Themen 20
S Rucksackproblem und genetischer Algorithmus Allgemeine Java-Themen 9
L Abbruch des Algorithmus Allgemeine Java-Themen 8
D Input/Output Ausgleichen chemischer Reaktionsgleichungen mit dem Gauß-Algorithmus Allgemeine Java-Themen 2
Messoras A*-Algorithmus integrieren Allgemeine Java-Themen 3
S Buchscan 3D Dewarp Algorithmus - Ansätze Allgemeine Java-Themen 1
B Verteilungs-/Vergabe-Algorithmus mit abhängigen Score-Werten Allgemeine Java-Themen 3
Androbin "Shunting Yard"-Algorithmus Allgemeine Java-Themen 6
B Algorithmus - Project Euler Problem 18 Allgemeine Java-Themen 2
N Algorithmus zum bewerten von mathematischen Funktionen Allgemeine Java-Themen 11
O Algorithmus Optimierung Allgemeine Java-Themen 3
Joew0815 Algorithmus - Zahlenfolge in 4 ähnliche Teile aufteilen Allgemeine Java-Themen 0
O Tag Cloud Algorithmus Idee gesucht Allgemeine Java-Themen 2
A Implementierung eines Algorithmus (Farthest Insertion zur Lösung des TSP) in O(n²) Allgemeine Java-Themen 2
C Eclipse Probleme bei selbst erstelltem Algorithmus Allgemeine Java-Themen 2
H Graph-Algorithmus gesucht Allgemeine Java-Themen 21
N Algorithmus durch Workflow Allgemeine Java-Themen 7
M tree-based diff Algorithmus (Code-Vergleiche) Allgemeine Java-Themen 3
S Uhrzeit Algorithmus sale Allgemeine Java-Themen 11
N A*-Algorithmus Allgemeine Java-Themen 5
A Suche Algorithmus zum Erstellen eines planaren Graphen Allgemeine Java-Themen 5
F Methoden Algorithmus zur Gegnerfindung (Turnier) Allgemeine Java-Themen 9
T Algorithmus Graph Allgemeine Java-Themen 10
J Algorithmus gesucht (Stringtransformation) Allgemeine Java-Themen 4
B Algorithmus Krankenhausbelegung Allgemeine Java-Themen 17
S Algorithmus von Dijkstra Allgemeine Java-Themen 2
alex_fairytail OOP Banknoten Algorithmus Teil 2 Allgemeine Java-Themen 13
2 ArrayList aktualisieren Algorithmus Allgemeine Java-Themen 11
alex_fairytail Methoden Banknoten Algorithmus Allgemeine Java-Themen 10
R Codehinweise: Algorithmus Größenvergleich von n Zahlen Allgemeine Java-Themen 5
SuperSeppel13 WTF?! Algorithmus-Geschwindigkeitstest Allgemeine Java-Themen 2
L Algorithmus für kürzesten Weg mit Wegpunkten Allgemeine Java-Themen 21
C Algorithmus Problem in Minesweeper Allgemeine Java-Themen 5
S Algorithmus um Labyrinth zu erzeugen Allgemeine Java-Themen 6
V Problem mit A* Pathfinder-Algorithmus Allgemeine Java-Themen 2
S Algorithmus um nächst folgende Primzahl zu berechnen Allgemeine Java-Themen 7
S Algorithmus Problem. Rechtecke effizient auf Spielfeld anordnen. Allgemeine Java-Themen 7
C Algorithmus-Hilfe Allgemeine Java-Themen 20
J Algorithmus Längenkombinationen? Allgemeine Java-Themen 7
M Kombinationen über rekursiven Algorithmus berechnen? Allgemeine Java-Themen 10
L Algorithmus für Poker-Hände Allgemeine Java-Themen 7
chik 2 return werte für Greedy-Algorithmus (gelöst) Allgemeine Java-Themen 3
D Abstruse Probleme mit eigenem replace Algorithmus Allgemeine Java-Themen 11
P RC4 Algorithmus Allgemeine Java-Themen 3
D RSA Verfahren - Erweiterter Euklidischer Algorithmus Allgemeine Java-Themen 4
C IBAN und Bic Validieren (Algorithmus) Allgemeine Java-Themen 10
P Problem mit A*-Algorithmus Allgemeine Java-Themen 12
M Wörter Algorithmus Allgemeine Java-Themen 7
M Algorithmus für automatische Zeilenumbrüche Allgemeine Java-Themen 12
K Postleitzahlen Algorithmus Allgemeine Java-Themen 12
G Problem mit Algorithmus Allgemeine Java-Themen 3
T Hilfe bei einem Algorithmus Allgemeine Java-Themen 2
S Stemming-Algorithmus gesucht (z.B. Porter) Allgemeine Java-Themen 2
RoliMG präfix zu infix algorithmus Allgemeine Java-Themen 6
Z A*-Algorithmus - Probleme mit offener/geschlossener Liste Allgemeine Java-Themen 7
S Javaimplementierung des MD5 Algorithmus Allgemeine Java-Themen 2
E Container-Pack-Algorithmus Allgemeine Java-Themen 4
G k nearest neighbor algorithmus Allgemeine Java-Themen 7
C HASH Algorithmus 2 Strings ergeben das Selbe. Allgemeine Java-Themen 2
P Page Rank Algorithmus implementieren Allgemeine Java-Themen 7
T Problem RSA-Algorithmus in Java? Allgemeine Java-Themen 2
minzel Hash-Algorithmus Allgemeine Java-Themen 9
Y komprimierung mittels Huffman-Algorithmus, bit-shifting. Allgemeine Java-Themen 2
K Algorithmus Allgemeine Java-Themen 10
C Algorithmus für Array Allgemeine Java-Themen 9
I Verschlüsselung mit Pwd. - User soll Algorithmus wählen Allgemeine Java-Themen 4
J fällt euch ein Algorithmus ein? Allgemeine Java-Themen 4
S Algorithmus für Sudoku Allgemeine Java-Themen 17
N Euklidischer Algorithmus in Java und keine Terminierung. Allgemeine Java-Themen 7
F Algorithmus für Sortierung gesucht Allgemeine Java-Themen 15
T Algorithmus verbessern Allgemeine Java-Themen 10
U Suche Algorithmus zur bestimmung des längsten Wegs Allgemeine Java-Themen 3

Ähnliche Java Themen


Oben