"New Neural" ist ein Open-Source-Projekt für neuronale Netzwerke für die MetaTrader 5-Plattform. - Seite 44

 
Urain:

Eine PRNG-Klasse im angegebenen Bereich.

Vorteile: Möglichkeit, mehrere Randoms mit unterschiedlicher Initialisierung zu haben,

gleichmäßig verteilte Werte eines beliebigen Bereichs bis zu 10 lm (leider kann man nicht mehr als das in einem Array erhalten).

Bei 10 lakh Aufrufen übertrifft Rand() einen Standard-Rand um 50 µs (Zeit rnd.Rand()=344 Zeit rand()=391).

Nachteile: Srand() benötigt viel Zeit für die Initialisierung, der Standardbereich ist 32768 (766µs), 1 Lakh fast 2 Minuten.

Ich habe die Grenze von 10 lakhs nicht überprüft, aber sie muss unglaublich lang sein, weil die Zeit progressiv ansteigt.


Gesunde Kritik wird akzeptiert.



Können Sie das näher erläutern?

Für welche Zwecke benötigen Sie diese Funktionen?

   uint              control(){return(gcnt-1);};// получить значение счётчика при последнем автоматическом запросе Rand

   uint              Rand(uint i){return(res[i]);};// запрос Rand по указанному i (счётчик не изменяется)

Oder ein kleines Beispiel, wie man sie verwenden kann.

Was ist an der Standardversion falsch?

 
her.human:

Können Sie dies näher erläutern?

Für welche Zwecke könnten diese Funktionen benötigt werden?

   uint              control(){return(gcnt-1);};// получить значение счётчика при последнем автоматическом запросе Rand

   uint              Rand(uint i){return(res[i]);};// запрос Rand по указанному i (счётчик не изменяется)

Oder ein kleines Beispiel, wie sie zu verwenden sind.

Was ist an der Standardversion falsch?

Diese Funktionen können benötigt werden, um einfach einen Teil oder die gesamte Zufallsfolge zu kopieren oder um Werte zu erhalten, die bei bestimmten Aufrufen von Rand() ausgegeben wurden.

Rand() ist in vielerlei Hinsicht unbefriedigend:

1) Wenn Sie eine gleichmäßig verteilte Folge von 0 bis 100 erhalten möchten, können Sie diese nicht direkt von der Norm erhalten (Sie müssen den Algorithmus ändern).

2) Es ist nicht möglich, zwei Sequenzen gleichzeitig zu verwenden; die Initialisierung von srand macht es unmöglich, die vorherige Initialisierung zu verwenden.

3) Der Standardbereich von rand erlaubt nur 32768 Teile und nichts anderes. Ich spreche nicht einmal davon, ihn durch 100000 zu teilen, aber man kann ihn nicht einmal durch ein Vielfaches von 10 teilen. Beispiel: Sie haben einen Bereich [-1;1] und müssen ihn in Schritte bis zur 3. Stelle unterteilen, die Klasse mit dem Bereich 2000 initialisieren, dann

Rand()/1000.-1.

und holen den PRNG aus dem Bereich [-1;1] in Schritten von 0,001.

Mit dem Standardgerät ist das nicht möglich.

 
Wer? Was? Gibt es eine andere Möglichkeit, die Aufgabe zu optimieren?
 
Urain:

Diese Funktionen können benötigt werden, um einfach einen Teil oder die Gesamtheit einer Zufallsfolge zu kopieren oder um Werte abzurufen, die bei bestimmten Aufrufen von Rand() ausgegeben wurden.

Der Standdprt ist in vielerlei Hinsicht unbefriedigend:

1) Wenn Sie eine gleichmäßig verteilte Folge von 0 bis 100 erhalten möchten, können Sie diese nicht direkt von der Norm erhalten (Sie müssen den Algorithmus ändern).

2) Es ist nicht möglich, zwei Sequenzen gleichzeitig zu verwenden, die Initialisierung von srand macht es unmöglich, die vorherige Initialisierung zu verwenden.

3) Der Bereich des Standard-Rands erlaubt nur die Teilung in 32768 Teile und keine andere Möglichkeit. Ich spreche nicht einmal davon, sie in 100000 aufzuteilen, aber Sie können sie nicht in ein beliebiges Vielfaches von 10 aufteilen. Sie haben zum Beispiel einen Bereich [-1;1] und müssen ihn in Schritte mit der Genauigkeit des 3. Vorzeichens unterteilen, also müssen Sie die Klasse mit dem Bereich 2000 initialisieren.

und hole PRNG aus dem Bereich [-1;1] mit Schrittweite 0,001

Mit dem Standardgerät ist das nicht möglich.

1) Einverstanden.

2) Nicht klar? Für welche Zwecke können Sie es brauchen?

3) Ich habe mich nicht allzu sehr mit dem Code beschäftigt, er scheint sich auf 1) zu beziehen.

Deshalb habe ich eine Frage zu diesen beiden (oben genannten) Funktionen.

Sie brauchen auf jeden Fall eine solche Klasse (Funktion). Aber niemand muss unnötig bremsen.

 

Wenn Sie Schwierigkeiten haben, Schritt 2 zu verstehen, sollten Sie vielleicht erst einmal überlegen, warum Sie überhaupt einen PRNG brauchen.

Dann wird klar, warum es notwendig ist, zwei unkorrelierte PRNG-Sequenzen zur gleichen Zeit zu haben.

 
Urain:

Wenn Sie Schwierigkeiten haben, Schritt 2 zu verstehen, sollten Sie vielleicht erst einmal überlegen, warum Sie überhaupt einen PRNG brauchen.

Dann wird klar, warum es zwei unkorrelierte PRNG-Sequenzen zur gleichen Zeit gibt.


Seltsam - unkorrelierte PRNG-Sequenzen.

Ich kann nicht verstehen, wozu die neuronalen Netze dienen?

 
menschlich:

Ich weiß nicht, wozu diese neuronalen Netze da sind?

Kein Grund, es ist nur noch ein schickes Ding...

Urain:

Vorteile: Möglichkeit, mehrere Randoms mit unterschiedlicher Initialisierung zu haben,

Jedes Objekt führt also zu einer anderen Sequenz?

Nachteile: Srand() benötigt eine lange Initialisierungszeit, der Standardbereich ist 32768 (766µs), 1 Lamm ist fast 2 Minuten.

Das ist der Punkt, an dem es wirklich beängstigend und unrealistisch wird. So sollte es nicht sein.

Ich werde sehen, wann sich auch nur ein kleines Stückchen Öffnung ergibt.
 
her.human:

Seltsam - unkorrelierte PRNG-Sequenzen.

Ich verstehe nicht, wozu neuronale Netze gut sind?

Falls Sie es vergessen, möchte ich Sie daran erinnern, dass sich die Sequenz nach 32768 Aufrufen von rand (wenn Sie es nicht neu initialisieren) wiederholt.

Wenn wir also eine Initialisierung verwenden, um zwei zeitlich parallele Sequenzen zu erzeugen, können einige Abschnitte eine Korrelation zwischen ihnen aufweisen (dies ist nicht zwingend, aber möglich).

Für Netze gibt es verschiedene Algorithmen, z. B. Montecarlo oder GA, und jedes Netz mit einem beliebigen Algorithmus erfordert Anfangswerte für die Gewichte.

 
TheXpert:

Nichts, nur eine schicke Sache heutzutage...

1) Jedes Objekt führt also zu einer anderen Sequenz?

2) Das ist der Punkt, an dem es wirklich beängstigend und unrealistisch wird. Das sollte es nicht sein.

Ich werde sehen, wann auch nur eine kleine Lücke entsteht.

1 Ja, jedes Objekt speichert eine Sequenz bei srand() und geht dann genau wie die Standardfunktion rand() immer weiter.

2 Ich habe es bereits so weit wie möglich optimiert; es war noch schlimmer.

Um die Lösung des Problems zu erleichtern, werde ich kurz beschreiben, was ich dort gemacht habe:

Nach der Vorbereitung, schreiben wir ein temporäres Array steigende Folge (Zählerwert), dann gibt der Generator einen Wert aus dem Bereich renge (dieser Index wird bei der Zuweisung von temp zu res angefordert), sobald Wert in den resultierenden Puffer, in einem temporären, an dieser Stelle setzen wir renge (Wert, der der Generator nicht ausgeben kann). Die Werte werden per Check an den Puffer res übergeben, wenn temp einen Renge hat, haben wir diesen Wert bereits res zugewiesen, führen dann eine schnelle Sortierung durch (die alle Renge bis zum Ende des Arrays nimmt) und schneiden den Bereich in den Rest der unberührten Sequenz ab. Dann machen Sie so lange weiter, bis das ganze Res voll ist.

 
Urain:

Wenn Sie das vergessen, wiederholt sich die Sequenz nach 32768 Aufrufen von rand (wenn Sie es nicht neu initialisieren).

Wenn wir also eine Initialisierung verwenden, um zwei zeitlich parallele Sequenzen zu erzeugen, können einige Teile miteinander korrelieren (das ist nicht zwingend, aber die Möglichkeit besteht trotzdem).

Netze haben verschiedene Algorithmen, z.B. Montecarlo, oder GA, wiederum benötigt jedes Netz mit jedem Algorithmus initialisierte Gewichte.

All dies ist Spekulation. Dafür gibt es keinen Beweis.

Ich habe viel mit GA experimentiert und hatte solche Zweifel, dass PRNG Schleifen (Wiederholungen). Es stellte sich heraus, dass es nicht um die Spule ging... (hier geht es um mich).

Fazit: PRNG hat keine Auswirkungen auf den GA-Betrieb.

Über die Initialisierung:

Es gibt einen solchen Wunsch, dass es möglich ist , nach Wahl zu initialisieren - durch Nullen, PRNG, aus einer Datei.