"New Neural" est un projet de moteur de réseau neuronal Open Source pour la plateforme MetaTrader 5. - page 44

 
Urain:

Une classe PRNG dans la plage spécifiée.

Avantages: possibilité d'avoir plusieurs randoms avec une initialisation différente,

a distribué uniformément des valeurs de n'importe quelle gamme jusqu'à 10 lm (malheureusement, vous ne pouvez pas obtenir plus que cela dans un tableau).

Pour 10 lakh appels Rand() dépasse un rand standard de 50 µs (temps rnd.Rand()=344 temps rand()=391).

Inconvénients: Srand() prend beaucoup de temps pour s'initialiser, la plage standard est de 32768 (766µs), 1 lakh presque 2 minutes.

Je n'ai pas vérifié la limite de 10 lakhs, mais elle doit être incroyablement longue car le temps augmente progressivement.


Une critique saine est acceptée.



Pouvez-vous développer ?

À quelles fins pouvez-vous avoir besoin de ces fonctions ?

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

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

Ou un petit exemple de la façon de les utiliser.

Quel est le problème avec le modèle standard ?

 
her.human:

Pouvez-vous nous en dire plus ?

À quelles fins ces fonctions peuvent-elles être nécessaires ?

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

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

Ou un petit exemple de la façon de les utiliser.

Quel est le problème avec le modèle standard ?

Ces fonctions peuvent être nécessaires pour copier simplement une partie ou la totalité d'une séquence aléatoire, ou pour obtenir des valeurs qui ont été émises lors de certains appels à Rand().

Rand() est insatisfaisant à bien des égards :

1) Si vous voulez obtenir une séquence uniformément distribuée de 0 à 100, vous ne pouvez pas l'obtenir directement à partir de la norme (vous devez modifier l'algorithme).

2) Il n'est pas possible d'utiliser deux séquences simultanément, l'initialisation de srand, rend impossible l'utilisation de l'initialisation précédente.

3) La gamme standard de rand ne permet que 32768 parties et rien d'autre. Je ne parle même pas de le diviser par 100000, mais vous ne pouvez même pas le diviser par un multiple de 10. Par exemple : vous avez une plage [-1;1] et vous devez la diviser en étapes jusqu'au 3ème chiffre, initialisez la classe à la plage 2000, puis

Rand()/1000.-1.

et obtenir le PRNG dans l'intervalle [-1;1] par pas de 0,001.

Vous ne pouvez pas faire ça avec le modèle standard.

 
Qui ? Quoi ? Dites-moi, y a-t-il un autre moyen d'optimiser la tâche ?
 
Urain:

Ces fonctions peuvent être nécessaires pour copier simplement une partie ou la totalité d'une séquence aléatoire ou pour récupérer des valeurs qui ont été émises lors de certains appels à Rand().

Le stanndprt est insatisfaisant à bien des égards :

1) Si vous voulez obtenir une séquence uniformément distribuée de 0 à 100, vous ne pouvez pas l'obtenir directement à partir de la norme (vous devez modifier l'algorithme).

2) Il est impossible d'utiliser deux séquences simultanément, l'initialisation de srand, rend impossible l'utilisation de l'initialisation précédente.

3) L'étendue du rand standard vous permet d'effectuer la division en 32768 parties seulement et d'aucune autre manière. Je ne parle même pas de le diviser en 100000, mais vous ne pourrez pas le diviser en un multiple de 10. Par exemple : vous avez une plage [-1;1] et vous devez la diviser en étapes jusqu'au 3ème chiffre, vous devez donc initialiser la classe à la plage 2000.

et obtenir un PRNG dans l'intervalle [-1;1] avec un pas de 0.001

Vous ne pouvez pas faire ça avec le modèle standard.

1) D'accord.

2) Ce n'est pas clair ? À quelles fins pouvez-vous en avoir besoin ?

3) Je ne me suis pas trop penché sur le code, il semble faire référence au point 1).

C'est pourquoi j'ai une question concernant ces deux fonctions (ci-dessus).

Vous avez absolument besoin d'une telle classe (fonction). Mais personne n'a besoin d'un freinage inutile.

 

Si vous avez du mal à comprendre l'étape 2, vous devriez peut-être d'abord vous demander pourquoi vous avez besoin d'un PRNG.

On comprendra alors pourquoi il est nécessaire d'avoir deux séquences PRNG non corrélées en même temps.

 
Urain:

Si vous avez du mal à comprendre l'étape 2, vous devriez peut-être d'abord vous demander pourquoi vous avez besoin d'un PRNG.

On comprendra alors pourquoi il y a deux séquences PRNG non corrélées en même temps.


Étrange à entendre - des séquences PRNG non corrélées.

Je n'arrive pas à comprendre à quoi servent les réseaux neuronaux ?

 
humain :

Je n'arrive pas à comprendre à quoi servent ces réseaux neuronaux ?

Rien, c'est juste un truc à la mode de nos jours...

Urain:

Avantages: Possibilité d'avoir plusieurs randoms avec une initialisation différente,

Donc chaque objet mène une séquence différente ?

Inconvénients: Srand() prend beaucoup de temps pour s'initialiser, la gamme standard est de 32768 (766µs), 1 agneau est presque 2 minutes.

C'est là que c'est vraiment, vraiment effrayant, irréaliste. Ça ne devrait pas être comme ça.

Je verrai quand il y aura ne serait-ce qu'une petite ouverture.
 
son.humain :

Étrange à entendre - des séquences PRNG non corrélées.

Je n'arrive pas à comprendre à quoi servent les réseaux neuronaux ?

Je vous rappelle, si vous oubliez, qu'après 32768 appels à rand (si vous ne le réinitialisez pas) la séquence se répète.

Par conséquent, si nous utilisons une initialisation pour générer deux séquences parallèles dans le temps, certaines sections peuvent avoir une corrélation entre elles (ce n'est pas obligatoire, mais c'est une possibilité).

Les réseaux ont différents algorithmes, par exemple Montecarlo ou GA, mais chaque réseau, quel que soit l'algorithme, nécessite des valeurs initiales des poids.

 
TheXpert:

Rien, juste une fantaisie de nos jours...

1) Donc chaque objet mène une séquence différente ?

2) C'est là que c'est vraiment, vraiment effrayant, irréaliste. Ça ne devrait pas l'être.

Je verrai quand il y aura ne serait-ce qu'un petit écart.

1 Oui, chaque objet mémorise une séquence à srand() et ensuite il tourne en rond comme le rand() standard.

2 Je l'ai déjà optimisé au maximum, c'était pire.

En bref, pour faciliter la résolution du problème, je vais décrire ce que j'ai fait là :

Après préparation, on écrit un tableau temporaire de séquence croissante (valeur du compteur), puis le générateur donne une valeur de l'intervalle renge (cet indice est demandé lors de l'assignation de temp à res), dès que la valeur dans le tampon résultant, dans un temporaire, à cet endroit on met renge (valeur que le générateur ne peut pas donner). Les valeurs sont passées au tampon res via une vérification, si temp a un renge alors nous avons déjà assigné cette valeur à res, puis nous faisons un tri rapide(qui prend tous les renge jusqu'à la fin du tableau) et tronquons la plage par le reste de la séquence non touchée. Puis continuez jusqu'à ce que toute la réserve soit pleine.

 
Urain:

Si vous oubliez, après 32768 appels à rand (si vous ne le réinitialisez pas) la séquence se répète.

De même, si nous utilisons une initialisation pour générer deux séquences parallèles dans le temps, certaines parties peuvent être corrélées (ce n'est pas obligatoire, mais cette possibilité existe toujours).

Les réseaux ont différents algorithmes, par exemple Montecarlo, ou GA, encore une fois chaque réseau avec n'importe quel algorithme nécessite des poids initialisés.

Tout ceci n'est que spéculation. Il n'y a aucune preuve de cela.

J'ai beaucoup expérimenté avec GA et j'avais de tels doutes que le PRNG boucle (répète). Il s'est avéré qu'il ne s'agissait pas de la bobine... (il s'agit de moi).

En résumé, le PRNG n'a aucun effet sur le fonctionnement des GA.

A propos de l'initialisation :

Il existe un tel souhait, qu'il est possible d'initialiser sur un choix - par des zéros, PRNG, à partir d'un fichier.