2016-06-29 4 views
0

Ich entwickle ein einfaches Spielprogramm, um q-learning mit linearer Funktionsannäherung zu zeigen. screen shotWie normalisiere ich Gewichte q-lernen mit linearer Funktionsapproximation

In diesem Spiel gibt es unzählige Staaten. Ich muss viele Faktoren wie die Position des Spielers, die Geschwindigkeit und die Position des Gegners berücksichtigen (es gibt 12 ~ 15 gegnerische Objekte). Ich änderte schließlich meinen Algorithmus von der Verwendung der Tabelle, um lineare Funktionsannäherung zu verwenden.

Ich entschied mich für 20 ~ 22 Funktionen (konstant, Spielerposition, Spielergeschwindigkeit, alle Feinde Position). und es gibt

Nach der Implementierung dieses Algorithmus, steckte ich in ein Problem.

Gewichtswert ist in wenigen Sekunden nach dem Ausführen meines Programms übergelaufen. Ich stellte fest, dass ich Merkmale und Gewicht nicht normalisierte.

Es war einfach, Feature-Wert zu normalisieren, da jedes Feature ihre Grenze hat. Es war jedoch nicht genug, nur den Merkmalswert zu normalisieren. Es endet immer noch Überlauf.

Mein Problem ist, wie normalisiere ich meine Gewichte.

Unten ist mein Code zu implementieren, um Features zu normalisieren.

//f is feature 

    f[0] = 1; 
    f[1] = this.getNormMinMax(this.player.x,0,cc.winSize.width); 
    f[2] = this.getNormMinMax(this.player.vel,-80,80); 

    for(var i=0; i<pooList.length;++i) 
    { 
     f[3 + 2*i] = this.getNormMinMax(pooList[i].x,0,cc.winSize.width); 
     f[3 + 2*i+1] = this.getNormMinMax(pooList[i].y,0,cc.winSize.height*3); 
    } 

Und das unten Code aktualisiert Gewicht ohne jede Normalisierung.

for(var i=0; i<this.featureSize; ++i) 
     { 
      var w = this.weightArray[this.doAction][i]; 
      this.weightArray[this.doAction][i] = 
       w + this.learningRate*(this.reward + this.discountFactor*maxAction - this.updateQSA) * f[i]; 
     } 
+0

Sie müssen vorsichtig mit der Funktionsapproximation für q-learning umgehen, da nicht garantiert ist, dass die lineare Funktionsannäherung für off-policy learning konvergiert, was erklären könnte, warum Ihre Gewichte explodieren – goh

Antwort

0

Es scheint, dass Sie lineare Regression ohne Regularisierung verwenden, und es gibt kollineare Features. Versuchen Sie, eine L1- oder L2-Regularisierung hinzuzufügen (verwenden Sie die Modelle Ridge, Lasso oder Elastic Net).

Verwandte Themen