El algoritmo genético y sus posibles aplicaciones - página 4

 
Edgar Akhmadeev:

Escribí sobre esto hace mucho tiempo, cuando usaba marcos en EA. No recuerdo el punto exacto, pero parece que no consigo todos los fotogramas (y los mejores resultados). Buscaré posts antiguos e intentaré aclararlo.

Pero recuerdo claramente que era claramente reproducible en mi Expert Advisor - tan pronto como el número de sobrepasos superaba un determinado número y se mostraba de forma científica, mi genética se rompía. Lo importante no era sólo que la variable tuviera un gran número de pasos, sino que el número de variables también fuera grande.

Todo tiene sentido.

Hay un problema con los marcos en la "gran" genética.

Lo arreglaremos.

 
Slava:

¿Qué quieres decir con que "no funciona en absoluto correctamente"?

¿Cómo podemos reproducir la avería?

https://www.mql5.com/ru/forum/321656/page17#comment_13569022

Ya no compruebo con marcos, me he rendido.

Pero con la genética regular lo comprobé en la última construcción. Este es el resultado sin "desbordamiento de dígitos".


Después de la interrupción:

2020.03.16 20:50:57.436 Tester  genetic optimization finished on pass 646 (of 160164854439975000)
2020.03.16 20:50:57.436 Statistics      optimization done in 8 minutes 36 seconds
2020.03.16 20:50:57.436 Statistics      shortest pass 0:00:00.002, longest pass 0:00:23.060, average pass 0:00:06.276

Con "desbordamiento":


Después de pasar por varios pases interrumpidos por el EA (comprobando que las variables de entrada son correctas), la genética se detuvo para siempre. Después de la interrupción:

2020.03.16 20:59:08.235 Tester  genetic optimization finished on pass 18
2020.03.16 20:59:08.235 Statistics      optimization done in 6 minutes 10 seconds
2020.03.16 20:59:08.235 Statistics      shortest pass 0:00:00.003, longest pass 0:00:05.978, average pass 0:00:01.339

Ni un solo resultado real.

Probado Advisors/MAPSARSizeOptimized.ex5 como ejemplo, funciona. Está claro que el problema con el "desbordamiento de dígitos" y con los marcos sólo se reproduce con mi EA, pero cómo encontrar el problema... Allí todo es muy complicado, OnTradeTransaction, etc. También he eliminado los marcos. No puedo mostrarte el código y es enorme, cerca de un megabyte. Y reducirlo a un ejemplo reproducible llevaría un tiempo desesperadamente largo. Si tengo tiempo, intentaré quitar OnTradeTransaction y quizás algún otro truco.

El hecho es que si no superamos el número de pases, todo funciona bien.

Y los marcos funcionaron bien (sin excederse) hasta la build 2286 inclusive.

Тестер стратегий MetaTrader 5: ошибки, баги, предложения по улучшению работы
Тестер стратегий MetaTrader 5: ошибки, баги, предложения по улучшению работы
  • 2019.10.16
  • www.mql5.com
В настоящий момент тестер стратегий MetaTrader 5 подвергается глубокой переработки командой MQ...
 
Igor Makanu:

...

un problema hasta ahora - los AGs pueden empezar a converger alrededor de un pequeño grupo de parámetros de optimización después de un tiempo - esto me parece normal, todos los AGs funcionan de esta manera y este es un problema de su uso

...

La convergencia a algún extremo es un fenómeno perfectamente normal para cualquier algoritmo de optimización, no hay ninguna suposición de que esta sección no sea/sea global o local.

Otra cosa es que AO tenga un mecanismo que permita amplificar el porcentaje de mutación (u otro equivalente en la lógica que permita amplificar la expansión del área de búsqueda), cuando al empezar a pisar alguna zona, se encuentre mejor el extremum o no - se desconoce de antemano, pero definitivamente es necesario buscar en otros lugares.

por ejemplo, se establece un criterio de saldo máximo y varios o muchos puntos pueden corresponder a él en términos absolutos, pero sólo algunos de ellos tienen valor real, es decir, el saldo 98756423 se alcanzó en 1523 operaciones con una reducción del 11% y el mismo saldo se alcanzó en 12 operaciones con una reducción del 95%, ¿cuál es la diferencia entre los dos?

 
Edgar Akhmadeev:

Después de pasar por varios pases interrumpidos por el examinador (comprobando que las variables de entrada son correctas), la genética se ha detenido para siempre. Después de la interrupción:

Ni un solo resultado real.

No recuerdo si escribí sobre ello en el foro, pero realmente es un problema y no está claro por qué está implementado en MT. En idea, si el experto devuelve el código de error "parámetros erróneos", el probador está obligado a generar otra instancia en su lugar, para que la población esté completa.

 
Stanislav Korotky:

No recuerdo si escribí sobre ello en el foro, pero realmente es un problema y no está claro por qué está implementado en MT. En idea, si el experto devuelve el código de error "parámetros erróneos", el probador está obligado a generar otra instancia en su lugar, para que la población esté completa.

Si devuelvo INIT_PARAMETERS_INCORRECT para todas las combinaciones de parámetros incorrectas, son demasiadas y la generación terminará con un error. Así, sólo devuelvo INIT_PARAMETERS_INCORRECT cuando un parámetro específico es incorrecto, si está fuera de rango. Y si la combinación es incorrecta (un parámetro no debe superar al otro) detengo el pase, devuelvo INIT_SUCCEED y Custom = -N. Esto probablemente joda la genética, pero no veo ninguna opción. O más bien hay una opción, deshacerse de las combinaciones erróneas (en el caso particular - hacer un parámetro un delta a otro: v1=X, v2=Y+v1), pero es demasiado fuerte mutante. Los dos parámetros estarán rígidamente vinculados, y si cambias uno, todo se desplaza. He dejado de lado esta opción en favor de un resultado falso en lugar de un error.

 
Edgar Akhmadeev:

Si devuelve INIT_PARAMETERS_INCORRECT para todas las combinaciones de parámetros erróneas, hay demasiadas y la generación terminará con un error. Así que sólo devuelvo INIT_PARAMETERS_INCORRECT cuando un parámetro específico es incorrecto, si está fuera de los límites. Y si la combinación es errónea (un parámetro no debe superar al otro) detengo el pase, devuelvo INIT_SUCCEED y Custom = -N. Esto probablemente joda la genética, pero no veo ninguna opción. O más bien hay una opción, deshacerse de las combinaciones erróneas (en el caso particular - hacer un parámetro un delta a otro: v1=X, v2=Y+v1), pero es demasiado fuerte mutante. Los dos parámetros estarán rígidamente vinculados, y si cambias uno, todo se desplaza. Renuncié a esta opción en favor de un resultado falso en lugar de un error.

Una buena opción es devolver -DBL_MAX en caso de variante no válida en lugar de error.

en general, he conseguido implementar Ga externo conservando todos los encantos de la fidelidad multidivisa de MT tester, pudiendo utilizar todos los núcleos de la CPU y/o los agentes de la red, incluidos los agentes de la nube, y evitando al mismo tiempo las situaciones en las que los agentes están ociosos debido a la finalización prematura de los pases o a la falta de personal de Ga.

hay información, sólo tSSSSS.... que hay planes para implementar varios tipos de AOs en el optimizador regular, e incluso con parámetros, pero esto es inexacto.

 
Andrey Dik:

una buena opción es devolver -DBL_MAX en caso de variante no válida en lugar de error.

y si devuelve un valor aleatorio, ¿sería peor para AO?

 
Igor Makanu:

y si devuelve un valor renderizado, ¿es peor para el AO?

mucho peor.

Si el objetivo es meterse en la cabeza de AO, la mejor manera es devolver un número aleatorio.

 
Andrey Dik:

una buena opción es devolver -DBL_MAX en la variante no válida, en lugar de error.

Esto es demasiado, el gráfico está escalado de manera que no se pueden ver los resultados útiles. Devuelvo un valor ligeramente más alto que el peor de los casos Personalizado. Sin embargo, lo principal es establecer la dirección correcta para mejorar.

Igor Makanu:

Y si devuelve un valor renderizado, ¿será peor para AO?

¿Qué sentido tiene? Lo principal es marcar la dirección correcta, por lo que hay que mostrar a GA que ha mostrado el peor resultado aquí, no sólo uno débil.

 
Slava:

¿Qué quieres decir con que "no funciona en absoluto"?

¿Cómo puedo reproducir la operación incorrecta?

EliminadoOnTradeTransaction, no ha servido de nada. Seguiré pensando.