EJEMPLO_2

 **USO DE ALGORITMOS GENÉTICOS PARA EL DISEÑO ÓPTIMO DE ARMADURAS**

Goldberg parece haber sido el primero en advertir el potencial de los algoritmos genéticos en el diseño óptimo de estructuras, en un artículo que publicó hace 8 años [Goldberg & Samtani, 1986] sobre el uso de un algoritmo genético para optimizar una armadura plana de 10 miembros. Después de él, algunos cuantos más se atrevieron a seguir sus pasos, y podemos encontrar en la literatura aplicaciones de la técnica a vigas soldadas [Debb, 1991], marcos planos [Jenkins, 1991] y armaduras en general [Rajeev & Krishnamoorthy, 1992]. [Pham & Yang, 1993] presentan también un trabajo muy interesante sobre la optimización de funciones discretas multi-modales usando algoritmos genéticos. [Powell et al.,1989] hablan sobre una herramienta para optimizar diseños, de carácter general (i.e. independiente del problema), dirigida a los ingenieros, a la que llaman EnGENEous. Este programa usa un sistema experto y algoritmos genéticos para moverse de un sistema general, del que carecemos de conocimiento, a uno que depende de su dominio, pero del cual se tiene información. El prototipo ha sido usado en el diseño de ventiladores, turbinas de aviones y con estructuras moleculares, y los autores afirman que ha incrementado la productividad de los ingenieros en un factor de diez.


 * USO DE LA TÉCNICA**

Para ilustrar el uso de los algoritmos genéticos en la optimización de estructuras, consideremos primero la armadura plana de 10 elementos [Rajeev & Krishnamoorthy, 1992] que se muestra en la Figura 3. Se asumen los siguientes datos : E = 1x104 ksi (6.89 x 104 MPa), = 0.10 lb/in3 (2,770 kg/m3), y cargas verticales hacia abajo de 100 kips (445.374 kN) en los nudos 2 y 4. Puesto que la función objetivo es minimizar el peso, f(x), para este caso en particular puede escribirse como:



Donde Aj es el área de la sección transversal del miembro jésimo; Lj es la longitud del miembro jésimo y es la densidad del material. Adicionalmente, la armadura está sujeta al siguiente conjunto de restricciones:



Donde j es el esfuerzo en cada miembro; a es el máximo esfuerzo permisible; uj es el desplazamiento de cada nudo (horizontal y vertical) y ua es el máximo desplazamiento permisible.



**Figura 3**: Armadura plana de 10 miembros usada como primer ejemplo de optimización.

Las restricciones puede expresarse en forma normalizada:



 La función de aptitud propuesta fue:. La variable viol es un contador del número de restricciones que fueron violadas con la solución obtenida. Con esta función puede verse claramente que cuando no se viola ninguna restricción la aptitud es simplemente la inversa del peso. Por el contrario, entre más restricciones se violen, más se reduce el valor de la aptitud del individuo. El número 1000 fue determinado experimentalmente. Las restricciones propias de este problema son las siguientes : el máximo desplazamiento permisible está limitado a 2 pulgadas (50.8 mm) en cualquier dirección, y los esfuerzos a 25 ksi (172.25 MPa). Además, disponemos de una lista de valores discretos considerados para la solución del problema. Esta lista fue tomada del Manual del Instituto Americano de la Construcción con Acero [Arora, 1989]. S = {1.62, 1.80, 1.99, 2.13, 2.38, 2.62, 2.63, 2.88, 2.93, 3.09, 3.13, 3.38, 3.47, 3.55, 3.63, 3.84, 3.87, 3.88, 4.18, 4.22, 4.49, 4.59, 4.80, 4.97, 5.12, 5.74, 7.22, 7.97, 11.5, 13.5, 13.9, 14.2, 15.5, 16.0, 16.9, 18.8, 19.9, 22.0, 22.9, 26.5, 30.0, 33.5} (pulg²). Puesto que hay 10 variables de diseño y cada una de ellas puede asumir cualquiera de las 42 secciones disponibles, entonces el espacio total de búsqueda es 4210. Debido a que estamos usando una representación binaria, el número 42 es un problema, porque no podemos usar sólo 5 dígitos para representarlo (serían insuficientes) y usando 6 tenemos valores de sobra. Por razones obvias se decidió usar 6 dígitos y se rellenaron los espacios sobrantes con los últimos valores de la lista, aunque pudo usarse cualquier valor dentro de S. Como tenemos 10 miembros, los cromosomas deberán tener 60 caracteres de longitud. La forma de representar un cromosoma es mediante un arreglo de dígitos binarios tal y como se muestra en la Figura 4.



De tal forma, la cadena compuesta completamente por ceros representa al primer elemento del conjunto S (i.e. 1.62 pulg²).


 * IMPLEMENTACIÓN**

Para fines de este trabajo se utilizó una versión modificada del SGA (Simple Genetic Algorithm) escrito en Turbo Pascal que presenta [Goldberg, 1989]. Los cambios más importantes fueron en torno al uso de asignación dinámica de memoria, en vez de los arreglos estáticos del programa original, usando una técnica propuesta por [Porter, 1988], y en cuanto al uso del coprocesador matemático. Asimismo, utilizamos selección mediante torneo binario en vez de la rueda de la fortuna del programa de Goldberg, y se efectuaron varios cambios menores en algunas de sus funciones a fin de hacerlas más comprensibles. El criterio de detención fue determinado a través de un número máximo de generaciones proporcionado por el usuario. La probabilidad de cruza se manejó en el orden del 80%, mientras que la de mutación fue siempre muy pequeña (1%), pero sin desactivarla como propone [Rajeev & Krishnamoorthy, 1992]. Para analizar la estructura se utilizaron los programas en Turbo Pascal contenidos en [Coello, 1991]. La operación básica del programa es muy simple : se alimentan los valores de las áreas posibles (i.e. el contenido de la lista S). Posteriormente se incluyen las restricciones a las que está sometida la estructura. El programa de análisis es ejecutado por separado para generar la matriz de rigideces con la que se trabajará, y sus resultados se almacenan en un archivo. El algoritmo genético es ejecutado y se preguntan al usuario las probabilidades de cruza y mutación, el tamaño de la población, la longitud de cada cromosoma y el número máximo de generaciones deseadas. Después, el programa empieza a trabajar, leyendo el archivo mencionado anteriormente, y modificándolo con los valores decodificados de los cromosomas de cada generación. Conforme se avanza, se va enviando a la impresora un resumen de cada generación que incluye información tal como quién fue el mejor individuo en ella, cuál es el mejor que se ha encontrado hasta el momento y cuál es el valor de su aptitud, y una decodificación de su cadena, para saber cuáles son las áreas que le corresponden.


 * CONCLUSIONES**

Los algoritmos genéticos parecen ser una técnica muy apropiada para resolver problemas de optimización con espacios de búsqueda discretos, debido a la forma en que operan. Hemos visto lo fácil que resulta aplicarlos para resolver problemas de alta complejidad matemática, así como la flexibilidad que presentan para poder aplicarse a problemas totalmente diferentes. En términos de la implementación, ésta resulta muy sencilla, y no se requiere ningún tipo de técnica de programación sofisticada. Además, el programa puede correrse en cualquier tipo de equipo, si bien es recomendable contar con un coprocesador matemático para disminuir los tiempos de ejecución. Aunque los resultados que hemos encontrado hasta ahora parecen altamente satisfactorios, todavía queda mucho trabajo por hacer antes de poder asegurar que la técnica es la piedra filosofal que los ingenieros han estado buscando desde hace casi 2 siglos para la optimización de estructuras. Sin embargo, el potencial de los algoritmos genéticos está ahí, esperando a ser explotado no sólo en este tipo de aplicaciones, sino en muchas otras dentro de la misma ingeniería civil, y en un sinfín más de disciplinas.

 