Aprendizaje automático en el trading: teoría, práctica, operaciones y más - página 1800

 
Aleksey Vyazmikin:

Por favor, ayúdame a resolver un problema de combinatoria.

Hay N elementos diferentes no repetibles, hay que tomar de ellos X elemento(s) a la vez, siendo el valor de entrada el número de la combinación de todos los elementos posibles.

¿Existe una fórmula o función para esto?

La función de entrada debe obtener un array con elementos, número de elementos en combinación y número de combinación, y la salida debe ser un array con índices de elementos.

¡Por favor, ayuda!

¿Tal vez sea más fácil buscar X al azar de N?
Si trabajas con número de combinación, entonces tienes que construir esa combinación internamente desde el número.

Y puede haber una gran cantidad de números combinados. Por ejemplo, para elegir 10 de 100 serán millones o miles de millones (algo hasta cierto punto). ¿Cómo decidirás qué combinación tomar? 1,2, 158451, o 5454554 ?

El único aleatorio es más fácil de encontrar, simplemente selecciona al azar 1 de N., luego el segundo y así hasta X.
Al seleccionar, si un elemento ya está seleccionado, se omite el duplicado y se vuelve a seleccionar. Es decir, habrá más intentos que X. Por ejemplo, si se toman 90 de 100, habrá muchos intentos duplicados.

Para mayor rapidez, puede soltar el elemento seleccionado de la matriz N y seleccionar entre los N-1 restantes. (Intercambia el elemento seleccionado con el último y acorta el array en 1.) De esta manera encontrarás X elementos aleatorios en exactamente X intentos. Si N > 3000 elementos, es mejor utilizar un generador aleatorio más complicado que el incorporado. Comparación de aleatorios aquí.

Как MathRand() генерирует значения?
Как MathRand() генерирует значения?
  • 2010.08.06
  • www.mql5.com
Общее обсуждение: Как MathRand() генерирует значения?
 
Aleksey Nikolayev:

Eso podría funcionar.

O puedes echar un vistazo al apartado "Combinaciones" del libro de texto "Programación en Algoritmos" de Okulov

Seguro que hay una fórmula para obtener la combinación del índice. ¿Puedes escribirlo, por favor?

 
Valeriy Yastremskiy:

Parámetros optimizables y áreas de crecimiento de disminución del equilibrio. La idea no es optimizar, sino sacar características significativas para las zonas de crecimiento de la caída del equilibrio, pero la ciencia dice que es difícil o imposible a través de cualquier característica de BP en la presencia de SB. Es difícil encontrar modelos matemáticos que describan las series con suficiente precisión, y no está claro qué tamaño de PA se necesita.

Las condiciones simétricas me parecen más correctas. La serie también puede invertirse. ))))

La ciencia puede decir muchas cosas, pero hay que probar y comprobar el potencial, tal vez sea imposible de perfeccionar, y una versión no ideal será suficiente para mejorar el rendimiento en general.

 
elibrarius:

¿No sería más fácil buscar X al azar de N?
Si trabajas con el número de la combinación, tienes que construir esa combinación internamente a partir del número.

Y puede haber una gran cantidad de números combinados. Por ejemplo, para seleccionar 10 de 100. Habrá millones o miles de millones (algo hasta cierto punto). ¿Cómo decidirás qué combinación tomar? 1,2, 158451, o 5454554 ?

El único aleatorio es más fácil de encontrar, simplemente selecciona al azar 1 de N., luego el segundo y así hasta X.
Al seleccionar, si un elemento ya está seleccionado, se omite el duplicado y se vuelve a seleccionar. Es decir, habrá más intentos que X. Por ejemplo, si se toman 90 de 100, habrá muchos intentos duplicados.

Para mayor rapidez, puede soltar el elemento seleccionado de la matriz N y seleccionar entre los N-1 restantes. (Intercambia el elemento seleccionado con el último y acorta el array en 1.) De esta manera encontrarás X elementos aleatorios en exactamente X intentos. Si N > 3000 elementos, es mejor utilizar un generador aleatorio más complicado que el incorporado. Haga clic aquí para comparar los aleatorios.

El objetivo es precisamente la exageración. De 250.000 hojas, se obtienen 15.000 divisiones únicas. Una enumeración completa de hojas con 3 divisiones llevaría unos 250 días, según mis cálculos, para un valor objetivo. Creo que hay que agrupar los splits, seleccionando los splits iniciales y buscando splits que se activen en sus zonas, y luego probar cada grupo por separado. Este enfoque reducirá significativamente el número de combinaciones.

 
Aleksey Vyazmikin:

¿Existe definitivamente una fórmula para obtener la combinación del índice? ¿Puedes escribirlo, por favor?

No es una fórmula, es un algoritmo. Revisa el de Okulov, no es mucho, y no es complicado.

 
Aleksey Nikolayev:

No es una fórmula, es un algoritmo. Busca Okulov, no es mucho y no es complicado.

Lo he descargado y buscado - ¡gracias!

Si lo calificaste como "fácil", debes haberlo entendido, pero yo no - no entiendo el lenguaje de programación, la descripción del texto no es clara, ¿puedo hacer preguntas sobre el material?

 
Aleksey Vyazmikin:

Lo he descargado y mirado - ¡gracias!

Si lo calificó como "sin complicaciones", debe haberlo entendido, pero yo no - no entiendo el lenguaje de programación allí, la descripción del texto no es clara, ¿puedo hacer preguntas sobre el material?

Si es suficiente, puede preguntar. La idea es simple: construir una matriz (bidimensional) de todas las combinaciones y luego tomar una fila (o columna) por número. Tienes dos opciones: almacenar la matriz o recalcularla cada vez (lo que ahorra memoria y tiempo).

Aquí hay un ejemplo en R:

#  i - номер, n - элементов исходно, k - сколько выбираем из n
i2c <- function (i,n,k) {m <- combn(n,k); m[,i]}

> i2c(3,10,5)
[1] 1 2 3 4 7
 
Aleksey Nikolayev:

Si se trata de una medida, entonces fíjala. La idea es simple: construir una matriz (bidimensional) de todas las combinaciones y luego tomar una fila (o una columna) por número. Tienes dos opciones: almacenar la matriz o recalcularla cada vez (lo que ahorra memoria y tiempo).

Aquí hay un ejemplo en R:

La matriz se construye a través de bucles, lo cual es una pérdida de tiempo, no muy adecuada. Es interesante la variante de encontrar el valor mediante el cálculo sin tabla previa completa.

 
Aleksey Vyazmikin:

La matriz se construye a través de bucles, y esto es una pérdida de tiempo, no es muy adecuado. La opción de encontrar un valor por cálculo, sin una tabla completa de antemano, es interesante.

No estoy seguro de que esa fórmula exista.

 
Aleksey Nikolayev:

No estoy seguro de que exista tal fórmula.

¡Debe haber algún algoritmo, porque resulta que para 15000 elementos de 3 combinaciones, necesitamos mantener el array en memoria durante 4 terabytes! Es aún más, calculo, si se necesitan 8 bits por 1 elemento.

Razón de la queja: