Algoritmo para combinar rangos de un segmento - ayuda para crear - página 3

 
Dmitry Fedoseev:

1. ¿Dónde está el coeficiente?

2. ¿Y p.1?

3. No, es más sencillo que eso. De acuerdo, intentaré acelerarlo mañana.

1. Coeficiente (índice compuesto) en cada segmento será en sus características - experimentalmente entonces determinar la fórmula, pero convencionalmente podemos asumir que él es.

2. Así que es por segmento por separado, sólo un indicador (de los tres sobre los que se calcula) allí se puede distribuir a todos, y los otros dos no.

3. Gracias, esperaré.

 

Aquí. Pero si hay 1.000 secciones, no sirve de nada. Hay demasiadas variantes, incluso puede que no tengas suficiente memoria.

Puede ir de otra manera - al final de cada segmento vincular una matriz con índices que apuntan al siguiente segmento. De esta manera se puede pasar por todas las opciones sin llenar la memoria. Pero aún así habrá demasiadas opciones... La búsqueda llevará mucho tiempo. También puedes pensar en cómo proporcionar acceso a las variantes por sus números, si lo necesitas (por diversión).

Pero, ¿merece realmente la pena, cuando hay tantas variantes? ¿Qué tal si se especifica la tarea para hacerla más realista?

Archivos adjuntos:
3.mq5  14 kb
 
Dmitry Fedoseev:

Aquí. Pero si hay 1.000 secciones, no sirve de nada. Hay demasiadas variantes, incluso puede que no tengas suficiente memoria.

Se puede hacer de otra manera: al final de cada segmento se vincula una matriz con índices que apuntan al siguiente segmento. De esta manera se puede pasar por todas las opciones sin llenar la memoria. Pero aún así habrá demasiadas opciones... La búsqueda llevará mucho tiempo. También puedes pensar en cómo proporcionar acceso a las variantes por sus números, si lo necesitas (por diversión).

Pero, ¿merece realmente la pena, cuando hay tantas variantes? ¿Qué tal si se especifica la tarea para hacerla más realista?

Podría haber muchos objetivos ahí fuera. Los fallos más pequeños, de los segmentos más largos, de los más cortos, de los más idénticos) incluso en los gráficos de destino el tiempo más corto y el camino más corto logísticamente se resuelven de manera diferente)
 
Valeriy Yastremskiy:
Puede haber muchos objetivos ahí. Las faltas más pequeñas, de los segmentos más largos, de los más cortos, de los más idénticos) incluso en los gráficos de destino menos tiempo y camino mínimo logísticamente se resuelven de manera diferente)

¿De qué se trata?

Las matrices, con punteros a un segmento vecino, son una cantidad ínfima de memoria comparada con una matriz que contenga todas las combinaciones listas.

 
Dmitry Fedoseev:

Aquí. Pero si hay 1.000 secciones, no sirve de nada. Hay demasiadas opciones, incluso puede que no tengas suficiente memoria.

Gracias.

Pero no estoy muy seguro de cuál es el objetivo de la actualización: ¿se han hecho correcciones en el código? La última vez recuperó 613 combinaciones, esta vez recuperó 1507.

La velocidad se ha vuelto más lenta, pero eso es probablemente por el número de combinaciones.

Última variante:

2021.04.23 19:56:08.350 Scripts script Q_Podbor_02 (Si-6.21,M1) loaded successfully
2021.04.23 19:56:08.742 Scripts script Q_Podbor_02 (Si-6.21,M1) removed

Variante actual:

2021.04.23 19:51:56.608 Scripts script Q_Podbor_03 (Si-6.21,M1) loaded successfully
2021.04.23 19:51:58.387 Scripts script Q_Podbor_03 (Si-6.21,M1) removed
Dmitry Fedoseev:

Podríamos ir por otro camino: al final de cada segmento podríamos atar una matriz con índices que apunten al siguiente segmento. Esto asegura pasar por todas las variantes sin llenar la memoria. Pero aún así habrá muchas variantes... la búsqueda tomará mucho tiempo. También puedes pensar en cómo proporcionar acceso a las variantes por sus números, si lo necesitas (por diversión).

Si lo he entendido bien, la idea es calcular posteriormente la combinación y evaluarla, luego guardar el resultado y pasar a la siguiente combinación. Si el nuevo resultado (o el top 10) es mejor que el anterior, lo reemplazamos en la variable del array. Y, sí, sólo quería preguntar, ¿cómo obtener una cadena de índices del primer nivel del array del que consta la combinación?

Dmitry Fedoseev:

¿Pero tiene sentido si hay tantas variantes? ¿Qué tal si se especifica el problema para hacerlo más realista?

¿Por qué no es adecuada la variante con número limitado de segmentos desde el punto actual (paso de combinación, cuando ya se han recogido n segmentos), porque reducirá significativamente el número de combinaciones?

 
Aleksey Vyazmikin:

Gracias.

Pero no he entendido bien el sentido de la actualización: ¿se han hecho correcciones en el código? La última vez hubo 613 combinaciones, esta vez hay 1507.

La velocidad se ha vuelto más lenta, pero eso es probablemente por el número de combinaciones.

Última variante:

Variante actual:

Si he entendido bien, se propone calcular consecutivamente una combinación y evaluarla inmediatamente, guardar el resultado de la evaluación y pasar a la siguiente combinación. Si el nuevo resultado (o el top 10) es mejor que el anterior, lo sustituimos en la matriz/variable. Y, sí, sólo quería preguntar, ¿cómo obtener una cadena de índices de primer nivel del array del que consta la combinación?

¿Por qué no es bueno probar un número limitado de secciones desde el punto actual (paso de la combinación, cuando ya se han recogido n secciones), porque permite reducir significativamente el número de combinaciones?

¿Por qué no consideramos la versión original del problema?

 
Алексей Тарабанов:

¿Por qué no miramos la versión original del problema?

Sin las secciones.

 
Алексей Тарабанов:

¿Por qué no miramos la versión original del problema?

Alexei Tarabanov:

Sin los segmentos.

¿Existe esa variante?

La variante original consiste en dividir idealmente la serie numérica como un array en segmentos (rangos). Los criterios de división son:

1. Al menos el 5% de los números entran en un rango - %R. 2;

2) Evaluar la respuesta de un segmento a otra matriz binaria del mismo tamaño (si hay un número en el rango - 1, si no - 0) y la respuesta del segmento debe diferir del valor medio de toda la matriz binaria en al menos un 5% - dP%;

3. En 10 segmentos idénticos por profundidad de matriz, calcular el SCO dP%, que no debe ser superior a 1,5 - K_SKO.

Ahora, diferentes métodos definen rangos, pero diferentes métodos son capaces de seleccionar diferentes rangos que cumplen con los criterios anteriores. Por lo tanto, el objetivo es tomar todas las variantes de la segmentación de diferentes métodos y combinar las mejores.

 
Aleksey Vyazmikin:

Gracias.

Pero no he entendido bien el sentido de la actualización: ¿se han hecho correcciones en el código? La última vez hubo 613 combinaciones, esta vez hay 1507.

La velocidad se ha vuelto más lenta, pero eso es probablemente por el número de combinaciones.

Última variante:

Variante actual:

Si he entendido bien, se propone calcular consecutivamente una combinación y evaluarla inmediatamente, guardar el resultado de la evaluación y pasar a la siguiente combinación. Si el nuevo resultado (o el top 10) es mejor que el anterior, lo sustituimos en la matriz/variable. Y, sí, sólo quería preguntar, ¿cómo obtener una cadena de índices de primer nivel del array del que consta la combinación?

¿Por qué no es útil probar un número limitado de secciones desde el punto actual (paso de la combinación, cuando ya se han recogido n secciones), porque permite reducir significativamente el número de combinaciones?

¿Y no sé dónde y en qué buscas combinaciones? Por lo general, con cada inicio se crea un nuevo conjunto de segmentos de entrada que siempre es diferente.

Una cadena de índices - por lo que hay que crear combinaciones no a partir de los segmentos, sino de los índices de los segmentos, o añadir un tercer elemento en la segunda dimensión y almacenar el índice en él.

No sé por qué un número limitado no es adecuado, usted escribió sobre todas las combinaciones.

 
Dmitry Fedoseev:

No sé dónde y en qué combinaciones estás buscando.

Más arriba, Alexei Tarabanov escribió con detalle dónde y en qué al responder. Pero esto es teoría, aún no he terminado lo que necesito.

Dmitry Fedoseev:

Por lo general, cada inicio crea un nuevo conjunto de segmentos iniciales y siempre son diferentes.

Entonces veo - no me he ocupado de ello y sólo ejecuto dos scripts - si el conjunto es diferente, entonces sólo será posible evaluar si los conjuntos son los mismos.

Dmitry Fedoseev:

Cadena de índices - así que deberíamos crear combinaciones no a partir de segmentos, sino de índices de segmentos, bien o añadir un tercer elemento a la segunda dimensión y guardar el índice en ella.

Creo que el tercer elemento es una opción más conveniente. ¿Podría ajustar el código para que funcione correctamente con esta implementación?

Dmitry Fedoseev:

No sé por qué no es buena una enumeración de algún número limitado, usted escribió sobre todas las combinaciones.

Así es, originalmente escribí sobre todas las combinaciones, pero en el proceso, gracias a ti, queda claro que es muy costoso y se necesita una opción, empíricamente capaz de no ser peor que la fuerza bruta. Y como la evaluación del segmento resultante se forma de sus trozos, supongo, que limitando n combinaciones de los mejores trozos y añadiendo nuevos trozos, será posible acercarse a la mejor opción de todas las combinaciones posibles sin límite.