1. Optimizando
programas
con
algoritmos
Optimizando programas con algoritmos gen´ticos
e gen´ticos
e
Algoritmo Gen´tico
e
Implementando . . .
Mauro Parra Miranda Aplicaciones en . . .
mauro@ciencias.unam.mx Recursos utiles
´
Home Page
My brain is open. T´
ıtulo
Paul Erd¨so
http://www.gnulinux.biz/mauro/
Atr´s
a
P´gina 1 de 18
a
Pant. Completa
Cerrar
Salir
2. Optimizando
programas
1. Algoritmo Gen´tico
e con
algoritmos
Un algoritmo gen´tico es un m´todo probabil´
e e ıstico que mantiene gen´ticos
e
1 n
una poblaci´n de individuos Pt = {xt , . . . , xt } para cada iteraci´n
o o
Algoritmo Gen´tico
e
t.
Implementando . . .
Aplicaciones en . . .
Cada individuo representa una soluci´n potencial del problema
o
Recursos utiles
´
que se este resolviendo. Cada soluci´n xi es evaluada de alguna
o t
manera para conocer su desempe˜o con respecto a la poblaci´n
n o
actual. Home Page
T´
ıtulo
Una nueva poblaci´n (la t+1) es generada a trav´s de la selecci´n
o e o
de los individuos mejor adaptados (o sea, las mejores soluciones).
Algunos individuos de la poblaci´n son alterados por algunos oper-
o Atr´s
a
adores, llamados operadores gen´ticos.
e P´gina 2 de 18
a
Pant. Completa
Los operadores gen´ticos m´s usados son la cruza y mutaci´n. La
e a o
Cerrar
cruza consiste en combinar dos soluciones, mientras que la mutaci´n
o
Salir
es alterar ligeramente una soluci´n de manera aleatoria.
o
3. Optimizando
1. Generar poblaci´n Aleatoria (uniformemente distribuida, de pref-
o programas
erencia). con
algoritmos
2. Calificar a los individuos de la poblaci´n
o gen´ticos
e
3. Aplicar los operadores gen´ticos a la poblaci´n actual para
e o
Algoritmo Gen´tico
e
generar una nueva poblaci´n, que sustituir´ a la actual.
o a
Implementando . . .
4. Si el n´mero de generaciones (iteraciones) no es suficiente ´ no
u o Aplicaciones en . . .
se ha llegado a la respuesta Regresar al paso 2. Recursos utiles
´
5. Mostrar las mejores respuestas.
Home Page
Los operadores gen´ticos son aquellas operaciones que nos permiten
e T´
ıtulo
generar a la nueva poblaci´n. Tradicionalmente, se aplican 3:
o
Atr´s
a
Elitismo. Un porcentaje de la poblaci´n actual se translada a
o
P´gina 3 de 18
a
la nueva poblaci´n. Al menos debe de estar el mejor individuo
o
actual, ya que de esa manera no se pierde informaci´n.
o Pant. Completa
Cerrar
Cruza. Con probabilidad pc se combina el genoma de dos indi-
Salir
viduos previamente seleccionados.
4. Optimizando
Mutaci´n. Con probabilidad pm se modifica el genoma de un
o programas
individuo, antes de a˜adirlo a la nueva poblaci´n.
n o con
algoritmos
gen´ticos
e
Obviamente, es com´n aplicar otros operadores, como por ejem-
u
plo: Algoritmo Gen´tico
e
Implementando . . .
Aplicaciones en . . .
1. Generaci´n de algunos individuos nuevos de manera aleatoria.
o
Recursos utiles
´
2. Correcci´n de soluciones (usualmente en problemas de grafi-
o
cas).
Home Page
3. Migraci´n de individuos si es que esta corriendo de forma par-
o T´
ıtulo
alela.
4. Obtenci´n de estadisticas.
o
Atr´s
a
5. Reconfiguraci´n autom´tica de los par´metros.
o a a
P´gina 4 de 18
a
6. ...y m´s.
a Pant. Completa
Cerrar
Salir
5. Optimizando
programas
2. Implementando un algoritmo gen´tico
e con
algoritmos
gen´ticos
e
La parte interesante de un algoritmo gen´tico es que solamente
e
se requiere implementar una sola vez. Realmente lo unico que cam-
´
Algoritmo Gen´tico
e
bia es la codificaci´n del dominio del problema y c´mo evaluar
o o
Implementando . . .
qu´ soluci´n propuesta es mejor (normalmente, con respecto a la
e o
Aplicaciones en . . .
poblaci´n).
o
Recursos utiles
´
Por ejemplo, un problema dif´ de resolver pero f´cil de enten-
ıcil a
der es el problema de 3-SAT. El problema consiste en que tienes Home Page
expresiones como la siguiente: T´
ıtulo
e = (x1 ∨ ¬x3 ∨ x4 ) ∧ (x2 ∨ x6 ∨ x3 ) ∧ . . . ∧ (x1 2 ∨ x1 ∨ x3 )
y tienes que generar una tabla de valores que satisfaga la expresi´n.
o Atr´s
a
En este caso, basta con: P´gina 5 de 18
a
x1 = true, x3 = true Pant. Completa
Cerrar
y lo dem´s puede quedar como se desee.
a Salir
6. Optimizando
El tama˜o del espacio de b´squeda de posibles soluciones esta
n u programas
n con
dado por 2 donde n es el n´mero de variables booleanas que in-
u
tervienen en la expresi´n. Para n = 8, el espacio de b´squeda es
o u algoritmos
de tama˜o 256, mientras que para n = 32 es de 4, 294, 967, 296
n gen´ticos
e
(n = 64; 18, 446, 700, 000, 000, 000, 000) .
Algoritmo Gen´tico
e
Implementando . . .
Aplicaciones en . . .
Recursos utiles
´
Home Page
T´
ıtulo
Atr´s
a
P´gina 6 de 18
a
Pant. Completa
Cerrar
Salir
7. Optimizando
En este problema, es sencillo generar soluciones: programas
con
algoritmos
public class Individuo{ gen´ticos
e
BitSet genotype;
Algoritmo Gen´tico
e
...
Individuo(int size){ Implementando . . .
Random rnd = Aplicaciones en . . .
new Random(java.util.Calendar.getTimeInMillis()); Recursos utiles
´
genotype = new BitSet(size);
for(int i = 0; i < size; i++){ Home Page
if(rnd.nextDouble() > 0.5) T´
ıtulo
genotype.set(i);
}
} ...
Atr´s
a
}
P´gina 7 de 18
a
Pant. Completa
Cerrar
Salir
8. Optimizando
Cada bit corresponde al valor de cada variable booleana xi : programas
con
genotype.get(i) == xi algoritmos
gen´ticos
e
Una de las formas de evaluar la soluci´n es la siguiente:
o Algoritmo Gen´tico
e
Implementando . . .
counter = 1 Aplicaciones en . . .
Recursos utiles
´
Revisar si cada subexpresi´n de tipo:
o
(xi ∨ xj ∨ xk ) Home Page
T´
ıtulo
es verdadera seg´n el genotipo. En tal caso, counter + +.
u
Al terminar, obtener como medida de desempe˜o a
n
counter Atr´s
a
f=
total de subexpresiones P´gina 8 de 18
a
Pant. Completa
Cerrar
Salir
9. Optimizando
En tal caso, dara un valor de 0,5 cuando tengas la mitad de las programas
subexpresiones resueltas y un valor de 1 cuando hayas resuelto el con
problema. algoritmos
gen´ticos
e
Seleccionamos un par de individuos de la poblaci´n, que seran
o
Algoritmo Gen´tico
e
en los que aplicaremos los operadores geneticos.
Implementando . . .
Aplicaciones en . . .
La forma cl´sica de seleccionar un par de individuos es la selecci´n
a o
Recursos utiles
´
de ruleta, esto es, tal como en los concursos de la televisi´n, tenemos
o
una ruleta dividida acorde con el desempe˜o de cada individuo y
n
luego le damos un par de vueltas para ver a qui´n escogeremos. En
e Home Page
c´digo:
o T´
ıtulo
Atr´s
a
P´gina 9 de 18
a
Pant. Completa
Cerrar
Salir
10. Optimizando
programas
public class Poblation{ con
private Individuo population[]; algoritmos
... gen´ticos
e
public Individuo select(){
Algoritmo Gen´tico
e
double sum = 0.0, tope=0.0, suma=0.0;
Implementando . . .
for(int i=0; i<population.length; i++)
sum+=population[i].getFitness(); Aplicaciones en . . .
tope = rnd.nextDouble()*sum; Recursos utiles
´
for(int i = 0; i<population.length; i++){
suma+=population[i].getFitness(); Home Page
if (suma>=tope)
T´
ıtulo
return population[i];
}
}
Atr´s
a
...
P´gina 10 de 18
a
}
Pant. Completa
Cerrar
Lo cual nos regresa un individuo al azar. Cuando tengamos dos,
Salir
11. Optimizando
podemos aplicar los operadores gen´ticos. Tradicionalmente se apli-
e programas
can tres: elitismo, cruza y mutaci´n.
o con
algoritmos
public class Poblation{ gen´ticos
e
...
public Individuo[] elitism(double percent){ Algoritmo Gen´tico
e
int number = (int)(this.getSize()*percent); Implementando . . .
Individuo arr[]; Aplicaciones en . . .
arr = new Individuo[number]; Recursos utiles
´
this.sort();
for(int i = 0; i<number; i++){ Home Page
arr[i] = population[i];
T´
ıtulo
}
return arr;
}
Atr´s
a
...
P´gina 11 de 18
a
}
Pant. Completa
Cerrar
Salir
12. Optimizando
programas
public class Individuo{ con
... algoritmos
public Individuo crossover(Individuo e, double pc){ gen´ticos
e
Individuo n;
Algoritmo Gen´tico
e
BitSet nbs = this.getGenome();
Implementando . . .
BitSet obs = e.getGenome();
Aplicaciones en . . .
if(rnd.nextDouble()<pc){
Recursos utiles
´
for(int i = (nbs.length()/2); i<nbs.length(); i++){
nbs.set(i, obs.get(i));
} Home Page
} T´
ıtulo
n = new Individuo(nbs);
return n;
} Atr´s
a
... P´gina 12 de 18
a
}
Pant. Completa
Cerrar
Salir
13. Optimizando
programas
public class Individuo{ con
... algoritmos
public Individuo mutate(double pm){ gen´ticos
e
Individuo n;
Algoritmo Gen´tico
e
BitSet bs = this.getGenome();
Implementando . . .
for(int i = 0; i<bs.length(); i++){
Aplicaciones en . . .
if (rnd.nextDouble()<pm){
Recursos utiles
´
bs.flip(i);
}
} Home Page
n = new Individuo(bs); T´
ıtulo
return n;
}
... Atr´s
a
} P´gina 13 de 18
a
Pant. Completa
Notese que el plan aqu´ es explotar (elitismo, cruza) el conocimien-
ı Cerrar
to adquirido y explorar (mutaci´n) el espacio de posibles soluciones.
o Salir
14. Optimizando
Un algoritmo gen´tico es f´cilmente paralelizable. En ocasiones,
e a programas
las funciones de evaluaci´n de desempe˜o podr´ requerir mucho
o n ıan con
tiempo para ser evaluadas, por lo que se asigna un individuo por algoritmos
procesador disponible. gen´ticos
e
Algoritmo Gen´tico
e
Implementando . . .
Aplicaciones en . . .
Recursos utiles
´
Home Page
T´
ıtulo
Atr´s
a
P´gina 14 de 18
a
Pant. Completa
Cerrar
Salir
15. Optimizando
programas
3. Aplicaciones en Software con
algoritmos
1. Creaci´n de horarios (sin colisiones)
o
gen´ticos
e
2. An´lisis Financiero (Explotando el an´lisis t´cnico)
a a e
Algoritmo Gen´tico
e
3. Solucionar ecuaciones diferenciales ordinarias (¿sin dolor?)
Implementando . . .
4. Dise˜o de robots (Basilisc)
n Aplicaciones en . . .
Recursos utiles
´
5. Descubrimiento de estrategias para Teor´ de juegos (El dilema
ıa
del prisionero, Oligopolios)
Home Page
6. Adaptando lineas de producci´n
o
T´
ıtulo
7. Generar m´sica
u
8. Optimizando el dise˜o de PCBs (Printed Circuit Boards, usando
n
TSP) Atr´s
a
P´gina 15 de 18
a
9. Optimizando el dise˜o de procesadores (usando TSP: Travelling
n
Salesman Problem) Pant. Completa
Cerrar
10. Control de tr´fico a´reo
a e Salir
16. Optimizando
11. Creaci´n de rutas de repartici´n optimas (gr´ficas planas!)
o o a programas
con
12. Creaci´n de algoritmos para mantener la consistencia del color
o algoritmos
en retinas artificiales. gen´ticos
e
Algoritmo Gen´tico
e
Implementando . . .
Aplicaciones en . . .
Recursos utiles
´
Home Page
T´
ıtulo
Atr´s
a
P´gina 16 de 18
a
Pant. Completa
Cerrar
Salir
17. Optimizando
programas
4. Recursos utiles
´ con
algoritmos
http://www.gnulinux.biz/mauro/
gen´ticos
e
“Genetic Algorithms + Data Structures = Evolution Programs”.
Zbigniew Michalewicz. Springer. Algoritmo Gen´tico
e
Implementando . . .
“Evolutionary Programming IV”. John R. McDonnell, et al.
Aplicaciones en . . .
MIT Press.
Recursos utiles
´
“Evolutionary Programming V”. Lawrence J. Fogel, et al. MIT
Press. Home Page
“Applications of Evolutionary Computing”. Egbert Boers, et al. T´
ıtulo
Springer.
“Genetic Programming”. Julian Miller, et al. Springer.
Atr´s
a
The Genetic Algorithms archive. P´gina 17 de 18
a
http://www.aic.nrl.navy.mil/galist/
Pant. Completa
Basilisc. Cerrar
http://ganso5.fi-b.unam.mx/basilisc/basilisc.html Salir
18. Optimizando
Genetic Algorithms Warehouse. programas
http://geneticalgorithms.ai-depot.com/Applications.html con
algoritmos
Adaptaci´n de lineas de producci´n.
o o gen´ticos
e
http://www.ici.ro/ici/revista/sic2000 4/art01.htm
Algoritmo Gen´tico
e
“A grammar based Genetic Programming technique applied to
music generation”. Jeffrey Putnam. jefu@nmt.edu Implementando . . .
Aplicaciones en . . .
GaLib
Recursos utiles
´
http://lancet.mit.edu/ga/
Genetic Programming Home Page
http://www.genetic-programming.org/ T´
ıtulo
“Software that writes software”. Alexis Willihnganz.
http://www.genetic-programming.com/published/Salon081099.html
Atr´s
a
P´gina 18 de 18
a
Pant. Completa
Cerrar
Salir