Preguntas sobre POO en MQL5 - página 94

 
Igor Makanu:

Puedo hacer trozos significativos de int con una solución "de frente", pero no puedo hacer una solución universal... ¡No puedo! (((

Es muy probable que no haya explicado cómo y dónde quiero ir

hay 4 bytes int / uint, y ahí está mi conjunto de datos, que quiero desempaquetar en el optimizador

Supongamos que he conseguido empaquetarlo de esta manera:

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

qué tipos necesito int_XXX, aún no he estimado

pero quiero tener una usabilidad en la forma de este código

en general, funciona como quiero

//+------------------------------------------------------------------+
// 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
}
//+------------------------------------------------------------------+

... Qué pena, si he vuelto a contar mal los bits (((

 
Igor Makanu:

en general, funciona tan bien como me gustaría.

... malo si los bits se cuentan mal otra vez (((

Pregunta impúdica, ¿cuál es el objetivo de perseguir bits?

 
Alexandr Andreev:

Pregunta impúdica, ¿para qué sirve perseguir murciélagos?

escribió en el primer post de este artículo

tenemos que reducir el número de parámetros optimizables - no es crítico

y quiere aplicar el código de Gray a un nuevo parámetro optimizado "int", para que el AG del optimizador no converja tan rápidamente - Wiki

 
Igor Makanu:

en general, funciona tan bien como me gustaría.

... malo si los bits se cuentan mal otra vez (((

Si son 5, los ints de 32 bits rara vez tienen sentido, casi nunca (sólo como contadores de bucle y unidades de tamaño, y eso es por costumbre)

Y todo cabe en 64 sin cambios de bits .

Por cierto, aunque tengas un 4, deberías meter valores de 64 bits, por ejemplo en el doble - está en la demanda.

 
Maxim Kuznetsov:

Y en 64 cabrá todo sin cambios de bits...

De ninguna manera, las longitudes no están optimizadas en el probador, hace un par de meses pregunté por qué - sin respuesta

uint - Yo también creo que había un fallo... parece que el valor máximo no se pudo utilizar durante la optimización

así que sólo int y (muy probablemente) no funcionará correctamente en las nuevas construcciones

 
Igor Makanu:

De ninguna manera, los largos no están optimizados en el probador, les pregunté hace un par de meses - no me dieron una respuesta

uint - Yo también creo que había un fallo... parece que el valor máximo no se pudo utilizar durante la optimización

así que sólo int y (muy probablemente) no funcionará en las nuevas construcciones

tardará más de un mes en solapar un bucle vacío con el registro

Será mejor que crees tu propio formato, en el que los primeros bits sean de tamaño, y luego un registro. Y debes escribir todo en matriz de bytes.

Una matriz de bytes puede copiarse fácilmente en cualquier otra

 
Alexandr Andreev:

se necesita más de un mes para recorrer un bucle vacío con una carrera larga

Así es, pero hace tiempo que no persigo un TS ideal - lo que el optimizador encuentra lo escribo en la base de datos, pero el problema está en la convergencia del GA alrededor de un grupo de parámetros, así que decidí intentar animar el GA con un enfoque científico ))))


Alexandr Andreev:

Es más fácil crear un formato propio, en el que los primeros bits son de tamaño, y luego un registro. Y escribir todo en matriz de bytes.

Tengo que hacer pruebas, pero por ahora espero que el código de Gray y mis manipulaciones con la agrupación de parámetros optimizables en int ayuden a resolver el problema de convergencia del AG... ya veremos, no todo es tan rápido como nos gustaría

 
Igor Makanu:

De ninguna manera, los largos no están optimizados en el probador, les pregunté hace un par de meses - no me dieron una respuesta

uint - Yo también creo que había un fallo... Parece que el valor máximo no se pudo utilizar durante la optimización

así que sólo int y (muy probablemente) no funcionará correctamente en las nuevas construcciones

¿Has configurado este parámetro para el optimizador?

Por un lado, se puede poner doble, tiene una mantis más de 32, pero se puede atascar con conversiones doble<->cadena en el perfil

 
Maxim Kuznetsov:

¿configuras el parámetro del optimizador así?

no

Tengo más de 10 parámetros optimizables, he establecido los límites de optimización, todo funciona rápido, pero GA puede ir alrededor de 2 parámetros y eso es todo - no sirve para optimizar más

tengo que agrupar los parámetros y ejecutarlos por grupos o simplemente reiniciar la optimización y borrar las cachés

Me gustaría hacer un experimento y comprobar si Wiki tiene razón sobre GA

Los códigos de Gray se utilizan ampliamente en la teoría de los algoritmos genéticos [3] para codificar características genéticas representadas por números enteros.

 
Igor Makanu:

no

Tengo más de 10 parámetros optimizados, establezco límites, todo funciona rápido, pero GA puede reunir alrededor de 2 parámetros y no se necesita más optimización

tengo que agrupar los parámetros y ejecutarlos por grupos o simplemente reiniciar la optimización y borrar las cachés

Me gustaría hacer un experimento y comprobar si Wiki tiene razón sobre GA

Los códigos de Gray se utilizan a veces en los protocolos de transferencia de datos porque sí. En realidad, se hicieron para ellos :-)

GA es más bien una "palabra de moda". ¿Cómo puede el código de Gray ayudar a la convergencia? Sólo en teoría...

también podrías barajar al azar