CONDITIONS OF CONTRACT
Page 43 of 63 in the case of items below plinth level.
24.0 Contractor liable for damage done
En esta sección se ejemplifica la solución de dos funciones objetivo, mostrando los resultados obtenidos.
a) Ejemplo 3.1. Maximizar la función objetivo f(x)= x*sin(10π*x)+1.
Para la solución del problema se aplica el AG; como se mencionó en la sección anterior, se aplican las siguientes funciones:
1) Una representación binaria,
2) Un inicio, la función de evaluación y el criterio de terminación, 3) Selección y muestreo
4) Operadores genéticos
Representación de los individuos. Los individuos se representan por cadenas de bits y
cada una es un gen del cromosoma. En este ejemplo se considera un intervalo de [-1, 2]. Este intervalo se representa por un conjunto de valores finitos que se obtienen aplicando la expresión:
r
2
log (3.3) siendo r el espacio de búsqueda definido para el conjunto de valores. En este ejemplo se considera una representación del intervalo en 3,000,000 puntos. Por lo tanto, se tiene
El número de bits obtenidos indica la longitud del gen. La solución del problema se encuentra analizando todo el espacio de búsqueda, enfocándose en una región con resultados satisfactorios.
Inicialización, evaluación y criterio de terminación. En este paso, se crea una
población inicial, distribuyendo uniformemente a los individuos sobre el espacio de búsqueda. (Si se tiene conocimiento de la estructura del espacio de la búsqueda, resulta muy útil inicializar la primera población dentro de una región con valores satisfactorios). Para la evaluación, considerando que la aptitud siempre se calcula mediante el fenotipo, se requiere la transformación del genotipo. La función utilizada es,
)) ( ( )) ( (i c1 f i c2 f ≥ (3.4) donde i representa al individuo, c al genotipo y f(i(c)) es la transformación a la aptitud. La función evaluación se propone como,
eval(c) = f(i(c)) (3.5)
Por ejemplo, evaluando un valor de genotipo de (0.637197) en la función evaluación se obtiene f(0.637197) = 1.586345. Los resultados de este ejemplo se muestran en la Tabla 3.1.
Tabla 3.1 Aptitud obtenida del ejemplo 3.1
Generación Genotipo Fenotipo
1 0.8678 1.7356 2 0.8543 1.846426 12 1.8768 2.250367 18 – 33 1.8544 2.836877 34 1.851505 2.849436 35 – 39 1.851503 2.849438 El mejor valor 1.8496 2.8494
Como se puede observar en la Tabla 3.1, un valor aceptable de la aptitud se obtiene a partir de la generación 34, por lo que el criterio de terminación para reducir el tiempo de solución depende de los requerimientos del problema y del operador del algoritmo.
El criterio de evaluación se considera normalmente como el límite de generaciones o
del tiempo de ejecución del algoritmo. Esto es, el proceso del AG se termina si no se produce un individuo mejor en las últimas “x” generaciones. En este ejemplo, se consideran 50 generaciones como el criterio de terminación con 50 individuos por
generación. En la primera generación se obtiene un genotipo de 0.8678 y un fenotipo de 1.7356 que es la mejor solución encontrada.
Selección y muestreo. Selección es la determinación de la probabilidad con la cual un
individuo es seleccionado considerando el valor de su aptitud. Esta selección se realiza usando la selección proporcional de Holland dada por,
∑
= = N k k i i ) c ( eval ) c ( eval P 1 (3.6)El muestreo se realiza aplicando la rueda de la ruleta para seleccionar los individuos que se van a transmitir en la siguiente generación.
Operadores genéticos. Se aplican los operadores de mutación y recombinación para
obtener un nivel de aptitud de los individuos aceptables. Se emplea un valor de recombinación de Pover = 0.25 y de mutación Pmut = 0.01.
Las Figs. 3.3-3.4 muestran gráficamente la mejor solución que se obtiene en este ejemplo así como la comparación entre la aptitud calculada y el número de generaciones.
-1 - 0 . 5 0 0 . 5 1 1 . 5 2 -1 - 0 . 5 0 0 . 5 1 1 . 5 2 2 . 5 3 G E N O T I P O F E N O T I P O f ( x ) = x * s i n ( 1 0 p i * x ) + 1 E l m e j o r v a l o r e n c o n t r a d o
0 5 1 0 1 5 2 0 2 5 3 0 3 5 4 0 4 5 5 0 1 . 6 1 . 8 2 2 . 2 2 . 4 2 . 6 2 . 8 3 G E N E R A C I O N E S A P T I T U D A p t i t u d v s . G e n e r a c i ó n
Figura 3.4. Gráfica comparativa de la aptitud obtenida
La parte sombreada de la fig.3.4 muestra que a partir de la generación número 34 la aptitud calculada se puede considerar como aceptable para terminar con el algoritmo y reducir el tiempo de cálculo del algoritmo.
b) Ejemplo 3.2. En este ejemplo se considera la maximización de la siguiente función ) 4 cos( * 7 ) 5 ( * 10 ) (x x sin x x
f = + + , dentro del intervalo [0, 9]. Se realiza el
mismo procedimiento que en el ejemplo 3.1. El número de generaciones consideradas fueron 25. Los resultados obtenidos se muestran en la Tabla 3.2 y en las Figs. 3.5 y 3.6.
Tabla 3.2 Aptitud obtenida del ejemplo 3.2
Generación Genotipo Fenotipo
1 8.0217 20.1903 2 - 3 8.0148 20.55138 4 - 6 7.8002 24.27073 7 7.8077 24.42119 8 - 9 7.832 24.74463 10 – 11 7.849 24.84576 12 - 15 7.85697 24.85531 16 - 24 7.85698 24.85536 El mejor valor 7.8570 24.8554
0 1 2 3 4 5 6 7 8 9 - 2 0 - 1 5 - 1 0 -5 0 5 1 0 1 5 2 0 2 5 x = G E N O T I P O f(x) = F E N O T I P O f ( x ) = 5 + 1 0 s e n ( 5 x ) + 7 c o s ( 4 x ) E l m e j o r v a l o r
Figura 3.5. Gráfica de la mejor solución del ejemplo 3.2
0 5 1 0 1 5 2 0 2 5 2 0 2 0 . 5 2 1 2 1 . 5 2 2 2 2 . 5 2 3 2 3 . 5 2 4 2 4 . 5 2 5 G E N E R A C I O N E S A P T I T U D A p t i t u d v s G e n e r a c i ó n
Figura 3.6. Gráfica del comportamiento de la aptitud
se considera que un mejor valor puede tenerse a partir de la generación 16. Como se mencionó anteriormente, el criterio para terminación del proceso depende entonces del usuario y de la precisión que se desee obtener.
3.3 Manejo de restricciones.
Hasta ahora se ha descrito la metodología del algoritmo genético aplicado a problemas sin restricciones. Sin embargo, en la práctica generalmente se tienen problemas con restricciones de diferentes tipos (igualdad, desigualdad, lineales y no lineales) de la forma:
min f(z) (3.7) sujeto a :
hi (z)≤ c i = 1, 2, . . ., n
El algoritmo genético es una herramienta de optimización que inicialmente se desarrolló sin la inclusión de restricciones; por consiguiente, se requiere diseñar un mecanismo que permita la inclusión de la información adecuada sobre las violaciones de las restriccio nes en la función de aptitud.
Existen diferentes técnicas para tratar problemas con restricciones [13-16]. En la práctica se pueden encontrar problemas muy complejos de optimización con restricciones; por ejemplo, el problema del agente viajero es de esta clase de problemas, la restricción para este problema es que el viaje tiene que ser en un solo ciclo visitando todas las ciudades. Otro ejemplo es el de empacar la mochila, con una restricción solamente con todas las combinaciones posibles de objetos que se pueden meter en la mochila; sin embargo, a causa de la cantidad de objetos no se puede calcular la aptitud para todas las posibles soluciones viables. Estos problemas se tratarán en detalle más adelante.
3.3.1 Antecedentes [13, 17].
Una breve revisión de la evolución de las técnicas desarrolladas para resolver la optimización de problemas con restricciones es presentada en [13, 17, 18, 19, 20]. En los últimos años han sido desarrolladas diversas técnicas para el manejo de restricciones mediante los algoritmos evolutivos, principalmente en el área de los algoritmos genéticos. Las técnicas desarrolladas se pueden clasificar en cuatro tipos:
1) Técnicas que rechazan a los individuos no factibles.
2) Técnicas que mantienen una población factible mediante el uso de operadores genéticos especiales.
3) Técnicas que separan los objetivos y las restricciones.
Quizá la forma más fácil de tratar con las restricciones es la primera técnica, rechazando a los individuos que no estén considerados como factibles. Cuando alguna solución viola una restricción, la aptitud asignada es de cero, y no se requieren cálculos posteriores para estimar el grado de infactibilidad de dicha solución. Esta técnica se puede usar cuando los espacios de búsqueda son convexos.
Diversas representaciones para problemas de optimización fueron desarrolladas por Davis, las cuales preservan la factibilidad del individuo. Otro de los ejemplos del uso de este tipo de técnicas es el algoritmo desarrollado por Michalewicz, el GENOCOP ( Genetic Algorithm for Numerical Optimization for Constrained Problems por sus siglas en inglés) [10]. Este algoritmo maneja restricciones lineales suprimiendo las desigualdades y diseñando operadores genéticos especiales con la finalidad de mantener a todos los individuos dentro de la región de soluciones restringidas. El algoritmo GENOCOP funciona mediante una población inicial factible; debido a que se basa en la suposición de manejar restricciones lineales, su espacio de búsqueda es convexo.
Entre las técnicas que separan los objetivos y las restricciones se puede mencionar la desarrollada por Paredis que se basa en un modelo co-evolutivo [18]; este modelo trabaja con más de una población y la aptitud de un individuo (en una población) depende directamente de la forma de evolución de otra población. El fundamento de esta técnica es que una población de soluciones co-evoluciona con una población de restricciones.
Otra de las técnicas para tratar problemas con restricciones es la propuesta por Schoenauer y Xanthakis llamada behavioural memory en donde las restricciones tienen un orden de manejo en particular [13]. Esta herramienta se fundamenta en que las restricciones deben de tratarse de una manera lineal con lo cual se busca modificar los resultados obtenidos mediante este algoritmo.
Otra herramienta de interés es aquella en que los objetivos y las restricciones se manejan por separado. La forma más común es redefinir el problema de optimizar la función f (una función con un solo objetivo) en uno con múltiples objetivos (incluyendo las restricciones). De esta manera se tendrán m + 1 objetivos, siendo m el número de restricciones y el problema es resuelto usando una técnica para funciones con múltiples objetivos.
Con el desarrollo de la técnica llamada COMOGA, Surry y colegas [21] propusieron la jerarquización de la población considerando el grado de violación de las restricciones; esto es, la cantidad de individuos en cada solución. De esta manera, una parte de la población es seleccionada tomando esta jerarquía y los demás individuos se seleccionan considerando su aptitud. Los resultados obtenidos con esta técnica fueron satisfactorios comparados con un enfoque hecho con penalizaciones, aunque si bien fueron resultados buenos, no se puede decir que fueron mejores que los encontrados mediante una función de penalización. Este algoritmo requiere de parámetros adicionales, tales como una función de costo la cual sirve para regular la proporción entre los individuos factibles y los no factibles
Otra técnica no tan común es la propuesta por Hajela y Lee [22]. Esta técnica debe su funcionamiento de manejo de restricciones a la manera natural de operar del sistema inmunológico. El enfoque utilizado es la separación de todos los individuos factibles de los no factibles en la población. A los individuos factibles clasificados en un grupo se les llama antígenos y a los no factibles se les conoce como anticuerpos. La manera de realizar lo anterior es mediante el uso de una función sencilla de verificación de patrones con lo cual se calcula además la similitud entre dos cromosomas (si se trabaja una codificación binaria, se realiza bit por bit o de manera general, gen por gen). De esta manera se co-evoluciona la población de anticuerpos hasta volverlos muy similares a la población de antígenos. Una vez que se llega a esa solución, se combinan ambos grupos y se les evoluciona aplicando un algoritmo genético estándar sin considerar una función de penalización debido a que todos los individuos ya se consideran factibles. A pesar de que con esta técnica se tienen buenos resultados, se tiene el inconveniente de que no se conoce aún cual es el efecto, en términos de desempeño, de combinar diferentes proporciones de cada grupo de individuos; otro inconveniente es que tampoco se sabe qué hacer cuando no se tienen individuos factibles en la población inicial.
La técnica más común para el manejo de restricciones es la función de penalización; a pesar de que se han propuesto varios enfoques para esta técnica, la mayoría conserva la idea original: incrementar el valor de la función objetivo cuando una o más restricciones son violadas. A continuación se describen algunas aportaciones presentadas en diversos trabajos de investigación basadas en la solución de problemas con restricciones mediante la técnica de la penalización [8, 10, 13, 17, 19, 20].
Homaifar y colegas [23] presentaron una metodología en donde se definen diferentes niveles de violación de las restricciones y se especifica un coeficiente de penalización para cada nivel, de manera que la penalización se incrementa si el nivel de penalización es mayor. La desventaja principal de este método es que se requiere un número considerable de parámetros de acuerdo a las restricciones; por ejemplo, para p restricciones se requieren un total de p(2n + 1) parámetros, donde n es el número de niveles especificados en el problema. Esto es, si se analiza un problema pequeño con 6 restricciones y 3 niveles de pena lización se requerirían 42 parámetros, lo que complica el problema.
Joines y Houck [24] propusieron una técnica fundamentada en el uso de factores de penalizaciones dinámicas, esto es, que cambian con el tiempo. La desventaja en esta técnica es que en la práctica, es difícil obtener una función de variación de la penalización.
Michalewicz y Attia [25] basaron su método en el algoritmo del templado simulado, en este método se modifican los coeficientes de penalización cada cierto número de generaciones una vez que el algoritmo ha convergido a un óptimo local. Básicamente, el proceso funciona de la siguiente manera. En cada iteración, el algoritmo considera únicamente las restricciones violadas y la presión sobre las soluciones infactibles es incrementada debido a los valores decrecientes de la temperatura del proceso. En esta metodología, la población inicial es creada con las copias de un mismo individuo que satisface todas las restricciones lineales. La temperatura es disminuida en cada iteración del proceso para crear una nueva población basada en la mejor solución encontrada en el paso
anterior; el proceso termina cuando se llega a una temperatura preestablecida. La principal desventaja de esta técnica es que generalmente no es posible seleccionar en forma adecuada y precisa un esquema de enfriamiento cuando se resuelve cualquier problema utilizando el algoritmo del templado simulado.
Adeli y Cheng [26] usaron un algoritmo genético híbrido de una función de penalización con un método de programación matemática que utilizaron en un trabajo de optimización anterior. Esta técnica está basada en el uso de los multiplicadores de Lagrange; tiene como inconveniente que los multiplicadores de Lagrange no se pueden definir de manera sencilla para cualquier tipo problema.
Le Riche y colegas [27] propusieron un algoritmo genético que utiliza dos parámetros de penalización para cada restricción. La idea de esta metodología es lograr un balance entre los factores de penalización mediante dos subpoblaciones de individuos; la población inicial se subdivide en dos grupos con la finalidad de combinarlos para mezclar a los individuos factibles y no factibles. La clase de selección que es utilizada en este proceso es de jerarquización lineal para reducir la posibilidad de una convergencia prematura. El inconveniente que tiene esta técnica es que no se tiene una manera precisa para elegir los factores de penalización adecuados para cada una de las subpoblaciones.
3.3.2 Funciones de penalización [3, 8-10, 13, 17, 19-20].
En un método de penalización, un problema con restricciones se transforma en un problema sin restricciones asociándole una función de costo o bien, una función penalizada que incluya todas las restricciones violadas. Este costo es incluido en la evaluación de la función objetivo. En esta sección se describe la clasificación de los métodos de penalización mencionando algunas de sus ventajas y sus principales inconvenientes.
Considérese un sistema con restricciones de la forma natural (ec.3.7):
min f(z) sujeto a:
hi(z) ≤≤ c i = 1, 2, . . ., n
Se transforma a la forma sin restricciones:
min f(z) +
∑
[
( )]
= φ n i i z h k 1 (3.8)donde φ es la función de penalización y k es el factor de penalización definido por el usuario. Existen diferentes formas de penalizar a un individuo de acuerdo a la violación de las restricciones; algunas de ellas son:
• se le penaliza si no es factible, sin considerar si se encuentra cercano a la región factible.
• se puede tomar el valor de la infactibilidad del individuo para considerar el factor de penalización.
• se puede utilizar una función de costo para volver factible al individuo.
Algunas de las técnicas propuestas que usan una func ión de penalización para la solución de problemas con restricciones se dividen en:
1) Penalización estática. 2) Penalización dinámica.
3) Penalización usando el recocido simulado. 4) Penalización adaptiva.
5) Algoritmo genético segregado. 6) Pena de muerte.
3.3.2.1 Penalización estática.
En esta técnica propuesta por A. Homaifar, Y. Lai y X. Qi [23], el usuario define diferentes niveles de violación de restricciones y selecciona un coeficiente de penalización para cada nivel de violación; de esta manera, el nivel de violación se irá incrementando conforme la violación de las restricciones sea mayor. El individuo es evaluado mediante su aptitud (ec. 3.8): Aptitud = fi(z) +
∑
( )
= n j i j , m h z k 1 (3.9)donde k se ha definido como los coeficientes de penalización y m = 1, 2, . . . , l, siendo l los niveles de violación definidos por el usuario, n el número total de restricciones y fi(z) la
función objetivo sin penalizaciones.
La desventaja de utilizar este método es que se requieren n(2l + 1) parámetros siendo
n el número de restricciones, y l el número de niveles de violación. Por consiguiente, aún
para un problema con pocas restricciones y niveles, la cantidad de parámetros que resulta se incrementa, complicando la solución del problema.
3.3.2.2 Penalización dinámica.
Dentro de esta categoría de penalizar una función que viole ciertas restricciones, se puede encontrar el trabajo desarrollado por J. Joines y C. Houck [24]. En la penalización dinámica, los factores de penalización están cambia ndo conforme evoluciona el algoritmo,
esto es, la función de penalización se incrementa conforme se incrementan las generaciones.
Los individuos son evaluados de acuerdo a su aptitud más el factor de penalización cambiante en el tiempo. El inconveniente que presenta esta herramienta es que se corre el riesgo de una convergencia prematura si los valores de los parámetros no son seleccionados adecuadamente.
3.3.2.3 Penalización usando el algoritmo del templado simulado.
Esta técnica propuesta por Michalewicz y colegas [25] utiliza como fundamento el algoritmo del templado simulado. La idea básica es la modificación de los coeficientes de penalización cada cierto número de generaciones para evitar que el algoritmo quede atrapado en un óptimo local. Los individuos son evaluados usando su valor de aptitud, más una función que integra el esquema de enfriamiento definido por el usuario. El problema principal que se tiene con esta técnica es la selección adecuada del esquema de enfriamiento.
3.3.2.4 Penalización adaptiva [28].
En esta técnica las penalizaciones se modifican considerando una retroalimentación del ambiente durante el proceso del algoritmo genético. Cuando un individuo es consistentemente factible, la penalización disminuye; por el contrario, si resulta infactible el valor de la penalización se incrementa. Si los cambios son alternados, esto es, unas veces el individuo es factible y otras infactible la penalización permanece sin cambio. La desventaja de esta técnica es que no se tiene una regla para definir el factor inicial de penalización y el intervalo de monitoreo de factibilidad para obtener resultados satisfactorios.
3.3.2.5 Penalización usando el algoritmo genético segregado.
Esta técnica fue propuesta por Le Riche y colaboradores [27] y se fundamenta en el uso de dos funciones de penalización en vez de una como las anteriores, separando la población en dos poblaciones; esta función tiene la finalidad de ponderar las restricciones más fuertes con las de menor valor. Cada una de las poblaciones se dividen a su vez en dos grupos de individuos siendo evaluados mediante un factor de penalización distinto; posteriormente, se seleccionan los mejores individuos en cada grupo de donde se obtienen los nuevos descendientes para formar la nueva generación. De esta manera, se combinan los individuos factibles con los infactibles suponiendo el uso de un factor de penalización grande y otro pequeño con la finalidad de mantener la diversidad y así, evitar quedar atrapado en óptimos locales.
3.3.2.6 Pena de muerte.
La pena de muerte consiste en el rechazo de un individuo que no es factible y representa quizá la manera más sencilla de resolver problemas con restricciones. El uso de esta técnica se considera eficiente y práctica porque cuando una solución viola alguna restricción se le asigna un valor de aptitud cero; en consecuencia, ya no se requiere realizar más cálculo al respecto para estimar el grado de infactibilidad de dicha solución. Únicamente los valores de los individuos que son factibles son considerados para la