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.
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.
fuente
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.
fuente
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:
No apropiado:
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.
fuente
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:
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?"
fuente