JONATHAN BLADIMIR ARANA MORA SIMULACIN DE ALGORITMOS GENTICOS 08/05/2014
4
ndice de contenidos 1 NOMBRE DEL PROYECTO ............................................................................................................. 5 2 OBJETIVOS ....................................................................................................................................... 6 3 JUSTIFICACION ............................................................................................................................... 6 4 ALCANCE .......................................................................................................................................... 6 5 MARCO TEORICO ............................................................................................................................ 7 6 METODOLOGIA ............................................................................................................................. 11 7 CONCLUSIONES Y RECOMENDACIONES ................................................................................ 16 8 REFERENCIAS BIBLIOGRAFICAS .............................................................................................. 16
5
1 NOMBRE DEL PROYECTO
SIMULACIN DE ALGORITMOS GENETICOS 6
2 OBJETIVOS Objetivo General:
Simular los algoritmos genticos en el lenguaje de programacin Python. Objetivos Especficos:
Investigar sobre los algoritmos genticos. Utilizar diagramas UML para la modelacin del algoritmo. Implementar el algoritmo gentico. 3 JUSTIFICACION El siguiente documento se realiza por motivos de aprendizaje, especficamente sobre cmo se puede simular un algoritmo gentico, para la industria que fuera como plantas medicamentos, gentica, etc. Los mismos que son muy importantes para ver el comportamiento dependiendo de un estmulo o mutacin para luego proceder a su aprobacin o desecho.
4 ALCANCE La aplicacin programada en lenguaje Python se basa en el ingreso de la poblacin inicial que se lo hace de forma randomica y de 4 binarios, cada uno de estos va a ser un individuo, luego pasa a la funcin de calidad en la cual se evalua con el peso, luego de esto se produce el cruce mediante el operador and, para luego mutarlo cogiendo de este cruce un binario aleatorio para luego terminar conla evaluacin del nuevo individuo. jaranaInvitado
7
5 MARCO TEORICO Los Algoritmos Genticos (AGs) son mtodos adaptativos que pueden usarse para resolver problemas de bsqueda y optimizacin. Estn basados en el proceso gentico de los organismos vivos. A lo largo de las generaciones, las poblaciones evolucionan en la naturaleza de acorde con los principios de la seleccin natural y la supervivencia de los ms fuertes, postulados por Darwin. Por imitacin de este proceso, los Algoritmos Genticos son capaces de ir creando soluciones para problemas del mundo real. La evolucin de dichas soluciones hacia valores ptimos del problema depende en buena medida de una adecuada codificacin de las mismas.
Un algoritmo gentico consiste en una funcin matemtica o una rutina de software que toma como entradas a los ejemplares y retorna como salidas cules de ellos deben generar descendencia para la nueva generacin.
Versiones ms complejas de algoritmos genticos generan un ciclo iterativo que directamente toma a la especie (el total de los ejemplares) y crea una nueva generacin que reemplaza a la antigua una cantidad de veces determinada por su propio diseo. Una de sus caractersticas principales es la de ir perfeccionando su propia heurstica en el proceso de ejecucin, por lo que no requiere largos perodos de entrenamiento especializado por parte del ser humano, principal defecto de otros mtodos para solucionar problemas, como los Sistemas Expertos.
Los principios bsicos de los Algoritmos Genticos fueron establecidos por Holland, y se encuentran bien descritos en varios textos . Goldberg, Davis, Michalewicz, Reeves.
En la naturaleza los individuos de una poblacin compiten entre s en la bsqueda de recursos tales como comida, agua y refugio. Incluso los miembros de una misma especie compiten a menudo en la bsqueda de un compaero. Aquellos individuos que tienen ms xito en sobrevivir y en atraer compaeros tienen mayor probabilidad de generar un gran nmero de descendientes. Por el contrario individuos poco dotados producirn un menor jaranaInvitado
8 nmero de descendientes. Esto significa que los genes de los individuos mejor adaptados se propagarn en sucesivas generaciones hacia un nmero de individuos creciente. La combinacin de buenas caractersticas provenientes de diferentes ancestros, puede a veces producir descendientes "superindividuos", cuya adaptacin es mucho mayor que la de cualquiera de sus ancestros. De esta manera, las especies evolucionan logrando unas caractersticas cada vez mejor adaptadas al entorno en el que viven.
Los Algoritmos Genticos usan una analoga directa con el comportamiento natural. Trabajan con una poblacin de individuos, cada uno de los cuales representa una solucin factible a un problema dado. A cada individuo se le asigna un valor puntuacin, relacionado con la bondad de dicha solucin. En la naturaleza esto equivaldra al grado de efectividad de un organismo para competir por unos determinados recursos. Cuanto mayor sea la adaptacin de un individuo al problema, mayor ser la probabilidad de que el mismo sea seleccionado para reproducirse, cruzando su material gentico con otro individuo seleccionado de igual forma. Este cruce producir nuevos individuos . descendientes de los anteriores . los cuales comparten algunas de las caractersticas de sus padres. Cuanto menor sea la adaptacin de un individuo, menor ser la probabilidad de que dicho individuo sea seleccionado para la reproduccin, y por tanto de que su material gentico se propague en sucesivas generaciones.
De esta manera se produce una nueva poblacin de posibles soluciones, la cual reemplaza a la anterior y verifica la interesante propiedad de que contiene una mayor proporcin de buenas caractersticas en comparacin con la poblacin anterior. As a lo largo de las generaciones las buenas caractersticas se propagan a travs de la poblacin. Favoreciendo el cruce de los individuos mejor adaptados, van siendo exploradas las reas ms prometedoras del espacio de bsqueda. Si el Algoritmo Gentico ha sido bien diseado, la, poblacin converger hacia una solucin ptima del problema. Ventajas y Desventajas
jaranaInvitado
9 No necesitan conocimientos especficos sobre el problema que intentan resolver.
Operan de forma simultnea con varias soluciones, en vez de trabajar de forma secuencial como las tcnicas tradicionales. Cuando se usan para problemas de optimizacin maximizar una funcin objetivo- resultan menos afectados por los mximos locales (falsas soluciones) que las tcnicas tradicionales. Resulta sumamente fcil ejecutarlos en las modernas arquitecturas masivamente paralelas. Usan operadores probabilsticos, en vez de los tpicos operadores determinsticos de las otras tcnicas. Pueden tardar mucho en converger, o no converger en absoluto, dependiendo en cierta medida de los parmetros que se utilicen tamao de la poblacin, nmero de generaciones, etc.-. Pueden converger prematuramente debido a una serie de problemas de diversa ndole. Limitaciones El poder de los Algoritmos Genticos proviene del hecho de que se trata de una tcnica robusta, y pueden tratar con xito una gran variedad de problemas provenientes de diferentes reas, incluyendo aquellos en los que otros mtodos encuentran dificultades. Si bien no se garantiza que el Algoritmo Gentico encuentre la solucin ptima, del problema, existe evidencia emprica de que se encuentran soluciones de un nivel aceptable, en un tiempo competitivo con el resto de algoritmos de optimizacin combinatoria. En el caso de que existan tcnicas especializadas para resolver un determinado problema, lo ms probable es que superen al Algoritmo Gentico, tanto en rapidez como en eficacia. El gran campo de aplicacin de los Algoritmos Genticos se relaciona con aquellos problemas para los cuales no existen tcnicas especializadas. Incluso en el caso en que dichas tcnicas existan, y funcionen bien, pueden efectuarse mejoras de las mismas hibridndolas con los Algoritmos Genticos.
Como Saber si es Posible usar un Algoritmo Gentico
La aplicacin ms comn de los algoritmos genticos ha sido la solucin de problemas de optimizacin, en donde han mostrado ser muy eficientes y confiables. jaranaInvitado
10 Sin embargo, no todos los problemas pudieran ser apropiados para la tcnica, y se recomienda en general tomar en cuenta las siguientes caractersticas del mismo antes de intentar usarla:
Su espacio de bsqueda (i.e., sus posibles soluciones) debe estar delimitado dentro de un cierto rango. Debe poderse definir una funcin de aptitud que nos indique qu tan buena o mala es una cierta respuesta. Las soluciones deben codificarse de una forma que resulte relativamente fcil de implementar en la computadora.
El primer punto es muy importante, y lo ms recomendable es intentar resolver problemas que tengan espacios de bsqueda discretos aunque stos sean muy grandes. Sin embargo, tambin podr intentarse usar la tcnica con espacios de bsqueda continuos, pero preferentemente cuando exista un rango de soluciones relativamente pequeo.
La funcin de aptitud no es ms que la funcin objetivo de nuestro problema de optimizacin. El algoritmo gentico nicamente maximiza, pero la minimizacin puede realizarse fcilmente utilizando el recproco de la funcin maximizante (debe cuidarse, por supuesto, que el recproco de la funcin no genere una divisin por cero). Una caracterstica que debe tener esta funcin es que tiene ser capaz de "castigar" a las malas soluciones, y de "premiar" a las buenas, de forma que sean estas ltimas las que se propaguen con mayor rapidez.
La codificacin ms comn de las soluciones es a travs de cadenas binarias, aunque se han utilizado tambin nmeros reales y letras. El primero de estos esquemas ha gozado de mucha popularidad debido a que es el que propuso originalmente Holland, y adems porque resulta muy sencillo de implementar.
PROBLEMTICA El problema de la mochila propiamente dicho consiste en, teniendo una mochila que puede aguantar cierto peso mximo, meter objetos en ella hasta que se agote su capacidad. Cada objeto tiene un valor y un peso. Hay varias maneras de meter los objetos: jaranaInvitado
11 Empezar metiendo desde los de menos peso hasta los de mayor. Asi podremos introducir un mayor nmero de objetos. Empezar metiendo desde los de ms valor hasta los de menos. As vamos aumentando ms rpidamente el valor de los objetos que contiene la mochila. Introducirlos por orden, de mayor a menor valor por unidad de peso.
6 METODOLOGIA
DIAGRAMA UML DIAGRAMA DE ESTADOS
Cdigo Fuente Producto '''
@author: jarana ''' class Producto(object): ''' classdocs '''
class Poblacion(object): # Iniciamos la poblacion aleatoriamente def __init__(self, productos, rnd, capacidad, n = 50, Pc = 0.9, Pm = 0.2): # productos: tupla de productos # rnd: generador de pseudo-azar # capacidad: capacidad de la mochila # Pc: probabilidad de cruza # Pm: probabilidad de mutacion # n: tamao de la poblacion
self.container = [] self.rand = rnd self.Pc = Pc self.Pm = Pm self.n = n
for i in range(n): m = Mochila(i, productos, capacidad, rnd) m.aleatorizar() self.container.append(m) self.container.sort(key = lambda mochila: mochila.beneficio, reverse = True) # Asi deberian salir mas rapidito las mejores soluciones # Tambien sirve para irme piteando las peores soluciones
# Esto es para calculos de la ruleta def totalBeneficio(self): return sum(m.beneficio for m in self.container)
# La famosa ruleta ... def ruleta(self): total = float(self.totalBeneficio()) dado = self.rand.random() jaranaInvitado
13
suma = 0 for m in self.container: suma += m.beneficio / total if suma >= dado: # Llegamos al wilson, the chosen one break return m # Retornamos la mochila elegida al azar
# Avanza una etapa de evolucion def newGeneration(self): self.generaciones += 1 coqueta1 = self.ruleta() coqueta2 = self.ruleta()
nos_cruzamos = self.rand.random() if nos_cruzamos <= self.Pc: # Se cruzan 1313 self.cruzas += 1 h1, h2 = mochila.cruza(coqueta1, coqueta2) del self.container[-2:] # Nos piteamos a los dos wilsons mas wilsons de la poblacion muta = self.rand.random() if muta <= self.Pm: # Mutamos a la hija1 self.mutaciones += 1 mochila.mutar(h1) muta = self.rand.random() if muta <= self.Pm: # Mutamos a la hija2 self.mutaciones += 1 mochila.mutar(h2) self.container.extend([h1, h2]) # Y agregamos a los hijos recien creados self.container.sort(key = lambda mochila: mochila.beneficio, reverse = True) # De nuevo, sorting ...
# Retornamos al mejor wilson de la poblacion def mejorWilson(self): return self.container[0]
def __str__(self): return self.__repr__() # Getter para peso def __getPeso(self): return sum((producto.peso for producto in self.productos if self.info[producto.id])) # Sumamos si esta en la mochila
# Getter para beneficio def __getBeneficio(self): return sum((producto.beneficio for producto in self.productos if self.info[producto.id])) # Sumamos si esta en la mochila
# Genera solucion aleatoria def aleatorizar(self): productos = list(self.productos) self.rand.shuffle(productos)
while productos: prod = productos.pop()
if prod.peso <= (self.capacidad - self.peso): self.info[prod.id] = True
# Repara la solucion si es invalida def reparar(self): while self.peso > self.capacidad: # Si nos pasamos del rango de peso ... idx = self.rand.randrange(0, len(self.productos)) self.info[idx] = False
# Realiza una 'cruza' de mochilas def cruza(mochila1, mochila2): # Vemos en que posicion cortamos las mochilas, permutamos las mitades y voila! tenemos dos soluciones hijas corte = mochila1.rand.randrange(0, len(mochila1.info))
for idx, info in enumerate(itertools.product([True,False], repeat = cant_productos)): m = Mochila(idx, productos, capacidad, rnd) m.info = info if m.beneficio > mejol.beneficio and m.peso <= capacidad: # Solucion mejor mejol = m print ("Resultado") print (mejol)
jaranaInvitado
16
Resultado
7 CONCLUSIONES Y RECOMENDACIONES Para evaluar la funcin de calidad de los individuos se puede realizar por varias parmetros diferentes como los ms grandes, ms inteligentes, etc. En el cruce podemos usar funciones lgicas como and, or , nand, nor vlidas para poder realizar el cruce. La mutacin depende de la lgica que se introduzca podemos mutar hasta un porcentaje del individuo cruzado.
M. Domnguez-Dorado,. Todo Programacin. N 12. Pgs. 16-20. Editorial Iberprensa (Madrid). DL M-13679-2004. Septiembre, 2005.. Programacin de algoritmos genticos..
D. Whitley, T. Starkweather, D. Shaner (1991). The traveling salesman and sequence scheduling:
Quality solutions using genetic edge recombination, en Davis, L. (ed.) Handbook of Genetic Algorithms, Van Nostrand Reinhold, New York, 350-372