Discusión sobre el artículo "Algoritmos Genéticos: ¡Es fácil!" - página 9
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
Sugiero que se calcule el tamaño de la población:
Muchas gracias por el artículo. Si no fuera por él, nunca me habría enterado de lo que son los métodos genéticos :)
¡Pero hay una pregunta! Cuando comprobamos los cromosomas de la base de datos - en caso de coincidencia - se restará una unidad del índice del cromosoma de la base de datos. ¿Por qué? ¿Y si el índice es cero?
¿En qué me equivoco?
Sugiero que se calcule el tamaño de la población:
No voy a discutir la competencia de la fuente citada, pero tengo que discrepar.
La viabilidad del uso de AG en problemas de optimización reside en la reducción del número de ejecuciones de FF necesarias para determinar el óptimo en comparación con la búsqueda directa.
Si seguimos la recomendación
ChromosomeCount=GeneCount*11;el problema con 1000 argumentos requerirá una población de 11000 individuos. ¡Y eso son 11000 ejecuciones FF en sólo 1 epoch! También se puede utilizar la generación aleatoria de genes y el resultado no será muy inferior a la hora de encontrar el óptimo. La fuente dada hace una "apuesta" de que en una población grande habrá suficiente material genético para seguir desarrollando la población hacia la mejora en cada época. Estoy tratando de lograr lo mismo, pero jugando probabilidades con los operadores genéticos sin aumento total de FF se ejecuta.
Muchas gracias por el artículo. Si no fuera por él, nunca me habría enterado de lo que son los métodos genéticos :)
¡Pero hay una pregunta! Cuando comprobamos los cromosomas de la base de datos - en caso de coincidencia - se restará una unidad del índice del cromosoma de la base de datos. ¿Por qué? ¿Y si el índice es cero?
¿En qué me equivoco?
Sólo se comprueba si hay al menos un cromosoma en la base de datos. No has citado toda la sección del código de búsqueda en la base de datos.
Por lo tanto, el caso de que no haya cromosomas en la base de datos pero se compruebe el surco es imposible.
La comprobación de la base de datos sólo se realiza cuando hay al menos un cromosoma en la base de datos. Usted no ha dado toda la sección del código para la búsqueda por base.
Por lo tanto, el caso en el que no hay cromosomas en la base de datos, pero se realiza la comprobación del surco es imposible.
Gracias por una respuesta tan rápida. No me refería exactamente a lo que usted dice.
1) Supongamos que efectivamente hay un cromosoma en la base de datos (ChrCountInHistory = 1 - es decir, la dimensión del array es igual a uno) - ¡entonces su índice en la base de datos es cero! (ChrCountInHistory es cero por defecto - el índice de un elemento en el array es cero).
Y restamos uno de este índice:
además, la búsqueda comienza desde Ch1=0.
2) Comparamos con HistoriaHromosomas [Ge][Ch1 ], y asignamos HistoriaHromosomas[0][Ch1-1].
Tienes razón, gracias.
Así se hace:
Tienes razón, gracias.
Ese es el camino a seguir:
Hmm.
Ahora"Array out of range" en HistoryHromosomes[0][Ch1], aunque todo parece correcto...
joo:
Tienes razón, gracias.
De nada. Lo principal es que ahora funciona incluso mejor que antes :)
joo:
Hmm.
Ahora "Array out of range" en HistoryHromosomes[0][Ch1], aunque todo parece correcto...
Es difícil decir por qué - tenemos diferente código para analizar. Quizás sea la variable "position" - su análoga en el artículo es "chromos". He mirado el código en el artículo probablemente 10 veces - no podía entender dónde está el error :( Voy a comprobar más tarde en los ejemplos en el artículo - tal vez algo se aclarará.
P.D. : está justificado utilizar un banco de memoria si una variable consta de ~150 valores. Y hay 100000 individuos en el historial. ¿Tal vez en tal caso sería más rápido calcular que comprobar (buscar) todo? ¿No lo has comprobado?
P.D. : está justificado utilizar un banco de memoria si una variable consta de ~150 valores. Y hay 100000 individuos en el historial. ¿Tal vez en tal caso sería más rápido contar que comprobar (volver a comprobar) todo? ¿No lo ha comprobado?
Todo depende del tiempo necesario para calcular el FF. Si la FF es sólo alguna función matemática, entonces el banco no es razonable. Pero si el FF utiliza recorridos históricos (aprendizaje neuronal, etc.) y otras tareas que requieren muchos recursos, entonces el banco es necesario y puede reducir significativamente el tiempo de optimización.
También depende de la precisión de los genes. Cuanto más "gruesos" sean los genes, más a menudo se producirán repeticiones, y más razonable es utilizar un banco de cromosomas.
....
:)
Aún así, no hay ningún error, me has confundido mucho. Aquí, he hecho un script de prueba, pruébalo, te quedará más claro.
Aquí, aunque el cromosoma se compara con la posición de Ch1, pero en el bucle superior se le asigna +1, así que después le resto -1.
Estoy de acuerdo, está un poco torcido, se podría hacer mejor.
Aquí tienes un script para comprobarlo: