O "New Neural" é um projecto de motor de rede neural Open Source para a plataforma MetaTrader 5. - página 44

 
Urain:

Uma classe PRNG no intervalo especificado.

Vantagens: possibilidade de ter vários randoms com inicializações diferentes,

valores distribuídos uniformemente de qualquer intervalo até 10 lm (infelizmente, não é possível obter mais do que isso em um array).

Para 10 lakh chamadas Rand() supera um rand padrão em 50 µs (time rnd.Rand()=344 time rand()=391).

Desvantagens: Srand() leva muito tempo para inicializar, o intervalo padrão é de 32768 (766µs), 1 lakh quase 2 minutos.

Ainda não verifiquei o limite de 10 lakhs, mas deve ser incrivelmente longo porque o tempo cresce progressivamente.


Críticas saudáveis são aceites.



Podes elaborar?

Para que fins você pode precisar dessas funções?

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

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

Ou um pequeno exemplo de como usá-los.

O que há de errado com o padrão?

 
her.human:

Podes explicar isto melhor?

Para que fins podem estas funções ser necessárias?

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

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

Ou um pequeno exemplo de como usá-los.

O que há de errado com o padrão?

Estas funções podem ser necessárias para simplesmente copiar parte ou toda uma sequência aleatória, ou para obter valores que foram emitidos em certas chamadas para Rand().

Rand() é insatisfatório em muitos aspectos:

1) Se você quiser obter uma seqüência uniformemente distribuída de 0 a 100, você não pode obter diretamente do padrão (você tem que modificar o algoritmo).

2) Não é possível utilizar duas sequências simultaneamente, a inicialização do srand, torna impossível a utilização da inicialização anterior.

3) A faixa padrão do rand permite apenas 32768 peças e nada mais. Eu nem sequer estou a dizer sobre dividi-lo por 100000, mas não se pode dividi-lo por um múltiplo de 10. Por exemplo: você tem um intervalo [-1;1] e precisa dividi-lo em passos até o 3º dígito, inicializar a classe para o intervalo 2000, depois

Rand()/1000.-1.

e obter o PRNG da faixa [-1;1] em passos de 0,001.

Não se pode fazer isto com o padrão.

 
Quem? O quê? Diz-me, há outra forma de optimizar a tarefa?
 
Urain:

Estas funções podem ser necessárias para simplesmente copiar parte ou toda uma sequência aleatória ou para recuperar valores que foram emitidos em certas chamadas para Rand().

O stanndprt é insatisfatório em muitos aspectos:

1) Se você quiser obter uma seqüência uniformemente distribuída de 0 a 100, você não pode obter diretamente do padrão (você tem que modificar o algoritmo).

2) É impossível usar duas sequências simultaneamente, a inicialização do srand, impossibilita o uso da inicialização anterior.

3) O alcance do rand padrão permite fazer a divisão em 32768 partes apenas e de nenhuma outra forma. Nem sequer estou a falar em dividi-lo em 100000, mas não vais conseguir dividi-lo em nenhum múltiplo de 10. Por exemplo, você tem um intervalo [-1;1] e você precisa dividi-lo em passos com a precisão do 3º sinal, então você precisa inicializar a classe para o intervalo de 2000.

e obter PRNG da faixa [-1;1] com o passo 0,001

Não se pode fazer isto com o padrão.

1) De acordo.

2) Não está claro? Para que fins pode precisar dele?

3) Eu não entrei muito no código, parece que se refere a 1).

É por isso que eu tenho uma pergunta sobre estas (acima) duas funções.

Você definitivamente precisa de uma tal classe (função). Mas ninguém precisa de travagens desnecessárias.

 

Se você tem dificuldade em entender o passo 2, talvez você deva primeiro decidir por que precisa de um PRNG em primeiro lugar.

Então ficará claro porque é necessário ter duas sequências PRNG não correlacionadas ao mesmo tempo.

 
Urain:

Se você tem dificuldade em entender o passo 2, talvez você deva primeiro decidir por que precisa de um PRNG em primeiro lugar.

Então ficará claro porque existem duas sequências PRNG não correlacionadas ao mesmo tempo.


Estranho de ouvir - sequências PRNG não correlacionadas.

Não consigo entender para que servem as redes neurais?

 
humano:

Não consigo perceber para que servem estas redes neurais?

Sem razão, agora é só uma coisa chique...

Urain:

Vantagens: Possibilidade de ter vários randoms com inicializações diferentes,

Então cada objecto leva uma sequência diferente?

Drawbacks: Srand() leva muito tempo para inicializar, o intervalo padrão é de 32768 (766µs), 1 cordeiro é quase 2 minutos.

É aqui que é realmente, realmente assustador, irrealista. Não devia ser assim.

Vou ver quando houver sequer uma pequena abertura.
 
ela.humana:

Estranho de ouvir - sequências PRNG não correlacionadas.

Não consigo entender para que servem as redes neurais?

Deixe-me lembrá-lo, se você esquecer, após 32768 chamadas para rand (se você não reinicializar) a seqüência se repete.

Assim, se utilizarmos uma inicialização para gerar duas seqüências paralelas no tempo, algumas seções podem ter uma correlação entre elas (isto não é obrigatório, mas há uma possibilidade).

As redes têm diferentes algoritmos, por exemplo Montecarlo, ou GA, novamente cada rede com qualquer algoritmo requer valores iniciais de pesos.

 
TheXpert:

Nada, só uma coisa chique, hoje em dia...

1) Então cada objeto leva uma seqüência diferente?

2) Aqui é onde é realmente, realmente assustador, irrealista. Não devia ser.

Vou ver quando houver um pequeno intervalo.

1 Sim, cada objecto memoriza uma sequência em srand() e depois vai girando e rodando tal como o rand() padrão.

2 Eu já o otimizei o máximo que pude; foi pior.

Em resumo, para facilitar a solução do problema, vou descrever o que fiz lá:

Após a preparação, nós escrevemos uma sequência de aumento temporário (valor do contador), então o gerador dá um valor do intervalo renge (este índice é solicitado ao atribuir de temp para res), assim que o valor no buffer resultante, em um temporário, neste lugar nós colocamos renge (valor que o gerador não pode dar). Os valores são passados para res buffer via verificação, se a temp tem uma renge então já atribuímos este valor para res, então fazemos uma classificação rápida(que leva toda a renge para o fim do array) e truncamos o intervalo pelo resto da sequência intocada. Então, continue até que toda a res res res resida esteja cheia.

 
Urain:

Se você esquecer, após 32768 chamadas para o rand (se você não reinicializá-lo) a seqüência se repete.

De forma correspondente, se usarmos uma inicialização para gerar duas sequências paralelas no tempo, algumas partes podem ter correlação (não é obrigatório, mas tal possibilidade ainda existe).

As redes têm algoritmos diferentes, por exemplo, Montecarlo, ou GA, novamente cada rede com qualquer algoritmo requer pesos inicializados.

Tudo isto é especulação. Não há provas disso.

Eu experimentei muito com GA e tive tantas dúvidas que PRNG loops (repetições). Acontece que não se tratava da bobina... (isto é sobre mim).

Conclusão: PRNG não tem efeito na operação GA.

Sobre a inicialização:

Existe tal desejo, que é possível inicializar uma escolha - por zeros, PRNG, a partir de um arquivo.