"Richtige" Netzarchitektur für das Spiel KNIFFEL ?

Sie haben ein bestimmtes Projekt zu bearbeiten und wissen nicht, wie Sie an die Aufgabe heran gehen sollen? Sie sind sich nicht sicher, ob Ihr Netzentwurf zu Ihrem Problem passt oder ob es da Optimierungsmöglichkeiten gibt? Ist es überhaupt sinnvoll an Ihre Daten mit einem NN basierten Ansatz heranzugehen? Ist MemBrain das richtige Werkzeug für Ihr Problem und Ihre Infrastruktur?

Hier ist der richtige Platz für diese Art von Fragen.
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: "Richtige" Netzarchitektur für das Spiel KNIFFEL ?

Post by Admin »

Hallo,

leider habe ich es noch nicht geschafft, mir die Sache näher anzuschauen, ich habe es aber nicht vergessen und melde mich, sobald ich so weit gekommen bin.
Gibt es mittlerweile schon weitere Neuigkeiten oder Erkenntnisse?

Viele Grüße
Thomas Jetter
just4phil
Posts: 30
Joined: Mon 24. Oct 2011, 22:20

Re: "Richtige" Netzarchitektur für das Spiel KNIFFEL ?

Post by just4phil »

Hallo.

also ich habe mittlerweile noch die value-function geändert.
da war ich noch mal kurz verwirrt, weil es im PDF dieses englischen fachbuchs einmal heisst "nehme reward" und eine seite später heisst es "nehme reward für t+1".
mittlerweile nutze ich folgende value-function:

value = Round(Q_sa + alpha * (reward + (gamma * Q_max) - Q_sa), 4)

das kann man sich in der aktuellen datei auch anzeigen lassen ("Lesson" -> blatt "Training")
http://freigabe.philweb.de/NN_Kniffel/2 ... NN_RL.xlsm

ansonsten hat das die ergebnisse noch nicht verbessert und meine fragen insofern auch noch nicht beantwortet.....

viele grüße!
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: "Richtige" Netzarchitektur für das Spiel KNIFFEL ?

Post by Admin »

ob die value-function in dieser art für kniffel die richtige ist, da ja immer nur 3 würfe in einem sachlogischen zusammenhang stehen und danach ein gewisser break entsteht. Auch die reihenfolge der feldwahl spielt ja keine direkte rolle für das ergebnis…
Ich würde eigentlich erwarten, dass RL mit diesem 'break' umgehen kann. Es besteht ja weiterhin ein 'sachlogischer' Zusammenhang über den zu einer gegebenen Zeit erreichten Spielstand. Dass die Reihenfolge keine Rolle spielt, sollte die Sache eher leichter machen, denke ich.
ob die anzahl von 100.000 spielen überhaupt schon ausreicht, um gute ergebnisse zu erzielen??
Tja, gute Frage... und wahrscheinlich nur durch weitere Versuche zu beantworten. Vor der Erhöhung der Spielversuchszahl würde ich aber erst sichergehen, dass auch alles so abläuft, wie man denkt, es implementiert zu haben...
ob die Lessongröße mit 50.000 evtl. zu gering ist? „vergisst“ das NN dann nicht beim Teachstep immer gewisses know-how? andererseits wird ja die gewichtung des netzes nur angepasst und nicht völlig verworfen…..
Ein gewisses 'Verblassen' ist ja auch ganz gut, da das Netz ja immer bessere Values erlernen sollte. Diese sollten die allzu alten irgendwann ersetzen. Ob 50.000 eine gute Zahl ist, kann ich auch nicht sagen, aber alleine die Performanz beim Training setzt ja ab einer bestimmten Lesson-Größe ein natürliches Limit. Sie können ja mal bis 100.000 gehen, das sollte auch noch handhabbar sein.
ob die netzarchitektur hier eine größere Rolle spielt?
Das lässt sich natürlich herausfinden, indem man mit der aufgezeichneten Lesson klassisch in MemBrain selbst herangeht: Also davon in MemBrain per Zufallsauswahl 20 % abspalten, getrennt als Trainings- und Validierungslesson abspeichern und dann einen kombinierten Trainings-/Validierungslauf durchführen. Am EInfachsten geht das mit diesem kleinen Skript:
viewtopic.php?f=13&t=232
Das Skript erledigt das ganze lästige Geklicke und macht die Sache bequem und reproduzierbar.
Das kann man dann 'mal schnell' mit verschiedenen Netzarchitekturen antesten und so ein Gefühl dafür erhalten, ob man mit der Netzarchitektur auf der richtigen Fährte ist.
Über die Qualität der Codierung der Inputs sagt das natürlich nichts. Da wir uns da aber von Anfang an viele Gedanken gemacht haben, denke ich nicht, dass diese allzu ungünstig gewählt wurde.

Die Value-Funktion sieht prinzipiell korrekt aus. Ob die Werte dahinter allerdings ihrer korrekten Bedeutung gemäß ermittelt werden, kann ich nicht erfassen, dazu ist es bereits zu viel Code und ich habe leider nicht die Zeit, da tief reinzugehen.
Die Strategie mit der Tabelle über ein Spiel und der Berechnung der neuen values erst am Ende ist nicht schlecht, denke ich. Ich würde sagen, das sollte funktionieren. Sind Sie sicher, dass alle erlaubten Aktionen in jedem Zustand korrekt berechnet werden?

Viele Grüße,
Thomas Jetter
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: "Richtige" Netzarchitektur für das Spiel KNIFFEL ?

Post by Admin »

Noch eine Frage, die mir gerade in den Kopf kommt:

Wie gehen Sie denn am Ende eines Spielzuges vor, wenn der PC setzt? Beinhaltet der neue State s' dann gleich den nächsten Wurfstand aller 5 Würfel zusammen mit der dann höchstwertigen Aktion?
Das würde ich für korrekt halten, es sollte also keinen 'Zwischenstatus' geben, in dem der Agent nur eine mögliche Aktion hat, nämlich alle 5 Würfel zu werfen.

Viele Grüße
Thomas Jetter
just4phil
Posts: 30
Joined: Mon 24. Oct 2011, 22:20

Re: "Richtige" Netzarchitektur für das Spiel KNIFFEL ?

Post by just4phil »

Hallo und erstmal frohe weihnachten nachträglich.

wollte mich nur kurz aus dem xmas-family-kurzurlaub zurück melden.
leider bin ich weniger zu kniffel gekommen, als ich vor hatte. aber ein bischen entspannung soll ja auch ganz gut sein...

also ich bin selbstverständlich noch dran.
ich versuche derzeit ein paar debug-sachen einzubauen, so dass man direkt nachvollziehen kann, dass alle werte korrekt übergeben und berechnet werden.
das dauert evtl. noch ein paar tage.

ein kleinen fehler habe ich dabei schon gefunden.
in ein paar tagen dann eine neue version.

bis dahin wünsche ich einen guten rutsch ins neue jahr und sage noch mal vielen dank für die unterstützung!!
just4phil
Posts: 30
Joined: Mon 24. Oct 2011, 22:20

Re: "Richtige" Netzarchitektur für das Spiel KNIFFEL ?

Post by just4phil »

Heyho!

ich muss mich ja dringend mal wieder melden,... in letzter zeit bin ich nicht mehr dauernd an kniffel, aber vor ein paar tagen habe ich nochmal einige änderungen vorgenommen:

1. ich habe einige kleinere bugs beseitigt


2. bei der analyse des verhaltens des trainierten netzes sind mir einige "unsitten" aufgefallen. man kann gut erkennen, dass das netz kurzfristigen gewinn bevorzugt, z.B. CHANCE hat oft die höchsten punkte, daher setzt kniffel es immer als erstes. dabei ist mir klargeworden, dass man die policy der handlungsmöglichkeiten weiter einschränken muss, um kniffel beim RL auf die richtige fährte zu "schubsen". daher habe ich einige weitere Grundregeln eingeführt:

--- in runde 1 und 2 darf eine reihe nur gesetzt werden, wenn 5 gleiche augen da sind! (=kniffel). (soll heissen, so lange noch eine möglichkeit für mehr punkte besteht, darf auch nicht gesetzt werden)
--- 3erPasch ist in runde <3 nicht setzbar, wenn 4erPasch noch spielbar ist
--- 4erPasch ist in runde <3 nicht setzbar, wenn kniffel noch spielbar ist
--- kl.Str. ist in runde <3 nicht setzbar, wenn gr.Str. noch spielbar ist
--- chance darf nur nach runde 3 gesetzt werden
--- für die reihen 111 bis 666 habe ich den extra-reward geändert und auch negativen reward für <3 gleiche ergänzt. hierbei ist wichtig, dass kniffel erkennt, dass eine 1 besser ist als eine 6 (im Sinne des geringsten verlustes). neue formel:
reward = (anzahl * augenzahl) + (((200 * augenzahl * augenzahl * augenzahl) / (augenzahl * 120)) * (anzahl - 3))
If reward > 45 Then reward = 45
If reward < -30 Then reward = -30

(siehe registerblatt ("Tabelle1")


3. und ich habe einen - wie ich denke - wesentlichen logischen denkfehler gefunden und beseitigt:

die würfel werden ja intern sortiert und dann in "binäre würfel" umgewandelt und dann an das netz übergeben.
das netz gibt schlussendlich zurück, welche würfel neu gewürfelt werden sollen. dabei sagt das netz sinngemäß z.b. "werfe würfel 1 + 3 noch mal".
daraufhin wurden würfel 1 und würfel 3 der GUI neu gewürfelt.
das problem war nun aber, dass die entscheidung des netzes ja auf dem sortierten würfelarray basiert, die würfel in der GUI jedoch nicht umsortiert werden.
d.h. es fehlte an einer "rück-übersetzung" der zu würfelnden würfel.

aufgrund dessen war es meines erachtens unmöglich für das netz vernünftig zu lernen.

ich habe nun also eine "rück-übersetzung" implementiert nach dem schema:
a) wieviel augen hat der würfel an der position, die neu gewürfelt werden soll?
b) suche diese augenzahl in den original GUI-Würfeln
c) werfe diesen würfel neu


ich glaube, dass jetzt die gröbsten Fehler raus sind und alle wesentlichen dinge gut funktionieren.

meine darauf hin folgenden RL-testläufe waren jedoch trotzdem nicht viel besser.
ich habe mit alpha: 80%, gamma 100%, exploration 10% und 300.000 max_lessonpattern trainiert.

in einem testlauf war es so, dass die durchschnittspunktzahl nach etwa 8.000 Spielen mit knapp 110 punkten maximal war und dann bis zum 93.000 Spiel auf unter 30 Punkte gesunken ist. Kniffel hat also wieder "verlernt".

ich arbeite daran, dass man das alles gut nachvollziehen kann.
dazu kann man den PC (PC spielt, PC nutzt NN) mit DEBUG, ANHALTEN, ANZEIGEN und LESSON spielen lassen und schauen wie er sich verhält.


Irgendwelche Anregungen, wie ich weitermachen sollte?

viele Grüße!

http://freigabe.philweb.de/NN_Kniffel/2 ... NN_RL.xlsm
Kreatief
Posts: 10
Joined: Tue 5. Jan 2016, 09:43

Re: "Richtige" Netzarchitektur für das Spiel KNIFFEL ?

Post by Kreatief »

Hallo,

dieser konkrete Anwendungsfall interessiert mich sehr und ich würde die Beispiele gerne nachvollziehen. Leider sind alle files die in den posts verlinkt sind nicht mehr verfügbar. Besteht die Möglichkeit die letzte Version noch mal hochzuladen?
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: "Richtige" Netzarchitektur für das Spiel KNIFFEL ?

Post by TJetter »

Hallo,

ich habe bei mir noch den Download der Version vom 13.12.2011 des Excel-Sheets (also leider nicht mehr das letzte Update, leider habe ich den Thread damals wohl aus den Augen verloren). Das könnte ich ggf. hochladen oder vielleicht besser als PN versenden.
Allerdings möchte ich just4phil gerne vorher noch ein bisschen Zeit geben, zu reagieren, die Excel-Datei stammt schließlich von ihm.

Ich erinnere mich auch, dass es bei diesem Excel-Projekt gewisse Schwierigkeiten gab, weil Excel-VBA ab und zu einen 'Überlauffehler' (Runtime Error #6) ausgegeben hat. Das ist aber mit der aktuellen MemBrain dll Version behoben (dll Version 04.02.00.00 vom 30.22.2015, enthalten im aktuellen MemBrain Installer).

Grüße
Thomas Jetter
Kreatief
Posts: 10
Joined: Tue 5. Jan 2016, 09:43

Re: "Richtige" Netzarchitektur für das Spiel KNIFFEL ?

Post by Kreatief »

Ein Excel sheet habe ich in dem thread noch entdeckt, da Phil sie einmal über das forum hochgelegen hat. Das ist aber sicher nicht die neueste Version. Mich würde auch das modellierte NN interessieren.
Wenn das möglich ist, wäre das toll. Ich warte auch gerne noch auf eine Reaktion von Phil.
just4phil
Posts: 30
Joined: Mon 24. Oct 2011, 22:20

Re: "Richtige" Netzarchitektur für das Spiel KNIFFEL ?

Post by just4phil »

Hallo zusammen,

lang ists her :)

habe grad mal die alten dateien rausgesucht. hier ist alles drin:
https://www.dropbox.com/sh/x8781rluravo ... PYRma?dl=0

allerdings konnte ich es gerade selbst nicht so recht starten weil die membrain.dll nicht gefunden wurde.
sollte eigentlich gehen, wenn die datei im selben verzeichnis liegt denke ich.... aber muesste mich da erst wieder reinfuchsen

habe vom 2012 - 2015 vor allem Android Entwicklung gemacht und bin bezgl. Excel nicht mehr up2date
hatte aber schon mit dem gedanken gespielt kniffel inkl. membrain auf android zu implementieren :)

viele Grüße
Andre Schmode
Post Reply