Upload
carlos-yanez
View
20
Download
5
Embed Size (px)
Citation preview
Algoritmos Genéticos
UNIVERSIDAD POLITECNICA
SALESIANA
SIMULACION
CARLOS YANEZ
INFORME
ALGORITMOS GENETICOS
10mo GESTION
6 De Noviembre del 2012
Algoritmos Genéticos
TEMA
• Simulación de algoritmos genéticos
Objetivos
General
• Desarrollar una aplicación que permita simular las etapas de un algoritmo genético
Específicos
• Investigar la base teórica de los algoritmos genéticos
• Determinar las ventajas y desventajas de los algoritmos genéticos
• Desarrollar una aplicación que permita simular un algoritmo genéticos
Justificación
El presente documento tiene como finalidad demostrar el funcionamiento del algoritmo genético y
sus aplicaciones en la vida real , para que el lector tenga un beneficio de esta herramienta y pueda
aplicarlo en su vida profesional , y así beneficiarse del uso de esta herramienta.
Alcance
La investigación comprende una base teórica sobre el funcionamiento y las etapas del algoritmo
genético, así como una breve descripción de sus ventajas y desventajas, para continuar con el
desarrollo de una aplicación de forma sencilla que permita comprender la manera en la que trabaja
el algoritmo, y culminando con las conclusiones sobre el tema desarrollado.
Marco Teórico Definición.- Los algoritmos genéticos se definen como métodos adaptivos que permiten resolver
problemas de búsqueda y optimizan ; basándose en los procesos genéticos de los organismos vivos
basado en la población ,reproducción y mutación , tratan de resolver el mismo conjunto de
problemas que se han contemplado antes , es decir , buscan un máximo como solución , el conjunto
de variables que utiliza un algoritmo genético se denomina cromosoma , todos los operadores
utilizados por el algoritmos se utilizaran sobre el cromosoma o poblaciones de ellos.
En el algoritmo genético va implícito el método para resolver el problema; son solo parámetros de
tal método los que están codificados, a diferencia de otros algoritmos evolutivos como la
programación genética
Las etapas básicas de un algoritmo genético son selección, combinación, mutación e inserción como
se muestra en la ilustración
Algoritmos Genéticos
Ventajas y Desventajas
No necesitan conocimientos específicos sobre el problema que intentan resolver.
• Operan de forma simultánea con varias soluciones, en vez de trabajar de forma secuencial
como las técnicas tradicionales.
• Cuando se usan para problemas de optimización maximizar una función objetivo- resultan
menos afectados por los máximos locales (falsas soluciones) que las técnicas tradicionales.
• Resulta sumamente fácil ejecutarlos en las modernas arquitecturas masivamente paralelas.
• Usan operadores probabilísticos, en vez de los típicos operadores determinísticos de las otras
técnicas.
• Pueden tardar mucho en converger, o no converger en absoluto, dependiendo en cierta
medida de los parámetros que se utilicen tamaño de la población, número de generaciones,
etc.-.
• Pueden converger prematuramente debido a una serie de problemas de diversa índole.
Limitaciones
El poder de los Algoritmos Genéticos proviene del hecho de que se trata de una técnica robusta, y
pueden tratar con éxito una gran variedad de problemas provenientes de diferentes áreas,
incluyendo aquellos en los que otros métodos encuentran dificultades. Si bien no se garantiza que el
Algoritmo Genético encuentre la solución óptima, del problema, existe evidencia empírica de que
se encuentran soluciones de un nivel aceptable, en un tiempo competitivo con el resto de algoritmos
de optimización combinatoria. En el caso de que existan técnicas especializadas para resolver un
determinado problema, lo más probable es que superen al Algoritmo Genético, tanto en rapidez
como en eficacia. El gran campo de aplicación de los Algoritmos Genéticos se relaciona con
aquellos problemas para los cuales no existen técnicas especializadas. Incluso en el caso en que
dichas técnicas existan, y funcionen bien, pueden efectuarse mejoras de las mismas hibridándolas
con los Algoritmos Genéticos.
Funcionamiento de un algoritmo Genético
1. Generar aleatoriamente la población inicial. Cada individuo necesita tener codificada su
información en forma de cromosoma. Cada uno de estos cromosomas son posibles
soluciones del problema a estudiar.
2. Evaluación de la población. A cada cromosoma se le aplica la función de aptitud que ha
elegido para su estudio. Mediante esta función asignamos un número real a cada posible
solución del problema. Se otorga más probabilidad de emparejamiento a aquellas que sean
mejores.
3. Reproducción. Durante el problema se eligen aleatoriamente los individuos que se van a
reproducir y el cruce también se hace de forma aleatoria. Dicho cruce se realiza sobre los
genotipos de cada pareja elegida como padres. Mediante el operador de Selección
cruzamiento sabremos qué parte del padre y de la madre pasa a la descendencia, así como el
modo.
Algoritmos Genéticos
Diagramas UML
Diagrama de Clases
Diagrama de Casos de Uso
Algoritmos Genéticos
Diagrama de Componentes
Diagrama de Objetos
Código Fuente
Clase Genetico.py import random
import math
class Genetico():
#numero de genes
N_genes=10
#poblacion inicial
F0=[]
#probabilidad de mutacion
prob_m=0.5
#nueva generacion
F1=F0[:]
suma=0
def gen_aleatorio(self):
gen=[]
for i in range(0,8):
if random.random()<0.3:
gen.append(0)
else:
gen.append(1)
return gen
def Iniciar(self):
for i in range(0,self.N_genes):
self.F0.append(self.gen_aleatorio())
Algoritmos Genéticos
def f(self,x):
return 0.05*x*x-4*math.cos(x)
def nextgeneration(self):
self.F0.sort(cmp=self.compara_genes)
print "La mejor solucion hasta el momento es:"
print "f(",self.decodifica_gen(self.F0[0]),")= ", self.f(self.decodifica_gen(self.F0[0]))
#elitismo, elegimos los dos mejores y pasan directo a la siguiente poblacion
self.F1[0]=self.F0[0]
self.F1[1]=self.F0[1]
for i in range(0,(self.N_genes-2)/2):
#seleccionamos una pareja
g1=self.elegir()
g2=self.elegir()
#generamos hijos con cruza, el punto de cruza es la mitad del gen
h1=self.F0[g1][0:4]
h1.extend(self.F0[g2][4:8])
h2=self.F0[g2][0:4]
h2.extend(self.F0[g1][4:8])
#mutamos cada hijo con probabilidad prob_m
if random.random() < self.prob_m:
h1[int(round(random.random()*7))]^=1
if random.random() < self.prob_m:
h2[int(round(random.random()*7))]^=1
#agregar estos hijos a F1
self.F1[2+2*i]=h1
self.F1[3+2*i]=h2
#actualizamos la poblacion
self.F0[:]=self.F1[:]
def decodifica_gen(self,gen):
valor=0
for p in range(-3,4):
valor+=(2**p)*self.gen[4-p]
if self.gen[0] == 1:
valor*=-1
return valor
def compara_genes(self,gen1,gen2):
vg1=self.decodifica_gen(gen1)
vg2=self.decodifica_gen(gen2)
fvg1=self.f(vg1)
fvg2=self.f(vg2)
if fvg1 > fvg2:
return 1
elif fvg1 == fvg2:
return 0
else: #fvg1<fvg2
return -1
suma=float(self.N_genes*(self.N_genes+1))/2.
def elegir(self):
va=random.random()
acc=float(self.N_genes)
for lugar in range(0,self.N_genes):
if va < acc/self.suma:
break
acc+=self.N_genes-lugar-1
return lugar
Archivo Principal.py import Genetico
obj=Genetico.Genetico()
obj.Iniciar()
Conclusiones
Los algoritmos genéticos son una opción eficiente y fácil de implementar para resolver
problemas de optimización.
Los Algoritmos genéticos tienen muchos aspectos configurables que se pueden adaptar a las
características del problema: tipo de mutación, tipo de cruzamiento, técnica de selección,
etc.
Algoritmos Genéticos
Bibliografía
M. Cerrolaza,William Annicchiarico, M Cerrolaza,1996, Algoritmos de Optimización
Estructural Basados en Simulación Genética
Javier Alcaráz Soria, Rubén Ruiz García, Concepción Maroto Álvarez,Javier Alcáraz
Soria,Rubén Ruiz García,2002, Investigación Operativa: Modelos y técnicas de
Optimización