¿Qué es un simple ejemplo de un algoritmo genético?

Planteamiento del problema : dada una función que toma cadenas de bits como entradas y produce una puntuación, encuentre la cadena de bits con la puntuación máxima / mínima.

Tenga en cuenta que usted necesita cadenas de bits como entradas, debido a que las operaciones genéticas se definen en las cadenas de bits. (Es posible que pueda definir las operaciones de mutación de otro tipo de entradas, pero el marco original sólo permite cadenas de bits).

Ahora, esto es un problema NP-duro, es decir, no hay manera eficiente para resolver este problema exactamente. Así se recurre a métodos aproximados, que buscar el espacio de todas las cadenas de bits. Debido a que no podemos buscar en todo el espacio de manera eficiente, utilizamos la heurística para navegar por el espacio, para maximizar la probabilidad de encontrar una buena solución.

Los algoritmos genéticos es una de esas clase de heurísticas.

Veamos un ejemplo. Digamos que quiere resolver Traveling Salesman Problem (TSP) en un gráfico dado con 16 vértices. Así que hay 16! posibilidades. Este problema puede ser modelado utilizando cadenas de bits – representar cada vértice usando 4 bits, de 0000 a 1111. Por lo tanto una trayectoria en la gráfica se puede representar como una cadena de 64 bits mediante la concatenación de las representaciones de bits de vértices consecutivos en el tour. En consecuencia, cada cadena de 64 bits se puede asignar una puntuación – si el viaje es válido, la puntuación es igual a la longitud del camino, si no es válido (vértices repetidos), entonces la puntuación es [matemáticas] \ infty [/ matemáticas] . Usted quiere encontrar el mínimo de esta función.

El marco básico de algoritmos genéticos tiene el siguiente aspecto:

  1. Comience con algunas cadenas de bits generados de forma aleatoria, llamados población.
  2. Elija cadenas de 2 bits del conjunto actual de cadenas de bits y realice operaciones genéticas (cruce, mutación, etc.) para generar nuevas cadenas de bits.
  3. Evaluar cadenas de bits recién generadas, y actualización de la mejor cadena de bits encontrado hasta ahora.
  4. Actualización de la población actual.
  5. Vaya al paso 2.

Repite los pasos hasta la convergencia, o durante un tiempo fijo.

Ahora viene lo más importante: porque este es un algoritmo heurístico, no hay una “forma correcta” de hacer las cosas. Solo necesita asegurarse de realizar el paso 3 correctamente, y tiene la libertad de modificar los pasos 1, 2 y 4. Esto da como resultado diferentes versiones de algoritmos genéticos. Algunas posibles modificaciones son:

  • En el paso 1, en lugar de una generación completamente aleatoria, puede generar más de la cantidad requerida de cadenas de bits y luego filtrar según las puntuaciones.
  • En el paso 1, se puede elegir el número de cadenas de bits que desea generar.
  • En el paso 2, puede elegir las cadenas de 2 bits uniformemente al azar, o asignar una probabilidad más alta de cadenas de bits con las puntuaciones más altas.
  • En el paso 2, puede definir las operaciones genéticas de su cuenta, o elegir entre los más populares.
  • En el paso 2, si tiene varias CPU o GPU, se pueden realizar muchas operaciones genéticas en muchas parejas en paralelo.
  • En el paso 4, se puede incluir la nueva cadena de bits en la población siempre, o incluir sólo si es mejor que la mayoría de los otros.
  • En el paso 4, puede conservar todas las cadenas de bits antiguas o eliminar las cadenas de bits antiguas de la población, si son peores que la mayoría de las demás.
  • Puede ejecutar todo este proceso de forma independiente en varias máquinas, y luego encontrar el mejor entre las mejores marcas de todas las máquinas.
  • Aquí está un ejemplo extremo de la libertad que tiene – suponga que está en un entorno de múltiples hilos (múltiples CPU o GPU), y la población se almacena en una matriz fija. Sobrescribe cuerdas viejas bits con los recién generados, en esa matriz fija. Ahora, mientras un hilo está realizando operaciones genéticas en cadenas de 2 bits B1 y B2, otro hilo puede aparecer y sobrescribir B1 con B3, en el medio de la operación . Así, el resultado que se obtiene de la operación genética no es correcta, en el sentido de que no se genera a partir de las operaciones en B1 y B2. Sin embargo, el resultado es, sin embargo, una cadena de bits válido! Lo que sólo puede seguir adelante como si nada inusual sucedió. Rara vez hay un escenario en informática en la que no necesita preocuparse por las dependencias y condiciones de carrera en entornos multi-hilo. ¡Los algoritmos genéticos son uno de ellos!

Un simple ejemplo de un algoritmo genético sería encontrar el dígito suma máxima racional de cadena de 10 bits cada uno tomando un valor binario. Por lo general, nos gustaría empezar con una población al azar, de, digamos, 4 cromosomas. Cada cromosoma sería la cadena de 10 bits en sí. La codificación es simple, y obvio. 10 números enteros, cada uno 0 o 1.

Ahora la función de aptitud para esto es muy simple también, _ _ _ _ _ _ _ _ _ _ donde cada _ se llena con 0 ó 1, y de esto es muy obvio, que va a ser más en forma cuando todos los espacios son 1 de . Así que la aptitud será la suma de los dígitos. ¿Suficientemente simple?

a continuación pasamos a los operadores. En primer lugar está la selección. No siempre nos queremos seleccionar los mejores dos cromosomas. que va a quedar atrapado en el óptimo local si es que existen, y los métodos de cálculo basados ​​funciona mejor de todos modos.

Así que RANDOMIZE ella. La aptitud de cada cromosoma se divide por la suma de todas las eficacias. A continuación, se genera un número aleatorio y lo seleccionamos. decir w, x, y, z, son cadenas de fitness con 5,2,4,9. entonces los valores normalizados serían
0.25, 0.1 0.2, 0.45

permite ordenar en ese orden, [0, 0,25] + [. 25, 0.35] + [. 35, 0,55], [. 55,1] y generar un número aleatorio entre 0 y 1. y cualquiera que sea región se mentiras, nos eligen
repetimos el proceso y elegir otro. Ahora tenemos a los dos padres.

al contrario que en la vida, donde los gemelos son un poco rara, en GA, los padres siempre tienen gemelos.
digamos que 9 y 2 fueron seleccionados. por ejemplo 9 fue que la cadena [1111011111] y 2 fue [0010000100].
Luego hacemos un crossover. Hay muchas maneras de hacer un crossover.
simplemente puede dividirlo por una línea y obtener dos regiones, como [1111] + [011111] y [0010] + [000100]
Y se mezclan ellos hasta conseguir dos crías. el punto de división se elige al azar

también puede generar un número aleatorio entre 0-1, y para> .5 seleccione el primero para la descendencia uno, y el segundo para la descendencia 2, y viceversa.

Por lo tanto, vuelve a seleccionar dos padres más de la original 4, y crear otros dos descendientes. y por lo tanto tiene una nueva generación de 4 crías. Puede ser o no ser en mejor forma que la última generación. Continuar este proceso generalmente converge.

hay otros conceptos como la mutación y elitismo que se utilizan para una convergencia más rápida. En este caso, la mutación se volteando un poco. la oportunidad que va a ser bueno o malo es del 50% (trivial). La mutación ocurre al azar. establecimos un límite, por lo general baja (0,01, o 0,05) y generamos un número aleatorio entre 0 y 1. Si es menor que el límite, que tapa un poco aleatorio (número aleatorio entre 1 y 10)

Elitismo es simplemente guardar una copia de su mejor cromosoma actual. por ejemplo, en este ejemplo, se ahorraría la aptitud 9. una vez que se han generado las crías, reemplazamos el cromosoma menos en forma, con el cromosoma élite.
largo de varias generaciones, este proceso generalmente converge a una solución muy buena. Espero haber sido claro en esta respuesta. Si no es así, comentar qué más se necesita aclarado

Suponga que tiene una función y = (x-8) * (x-8). Usted quiere saber el valor mínimo a través del algoritmo genético.

Tome el espacio de decisión para el valor de x de 0 a 31 como número entero, que puede ser representado por bool 5 bits.

respuesta analítica de este problema es: x = 8, y = 0.

Aquí se explica este sencillo ejemplo.

More Interesting

¿Cómo es mejor la predicción con redes neuronales que la regresión múltiple?

Cómo construir un robot portador

¿Hay alguna relación entre las máquinas de Turing, la integridad de Godel y los teoremas de incompletitud?

¿Cómo podría usarse la inteligencia artificial para mejorar las tecnologías de asistencia existentes?

¿Cuáles son los principales candidatos actuales en el campo de la IA?

¿Quién tiene más inteligencia artificial sobre los humanos: Facebook o Google? ... ¿Y en el futuro?

¿Quién tiene la mejor IA de propósito general en este momento?

Soy ingeniero industrial, y me gustaría continuar con los estudios de doctorado en inteligencia artificial en algunos de los laboratorios de investigación de primer nivel en los Estados Unidos. ¿Hay algún problema especial que sugiera que tenga en cuenta?

Suponiendo que una IA pueda jugar un juego matemáticamente perfecto de damas, ¿podría Dios vencerlo? ¿Se limitarían a atar?

¿Qué campo es bueno para los estudiantes de electrónica y comunicación, aprendizaje automático o inteligencia artificial?

¿Cuáles son los éxitos recientes en IA además del aprendizaje profundo?

¿Cuál resultará ser el fenómeno más estable en el universo, el aumento de la entropía o el aumento de la inteligencia?

¿Qué pasaría si construimos una IA superinteligente amigable y nos diga que un mundo mejor es imposible?

Cómo saber si un humano no es un cyborg

¿Por qué los investigadores de aprendizaje automático no se preocupan por el número efectivo de épocas?