Admin wrote:Das ist exakt richtig, ja. Wenn ich mich nicht verzählt habe, dann gibt es 13 Wertfelder (Strategieen).
Außerdem kann man beim nochmal würfeln aus 2^5 - 1 = 31 Würfelkombinationen wählen. Zur besseren Vorstellung also ein fünf-Bit Wert, jedes Bit repräsentiert einen Würfel.
(denke gerade darüber nach, ob es nicht doch intuitiver ist, die Neuronen wxraus umzudeuten in wxzurück, also bei einer Aktion anzugeben, mit welchen Würfeln nochmal gewürfelt werden soll.)
Damit gibt es insgesamt also 2 * 13 + 31 = 57 Aktionen. Das ist eigentlich doch ganz überschaubar, oder?
Ich würde mir zunächst einmal eine Funktion schreiben, die mir aus einem übergebenen Index des Wertebereichs 0 .. 56 eine entsprechende Aktion zusammenbastelt. Diese Aktion würde ich aus einem 'type' (Setzen, Streichen, Würfeln), einem 'targetField' (eine von 13 Strategien) und einem Feld 'diceToThrow' (Würfel, mit denen noch einmal gewürfelt werden soll) bestehen lassen.
Dann benötigt es eine Funktion, die den momentanen Zustand und eine solche Aktion ans Netz anlegt, das Netz einen Berechnungsschritt durchführen lässt und dann den Ausgangswert des Netzes zurückgibt.
Wenn man das hat, kann man auch leicht eine Funktion schreiben, die all 57 Aktionen durchspielt und die wertmaximale und deren Wert ermittelt. Ebenso eine Funktion, die über einen zufällig gewählten Index zwischen 0 und 56 eine Aktion zufällig wählt.
ok, hier mein aktueller stand:
ich habe erstellt:
- eine funktion, die das netz befragt:
fkt_nn_befragen(arr_wuerfel, arr_zustand, setzen, streichen, arr_spielstrategie, arr_entnehme_wuerfel)
ich übergebe ihr arrays mit binärwürfeln, zuständen etc und sie gibt mir den output-wert zurück.
- eine funktion, die ein array mit den outputs aller aktions-permutationen erzeugt:
fkt_arr_wertigkeiten()
diese funktion nutzt fkt_nn_befragen und schreibt die ergebnisse in ein array mit 57 feldern.
derzeit habe ich dort nur die 2 * 13 strategie felder für setzen und streichen drin.
bei den zu entnehmenden würfeln rätsel ich gerade noch, wie ich am schlauesten alle permutationen erstelle!?
(ist bestimmt total simpel, aber ich hatte noch keinen geistesblitz....HELP WANTED)
hier habe ich noch ein feature eingebaut, von dem ich noch nicht weiss, ob das schlau ist oder nicht:
wenn ein feld bereits gespielt wurde, dann schreibt meine funktion nicht den output-wert des NN in das array, sondern den wert -1.000.
ich erhoffe mir davon, dass ich später einfach durch das array gehen kann und diese werte dann automatisch "durchs raster" fallen.
ist das eine gute idee?
hier ist meine excel datei:
http://freigabe.philweb.de/NN_Kniffel/2 ... NN_RL.xlsm
hier mein netz:
http://freigabe.philweb.de/NN_Kniffel/2 ... naer_4.mbn
wenn man den pfad des netzes oben reinschreibt sollte es funktionieren.
das netz wird einmal beim aufrufen geladen. sollte es "verloren gehen" kann man es über den button "load NN"rechts wieder laden.
die werte der funktion fkt_arr_wertigkeiten werden hier in das tabellenblatt eingetragen. dort kann man den effekt mit den -1.000 sehen.
wie gesagt komme ich grad nicht so recht mit den würfel permutationen weiter. wie kann man das am besten in eine routine packen?
viele grüße!