Discusión sobre el artículo "Algoritmos Genéticos: ¡Es fácil!" - página 13
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
En la biblioteca libre del artículo, trabaje con el genotipo. Trabaje con el fenotipo en FF (como en el ejemplo 2).
Lo anterior significa que la biblioteca funcionará con la misma eficiencia si el fenotipo se procesa en FF, pero el número de iteraciones (ejecuciones FF) será significativamente mayor que si el AG trabaja con el fenotipo directamente (porque el detalle del espacio de búsqueda aumenta). En el límite, la búsqueda (sin refinamiento del fenotipo) tiende a un espacio de búsqueda continuo.
Buenas noches.
Me gustaría darle las gracias por un gran artículo.
Al principio me resultó un poco complicado, pero más o menos lo entendí.
Antes de escribir algo en este hilo del foro, me gustaría aclararme si he entendido correctamente su artículo y el curso del algoritmo UGA:
1)Establecer los parámetros de entrada de UGA para una tarea en particular.
---UGA
2)Creación de una colonia inicial de progenitores combinando genes aleatoriamente
2.2)Cálculo del resultado de FF para cada una de esta colonia
2.3)Eliminación de clones.
3)Determinación del mejor resultado de FF de todos los individuos de esa colonia
4)Inicio del ciclo de creación de una colonia de descendientes a partir de la primera colonia. Los descendientes se crean utilizando las herramientas Cruce,mutación artificial y natural, replicación de genes y préstamo de genes, donde
Cruce - intercambio de partes de los cromosomas de los padres,
Mutación artificial - selección de genes fuera de rango (gen del progenitor 1, gen del progenitor 2).
Est. Mutación - selección de genes del rango (Mínimo del rango de genes , Máximo del rango de genes).
Replicación - selección de genes en los rangos cercanos a los valores de los genes parentales, pero con un cierto desfase.
préstamo de genes - creación de un "individuo ensamblado" a partir de un número de progenitores igual al número de genes.
5 )Eliminación de clones
6 )Cálculo del resultado del FF para cada una de estas colonias
7)Comparación de los resultados de los individuos descendientes con el resultado de referencia, y su posible sustitución. en caso de sustitución se pone a cero el contador "Épocas sin cambios del valor de referencia
8)Ordenación de todos los individuos de mejor a peor
9)-->elemento 4
10)Si se produjeron épocas sin cambios en Y, entonces terminar y emitir el valor de referencia encontrado.
Pido disculpas de antemano, tal vez esto es un hilo de discusión en lugar de un tutorial, pero no tengo ningún otro lugar para pedir consejo. En realidad me encontré con GA por primera vez en su artículo (Antes de su artículo ni siquiera entendía lo que las palabras "Fast(algoritmo genético)" significa en el probador de terminales), por lo que mi conocimiento y experiencia (empecé a programar en MQL5 hace unos 2 meses) es un poco limitado.
Si entiendo su algoritmo GA, voy a tratar de trasplantarlo a OOP. Por lo que, de hecho, empecé a estudiarlo. Ya he implementado modelos de comercio, auto-optimización con búsqueda directa, pero con GA todavía no.( Modelos en el principio descrito en el artículo https://www.mql5.com/ru/articles/217 ).
Gracias de antemano.
mi__x__an:
...Me gustaría aclararme si he entendido correctamente su artículo y el curso del algoritmo UGA
Buenos días .
Gracias por su pronta respuesta.
Entonces tengo algunas preguntas.
¿Qué es aquí la matriz de cromosomas? ¿Valores posibles del parámetro optimizado?
Así que si, por ejemplo, optimizamos "tamaño de lotemínimo " en el rango de 0,1 a 1 (con un paso de lote mínimo de 0,1),
entonces la matriz tendrá este aspecto:{0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0}, número de genes en el cromosoma 1, mínimo 0.1 máximo 1.0, paso 0.1 ? ¿Es así?
Y una pregunta relacionada, ¿cómo introducir en tal matriz, por ejemplo: Stop Loss optimizado [10...500], Take Profit [10...500], Min. lot size [0.1...1.0] y Trailing flag (usar trailing o no)[0...1]?
En general, ¿cómo deberían ser los datos de entrada cuando se optimizan parámetros con diferentes tipos, mínimos y máximos de valores posibles?
Gracias de antemano por la respuesta.
¿Qué es aquí la matriz de cromosomas? ¿Los posibles valores del parámetro optimizado?
Si, por ejemplo, optimizamos "tamañomínimo de lote" en el rango de 0,1 a 1 (con un paso de lote mínimo de 0,1),
entonces la matriz tendrá este aspecto:{0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0}, número de genes en el cromosoma 1, mínimo 0.1 máximo 1.0, paso 0.1 ? ¿Es así?
Y una pregunta relacionada, ¿cómo introducir en tal matriz, por ejemplo: Stop Loss optimizado [10...500], Take Profit [10...500], Min. lot size [0.1...1.0] y Trailing flag (usar trailing o no)[0...1]?
En general, ¿cómo deberían ser los datos de entrada cuando se optimizan parámetros con diferentes tipos, mínimos y máximos de valores posibles?
Gracias de antemano por la respuesta.
No,
Cromosoma[] es exactamente lo que dice el comentario.
El primer índice [0] es el valor de fitness del individuo. Los demás son parámetros optimizados dentro de un rango determinado. Este es el genotipo.
Trabaja con el fenotipo (stop losses, take profits, volúmenes, indicadores u otra cosa) en FF (escalado de parámetros optimizados en el rango de genes del cromosoma):
Por ejemplo, los genes se establecen en el rango [-1;1], entonces
Índice 0: Valor FF <---------------------------------------------------------[8;8]//pivote a Pi/2 ochos.
1er índice: Stop loss [10..500] <------------------------------------------------ [-1;1]
2º índice: Take profit [10..500] <--------------------------------------------- [-1;1]
3er índice: Volumen mínimo del lote [0.1...1.0] <--------------------------------------- [-1;1]
4º índice: Trailing flag (usar trailing o no)[0..1] <------ [-1;1]
Además, la matriz Chromosome[] tiene 5 celdas. Por ejemplo, un cromosoma podría tener este aspecto {0.2, 0.3, -0.8, 0.1, 0.9;}
Pero en este caso el procesamiento de la corrección de valores de genes no reales tendrá que hacerse en FF. Es decir, si optimizamos los tipos long, double, y bool UGA generará valores reales para todos ellos, incluyendo para bool habrá muchas variaciones de genes en el rango de RangeMinimum a RangeMaximum, con el uso real posible de sólo dos valores 1 y 0. ¿Entiendo correctamente? ¿Y ya la selección de los valores correctos se hará en FF?
Entonces la mejor manera de deshacerse de este inconveniente, para mí personalmente, sería introducir una función de servicio que corrija los valores de los genes del cromosoma a los que se pueden utilizar en el FF.
-->generación de descendientes -->ajuste de los valores de los genes a valores realmente utilizables -->eliminación de clones -->llamada al FF.
Con este curso de acción, ¿crees que tendrá un gran impacto en el rendimiento de UGA? Después de todo, por idea, el número de ejecuciones de FF debería reducirse si el paso para optimizar un parámetro es mayor que para el otro.
Correcto, si esto no es adecuado, entonces usted debe utilizar un algoritmo genético binario (como el implementado en el probador). Hay un artículo sobre ello en el cuarto foro.
No, la cuestión es otra. El algoritmo se puede utilizar perfectamente para estos casos también.
mi__x__an:
Pero en este caso el procesamiento de la corrección de los valores, no los genes reales se tendrá que hacer en FF. Es decir, si optimizamos los tipos long, double, y bool UGA generará valores reales para todos ellos, incluyendo para bool habrá muchas variaciones de genes en el rango de RangeMinimum a RangeMaximum, con el uso real posible de sólo dos valores 1 y 0. ¿Entiendo correctamente? ¿Y ya la selección de los valores correctos se hará en FF?
Todas las operaciones con el fenotipo deben hacerse en FF. Es una cuestión de decodificación de genotipo a fenotipo.
Ok, supongamos que el parámetro optimizado es de tipo bool y sólo son posibles dos variantes: true y false. Entonces la decodificación será algo así
donde gen es un gen específico de un cromosoma.
Resulta que con toda la variedad de variantes posibles de este gen (genotipo) obtendremos sólo 2 fenotipos. Así ocurre también en la naturaleza viva.
Sin embargo, de ello se deriva una consecuencia natural: se generarán más variantes cromosómicas (y, por tanto, se calculará más veces el FF) de las necesarias para resolver el problema. Es decir, la optimización llevará más tiempo. Ya lo he mencionado. Ocurrirá lo mismo en caso de codificación binaria de los cromosomas. Todavía tendrá que decodificar en un fenotipo específico de la tarea.
PERO. Tanto en caso de codificación binaria como en caso de representación de genes por números reales, es muy fácil evitar cálculos FF innecesarios (para reducir el número de posibles variantes de cromosomas) configurando los PASOS DE BÚSQUEDA Y PASOS PARA CADA PARÁMETRO OPTIMIZADO. Es decir, cortar de antemano las variantes cromosómicas innecesarias (esto ya se hace en el optimizador estándar con codificación binaria). Esto también se puede hacer para el GA del artículo, sólo tiene que añadir la funcionalidad adecuada a la misma - la capacidad de establecer los límites y el paso para cada gen, es decir, para permitir que el GA para trabajar directamente con el fenotipo.
pero la necesidad de especificar los límites y el paso para cada gen de la biblioteca reducirá su flexibilidad.
Lo que probablemente no es la mejor ni la peor manera que he utilizado en el optimizador de modelos de comercio:
1 - clase del parámetro optimizado - CObject heredero
2 - función virtual del modelo general principal :
virtual CList *OptimizatedParams()permite a cada modelo específico crear su propia lista de parámetros optimizados.
3 - función optimizadora - enumera recursivamente todos los valores necesarios.
Cualquier tipo enumerado puede ser manejado por la función optimizadora.
Ahora la pregunta: Sería racional hacer CList como datos de entrada en el que la información sobre el parámetro optimizado se pasa a través de esta clase del parámetro optimizado, y la propia Biblioteca UGA crea tantos límites y pasos como sea necesario para cada gen. Esto le daría más flexibilidad y reduciría el número de ejecuciones innecesarias de FF para crear clones no genéticos sino fenotípicos.