Algoritmos Genéticos Y Optimización Heurística Dr. Adrian Will Grupo de Aplicaciones de Inteligencia Artificial Universidad Nacional de Tucumán [email protected] Restricciones - Constraints La mayoría de los problemas provenientes de la realidad contienen Restricciones (Constraints), condiciones que deben ser satisfechas para que una solución resulte útil. Estas restricciones pueden ser de 2 tipos: • Restricciones Fuertes: La solución es completamente inútil si no cumple esta condición (pesos, tiempos, o distancias negativas, personas o cargas que deberían estar en 2 lugares al mismo tiempo, disponibilidad de materia prima, etc.) • Restricciones Débiles: Condiciones que es preferible que se cumplan, pero que tienen margen a error, y la solución es digna de considerarse aunque no la cumpla (Cajas o cargamentos no completamente llenos, existencia de tiempos muertos en un scheduling, etc.) La Mejor forma de contemplar restricciones fuertes es INCORPORARLAS A LA CODIFICACIÓN DEL PROBLEMA (por ej., la restricción de no repetir ciudades en el TSP). De ese modo, es completamente seguro que toda solución encontrada cumplirá la codificación. Restricciones - Constraints 5 4 11 8 6 3 10 1 7 Centro 2 6 4 8 11 5 9 3 10 1 7 9 2 Codificación por Permutaciones - Toda solución considerada cumple la restricción de no repetir ciudades Restricciones – Funciones de Penalización Existen entonces métodos destinados a contemplar la existencia de restricciones en el problema: • Funciones de Penalización: Se modifica la función de Fitness, agregándole términos o factores que tengan en cuenta si la solución considerada cumple las restricciones. En caso de no cumplirlas, disminuye el valor de Fitness de la solución considerada, de modo que otra con similar fitness que sí cumpla la restricción, tenga mejores probabilidades de sobrevivir. • Métodos de Región Factible: Se Inicia con una población factible o Feasible (una solución se dice factible si cumple todas las restricciones del problema). El método intenta mantener todas las nuevas soluciones incorporadas dentro de la región factible del problema • Métodos de Reparación: Métodos adaptados a cada problema, que ante la aparición de una solucion infeasible, tratan de repararla con alguna heurística adaptada al problema Restricciones – Funciones de Penalización Existen entonces métodos destinados a contemplar la existencia de restricciones en el problema: •Penalizaciones Estáticas: Las funciones de penalización no cambian con la cantidad de generaciones • Penalizaciones dinámicas: Las funciones de Penalización cambian con las generaciones, de acuerdo a un esquema prefijado. En general, al principio las penalizaciones son suaves o inexistentes, aceptando cualquier solución. Conforme avanza la cantidad de generaciones, se van poniendo más restrictivas, y cerca del final de la corrida, sólo aceptan soluciones que cumplan todas las restricciones, penalizando severamente a las demás. • Penalizaciones Adaptativas: uno o más factores de las funciones de penalización cambian de acuerdo al progreso de la corrida, de acuerdo a la cantidad de soluciones Factibles (feasible) que se encuentran en la población, y la cantidad de generaciones restantes. Restricciones – Funciones de Penalización Combinación Lineal Positiva G ( sol ) = F ( sol ) + w1 R1 ( sol ) + L + wn Rn ( sol ), wi > 0 G ( sol ) = w0 F ( sol ) + w1 R1 ( sol ) + L + wn Rn ( sol ), wi > 0 Combinación Lineal Convexa w0 F ( sol ) + w1 R1 ( sol ) + L + wn Rn ( sol ) , wi > 0 G ( sol ) = w0 + w1 + L + wn G ( sol ) = w0 F ( sol ) + w1 R1 ( sol ) + L + wn Rn ( sol ), n ∑w i =1 i =1 Restricciones – Funciones de Penalización La forma más utilizada y una de las más efectivas son las combinaciones convexas y/o combinaciones lineales positivas de la función y las restricciones Se arreglan los signos de los coeficientes y las funciones R de manera tal que • Si todas las restricciones son satisfechas, los R son 0 y G=F • Si alguna de las restricciones no es satisfecha, entonces el correspondiente R pasa a ser positivo, y G(sol) = F(sol) + wR(sol) > F(sol), por lo que la solución es “castigada” o “penalizada” por no cumplir las restricciones del problema • Los pesos w determinan cuan severa es la penalización (si es grande, las soluciones que no cumplan la restricción tendrán un valor de G mucho peor que el resto y no sobrevivirán demasiado) • Los pesos pueden ser Estáticos, Dinámicos o Adaptativos Restricciones – Funciones de Penalización ⎛ gen actual G ( sol ) = F ( sol ) + ∑ wi ⎜⎜ i =1 ⎝ GTotal n β ⎞ ⎟⎟ Ri ( sol ) ⎠ Una de las formas mas utilizadas y mas efectivas de penalización dinámica, es el que además del peso w, incorpora una función cuyo valor comienza en 0, dando lugar a aceptar cualquier solución (incluso las que no cumplan las restricciones), y va aumentando su valor conforme aumenta el número de generaciones El coeficiente β determina la Forma en que crece esta función conforme aumentan las generaciones: β = 1 determina crecimiento Lineal, β > 1 determina un crecimiento lento, y 0 < β < 1 determina un crecimiento veloz, que alcanza una meseta durante las últimas generaciones. Este esquema es el sugerido para las restricciones Fuertes, de manera que cualquier solución que no cumpla la restricción será rechazada, sobre el final de la corrida. Restricciones – Funciones de Penalización β ⎛ gen actual G ( sol ) = F ( sol ) + ∑ wi ⎜⎜ i =1 ⎝ GTotal n β ⎞ ⎟⎟ Ri ( sol ) ⎠ Restricciones – Inundaciones GA GA GA = Población llenada al azar (Inmigración) = Mejores individuos encontrados en la Vuelta Anterior Esta arquitectura tiene la ventaja de que se puede limpiar la población de soluciones que no cumplan las restricciones entre vuelta y vuelta, llenando con población limpia Restricciones – Inundaciones • La arquitectura de Inundaciones tiene la ventaja de que se la puede combinar con cualquier otra estrategia para cumplir restricciones, como funciones de penalización, subpoblaciones paralelas, etc.: • Es posible y conveniente limpiar la población de soluciones que no cumplan las restricciones entre una vuelta y la siguiente, rellenando con población al azar pero “Limpia”, es decir, que cumpla las restricciones. • Más aun, se puede monitorear el progreso de las penalizaciones y cumplimiento de las restricciones, ajustando los parámetros e incluso ajustando la función de evaluación entre una vuelta y la siguiente • Este proceso, sin embargo, debe ser ajustado en cada caso y de acuerdo a las restricciones usadas. En general un problema complicado con muchas restricciones y un espacio de soluciones muy restringido, requerirá de algoritmos especializados para producir buenas soluciones en forma consistente Restricciones – Ajuste de los pesos Cualquiera sea la arquitectura utilizada, el ajuste de los pesos es una de las partes más importantes y delicadas del proceso La idea detrás del ajuste, es mantener los pesos equilibrados en magnitud, de manera de obligar al algoritmo a atacar TODOS los términos presentes por igual Eventualmente el método se desbalancea sobre el final de la corrida, donde una o mas de las restricciones fuertes pasan a tener preponderancia, y ese término crece sobre los demás Restricciones – Ajuste de los pesos Supongamos G = w1 F + w2 f 2 + w3 f 3 donde F es la función de Evaluación original, f 2 y f 3 están asociadas a las restricciones del problema, y los w1 , w2 , y w3 son los pesos que deseamos ajustar. Supongamos además que F toma valores en [0, 100], f 2 toma valores en [0,1], y f 3 toma valores en [0,10] Proponemos entonces G = .05 * F + 50 * f 2 + 5 * f 3 De esa manera, los 3 términos estarán entre 0 y 50, de manera que tendrán la misma magnitud, y el AG estará obligado a atacar a los 3 términos por igual. No es necesario que sea exacto, pero sí que sean comparables en magnitud Restricciones – Métodos de Región Factible Existen varios algoritmos de este tipo, que intentan mantener las soluciones creadas dentro de la región factible del problema. • Esto implica que el algoritmo no explora la región infeasible del problema, lo que provoca en general soluciones de baja calidad. • Requieren de mayor cantidad de procesamiento, para asegurar que las soluciones creadas son factibles • Sólo funcionan cuando el espacio de búsqueda es convexo y/o no excesivamente complicado • Requieren en particular comenzar con una Población Inicial Feasible, lo cual en muchos problemas es extremadamente complicado de conseguir (NP-Hard, si el problema original es NP-Hard), haciendo su aplicación imposible en la mayoría de los casos importantes Restricciones – Métodos de Región Factible BackTracking En general se asocia este método con el Crossover y la Mutación. Al crear una solución nueva con uno de estos operadores, se comprueba que cumpla las restricciones. En caso de no hacerlo, se modifica algún parámetro y se vuelve a aplicar el operador, de forma que el hijo sea progresivamente más parecido al padre. En el caso límite, coincide con el padre, lo cual en última instancia asegura que va a ser una solución factible Sol Mutada BackTracking So Sol Orig Restricciones – Métodos de Región Factible BackTracking C1 = ra. * P1 + (1 − ra). * P2 C2 = (1 − ra ). * P1 + ra. * P2 , a al azar, 0 ≤ r ≤ 1 Arith Crossover (o Cube Crossover) con Back Tracking. Inicialmente r=1, es el procedimiento usual de Crossover. Si alguno de los hijos generados no cumple las restricciones, se cambia r (usualmente r = λr , 0 ≤ λ ≤ 1), y se vuelve a generar. Los nuevos hijos generados se encontrarán progresivamente más cerca de sus padres, hasta que eventualmente r = 0 y coinciden, lo que asegura que sean soluciones factibles (recordemos que este proceso se aplica sobre poblaciones iniciales factibles) Optimización MultiObjetivo Los ejemplos estudiados hasta el momento tienen como salida sólo un valor real. O sea, el objetivo es siempre el mínimo o máximo de una función (o simulación?) a valores reales. Sin embargo, la mayoría de los problemas de la realidad son Multi Objetivo. O sea, existe más de una función a minimizar al mismo tiempo. Mas aún, en general son objetivos contrapuestos o por lo menos complementarios, donde en general lo que interesa es el mejor compromiso posible entre las variables. Es importante notar que incluso en el caso de una sola función objetivo, las restricciones suelen ser consideradas a través de funciones de Penalización, convirtiéndose nuevamente en una optimización MultiObjetivo. F ( sol ) = ( f1 ( sol ),..., f n ( sol )) Optimización MultiObjetivo – Frente Pareto En general, para la mayoría de los problemas, no existe un único punto que realice el mínimo conjunto de todas las funciones al mismo tiempo. Buscamos entonces soluciones de compromiso, o sea, soluciones que sean “lo suficientemente buenas” en todos los aspectos que nos interesan. Existen 2 formas principales: • Forzar Una solución de compromiso, que será el mejor compromiso posible entre las funciones elegidas, de manera que las restricciones más importantes sean cumplidas, y las demás se mantengan dentro del margen de interés • Proporcionar un Conjunto de soluciones de salida, que representen distintos niveles de compromiso entre las distintas funciones a optimizar, entre las que se podrá elegir la más conveniente para el problema. Esto se conoce como Optimalidad Pareto (Vilfredo Pareto, 1896, Edgeworth, 1881) Optimización MultiObjetivo – Frente Pareto La Optimización Multiobjetivo se puede dividir en 3 tipos: • Combinación de Funciones (“Aggregating Functions”) • Optimización por Subpoblaciones • Optimización Pareto Abordaremos en detalle el primero y tercer tipos. Del segundo existen varios ejemplos, en particular VEGA (“Vector Evaluated Genetic Algorithm”, Schaffer, 1985), y muchos otros basados en variantes del concepto de utilizar distintas subpoblaciones, una para cada función objetivo, tratando de combinarlas. En general esta aproximación al problema no funciona porque los candidatos a buenas soluciones en cada variable no suelen ser buenos compromisos, y las buenas soluciones de compromiso no suelen ser muy buenas en cada variable. Se debe diseñar un algoritmo específico, que busque los compromisos y caracterice como Buenas a las soluciones que presenten buen comportamiento en todas las variables, aunque no sobresalgan en ninguna Optimización MultiObjetivo – Frente Pareto Unión o Conjunción de Funciones (“Aggregating Functions”) Se trata de combinar todas las funciones objetivo en una, ya sea por sumas, productos, u otras operaciones matemáticas, de forma de forzar el compromiso deseado entre las variables. Es la forma más antigua de optimización multiobjetivo, pero no por ello menos eficiente. Debería ser el primer intento en el caso de pocas funciones a combinar, o problemas que no sean excesivamente restrictivos. La forma más común es la combinación lineal o convexa F ( sol ) = w1 f1 ( sol ) + L + wn f n ( sol ) donde los coeficientes son reales positivos, y representan los Pesos de la función, la relativa importancia de cada sumando Este Método funciona en el caso en que el frente pareto es CONEXO (cuando no es conexo, sólo encontrará una componente conexa del mismo) Optimización MultiObjetivo – Frente Pareto Sea X = X 1 × L × X n producto de espacios ordenados. Decimos que x ∈ X está Dominado por y ∈ X si xi ≤ y i para todo i = 1,..., n , y ∃ j tal que x j < y j Optimización MultiObjetivo – Frente Pareto Supongamos que tenemos P funciones y N individuos en la población 1 - Generar N individuos al azar 2 - Seleccionar la primer función y Evaluarlos. i – Utilizar Ruleta con los pesos determinados por esta función, y elegir 2 padres ii – Efectuar Crossover con los 2 padres seleccionados y generar 2 hijos iii – Incorporar los hijos a la nueva población NewPop 3 – Repetir los pasos 1 y 2 con las siguientes P – 1 funciones 4 – Repetir 2 y 3 hasta que NewPop contenga N elementos (se tiene entonces una población de Padres Seleccionados y una Nueva, generada por tandas de P soluciones buenas, una para cada función) 5 – Producir una población temporal uniendo los Padres seleccionados a NewPop (hijos), que contendrá 2N Individuos 6 – Realizar Mutación con el operador seleccionado, en la parte correspondiente de esta población temporal Optimización MultiObjetivo – Frente Pareto Tengo entonces una población con 2N Individuos, conseguidos por Crossover y Mutación, de la que tengo que extraer N que pasarán a la generación siguiente 7 – Extraiga el conjunto Pareto de esta población temporal (el conjunto de soluciones no dominadas por ninguna otra del conjunto) i – Si tengo N individuos en este conjunto Pareto, esos forman la generación siguiente ii – Si tengo más de N individuos, tiro Ruleta sucesivamente usando F1 hasta FP, extrayendo una solución por vez, hasta completar N individuos que formarán la generación siguiente iii – Si tengo menos que N individuos, Selecciono el resto mediante ruleta, de acuerdo a las funciones F1 hasta FP por turnos, hasta completar N. De esta manera aunque son soluciones dominadas por algunas de las del conjunto Pareto, son buenas soluciones y son seleccionadas para pasar a la generación siguiente 8 – Repetir 2 a 7 hasta completar el número de generaciones especificado Optimización MultiObjetivo – Frente Pareto En el caso de que exista un óptimo simultáneo de todas las funciones consideradas, este tipo de algoritmos lo encontrará, en cuyo caso coincide con un Algoritmo Genético Usual y una función combinada