"New Neural" è un progetto di motore di rete neurale Open Source per la piattaforma MetaTrader 5. - pagina 44

 
Urain:

Una classe PRNG nell'intervallo specificato.

Vantaggi: possibilità di avere diversi randomi con diversa inizializzazione,

valori uniformemente distribuiti di qualsiasi gamma fino a 10 lm (sfortunatamente, non è possibile ottenere più di questo in un array).

Per 10 lakh chiamate Rand() supera una rand standard di 50 µs (tempo rnd.Rand()=344 tempo rand()=391).

Svantaggi: Srand() richiede molto tempo per inizializzarsi, la gamma standard è 32768 (766µs), 1 lakh quasi 2 minuti.

Non ho controllato il limite di 10 lakhs, ma deve essere incredibilmente lungo perché il tempo cresce progressivamente.


Una sana critica è accettata.



Puoi spiegarti meglio?

Per quali scopi potreste aver bisogno di queste funzioni?

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

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

O un piccolo esempio di come usarli.

Cosa c'è che non va in quello standard?

 
her.human:

Puoi spiegarti meglio?

Per quali scopi potrebbero essere necessarie queste funzioni?

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

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

O un piccolo esempio di come usarli.

Cosa c'è che non va in quello standard?

Queste funzioni possono essere necessarie per copiare semplicemente una parte o tutto di una sequenza casuale, o per ottenere valori che sono stati emessi su certe chiamate a Rand().

Rand() è insoddisfacente in molti modi:

1) Se volete ottenere una sequenza uniformemente distribuita da 0 a 100, non potete ottenere direttamente dallo standard (dovete modificare l'algoritmo).

2) Non è possibile utilizzare due sequenze simultaneamente, l'inizializzazione di srand, rende impossibile utilizzare l'inizializzazione precedente.

3) La gamma standard di rand permette solo 32768 parti e nient'altro. Non dico nemmeno di dividerlo per 100000, ma non si può nemmeno dividerlo per qualsiasi multiplo di 10. Per esempio: avete un intervallo [-1;1] e dovete dividerlo in passi fino alla terza cifra, inizializzate la classe all'intervallo 2000, poi

Rand()/1000.-1.

e ottenere il PRNG dall'intervallo [-1;1] in passi di 0,001.

Non è possibile farlo con quello standard.

 
Chi? Cosa? Dimmi, c'è un altro modo per ottimizzare il compito?
 
Urain:

Queste funzioni possono essere necessarie per copiare semplicemente una parte o tutto di una sequenza casuale o per recuperare i valori che sono stati emessi su certe chiamate a Rand().

Lo stanndprt è insoddisfacente in molti modi:

1) Se volete ottenere una sequenza uniformemente distribuita da 0 a 100, non potete ottenere direttamente dallo standard (dovete modificare l'algoritmo).

2) È impossibile utilizzare due sequenze simultaneamente, l'inizializzazione di srand, rende impossibile utilizzare l'inizializzazione precedente.

3) La gamma della rand standard permette di fare la divisione solo in 32768 parti e in nessun altro modo. Non sto nemmeno parlando di dividerlo in 100000, ma non potrai dividerlo in nessun multiplo di 10. Per esempio: avete un intervallo [-1;1] e dovete dividerlo in passi fino alla terza cifra, quindi dovete inizializzare la classe all'intervallo 2000.

e ottenere PRNG dall'intervallo [-1;1] con passo 0,001

Non è possibile farlo con quello standard.

1) D'accordo.

2) Non è chiaro? Per quali scopi può servirvi?

3) Non mi sono addentrato troppo nel codice, sembra che si riferisca alla 1).

Ecco perché ho una domanda su queste due funzioni (di cui sopra).

Avete sicuramente bisogno di una tale classe (funzione). Ma nessuno ha bisogno di frenate inutili.

 

Se avete problemi a capire il passo 2, forse dovreste prima decidere perché avete bisogno di un PRNG in primo luogo.

Allora sarà chiaro perché è necessario avere due sequenze PRNG non correlate allo stesso tempo.

 
Urain:

Se avete problemi a capire il passo 2, forse dovreste prima decidere perché avete bisogno di un PRNG in primo luogo.

Allora sarà chiaro perché ci sono due sequenze PRNG non correlate allo stesso tempo.


Strano da sentire - sequenze PRNG non correlate.

Non riesco a capire a cosa servono le reti neurali?

 
umano:

Non riesco a capire a cosa servono queste reti neurali?

Niente, è solo una cosa elegante al giorno d'oggi...

Urain:

Vantaggi: Possibilità di avere diversi randomi con inizializzazione diversa,

Quindi ogni oggetto conduce una sequenza diversa?

Svantaggi: Srand() richiede molto tempo per inizializzarsi, l'intervallo standard è 32768 (766µs), 1 agnello è quasi 2 minuti.

Qui è dove è davvero, davvero spaventoso, irrealistico. Non dovrebbe essere così.

Vedrò quando ci sarà anche solo un po' di apertura.
 
lei.umana:

Strano da sentire - sequenze PRNG non correlate.

Non riesco a capire a cosa servono le reti neurali?

Vi ricordo, se lo dimenticate, che dopo 32768 chiamate a rand (se non lo reinizializzate) la sequenza si ripete.

Di conseguenza, se usiamo un'inizializzazione per generare due sequenze parallele nel tempo, alcune sezioni possono avere una correlazione tra loro (questo non è obbligatorio, ma c'è una possibilità).

Le reti hanno diversi algoritmi, per esempio Montecarlo, o GA, di nuovo ogni rete con qualsiasi algoritmo richiede valori iniziali dei pesi.

 
TheXpert:

Niente, solo una cosa elegante in questi giorni...

1) Quindi ogni oggetto conduce una sequenza diversa?

2) Qui è dove è davvero, davvero spaventoso, irrealistico. Non dovrebbe esserlo.

Vedrò quando ci sarà anche solo un po' di scarto.

1 Sì, ogni oggetto memorizza una sequenza a srand() e poi va in giro come la rand() standard.

2 L'ho già ottimizzato il più possibile; era peggio.

In breve, per facilitare la soluzione del problema, descriverò quello che ho fatto lì:

Dopo la preparazione, scriviamo un array temporaneo che aumenta la sequenza (valore del contatore), poi il generatore dà un valore dalla gamma renge (questo indice è richiesto quando si assegna da temp a res), appena il valore nel buffer risultante, in uno temporaneo, in questo posto mettiamo renge (valore che il generatore non può dare). I valori vengono passati al buffer res tramite controllo, se temp ha un renge allora abbiamo già assegnato questo valore a res, poi facciamo l'ordinamento rapido(che porta tutti i renge alla fine dell'array) e tronchiamo l'intervallo per il resto della sequenza non toccata. Poi continuare fino a quando tutta la riserva è piena.

 
Urain:

Se vi dimenticate, dopo 32768 chiamate a rand (se non lo reinizializzate) la sequenza si ripete.

Di conseguenza, se usiamo un'inizializzazione per generare due sequenze parallele nel tempo, alcune parti possono avere una correlazione (non è obbligatorio, ma questa possibilità esiste ancora).

Le reti hanno diversi algoritmi, per esempio Montecarlo, o GA, di nuovo ogni rete con qualsiasi algoritmo richiede pesi inizializzati.

Tutto questo è speculazione. Non c'è nessuna prova.

Ho sperimentato molto con GA e ho avuto tali dubbi che il PRNG va in loop (ripete). Si è scoperto che non si trattava della bobina... (questo riguarda me).

In conclusione: il PRNG non ha alcun effetto sul funzionamento del GA.

Riguardo all'inizializzazione:

C'è un tale desiderio, che è possibile inizializzare su una scelta - da zeri, PRNG, da un file.

Motivazione: