¿Qué son exactamente los algoritmos genéticos y para qué tipo de problemas son buenos?

16

Me di cuenta de que algunas preguntas en este sitio mencionan algoritmos genéticos y me hizo darme cuenta de que realmente no sé mucho sobre ellos.

He escuchado el término antes, pero no es algo que haya usado nunca, así que no tengo mucha idea de cómo funcionan y para qué sirven. Todo lo que sé es que involucran algún tipo de evolución y valores que cambian al azar.

¿Me puede dar una breve explicación, preferiblemente incluyendo algún tipo de ejemplo práctico que ilustre los principios básicos?

Acechador desencantado
fuente

Respuestas:

11

Los algoritmos evolutivos son una familia de algoritmos de optimización basados ​​en el principio de la selección natural darwiniana . Como parte de la selección natural, un entorno dado tiene una población de individuos que compiten por la supervivencia y la reproducción. La capacidad de cada individuo para lograr estos objetivos determina su posibilidad de tener hijos, en otras palabras, transmitir sus genes a la próxima generación de individuos, quienes por razones genéticas tendrán una mayor probabilidad de tener éxito, incluso mejor, en la realización de estos Dos objetivos.

Este principio de mejora continua a lo largo de las generaciones lo toman los algoritmos evolutivos para optimizar las soluciones a un problema. En la generación inicial , una población compuesta por diferentes individuos se genera aleatoriamente o por otros métodos. Un individuo es una solución al problema, más o menos buena: la calidad del individuo con respecto al problema se llama aptitud , que refleja la adecuación de la solución al problema a resolver. Cuanto mayor sea la aptitud de un individuo, mayor será la probabilidad de transmitir parte o la totalidad de su genotipo a los individuos de la próxima generación.

Un individuo se codifica como un genotipo , que puede tener cualquier forma, como un vector de ** bits ( algoritmos genéticos ) o un vector real (estrategias de evolución). Cada genotipo se transforma en un fenotipo cuando se evalúa al individuo, es decir, cuando se calcula su aptitud. En algunos casos, el fenotipo es idéntico al genotipo: se llama codificación directa . De lo contrario, la codificación se llama indirecta. Por ejemplo, suponga que desea optimizar el tamaño de un paralelepípedo rectangular definido por su longitud, altura y ancho. Para simplificar el ejemplo, suponga que estas tres cantidades son enteros entre 0 y 15. Luego podemos describir cada una de ellas utilizando un número binario de 4 bits. Un ejemplo de una posible solución puede ser el genotipo 0001 0111 01010. El fenotipo correspondiente es un paralelepípedo de longitud 1, altura 7 y ancho 10.

Durante la transición de la generación anterior a la nueva se denominan operadores de variación , cuyo propósito es manipular individuos. Hay dos tipos distintos de operadores de variación:

  • los operadores de mutación , que se utilizan para introducir variaciones dentro del mismo individuo, como mutaciones genéticas;
  • los operadores cruzados , que se utilizan para cruzar al menos dos genotipos diferentes, como cruces genéticos de la reproducción.

Los algoritmos evolutivos han demostrado su eficacia en diversos campos, como la investigación de operaciones, la robótica, la biología, los matices o la criptografía. Además, pueden optimizar múltiples objetivos simultáneamente y pueden usarse como cajas negras porque no asumen ninguna propiedad en el modelo matemático para optimizar. Su única limitación real es la complejidad computacional.

ingrese la descripción de la imagen aquí

Franck Dernoncourt
fuente
¡Gracias por responder esto aquí! Aunque personalmente creo que esta es una pregunta ideal para AI SE, porque es básica y de "alto nivel", no dude en dirigir el OP y los lectores a Cross Validated para preguntas más avanzadas sobre el tema, adecuadas para esa pila .
DukeZhou
8

Un algoritmo genético es un algoritmo que genera aleatoriamente varias soluciones intentadas para un problema. Este conjunto de soluciones intentadas se llama "población".

Luego trata de ver qué tan bien estas soluciones resuelven el problema, utilizando una función de estado físico determinada . Las soluciones intentadas con el mejor valor de condición física se utilizan para generar una nueva población. Esto se puede hacer haciendo pequeños cambios en las soluciones intentadas (mutación) o combinando las soluciones intentadas existentes (cruce).

La idea es que, con el tiempo, un intento de solución que emerge que tiene una lo suficientemente alto como la aptitud de valor para resolver el problema.

La inspiración para esto vino de la teoría de la evolución; Las soluciones más adecuadas sobreviven y procrean.

Ejemplo 1

Suponga que está buscando la forma más eficiente de cortar varias formas de un trozo de madera. Desea desperdiciar la menor cantidad de madera posible.

Sus intentos de solución serían arreglos aleatorios de estas formas en su pieza de madera. La aptitud se determinaría por la poca madera que quedaría después de cortar las formas siguiendo este arreglo.
Mientras menos madera quede, mejor será el intento de solución.

Ejemplo 2

Suponga que intenta encontrar un polinomio que pase por varios puntos. Sus soluciones intentadas serían polinomios aleatorios.
Para determinar la idoneidad de estos polinomios, usted determina qué tan bien se ajustan a los puntos dados. (En este caso particular, probablemente usaría el método de mínimos cuadrados para determinar qué tan bien el polinomio se ajusta a los puntos). En varias pruebas, obtendría polinomios que se ajustan mejor a los puntos, hasta que tenga un polinomio que se ajuste lo suficiente a los puntos.

SL Barth - Restablece a Monica
fuente
Sin embargo, ¿qué se entiende por solución ? ¿Me puede dar un ejemplo práctico con un problema específico, para que pueda imaginar mejor cómo se vería?
Lurker desencantado el
@InquisitiveLurker He agregado ejemplos. Avísame si no son lo suficientemente claros; Estaré encantado de actualizar mi respuesta.
SL Barth - Restablece a Mónica el
6

Esta respuesta solicita un ejemplo práctico de cómo se podría usar uno, que intentaré proporcionar además de las otras respuestas. Parece que deben explicar muy bien qué es un algoritmo genético. Entonces, esto dará un ejemplo.

Digamos que tiene una red neuronal (aunque no son la única aplicación de la misma), que, a partir de algunas entradas dadas, producirá algunas salidas. Un algoritmo genético puede crear una población de estos, y al ver qué salida es la mejor, criar y matar a los miembros de la población. Eventualmente, esto debería optimizar la red neuronal si es lo suficientemente complicada.

Aquí hay una demostración que hice, que a pesar de estar mal codificada, podría ayudarlo a comprender. http://khrabanas.github.io/projects/evo/evo.html Presiona el botón evolucionar y juega con los objetivos.

Utiliza un algoritmo genético simple para reproducirse, mutar y decidir entre qué población sobrevive. Dependiendo de cómo se establezcan las variables de entrada, la red podrá llegar a un cierto nivel de cercanía con ellas. De esta manera, la población eventualmente se convertirá en un grupo homogéneo, cuyos resultados se asemejan a los objetivos.

El algoritmo genético está tratando de crear una especie de "red neuronal" que, al tomar RGB, producirá un color de salida. Primero genera una población aleatoria. Luego, tomando 3 miembros aleatorios de la población, seleccionando el que tenga la condición física más baja y eliminándolo de la población. La aptitud es igual a la diferencia en el objetivo superior al cuadrado + la diferencia en el objetivo inferior al cuadrado. Luego engendra los dos restantes y agrega al niño al mismo lugar en la población que el miembro muerto. Cuando ocurre el apareamiento, existe la posibilidad de que ocurra una mutación. Esta mutación cambiará uno de los valores al azar.

Como nota al margen, debido a cómo está configurado, es imposible que sea totalmente correcto en muchos casos, aunque alcanzará una cercanía relativa.

Cuervo
fuente
6

Aquí hay varias buenas respuestas que explican qué son los algoritmos genéticos y dan ejemplos de aplicaciones. Estoy agregando algunos consejos de uso general sobre para qué sirven, pero también casos en los que NO debería usarlos. Si mi tono parece duro, es porque el uso de GAs en cualquiera de los casos en la sección No Apropiado hará que su trabajo sea rechazado instantáneamente de cualquier revista de primer nivel.

Primero, su problema DEBE ser un problema de optimización. Debe definir una "función de actividad física" que está tratando de optimizar y debe tener una forma de medirla.

Bueno:

  • Las funciones de cruce son fáciles de definir y naturales : cuando se trata de ciertos tipos de datos, las funciones de cruce / mutación pueden ser fáciles de definir. Por ejemplo, las cadenas (p. Ej., Secuencias de ADN o gen) pueden mutarse fácilmente al empalmar dos cadenas candidatas para obtener una nueva (¡es por eso que la naturaleza usa algoritmos genéticos!). Los árboles (como los árboles filogenéticos o los árboles de análisis) también se pueden empalmar, reemplazando una rama de un árbol con una rama de otro. Las formas (como las alas de los aviones o las formas de los botes) pueden mutarse fácilmente dibujando una cuadrícula en la forma y combinando diferentes secciones de cuadrícula de los padres para obtener un hijo. Por lo general, esto significa que su problema se compone de diferentes partes y reunir partes de distintas soluciones es una solución candidata válida.
    • Esto significa que si su problema se define en un espacio vectorial donde las coordenadas no tienen ningún significado especial, los GA no son una buena opción. Si es difícil formular su problema como GA, no vale la pena.
  • Evaluación de Black Box : si para un candidato, su función de aptitud se evalúa fuera de la computadora, los GA son una buena idea. Por ejemplo, si está probando una forma de ala en un túnel de aire, los algoritmos genéticos lo ayudarán a generar buenas formas candidatas para probar.
    • Excepción: simulaciones . Si su función de aptitud física mide qué tan bien funciona un diseño de boquilla y requiere simular la dinámica de fluidos para cada forma de boquilla, los GA pueden funcionar bien para usted. También pueden funcionar si está simulando un sistema físico a través del tiempo y está interesado en qué tan bien funciona su diseño en el transcurso de la operación, por ejemplo. modelado de patrones de locomoción . Sin embargo, los métodos que utilizan ecuaciones diferenciales parciales como restricciones se están desarrollando en la literatura, por ejemplo. PDE restringió la optimización , por lo que esto puede cambiar en el futuro.

No apropiado:

  • Puede calcular un gradiente para su función: si tiene acceso al gradiente de su función, puede hacer un descenso de gradiente, que en general es mucho más eficiente que los GA. El descenso de gradiente puede tener problemas con los mínimos locales (al igual que los GA), pero se han estudiado muchos métodos para mitigar esto.
  • Conoces la función de forma física en forma cerrada : entonces, probablemente puedas calcular el gradiente. Muchos idiomas tienen bibliotecas que admiten la diferenciación automática , por lo que ni siquiera necesita hacerlo manualmente. Si su función no es diferenciable, puede usar el descenso de subgrado .
  • Su problema de optimización es de una forma conocida, como un programa lineal o un programa cuadrático : los GA (y los métodos de optimización de recuadro negro en general) son muy ineficientes en términos de la cantidad de candidatos que necesitan evaluar, y es mejor evitarlos si es posible.
  • Su espacio de solución es pequeño : si puede cuadricular su espacio de búsqueda de manera eficiente, puede garantizar que ha encontrado la mejor solución y puede hacer gráficos de contorno del espacio de solución para ver si hay una región que necesita explorar más a fondo.

Finalmente, si está considerando una AG, considere un trabajo más reciente en Estrategias Evolutivas. Estoy predispuesto hacia CMA-ES , que creo que es un buen algoritmo simple que captura la noción de un gradiente en el paisaje físico de una manera que los GA tradicionales no lo hacen.

Duro
fuente
CMA-ES es bueno para problemas en los que las soluciones pueden representarse como vectores de valor real.
NietzscheanAI
5

Como se observó en otra respuesta, todo lo que necesita para aplicar Algoritmos genéticos (GA) es representar una posible solución a su problema en una forma que esté sujeta a cruce y mutación. Idealmente, la función de aptitud física proporcionará algún tipo de retroalimentación suave sobre la calidad de una solución, en lugar de ser simplemente una 'Aguja en un pajar'.

Estas son algunas características de los problemas para los que los Algoritmos genéticos (y de hecho la Metaheurística en general) son buenos para:

  • NP-complete: el número de posibles soluciones al problema es exponencial, pero verificar la idoneidad de una solución es relativamente barato (técnicamente, con un tiempo polinómico en el tamaño de entrada).
  • Recuadro negro: los GA funcionan razonablemente bien incluso si no tiene un modelo particularmente informado del problema a resolver. Esto significa que estos enfoques también son útiles como un enfoque de 'creación rápida de prototipos' para resolver problemas.

Sin embargo, a pesar de su uso generalizado para este propósito, tenga en cuenta que los GA en realidad no son optimizadores de funciones : los mecanismos de GA tienden a no explorar regiones 'periféricas' del espacio de búsqueda con la esperanza de encontrar alguna solución distante de alta calidad, sino que se agrupan más picos fácilmente alcanzables en el 'paisaje de fitness'.

Más detalles sobre la aplicabilidad de las AG se dan en un famoso artículo anterior "¿Qué dificulta un problema para un algoritmo genético?"

NietzscheanAI
fuente