Perguntas sobre OOP em MQL5 - página 94

 
Igor Makanu:

Posso fazer partes significativas da int com uma solução "head-on", mas não posso fazer uma solução universal... Eu não posso! (((

É altamente provável que eu não tenha explicado como e para onde quero ir.

há 4 bytes int / uint, e há meu conjunto de dados, que eu quero desempacotar no otimizador

vamos assumir que consegui embalá-lo desta maneira:

0-8 9-16 17-24 25-32
int_11 int_9 int_12

que tipos eu preciso int_XXX, ainda não estimei

mas eu quero ter uma usabilidade na forma deste código

em geral, funciona como eu quero que funcione

//+------------------------------------------------------------------+
// value - значение
// pos - бит начала числа
// cnt_bits - общее количество занимаемых бит
//+------------------------------------------------------------------+
int BitsToInt(const uint value, const uint pos, const uint cnt_bits)
{
   uint mask_value = (0x7FFFFFFF >> (sizeof(uint) * 8 - cnt_bits)) << pos;
   uint mask_sign = 1 << (pos + cnt_bits - 1);
   int sign = (bool)(value & mask_sign) ? -1 : 1;
   return(sign * (int)((value & mask_value) >> pos));
}
//+------------------------------------------------------------------+
void OnStart()
{
   uint v = 0x7F << 12;
   Print(BitsToInt(v, 12, 8));   // 127
   v = 0xFF << 12;
   Print(BitsToInt(v, 12, 8));   // -127
}
//+------------------------------------------------------------------+

... Que pena, se eu contar os pedaços de novo errado (((

 
Igor Makanu:

em geral, funciona tão bem quanto eu gostaria que funcionasse.

... muito ruim se os bits forem contados errado novamente (((

Pergunta imodesta, qual é o propósito de perseguir pedaços?

 
Alexandr Andreev:

Pergunta imodesta, qual é a finalidade de perseguir morcegos?

escrito no primeiro post desta peça

precisamos reduzir o número de parâmetros otimizáveis - não críticos

e querem aplicar o código de Gray a um novo parâmetro "int" otimizado, para que a AG do otimizador não converja tão rapidamente - Wiki

 
Igor Makanu:

em geral, funciona tão bem quanto eu gostaria que funcionasse.

... ruim se os bits forem contados errados novamente (((

Se são 5, 32-bit ints raramente fazem sentido, quase nunca (apenas como contadores de laço e unidades de tamanho, e isso está fora do hábito)

E tudo se encaixa em 64, sem mudanças de bit.

A propósito, mesmo que você tenha um 4, você ainda deve embalar em valores de 64 bits, por exemplo, em dobro - está em demanda.

 
Maxim Kuznetsov:

E 64 caberá em tudo sem pequenos deslocamentos ...

De jeito nenhum, longitudes não são otimizadas no testador, alguns meses atrás eu perguntei por quê - sem resposta

uint - Acho que também estava com falhas... Acho que o valor máximo não foi permitido ser usado durante a otimização

portanto somente int e (muito provavelmente) não funcionará corretamente nas novas construções

 
Igor Makanu:

De jeito nenhum, os anseios não são otimizados no testador, eu os perguntei há alguns meses - eles não me deram uma resposta

uint - Acho que também estava com falhas... parece que não foi permitido o valor máximo a ser utilizado durante a otimização

portanto somente int e (muito provavelmente) não funcionará em novas construções

demorará mais de um mês para revisar um loop vazio com a extração

É melhor você criar seu próprio formato, onde os primeiros bits são do tamanho, depois um disco. E você deve escrever tudo em matriz de bytes.

Uma matriz de bytes pode ser facilmente copiada em qualquer outro

 
Alexandr Andreev:

leva mais de um mês para passar por um loop vazio com um longo prazo

Assim é, mas durante muito tempo eu não estou perseguindo um TS ideal - o que o otimizador encontra eu escrevo no banco de dados, mas o problema está na convergência da AG em torno de um grupo de parâmetros, então eu decidi tentar animar a AG com uma abordagem científica ))))


Alexandr Andreev:

É mais fácil criar seu próprio formato, onde os primeiros bits são do tamanho, depois um disco. E escreva tudo em matriz de bytes.

Preciso testar, mas por enquanto espero, que o código de Gray e minhas manipulações com agrupamento de parâmetros otimizáveis em int ajudarão a resolver o problema de convergência da AG... veremos, nem tudo é tão rápido quanto gostaríamos que fosse

 
Igor Makanu:

De jeito nenhum, os anseios não são otimizados no testador, eu os perguntei há alguns meses - eles não me deram uma resposta

uint - Acho que também estava com falhas... parece que não foi permitido o valor máximo a ser utilizado durante a otimização

portanto somente int e (muito provavelmente) não funcionará corretamente nas novas construções

Você definiu este parâmetro para o otimizador?

Por um lado, você pode definir o dobro, tem um mantis mais de 32, mas você pode ficar preso com o dobro<->conversões de corda no perfil

 
Maxim Kuznetsov:

você define o parâmetro otimizador desta forma?

não

eu tenho mais de 10 parâmetros otimizáveis, eu estabeleço os limites de otimização, tudo funciona rápido, mas a GA pode ir em torno de 2 parâmetros e é isso - não há mais utilidade na otimização

tenho que agrupar os parâmetros e executá-los por grupos ou apenas reiniciar a otimização e limpar as caches

Eu gostaria de fazer uma experiência e verificar se o Wiki está certo sobre a GA

Os códigos de Gray são amplamente utilizados na teoria dos algoritmos genéticos [3] para codificar características genéticas representadas por números inteiros.

 
Igor Makanu:

não

eu tenho mais de 10 parâmetros otimizados, eu estabeleço limites, tudo funciona rápido, mas a GA pode reunir cerca de 2 parâmetros e não é necessária mais nenhuma otimização

tenho que agrupar os parâmetros e executá-los por grupos ou apenas reiniciar a otimização e limpar as caches

Eu gostaria de fazer uma experiência e verificar se o Wiki está certo sobre a GA

Os códigos de Gray são às vezes usados em protocolos de transferência de dados só porque. Na verdade eles foram feitos para eles :-)

GA é mais uma "palavra que zumbida". Como o código de Gray pode ajudar na convergência? Só teoricamente...

mais vale embaralhar aleatoriamente

Razão: