Discusión sobre el artículo "Algoritmos Genéticos: ¡Es fácil!" - página 12

 
Urain:

....

En general, debe entenderse que el AG no encuentra una solución exacta, sino una solución robusta. Es decir, una solución bastante acertada en comparación con el campo de soluciones posibles.

Las funciones de prueba se "derrotan". Deben ser derrotadas.

Y así, lo dices todo correctamente.

 
joo:

Las funciones de prueba están "derrotadas". Deben ser derrotadas.

Pero usted está diciendo todas las cosas correctas.

Sí, sí, no me explayé, y por eso son funciones de prueba, el algoritmo debe tomarlas, de lo contrario tal algoritmo no puede considerarse exitoso.

Es difícil imaginar lo que el algoritmo encontrará en el campo desconocido si ni siquiera pasa la prueba.

 

Gracias a todos, ya funciona.

Tuve que ser tan estúpido para confundir menos y multiplicar.

 
ivandurak:

Gracias a todos, funciona.

¿Te refieres a tu algoritmo? ¡Felicidades!
 

Me pregunto cómo atornillar correctamente UGA, si tenemos que optimizar diferentes variables con el mismo valor de la función de aptitud para minimizar el error de aproximación. Problema clásico. Una red neuronal bicapa de cinco pasos con 4 neuronas, por ejemplo, requiere una búsqueda de 22 coeficientes junto con sesgo en el rango [-1...1] con una precisión de 0.0001 y simultáneamente en la misma función objetivo selección de parámetros de indicadores de entrada 5 piezas*2parámetros= 10 variables en el rango 5...50. O por separado, pero con un paso de 0,01.

Por supuesto, puede codificar los valores de los indicadores en el rango de pesos. Pero es un poco diferente.

Y una pregunta más. ¿Es posible pasar a UGA las condiciones de omisión de genes? Es decir, por ejemplo, los genes responsables del indicador deben corresponder a la condición G23< G24 G25<G26 y así sucesivamente.

 
miklelv:

Me pregunto cómo atornillar correctamente UGA, si tenemos que optimizar diferentes variables con el mismo valor de la función de fitness para minimizar el error de aproximación. Problema clásico. Una red neuronal bicapa de cinco pasos con 4 neuronas, por ejemplo, requiere una búsqueda de 22 coeficientes junto con sesgo en el rango [-1...1] con una precisión de 0.0001 y simultáneamente en la misma función objetivo selección de parámetros de indicadores de entrada 5 piezas*2parámetros= 10 variables en el rango 5...50. O por separado, pero con un paso de 0,01.

Por supuesto, puede codificar los valores de los indicadores en el rango de pesos. Pero es un poco diferente.

Y una pregunta más. ¿Es posible pasar a UGA las condiciones de omisión de genes? Es decir, por ejemplo, los genes responsables del indicador deberían corresponder a la condición G23< G24 G25<G26 y así sucesivamente.

Eso es todo,

hay un rango en el que funcionan la mayoría de los parámetros, el resto se ajustan simplemente desplazando y escalando.

Comprenderás que el código del artículo no es un desarrollo comercial pulido para cada estornudo del consumidor.

Hay un deseo de hacer rangos establecidos para cada parámetro, nadie está sosteniendo sus manos, pero no se olvide que con el número de parámetros contados en miles, para establecer rangos a mano se convertirá en muy problemático.


tener un rango de genes [-1;1] --> (int)NormaliseDouble( ((gen+1)/2)*45+5 ,0) --> [5;50]

aunque estoy de acuerdo en que habrá muchos genes diferentes dando el mismo resultado, aquí se puede hacer un setter de precisión para combinar genes, por ejemplo de 0 a 1000 de precisión del gen a 3 dígitos, de 1000 a 1010 de precisión a 0 dígitos.

 
miklelv:

Y una pregunta más. ¿ Es posible pasar las condiciones de omisión de genes a UGA ? Es decir, por ejemplo, los genes responsables del indicador deben cumplir la condición G23< G24 G25<G26 y así sucesivamente.

Podemos hacerlo así: Parámetro1=G23 Parámetro2=G23+G24.
 
her.human:
Puedes hacerlo así: Parámetro1=G23 Parámetro2=G23+G24.

Al convertir el rango, es mejor hacer una conversión con una comprobación lógica, que incluirá la ruptura.

De lo contrario no habrá conexión entre una parte del rango roto y otro, aquí es necesario entender que los genes se toman prestados de diferentes cromosomas sólo en consecuencia, el segundo gen puede ser prestado sólo para la producción del segundo gen del nuevo cromosoma.

Si un parámetro está representado por dos genes, no habrá conexión entre ellos.

 
Urain:

Es mejor hacer una transformación con una comprobación lógica, que incluirá la ruptura.

De lo contrario, no habrá conexión entre una parte del rango roto y otro, se debe entender que los genes son prestados de diferentes cromosomas sólo en consecuencia, el segundo gen puede ser prestado sólo para la producción del segundo gen del nuevo cromosoma.

Si un parámetro está representado por dos genes, no habrá conexión entre ellos.

Tal vez sea mejor.

He sugerido una variante simple. El AG puede manejarla sin problemas.

En general, los genes no siempre se toman prestados, se pueden generar nuevos genes.

 
Gracias por sus comentarios. Ciertamente es más fácil de codificar. Estoy tratando de replicar Asistente de predicción de Neuroshell en mql. Allí durante 2-3 segundos en una historia de 200-2000 bares en un ciclo de 20 índices con 2-4 parámetros cada uno en el rango de 5...50 se forma durante 2-3 segundos en una historia de 200-2000 bares de los seleccionados de este 20 mejores indicadores (por ejemplo, 5 pcs). Y todo esto está escrito en VBbasic. Debe ser un algoritmo fresco. UGA va a hacer muy bien.