Bug in ScritedElements?

Dieses Forum beschäftigt sich mit allen Fragen, Kommentaren und Anregungen zu MemBrain Skripten. Auch der Austausch von Skripten zwischen MemBrain Benutzern soll hiermit gefördert werden.
Wenn Sie ein interessantes Skript haben, das Sie anderen MemBrain Benutzern zur Verfügung stellen wollen, dann Erstellen Sie dafür jeweils bitte ein neues Thema in diesem Forum. Der Titel des Themas sollte es anderen Benutzern erlauben möglichst schnell zu erfassen, wozu Ihr Skript dient.
User avatar
TJetter
Posts: 327
Joined: Sat 13. Oct 2012, 12:04

Re: Bug in ScritedElements?

Post by TJetter »

Leider scheitere ich bislang an der Reproduktion des Fehlers, trotz Tests mit und ohne "Scripted Elements" und mit verschiedenen Netzen/Lessons.
--> Es wäre klasse, ein konkretes Beispiel zu bekommen (Netz + Lesson(s)).
Idealerweise zusammen mit einer Kopie von Settings.cfg und Teachers.mbt aus dem Verzeichnis:

C:\Users\<User>\AppData\Roaming\MemBrain\Config

Wobei <User> Ihr Windows Login-Name ist.
(Die Dateien enthalten keinerlei persönliche Informationen, damit kann ich aber exakt Ihre Einstellungen testen).


Vielen Dank schonmal vorab!
Thomas Jetter
MrNo
Posts: 19
Joined: Sun 19. Jan 2014, 08:36

Re: Bug in ScritedElements?

Post by MrNo »

Guten Abend,

ich habe eben mal ein wenig experimentiert um das Verhalten nachzustellen und bin glaube ich auch fündig geworden.
Schritte zur Reproduktion:

1. Netz und Scripted Elements s. Screenshot (NetError Function Configuration: Alles auf "UserDefined (Scipted)" und "Use Normalized Values" aus).
2. "Capture Best Net" einschalten
3. Dann das Training für kurze Zeit manuell starten und wieder stoppen.
4. Im NetErrorGraph und im Stockmanager steht als NetError der gleiche Wert. Also so wie es sein soll, weil der NetError aufgrund des Scriptprogramms immer kleiner wird.
5. Dann "Evaluate Net Error" drücken. Dann wird auf einmal ein anderer NetError berechnet, obwohl das nach meinem Verständnis nicht so sein sollte. In meinem Screenshot sieht man das an der grünen senkrechten Linie im "NetError Graph", die vor dem Drücken von "Evaluate Net Error" noch nicht da war.

Ob man Multithreading ein- oder ausschaltet macht hierbei diesmal keinen Unterschied.

Viele Grüße
MrNo
Attachments
MembrRepr1.PNG
(111.35 KiB) Not downloaded yet
MrNo
Posts: 19
Joined: Sun 19. Jan 2014, 08:36

Re: Bug in ScritedElements?

Post by MrNo »

P.S.: Sorry, hatte Ihren letzten Beitrag mit der Anfrage nach den Settings nicht gesehen. Falls doch noch benötigt, bitte nochmal melden.
User avatar
TJetter
Posts: 327
Joined: Sat 13. Oct 2012, 12:04

Re: Bug in ScritedElements?

Post by TJetter »

Hallo und Danke für die Mühe und das Beispiel!

Allerdings handelt es sich hier nicht um einen eigentlichen Fehler von MemBrain:

1.) Das "Scripted Elements" File im Beispiel enthält eine globale Variable <cnt>.
2.) Das "Scripted Elements" File wird von MemBrain als Programm-Modul beim Start des Trainings oder auch beim Aufruf der Funktion <Evaluate Net Error> jeweils compiliert und neu geladen. Dabei werden alle globalen Variablen allokiert und initialisiert.

Eine globale Variable über mehrere Trainingsschritte im Scripted Elements File zu nutzen, ohne diese nach jeder Net Error Berechnung neu zu initialisieren, macht deshalb keinen Sinn: Damit wird ja die Berechnung des Net Errors abhängig von der Vorgängerberechnung.
Das Scriptmodul vor jedem Trainingsschritt immer neu zu laden, macht wiederum aus Performance-Gründen keinen Sinn. Deshalb compiliert und lädt MemBrain das Script beim "Auto Teach" nur einmal beim Start.

Aus diesem Grund muss man beim Verwenden von globalen Variablen diese immer am Ende der Funktion <CalculateNetError> explizit neu initialisieren.
In Ihrem konkreten Beispiel ergäbe sich damit natürlich ein konstanter Net Error, das Beispiel ist ja aber ohnehin nur theoretischer Natur.

Zugegebenermaßen könnte man das bei nächster Gelegenheit in die MemBrain Hilfe mit aufnehmen ;-)

Viele Grüße,
Thomas
Thomas Jetter
MrNo
Posts: 19
Joined: Sun 19. Jan 2014, 08:36

Re: Bug in ScritedElements?

Post by MrNo »

Ok, verständlich. Ich hatte die globale Variable nur genutzt, um den Net-Error irgendwie immer kleiner werden zu lassen.
In meinem eigentlichen Script, bei dem ich das Problem mit der Net-Errror Berechnung gesehen habe, verwende ich keine solche globalen Variablen.
Ich schaue noch mal, ob ich es anders reproduzieren kann und würde mich dann noch einmal melden.

Vielen Dank!
MrNo
Posts: 19
Joined: Sun 19. Jan 2014, 08:36

Re: Bug in ScritedElements?

Post by MrNo »

So, nächster Versuch.
Ich habe nun folgendes gemacht, und zwar ganz ohne Scripte.
(Daten dazu siehe angehängte Zip):

Vorbereitung Netz:
- test.mbn und Lesson1.csv geladen.
- keine scripted Elements (s. Screenshot "Setup.PNG")
- Stock Capture Ein, Multithreading diesmal aus.

Test:
Dann StartTeacher im Menu gedrückt und nach kurzer Zeit wieder beendet. Nun den Stock Manager aufgemacht (siehe Screenshot "1.PGN"). Wie man sieht, gibt es keinen Unterschied beim NetError.

Nun habe ich aus dem Stockmanager das beste (und in diesem Fall einzige) Netz geladen und dann "Evaluate Net Error" gedrückt. Wie man in Screenshot "2.PGN" sieht, ist der Net-Error nun auf einmal ein anderer, zumindest in den hinteren Nachkommastellen. Das dürfte doch eigentlich nicht sein, oder?
Attachments
Beispiel.zip
(157.4 KiB) Downloaded 17 times
MrNo
Posts: 19
Joined: Sun 19. Jan 2014, 08:36

Re: Bug in ScritedElements?

Post by MrNo »

Hallo,

hier noch die Teachers.mbt und Settings.cfg um das in meinem letzten Post beschriebene Verhalten nachzuvollziehen, falls benötigt.
viele Grüße
Attachments
Teachers.mbt
(201 Bytes) Downloaded 13 times
Settings.cfg
(1.15 KiB) Downloaded 14 times
MrNo
Posts: 19
Joined: Sun 19. Jan 2014, 08:36

Re: Bug in ScritedElements?

Post by MrNo »

Hallo und noch ein frohes neues Jahr,
ich habe eben ein Update auf die letzte Version 11.06 durchgeführt und sie einmal ausprobiert.
Das in meinem Post vom 18.12.2020 beschriebene Verhalten, dass der angezeigte NetError im Stockmanager ein anderer ist, als wenn ich das Netz dann noch einmal aus dem Stockmanager lade und EvaluateNetError drücke, ist aber so geblieben. Das ist doch nicht richtig, oder übersehe ich etwas? (ich hoffe, ich bin nicht zu nervig) ;)
In meinem Beispiel vom 18.12 sind es nur die hinteren Nachkommastellen, bei meinem eigentlichen Netz mit Scripted Elements sind aber alle Stellen betroffen. Das Netz was ich aus dem Stock lade ist immer schlechter als das was im StockManager anzeigt wird. Der Wert der im Stockmanager angezeigt wird, scheint mir aber plausibel für das beste Netz eines Trainings, nur wird es scheinbar nicht weggespeichert sondern ein anderes!?
Viele Grüße
Post Reply