Você está na página 1de 74

FORMULACIN DE UN ALGORITMO GENTICO PARA EL

PROBLEMA DE PROGRAMACIN DE RDENES DE TRABAJO


DE UNA EMPRESA DE ARTES GRFICAS

PROYECTO DE GRADO

Javier mauricio gamboa salgado


Cdigo: 544004

John alexander gmez marulanda


Cdigo: 553019

FUNDACIN UNIVERSITARIA KONRAD LORENZ


FACULTAD DE INGENIERA
IX SEMESTRE DE INGENIERA DE SISTEMAS
BOGOT

1
FORMULACIN DE UN ALGORITMO GENTICO PARA EL
PROBLEMA DE PROGRAMACIN DE RDENES DE TRABAJO
DE UNA EMPRESA DE ARTES GRFICAS

PROYECTO DE GRADO

JOHN ALEXANDER GMEZ MARULANDA


Cdigo: 553019

JAVIER MAURICIO GAMBOA SALGADO


Cdigo: 544004

Proyecto investigativo para optar al ttulo de Ingeniero de Sistemas

Director de proyecto de grado


Ingeniero JUAN CARLOS GALEANO HUERTAS

FUNDACIN UNIVERSITARIA KONRAD LORENZ


FACULTAD DE INGENIERA
IX SEMESTRE DE INGENIERA DE SISTEMAS
BOGOT

2
NOTA DE ACEPTACIN

_____________________________________________

_____________________________________________

_____________________________________________

_____________________________________________

_____________________________________________

_____________________________________________

_____________________________________________

_______________________________
Presidente del Jurado

_______________________________
Jurado

_______________________________
Jurado

3
A los futuros individuos Konradistas.

4
AGRADECIMIENTOS

A mi familia, especialmente a mis padres, Enrique y Clara, y a mi esposa, Carolina,


por la compresin y aliento inagotables.

Javier Gamboa

A Dios porque en l est mi vida, a mi esposa, Heidi, porque sin ella no habra
empezado esta parte del camino que hoy culmina y a mi hijo, Jiordie, porque en l
retomo fuerzas.

Alexander Gmez

5
CONTENIDO

Pg.

1 EXISTE UN PROBLEMA..............................................................................14
1.1 DEFINICIN DE ENTRADAS DEL PROBLEMA .........................................15
1.1.1 Orden de Produccin. ..................................................................15
1.1.2 Proceso. .....................................................................................16
1.1.3 Centro de Produccin. .................................................................16
1.1.4 Orden de Trabajo ........................................................................17
1.2 CUAL ES LA PROPUESTA PARA SOLUCIONARLO? .................................19
2 PARA COMENZAR CON ALGORITMOS GENTICOS ......................................22
2.1 QU SON LOS ALGORITMOS GENTICOS? ..........................................22
2.2 DESCRIPCIN DEL FUNCIONAMIENTO DE LOS AG ................................23
2.2.1 Problema de optimizacin ............................................................24
3 MODELAMIENTO DEL ALGORITMO GENETICO............................................39
3.1 TRABAJOS REALIZADOS ......................................................................39
3.1.1 Programacin de tienda abierta. ...................................................39
3.1.2 Programacin de produccin ........................................................39
3.1.3 Secuenciacin dinmica ...............................................................40
3.2 DEFINICIONES PROPIAS DEL ALGORITMO GENTICO ...........................40
3.2.1 Individuos ..................................................................................41
3.2.2 Cromosomas...............................................................................41
3.2.3 Alelos .........................................................................................41
3.3 GENERACIN DE LA POBLACIN INICIAL .............................................42
3.4 PROCESO DE SELECCIN ....................................................................43
3.5 PROCESO DE CRUCE ...........................................................................43
3.6 PROCESO DE MUTACIN ....................................................................45
3.7 DEFINICIN DE LA FUNCIN DE EVALUACIN (FITNESS) .....................46
3.7.1 Cumplimiento (C ) .......................................................................46
3.7.2 Colisiones (T ) ............................................................................46
3.7.3 Ocupacin de centros de produccin (P ) ......................................46
3.8 FUNCIN DE EVALUACIN (FITNESS) ..................................................47
4 EVALUACIN DE PROTOTIPOS ..................................................................48
4.1 CONDICIONES PARA LA GENERACIN DE PROTOTIPOS ........................48
4.1.1 Datos de trabajo .........................................................................48
4.1.2 Proceso de seleccin ...................................................................48
4.1.3 Probabilidades de cruce y mutacin ..............................................49
4.2 PROTOTIPO 01 ...................................................................................49
4.2.1 Condiciones del algoritmo. ...........................................................49
4.2.2 Resultados del prototipo 01 .........................................................50

6
4.2.3 Anlisis de la situacin en el prototipo 01. .....................................50
4.2.4 Acciones para el siguiente prototipo..............................................51
4.2.5 Consideraciones para tener en cuenta en el prximo prototipo. .......51
4.3 PROTOTIPO 02 ...................................................................................52
4.3.1 Condiciones del algoritmo. ...........................................................52
4.3.2 Resultados del prototipo 02 .........................................................52
4.3.3 Anlisis de la situacin en el prototipo 02. .....................................53
4.3.4 Acciones para el siguiente prototipo..............................................53
4.4 PROTOTIPO 03 ...................................................................................54
4.4.1 Condiciones del algoritmo. ...........................................................54
4.4.2 Resultados del prototipo 03. ........................................................54
4.4.3 Anlisis de la situacin en el prototipo 03. .....................................55
4.4.4 Acciones para el siguiente prototipo..............................................55
4.5 PROTOTIPO 04 ...................................................................................56
4.5.1 Condiciones del algoritmo. ...........................................................56
4.5.2 Resultados del prototipo 04. ........................................................57
4.5.3 Anlisis de la situacin en el prototipo 04. .....................................58
4.5.4 Acciones para el siguiente prototipo..............................................59
4.6 PROTOTIPO 05 ...................................................................................59
4.6.1 Condiciones del algoritmo. ...........................................................59
4.6.2 Resultados del prototipo 05. ........................................................60
4.6.3 Anlisis de la situacin en el prototipo 05. .....................................60
4.6.4 Acciones para el siguiente prototipo..............................................61
4.7 COMPARACIN DEL PROTOTIPO 05 .....................................................61
5 EVALUACIN Y COMPARACIN DE RESULTADOS .......................................63
5.1 TIEMPO DE EJECUCIN ......................................................................65
5.1.1 Comparacin en tiempo de ejecucin. ...........................................65
5.2 MEJOR INDIVIDUO .............................................................................66
5.2.1 Comparacin del mejor individuo. .................................................66
5.3 PROMEDIO DE EVALUACIN ...............................................................67
5.4 GENERACIN MEJOR INDIVIDUO ........................................................68
5.5 CUMPLIMIENTO ..................................................................................69
5.5.1 Comparacin del cumplimiento .....................................................69
5.6 COLISIONES.......................................................................................70
5.6.1 Evaluacin de las colisiones. ........................................................70
6 CONCLUSIONES .......................................................................................71
7 SUGERENCIAS .........................................................................................73
8 REFERENCIAS ..........................................................................................74

7
8
LISTA DE ILUSTRACIONES

Pg.

Ilustracin 1 - Pasos para solucionar analticamente el problema de programacin


de planta de produccin ..................................................................................20
Ilustracin 2 - Esquema general del funcionamiento de un AG ...........................23
Ilustracin 3 - Grfica de la funcin a optimizar.................................................24
Ilustracin 4 - Modelo general del AG propuesto ...............................................40
Ilustracin 5 Vista previa de la ejecucin del prototipo 01 ...............................50
Ilustracin 6 Vista previa de la ejecucin del prototipo 02 ...............................52
Ilustracin 7 - Vista previa de la ejecucin del prototipo 04 ................................57
Ilustracin 8 - Vista previa de la tabla de resultados obtenida en la ejecucin del
prototipo 04 ...................................................................................................58
Ilustracin 9 - Vista previa de la ejecucin del prototipo 05 ................................60

9
10
RESUMEN

En el desarrollo del presente trabajo se propone generar una solucin al problema


de programacin de planta de produccin mediante la utilizacin de algoritmos
genticos, usndolos como tcnica que permita no slo cubrir las necesidades que
ya abordan soluciones analticas sino ir mas all proponiendo una nueva
organizacin de los recursos y de los trabajos a realizar, y permitiendo a travs de
ellos explorar al mximo el universo de posibilidades que se pueden presentar para
solucionarlo. Se plantea un enfoque prctico que gua al lector por la
conceptualizacin y el modelamiento de un algoritmo gentico elemental, para
luego proponer un modelo que represente una solucin del problema planteado.

11
INTRODUCCION

Procesar alrededor de trescientos pedidos diarios de clientes que necesitan cada


uno el suyo sin retraso, cada pedido con una serie de pasos que deben ser
ejecutados minuciosamente para cumplir con los requerimientos exigidos,
contando slo con noventa mquinas para llevar a cabo los procesos, es una tarea
que de entrada suena titnica.

Adicionalmente, si a lo anterior se agrega que las tareas deben ser ejecutadas en


un orden especfico, que dependen en cierta proporcin de la mano de obra y que
da a da estn llegando nuevos pedidos de clientes que exigen el mismo
cumplimiento y una excelente calidad, el procesamiento de los pedidos se
convierte en una tarea bastante compleja.

Durante mucho tiempo se han solucionado estos y otros problemas de igual o


mayor envergadura realizando anlisis complejos o aplicando una metodologa que
pocas personas se atreven a modificar y mucho menos tratan de cuestionar la
idoneidad o la obtencin de una mejor solucin. Un escenario bastante
desalentador se vislumbra cuando se verifica que obtener una solucin a estos
problemas puede demandar grandes cantidades de tiempo y recursos tanto
tcnicos como humanos.

Es por esto que se realiza un algoritmo gentico que pueda ser utilizado en la
programacin de planta de produccin de una empresa de artes grficas. En el
desempeo de esta labor, es necesario realizar una representacin vlida de los
elementos que componen el problema y una funcin que permita evaluar cada una
de las soluciones obtenidas. De igual forma, es prioritario evaluar la calidad de las
soluciones obtenidas respecto a la utilizada en una empresa del sector productivo
objeto del presente trabajo.

12
El anterior panorama, plantea entonces la utilizacin de la tecnologa representada
en elementos de hardware y software como una herramienta para modelar este
tipo de procesos complejos, de modo que sus resultados puedan llegar a ser tan
confiables, que la administracin y organizacin de los recursos de produccin se
puedan dejar prcticamente en sus manos.

13
1 EXISTE UN PROBLEMA1

El sector manufacturero transforma materias primas en productos mediante la


ejecucin de procesos manuales o automticos. De este sector se divide un grupo
de empresas que se dedican a elaborar productos a la medida de las necesidades,
es decir, las especificaciones, materias primas a utilizar y condiciones entre otras
caractersticas son definidas por el cliente, lo que hace que cada producto sea
totalmente nuevo a la hora de producirlo; las empresas de artes grficas se
encuentran en este grupo.

Al no tener productos que se elaboren de la misma forma y en cantidades


regulares, es necesario hacer una programacin dinmica de la planta de
produccin en la cual se asegure el cumplimiento de los compromisos adquiridos
con el cliente.

Esta programacin debe tener en cuenta todos los procesos que se deben ejecutar
para terminar la elaboracin de un producto, los tiempos que se toma para
terminar cada proceso, la complejidad del mismo a la hora de ejecutarlo y el
proceso que debe estar terminado antes de poder empezar uno nuevo.

El problema consiste en hacer la programacin de la planta de produccin de una


empresa de artes grficas considerando las situaciones expresadas anteriormente,
permitiendo optimizar los recursos que se utilizan para la ejecucin de los procesos
y cumpliendo los compromisos adquiridos.

1
La informacin de este captulo es obtenida a partir de la experiencia de los autores en el sector
manufacturero, especficamente en empresas de artes grficas.

14
1.1 DEFINICIN DE ENTRADAS DEL PROBLEMA

Es de vital importancia realizar una buena definicin de las entradas que influyen
en su problema, dado que con base en ellas se desarrollar el proceso que
intentar solucionar el problema especfico. Para este problema se definen las
variables especificadas a continuacin.

1.1.1 Orden de Produccin.

La orden de produccin (OP) corresponde a la orden que el rea de ingeniera de


producto o planeacin hace a la planta de produccin, en la cual consigna todas
las especificaciones tcnicas necesarias para llevar a cabo la produccin del
producto segn lo acordado previamente con el cliente. Adicionalmente, en la OP
se ingresan los datos correspondientes a cantidades, fechas de entrega,
condiciones de negociacin y aspectos tcnicos adicionales de relevancia para el
proceso productivo.

De acuerdo a lo anterior y segn el conocimiento y la experiencia de la industria


grfica y manufacturera, el rea de ingeniera de producto o planeacin plasma en
la orden de produccin la respuesta a las preguntas: qu se hace? y cmo se
hace?

1.1.1.1 Caractersticas de la orden de produccin.

A continuacin se presentan las caractersticas de la orden de produccin que se


tendrn en cuenta para el desarrollo del algoritmo propuesto.

Cantidad: Es la cantidad de ejemplares o productos completos que la


planta de produccin debe elaborar.
Fecha de entrega: La fecha de entrega corresponde al da en que se debe
terminar de procesar la orden de produccin en la planta para preparar la
entrega del producto terminado al cliente.

15
1.1.2 Proceso.

Es la accin o actividad que se ejecuta durante el proceso productivo sobre una


orden de produccin o parte de ella, en consecuencia, el proceso siempre es
ejecutado por un centro de produccin.

En cualquier planta de produccin un proceso debe poder ser ejecutado por al


menos un centro de produccin, sin importar si la accin se desempea de forma
manual o automtica.

1.1.2.1 Caractersticas del proceso.

A continuacin se presentarn las caractersticas del proceso que se tendrn en


cuenta para el desarrollo del algoritmo propuesto.

Predecesor: Esta caracterstica es de vital importancia para la


programacin de la planta de produccin ya que corresponde al proceso
que debe ser ejecutado antes de realizarse el proceso actual. Para este
trabajo se define que un proceso slo puede tener un predecesor, aunque
no necesariamente deba tener uno.

1.1.3 Centro de Produccin.

Como centro de produccin (CP) puede catalogarse el lugar especfico en el que se


desarrolla uno o ms procesos. La naturaleza de los CP est dada por la forma
como se llevan a cabo las actividades dentro de l. Por lo tanto pueden ser de tipo
manual, que corresponde a una persona o grupo de ellas que se dedica a realizar
actividades manuales sobre una orden de produccin o automtico en el que una
mquina ejecuta acciones o actividades sobre una orden de produccin.

Con base en los anteriores conceptos, se puede concluir que el CP es la mquina,


persona o grupo de personas que ejecutan una serie de procesos sobre la orden

16
de produccin para lo cual pueden consumir o transformar una materia prima
determinada.

Un CP debe ejecutar una serie de procesos secuencialmente. Sin embargo, si un


centro de produccin ejecuta dos procesos simultneamente sobre una OP, stos
deben ser agrupados y nombrados como uno solo para que se puedan llevar a la
programacin en la planta.

1.1.3.1 Caractersticas del centro de produccin.

A continuacin se presentarn las caractersticas del centro de produccin que se


tendrn en cuenta para el desarrollo del algoritmo propuesto.

Disponibilidad: Es una variable sumamente importante para la


programacin de la planta ya que expresa el tiempo en horas al da que el
centro de produccin est disponible para ejecutar los procesos.
Procesos que ejecuta: Esta es una lista de los procesos que pueden ser
ejecutados en el centro de produccin. En cada uno de los procesos se debe
especificar su rendimiento.
Rendimiento por proceso: Corresponde a la cantidad de unidades que el
centro de produccin puede hacer por hora ejecutando un proceso
determinado.

1.1.4 Orden de Trabajo

La orden de trabajo (OT) es la especificacin tcnica en cuanto a la ejecucin de


los procesos, los tiempos en que deben ser ejecutados y las cantidades que deben
salir al fin de la ejecucin.

Una orden de trabajo corresponde a un solo centro de produccin y a un nico


proceso a ser ejecutado en dicho centro, por lo tanto se crean tantas rdenes de
trabajo por orden de produccin como procesos se empleen para realizarla.

17
Las rdenes de trabajo se crean de acuerdo a la explosin de procesos que se
hace en la ingeniera de producto o planeacin.

1.1.4.1 Caractersticas de la orden de trabajo.

A continuacin se presentarn las caractersticas de la orden de trabajo que se


tendrn en cuenta para el desarrollo del algoritmo propuesto.

Orden de produccin: Orden de produccin a la cual pertenece la orden


de trabajo.
Proceso: Identifica el proceso que se debe ejecutar en la orden de trabajo.
Centro de produccin: As como el proceso, esta caracterstica identifica
el centro de produccin que ejecutar el proceso correspondiente.
Prioridad: La prioridad es puesta por defecto desde ingeniera de producto
o planeacin con el mismo nivel para todas las rdenes de trabajo nuevas,
sin embargo, el programador de la planta de produccin puede modificar la
prioridad en caso de que se deba ejecutar una orden de trabajo en cierto
orden especfico, dando una prioridad mayor a esta en el proceso de
programacin.
Cantidad: Contrario a lo que se puede pensar, la cantidad de la OT no
siempre corresponde a la cantidad de la orden de produccin. Con mayor
exactitud, en la OT la cantidad refleja el nmero de unidades que se deben
procesar. En la mayora de los procesos, la cantidad a ejecutar es mayor a
la cantidad de la orden de produccin, dado que se agregan desperdicios o
en algunos casos de acuerdo al proceso, este se debe ejecutar dos o ms
veces.
Se debe aclarar que esta cantidad es determinada por el proceso de
ingeniera de producto o planeacin de la orden de produccin.
Eficiencia: Corresponde a la eficiencia con que el centro de produccin
ejecuta un proceso en una orden de trabajo determinada, por defecto, la

18
eficiencia es definida en planeacin, pero igualmente el programador puede
cambiar la eficiencia de acuerdo a las condiciones fsicas del trabajo a
realizar.
Tiempo: De acuerdo al rendimiento que tiene el centro de produccin
configurado para ejecutar un proceso, a la cantidad que se debe ejecutar y
a la eficiencia con que est configurada la orden de trabajo, se calcula el
tiempo que se va a tardar para procesar la cantidad requerida. Esta
caracterstica se ingresa durante el proceso de programacin ya que es all
cuando se conoce el tiempo de ejecucin.
Fecha de inicio: De acuerdo al proceso de programacin esta variable es
calculada y corresponde a la fecha y hora en que el centro de produccin
debe empezar a procesar la orden de trabajo.
Fecha final: Es el resultado de sumar a la fecha de inicio de ejecucin del
proceso, el tiempo que se tarda en realizarse el mismo, es decir,
corresponde a la fecha y hora en que el centro de produccin debe finalizar
la ejecucin de la orden de trabajo.

1.2 CUAL ES LA PROPUESTA PARA SOLUCIONARLO?

La ilustracin 1 muestra la forma analtica de solucionar el problema, tal y como se


hace en varias empresas de artes grficas:

19
Ilustracin 1 - Pasos para solucionar analticamente el problema de programacin de planta de produccin

En las soluciones analticas del problema, resulta bastante complicado agregar


variables de decisin, tales como dividir el trabajo para que sea ejecutado
paralelamente, o ejecutar el trabajo utilizando un recurso ms eficiente o por lo
menos diferente al inicialmente configurado.

20
De igual forma, cuando el nmero de rdenes de produccin crece o se introducen
nuevas variables, hacer el anlisis se vuelve una tarea dispendiosa y complicada.

Debido al anterior panorama, se propone dar solucin al problema mediante la


utilizacin de la tcnica de algoritmos genticos.

21
2 PARA COMENZAR CON ALGORITMOS GENTICOS

2.1 QU SON LOS ALGORITMOS GENTICOS?

Los algoritmos genticos (AG) son mtodos utilizados para resolver problemas
complejos de bsqueda y optimizacin, inspirados en la naturaleza y
especficamente en el proceso evolutivo de los seres vivos.

Segn Charles Darwin [7], 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 aptos. El medio ambiente ejerce una presin sobre las
especies de tal forma que algunos individuos sobreviven y otros no. Aquellos seres
que sobreviven tienen la oportunidad de reproducirse y al hacerlo se dice que sus
caractersticas pasan a la siguiente generacin. Estas caractersticas son
transmitidas por los padres a sus hijos a travs de los genes.

Por imitacin de este proceso, los AG 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 evaluacin de las
mismas.

Goldberg en [1] define los algoritmos genticos de la siguiente manera. Los


algoritmos genticos, AG, con algoritmos de bsqueda basados en mecanismos de
seleccin y de gentica natural. Ellos combinan la ley del ms fuerte entre
estructuras de cadenas con intercambio de informacin estructurada y aleatoria
para formar un algoritmo de bsqueda con algunas de las innovadoras bondades
de la bsqueda humana. En cada generacin, es creado un nuevo conjunto de
criaturas artificiales usando bits y partes de los ms fuertes de las anteriores

22
generaciones; una nueva parte opcional es asumida para una buena medida.
Mientras combinan, los AG no son una simple ruta aleatoria. Ellos eficientemente
explotan la informacin histrica para especular en nuevos puntos de bsqueda
con una mejora esperada en la ejecucin.

2.2 DESCRIPCIN DEL FUNCIONAMIENTO DE LOS AG

De acuerdo a lo planteado en [2], es posible observar el esquema general del


funcionamiento de un algoritmo gentico a travs de la ilustracin 2.

Ilustracin 2 - Esquema general del funcionamiento de un AG

23
Cada uno de los elementos, operadores y procesos que componen un AG son
ilustrados a continuacin mediante un ejemplo prctico.

2.2.1 Problema de optimizacin

En [2] se encuentra el siguiente problema en el cual se desea maximizar la


siguiente funcin:

Ilustracin 3 - Grfica de la funcin a optimizar

Como parmetros iniciales se asignan los siguientes intervalos de las variables para
reducir el espacio de bsqueda de solucin:

24
2.2.1.1 Representacin del problema

La representacin del problema es el proceso que permite establecer la forma


como un dato va a ser procesado a travs del algoritmo. Para describir mejor esta
etapa es necesario utilizar los conceptos de genotipo y fenotipo. El genotipo es la
forma utilizada para representar las caractersticas de un elemento, mientras que
el fenotipo es el conjunto de caractersticas de ese organismo.

Para este caso se decide representar el problema en cadenas binarias. La longitud


de cada cadena depende de la precisin requerida en la solucin. Por ejemplo, el
dominio de la variable xj es [aj , bj] y la precisin requerida es de cinco posiciones
decimales despus del punto. Este parmetro de precisin implica que el rango de
dominio de cada variable debera estar dividida en por lo menos (bj - aj) x 105
tamaos. Los bits requeridos (mj ) para una variable se calcula como se muestra a
continuacin:

Una representacin de una cadena binaria para un nmero real de la variable xj


es:

donde representa el valor decimal de .

Si se supone que la precisin se estima en cinco posiciones despus del punto


decimal, los bits requeridos para las variables x1 y x2 se calculan as:

Para x1:

25
Para x2:

Por lo tanto la longitud del cromosoma es de 33 bits y se representa de la


siguiente forma:

33 bits

18 bits 15 bits

Para ver la representacin de las variables x1 y x2 , los valores correspondientes de


las mismas y su conversin a nmeros reales, estn dados los siguientes
procedimientos:

Variable Cadena binaria Nmero decimal

26
x1

x2

2.2.1.2 Poblacin inicial

Una poblacin es una representacin abstracta de un segmento o conjunto de


individuos. Para el caso especfico de los AG, existe una serie de poblaciones que
se van generando en la medida en que el algoritmo se ejecuta. La poblacin inicial
es aquella que se toma como base para iniciar el proceso evolutivo. Con el paso
del tiempo, se espera que los individuos de las nuevas generaciones tengan genes
o caractersticas de los mejores individuos de las poblaciones anteriores.

Para el ejemplo, la poblacin inicial consta de diez (10) individuos generados de


forma aleatoria tal y como se muestra a continuacin:

donde sus respectivos valores reales son:

27
2.2.1.3 Evaluacin

La evaluacin es el proceso que permite determinar el valor de un individuo dada


una funcin de comparacin denominada funcin de evaluacin.

La definicin acertada de la funcin de evaluacin es uno de los elementos


cruciales en el comportamiento de los AG. Idealmente interesa construir funciones
objetivo con ciertas regularidades en cuanto a su comportamiento, es decir,
funciones objetivo que verifiquen que para dos individuos que se encuentren
cercanos en el espacio de bsqueda, sus respectivos valores en las funciones
objetivo sean similares.

Un problema habitual en las ejecuciones de los AG surge debido a la velocidad con


la que el algoritmo converge, es decir, el tiempo que tarda el algoritmo en
estabilizar los valores de evaluacin. En algunos casos la convergencia es muy
rpida, lo que suele denominarse convergencia prematura, en la cual el algoritmo
converge hacia ptimos locales, mientras que en otros pasos el problema es justo
el contrario, es decir se produce una convergencia lenta del algoritmo. Una posible
solucin a estos problemas pasa por efectuar transformaciones en la funcin
objetivo.

El proceso de evaluacin de un cromosoma consiste en los siguientes tres pasos:

28
Convertir el genotipo del cromosoma a su fenotipo. En otras palabras, esto
significa convertir la cadena de caracteres a sus valores reales.

Evaluar la funcin objetivo con los valores anteriormente obtenidos.

Convertir el valor de la funcin objetivo en un valor valido para realizar una


evaluacin y una posterior comparacin. En el caso de este ejercicio, cabe
anotar que se utiliza como funcin de evaluacin la misma funcin objetivo.

Los valores de evaluacin de cada cromosoma se muestran a continuacin:

19.805119
17.370896
9.590546
29.406122
15.686091
11.900541
17.958717
19.763190
26.401669
10.252480

De acuerdo a la anterior evaluacin es simple ver que el cromosoma v4 es el ms


fuerte, mientras que el cromosoma v3 es el ms dbil.

2.2.1.4 Seleccin

La seleccin es la encargada de transmitir y conservar aquellas caractersticas de


las soluciones que se consideran valiosas a lo largo de las generaciones. Existen
diversos mtodos de seleccin dentro de los ms usados estn la seleccin por
ruleta y por torneo. En la ruleta, la probabilidad que tiene un individuo de

29
reproducirse es proporcional a su valor de funcin de evaluacin, es decir, a su
adaptacin.

Si consideramos la poblacin Q que consta de n individuos y a fi como el valor de


evaluacin de un individuo i que es miembro de Q, la probabilidad pi de seleccionar
un individuo i, est dada por:

La seleccin por torneo reporta un valor computacional muy bajo debido a su


sencillez. Se selecciona un grupo de t individuos (normalmente t = 2, torneo
binario) y se genera un nmero aleatorio entre 0 y 1. Si este nmero es menor
que un cierto umbral K (usualmente K = 0,75), se selecciona para reproducirse al
individuo con mejor adaptacin, y si este nmero es menor que K, se selecciona,
por el contrario, al individuo con peor adaptacin.

En la mayora de casos, es adoptada la rueda de ruleta como mtodo de seleccin;


con esto se logra una seleccin proporcional de la evaluacin y se puede
seleccionar una nueva poblacin con respecto a la distribucin de probabilidad
basada en los valores de evaluacin. Para el ejemplo, la rueda de ruleta puede ser
construida de la siguiente forma:

Calcular los valores de evaluacin eval(vk) de cada cromosoma vk.

Calcular la evaluacin total de la poblacin.

30
Calcular la probabilidad de seleccin pk de cada cromosoma vk.

Calcular la probabilidad de seleccin acumulada qk para cada cromosoma vk.

El proceso de seleccin inicial lanzando la rueda de ruleta n veces, donde n es


igual al tamao de la poblacin; cada vez que se lance la ruleta, un cromosoma
simple es seleccionado para una nueva poblacin de la siguiente forma:

Generar un nmero aleatorio r dentro del rango [0, 1].


Si , entonces se selecciona el cromosoma v1; en caso contrario se

selecciona el kesimo cromosoma tal que

La evaluacin total de la poblacin es:

La probabilidad de seleccin pk para cada cromosoma vk(k=1,2,,10) es la


siguiente:

p1 = 0.111180 p2 = 0.097515 p3 = 0.053839 p4 = 0.165077

p5 = 0.088057 p6 = 0.066806 p7 = 0.100815 p8 = 0.110945

p9 = 0.148211 p10 = 0.057554

31
La probabilidad de seleccin acumulada qk para cada cromosoma vk(k=1,2,,10)
es la siguiente:

q1 = 0.111180 q2 = 0.208695 q3 = 0.262534 q4 = 0.427611

q5 = 0.515668 q6 = 0.582475 q7 = 0.683290 q8 = 0.794234

q9 = 0.942446 q10 = 1.000000

Ahora se lanza diez veces la rueda de ruleta, y con cada lanzamiento se selecciona
un cromosoma simple para la nueva poblacin. Una secuencia aleatoria de diez
nmeros entre el rango [0,1] se muestra a continuacin:

0.301431 0.322062 0.766503 0.881893 0.350871

0.583392 0.177618 0.343242 0.032685 0.197577

El primer nmero aleatorio r1 = 0.301431 es ms grande que la probabilidad


acumulada q3 y es ms pequeo que q4, lo que significa que el cromosoma v4 es
seleccionado para la nueva poblacin; el segundo nmero aleatorio r2 = 0.322062
es ms grande que q3 y es ms pequeo que q4, con lo cual nuevamente el
cromosoma v4 es seleccionado para la nueva poblacin. Una vez realizado el
anlisis de los diez nmeros aleatorios la nueva poblacin est conformada de la
siguiente forma:

32
2.2.1.5 Cruce

El operador de cruce permite realizar una exploracin de toda la informacin


almacenada hasta el momento en la poblacin y combinarla para crear mejores
individuos.

Es una buena idea que, tanto la codificacin como la tcnica de cruce, se hagan de
manera que las caractersticas buenas se hereden o al menos, no sea mucho peor
que el peor de los padres. Para lo anterior no se tiene un modo formal para
seleccionar la tcnica de mejor adaptacin a un problema especfico, sin embargo
es recomendable analizar la naturaleza de la cadena y los genes del individuo, con
el fin de conocer que elementos se pueden cruzar para lograr la creacin de un
individuo que combine las mejores caractersticas de los padres.

Para realizar el cruce entre parejas de cromosomas se utiliza el mtodo de un


punto de corte en el cual se selecciona aleatoriamente un punto de corte con
rango [1, tamao del cromosoma] y se intercambian las partes derechas de los
padres para generar dos cromosomas hijos. Como ejemplo se toman los
cromosomas v1 y v2 de la poblacin inicial, si el punto de corte se estableci en el
gen 17 el proceso de cruce se puede visualizar de la siguiente manera:

Punto de corte

Los cromosomas resultantes del intercambio de los genes a la derecha del punto
de corte son:

33
Para el ejemplo se determina que la probabilidad de cruce es pc = 0.25, lo cual
indica que solo el 25% de los cromosomas tienden a ser cruzados.

Al lanzar una secuencia de diez nmeros aleatorios para analizar la probabilidad de


cruce de cada cromosoma se obtiene los siguientes resultados:

0.625721 0.266823 0.288644 0.295114 0.163274

0.567461 0.085940 0.392865 0.770714 0.548656

Por lo que se identifica que solo los cromosomas v5 y v7 son seleccionados para
ser cruzados. Si se lanza un nuevo nmero aleatorio con rango [1, 33] para elegir
el punto de corte (se obtuvo el nmero 15) se obtiene la siguiente operacin:

Punto de corte

Los nuevos hijos resultantes de la operacin de cruce son:

2.2.1.6 Mutacin

La mutacin se considera un operador bsico, que proporciona un pequeo


elemento de aleatoriedad en el entorno de los individuos de la poblacin mediante
la alteracin de uno o ms genes con una probabilidad igual a la tasa de mutacin.
Si bien se admite que el operador de cruce es el responsable de efectuar la
bsqueda a lo largo del espacio de posibles soluciones (exploracin), tambin
parece desprenderse de los experimentos efectuados por varios investigadores que

34
el operador de mutacin realiza una explotacin de la poblacin y va ganando en
importancia a medida que la poblacin de individuos va convergiendo. El objetivo
del operador de mutacin es producir nuevas soluciones a partir de la modificacin
de un cierto nmero de genes de una solucin existente, con la intencin de
fomentar la variabilidad dentro de la poblacin. Existen diversas formas de realizar
la mutacin, desde la ms sencilla, donde cada gen muta aleatoriamente con
independencia del resto de genes, hasta configuraciones ms complejas donde se
tienen en cuenta la estructura del problema y la relacin entre los distintos genes.

Cabe anotar que la forma en la que se altera un gen depende de la forma en que
se realiz la representacin del mismo.

En el caso de estudio actual se observa que cada gen es un bit que toma los
valores de 0 o 1, por lo que la mutacin consistir en cambiar el valor del gen as:

Si el valor del gen es 0 se cambiar por 1.


Si el valor del gen es 1 se cambiar por 0.

Si se toma el cromosoma v1 para el ejemplo y se asume que el gen a cambiar es


el 18vo la operacin de mutacin se puede describir de la siguiente forma:

Gen a cambiar

El nuevo cromosoma v1 es:

35
Retomando el ejemplo, se torna un poco arbitrario elegir un mismo gen a mutar en
cada cromosoma, por lo que se utiliza el siguiente mtodo de eleccin del gen a
mutar:

Se establece como probabilidad de mutacin pm = 0.01, lo cual indica que


solo el 1% de los cromosomas tienden a ser mutados.
Se genera una secuencia de nmeros aleatorios rk (k = 1,2,,330) entre el
rango [0,1] con el fin de generar una probabilidad de mutacin
independiente para cada uno de los genes de la poblacin (La poblacin
contiene diez individuos cada uno con 33 genes), la cual arroja los
siguientes resultados:

Posicin Bit Cromosoma No. Bit No. rk


105 4 6 0.009857
164 5 32 0.003113
199 7 1 0.000946
329 10 32 0.001282

Los genes a mutar y sus respectivos cromosomas segn lo anterior son:

Al realizar la operacin de mutacin los nuevos cromosomas quedan de la


siguiente forma:

36
2.2.1.7 Una nueva poblacin

Cada iteracin del algoritmo arroja una nueva poblacin en la que se espera
encontrar individuos cada vez mejor adaptados al problema planteado. En este
caso, despus de realizar las operaciones descritas anteriormente la nueva
poblacin generada es la siguiente:

Los valores reales correspondientes a cada cromosoma y su respectiva evaluacin


es la siguiente:

Hasta este punto se ha completado la primera iteracin del algoritmo gentico. La


prueba en general corre 1000 iteraciones en la que se obtienen igual nmero de
generaciones. En la prueba, se obtiene el mejor cromosoma en la 419na generacin
que tiene los valores descritos a continuacin:

37




38
3 MODELAMIENTO DEL ALGORITMO GENETICO

3.1 TRABAJOS REALIZADOS

Antes de llevar a cabo el desarrollo del modelamiento propuesto para el AG, es


conveniente presentar tres tipos de problemas que has sido tratados mediante los
algoritmos genticos y que de alguna forma tienen relacin con la programacin
de planta de produccin.

3.1.1 Programacin de tienda abierta.

En [4] es posible observar cmo por medio de la utilizacin de algoritmos


genticos sus autores afrontan Open-Shop, que corresponde a un problema de
planificacin o elaboracin de calendarios, donde todos los trabajos tienen el
mismo nmero de operaciones, cada operacin se realiza en una mquina
especfica, pero no existe ninguna relacin de precedencia entre las operaciones.

Esta aproximacin es un interesante trabajo debido a que hace una


implementacin similar a lo que se busca en el presente trabajo, aunque no cubre
uno de los puntos vitales de la programacin de una planta de produccin como lo
es el manejo de dependencias entre procesos.

3.1.2 Programacin de produccin

En [5] se trata el problema de programacin de produccin, haciendo nfasis en


tres factores: dependencias, averas y reparaciones de mquinas.

En este trabajo se hace un hibrido, como lo llaman sus autores, entre algoritmos
genticos y simulacin, utilizando los algoritmos genticos para optimizar la

39
programacin de la produccin y la simulacin para minimizar los tiempos de
ejecucin de los algoritmos genticos.

3.1.3 Secuenciacin dinmica

En [6] se encuentra un anlisis acerca de la implementacin de sistemas de


aprendizaje automtico para resolver problemas de secuenciacin dinmica que es
en esencia la planeacin y la programacin. En [6] es posible observar que en la
programacin no es tenida en cuenta las prioridades que tiene cada trabajo o cada
orden de produccin, sin embargo es un trabajo realizado en el campo en el que
se enmarca el proyecto.

3.2 DEFINICIONES PROPIAS DEL ALGORITMO GENTICO

Grficamente, el modelo general del algoritmo gentico propuesto se muestra a en


la ilustracin 4.

Ilustracin 4 - Modelo general del AG propuesto

A continuacin se detalla cada componente del algoritmo gentico, con el fin de


realizar algunas precisiones necesarias.

40
3.2.1 Individuos

Para el algoritmo propuesto, como individuo se defini una programacin total de


la planta de produccin, la cual se compone de un nmero determinado de
rdenes de produccin organizadas de acuerdo a los parmetros considerados en
el numeral 3.3. Cabe recordar que la programacin de cada orden de produccin
contiene una serie de rdenes de trabajo que son cada una de las labores
ejecutadas para realizar el trabajo solicitado. Un ejemplo de la programacin de
una orden de produccin se muestra a continuacin:

Tiempo de
OP CP Cantidad Eficiencia Fecha inicial Fecha final
proceso
15 1 10.000,00 1 0,733729547 05/04/2009 02:51:16 05/04/2009 03:35:18
15 2 20.000,00 1 1,684494231 05/04/2009 02:51:16 05/04/2009 04:32:20
15 3 10.000,00 1 0,796622321 05/04/2009 03:35:18 05/04/2009 04:23:05
15 4 20.000,00 1 3,306331625 05/04/2009 03:35:18 05/04/2009 06:53:40
15 5 25.000,00 1 3,109839532 05/04/2009 03:35:18 05/04/2009 06:41:53
15 6 10.000,00 1 0,744601638 05/04/2009 03:35:18 05/04/2009 04:19:58
15 7 25.000,00 1 1,947040498 05/04/2009 03:35:18 05/04/2009 05:32:07
15 8 10.000,00 1 2,296211251 05/04/2009 03:35:18 05/04/2009 05:53:04
15 9 5.000,00 1 0,364298725 05/04/2009 03:35:18 05/04/2009 03:57:09
15 10 15.000,00 1 1,578615028 05/04/2009 03:35:18 05/04/2009 05:10:01

3.2.2 Cromosomas

En concordancia con lo explicado acerca de la conformacin del individuo en el


numeral anterior, cada cromosoma del individuo es cada una de las rdenes de
trabajo que componen la OP. Cabe recordar que la informacin acerca de la
naturaleza de la orden de trabajo est relacionada en el numeral 1.1.4.

3.2.3 Alelos

En el modelamiento del problema se ha identificado como los alelos de cada


cromosoma cada uno de los elementos de la orden de trabajo, de acuerdo a la
informacin que est relacionada en el numeral 1.1.4.1.

41
3.3 GENERACIN DE LA POBLACIN INICIAL

Como punto de partida para el algoritmo, se establece una poblacin de diez


individuos; programaciones completas y diferentes de la planta de produccin. La
diferencia entre las programaciones de planta de produccin radica en que cada
una se realiza de acuerdo a los siguientes parmetros de ordenamiento
previamente establecidos:

Nmero de orden de produccin ascendente y nmero de orden de trabajo


ascendente.
Nmero de orden de produccin ascendente y nmero de orden de trabajo
descendente.
Nmero de centro de produccin ascendente y nmero de orden de trabajo
ascendente.
Nmero de centro de produccin ascendente y nmero de orden de trabajo
descendente.
Nmero de orden de produccin ascendente y cantidad de la orden de
trabajo ascendente.
Nmero de orden de produccin ascendente y cantidad de la orden de
trabajo descendente.
Cantidad de la orden de trabajo ascendente y nmero de la orden de
trabajo ascendente.
Cantidad de la orden de trabajo descendente y nmero de la orden de
trabajo ascendente.
Prioridad de la orden de trabajo ascendente.
Prioridad de la orden de trabajo descendente.

As mismo, cada programacin de planta de produccin involucra la totalidad de


rdenes de produccin con una serie de rdenes de trabajo determinadas.

42
3.4 PROCESO DE SELECCIN

Dentro de los procesos de seleccin disponibles se eligi el mtodo de sorteo por


rueda de ruleta. Este mtodo se aplica a cada uno de los individuos con el fin de
obtener aquellos que sern cruzados y/o mutados y est basado en la tasa
proporcional de evaluacin asignada a cada uno de ellos. Los pasos que se realizan
para establecer la seleccin son los siguientes:

Se establece el valor de cada individuo segn la funcin de evaluacin


establecida para el algoritmo.
Se halla la evaluacin total de la poblacin, mediante la sumatoria de las
evaluaciones de cada uno de los individuos que pertenecen a ella.
Se calcula el porcentaje de probabilidad de cada uno de los individuos
respecto al total de la poblacin (Se divide la evaluacin del individuo entre
la evaluacin de la poblacin).
Se ordenan ascendentemente los individuos tomando como criterio la
probabilidad individual obtenida en el paso anterior y se calcula el
porcentaje de probabilidad acumulado correspondiente a cada individuo.
Se procede a generar un nmero aleatorio r con rango entre [0, 1].
Finalmente el individuo se obtiene de comparar el nmero generado en el
paso anterior con la probabilidad acumulada de cada uno de ellos.

3.5 PROCESO DE CRUCE

El operador de cruce tiene como objeto rescatar las mejores caractersticas de los
individuos con el fin utilizarlas como partes en la generacin de nuevos individuos.

43
Con el fin de obtener variedad en las poblaciones que se van generando, se
plantean las siguientes opciones como posibles operadores de cruce:

Permutar toda la programacin de una orden de produccin entre dos


individuos. La orden de produccin a cambiar se selecciona aleatoriamente
en un rango de [1, Nmero total de OP]. La decisin de aleatoriedad en la
seleccin de la OP tiene como fundamento dos factores; el primero tiene
como objetivo cumplir con una de las premisas que tiene la operacin de
cruce que es generar variedad en los nuevos individuos y, el segundo, se
establece debido a que no se encontr un criterio de peso que motivara a
considerarlo como un factor de diversidad en la poblacin.
Cambiar la fecha final del ltimo proceso ejecutado en la misma orden de
produccin entre dos individuos, donde la OP a utilizar para este proceso se
selecciona de la misma manera que el tem anterior. Con este
procedimiento se puede obtener que sea posible liberar tiempo de trabajo
en un CP para que otras rdenes de trabajo puedan ser ejecutadas en l.

Inicialmente se otorga una mayor importancia al primer operador de cruce


expuesto, debido a que se puede lograr una mayor diversidad en la generacin de
las nuevas poblaciones y a que en la actividad de permutacin es posible realizar el
reclculo de las fechas de finalizacin de las rdenes de trabajo.

Es conveniente indicar que el proceso de seleccin de los individuos a cruzar, se


establece con los parmetros establecidos en el numeral anterior.

44
3.6 PROCESO DE MUTACIN

Mediante el operador de mutacin se intenta realizar un cambio pequeo en el


individuo que genere a su vez una pequea modificacin en su informacin, pero
que sea significativo en cuanto al reprocesamiento de las rdenes de trabajo y de
la funcin de evaluacin. Como procedimientos candidatos a ser un operador de
mutacin se tienen los siguientes:

Cambiar el centro de produccin en el que se realiza una orden de


produccin, por otro que se encuentre disponible. Esto con el fin de realizar
el mismo trabajo en el nuevo centro de produccin, pero contar con que la
fecha de disponibilidad del nuevo CP es diferente al anterior y as se puede
tener cambios en el individuo.
Dividir la cantidad de las rdenes de trabajo que ms tiempo demanden de
un centro de produccin y realizarlas, si es posible, en dos o ms CP que
estn disponibles. Con este procedimiento se puede obtener una mejora en
los tiempos generales de terminacin de la orden de produccin, debido a
que en la medida en que estn disponibles otros centros de produccin, un
trabajo o proceso determinado puede realizarse simultneamente en ellos.
Retrasar las fechas de inicio de las rdenes de trabajo que ms tiempo
demanden de un centro de produccin. Esto implica cambiar el orden de
elaboracin de los trabajos en un centro de produccin dando prioridad a
aquellas que ms tiempo tarden en realizarse.

En la implementacin del AG, se va a considerar la segunda opcin de mutacin,


debido a que permite realizar ms cambios en el procesamiento del individuo.

45
3.7 DEFINICIN DE LA FUNCIN DE EVALUACIN (FITNESS)

La funcin de evaluacin es aquella que permite medir a cada uno de los


individuos generados en una determinada poblacin. Esta funcin tiene una serie
de parmetros o variables que permiten llevar a cabo la mencionada evaluacin
del individuo. Las variables a tener en cuenta en esta funcin son las siguientes:

3.7.1 Cumplimiento (C )

Una orden de produccin se cumple cuando se termina la ejecucin de su ltimo


proceso antes de la fecha de entrega. El cumplimiento es el porcentaje de rdenes
cuyo ltimo proceso termina antes de la fecha de entrega.

3.7.2 Colisiones (T )

Una colisin ocurre cuando la fecha y hora de inicio de una orden de trabajo se
encuentra entre la fecha y hora de inicio y de final de otras rdenes de trabajo
dentro del mismo centro de produccin.

3.7.3 Ocupacin de centros de produccin (P )

La ocupacin de cada centro de produccin se mide de acuerdo a las horas que


tiene disponible para realizar cualquier proceso y las horas que tiene programadas
o que se programan en cada individuo. De acuerdo a lo anterior, la ocupacin de
centros de produccin corresponde al promedio de ocupacin que tienen todos los
centros de produccin que se encuentran programados en el individuo.

46
3.8 FUNCIN DE EVALUACIN (FITNESS)

A cada una de las variables anteriormente citadas se le asigna un grado de


importancia (W ) dentro de la funcin de evaluacin. Este grado se ve
representado en un porcentaje para cada una de las variables e indica que tan
importante es la variable en la evaluacin de los individuos.

Teniendo en cuenta los anteriores conceptos la funcin que utiliza el algoritmo


gentico propuesto para evaluar a cada uno de sus individuos es la siguiente:

47
4 EVALUACIN DE PROTOTIPOS

4.1 CONDICIONES PARA LA GENERACIN DE PROTOTIPOS

4.1.1 Datos de trabajo

Cada prototipo que se genere tendr como datos de trabajo los siguientes:

tem Cantidad
Centrosdeproduccin 93
Procesos 25
Ordenesdeproduccin 20
Ordenesdetrabajo 276

Los centros de produccin y los procesos se tomaron de la informacin que en


general se maneja en una empresa de artes grficas, las ordenes de produccin se
generaron con fechas de entrega aleatorias, con cantidades de procesos aleatorios
(de 1 a 25 ya que es el total de procesos que se ejecutan).

De acuerdo con el flujo de trabajo de la industria grfica, a los procesos necesarios


se les cre el proceso que lo precede para hacer la programacin de la planta.

De igual forma se crearon los procesos que se ejecutan en cada centro de


produccin.

4.1.2 Proceso de seleccin

Para cada individuo se calcula el porcentaje de su evaluacin con respecto


al total de la poblacin.
Se organiza dicho porcentaje ascendentemente.
Se genera un nmero aleatorio n entre 0 y 1 y se elige el individuo cuyo
porcentaje acumulado de evaluacin es inmediatamente menor que n.

48
4.1.3 Probabilidades de cruce y mutacin

ProbabilidaddeCruce 75%
ProbabilidaddeMutacin 10%
Mtododeseleccin Ruleta

4.2 PROTOTIPO 01

4.2.1 Condiciones del algoritmo.

Se destacan las siguientes condiciones para la generacin del prototipo.

4.2.1.1 Funcin de cruce.

La funcin de cruce intercambia entre los dos individuos seleccionados todas


las rdenes de trabajo de una orden de produccin.
La orden de produccin que se cruza es elegida de manera aleatoria entre la
cantidad total de ordenes de produccin en el individuo.

4.2.1.2 Funcin de mutacin.

La funcin de mutacin consiste en dividir en dos partes iguales la cantidad


a procesar de una orden de trabajo para que sea ejecutada cada una
simultneamente en dos centros de produccin diferentes.
La funcin de mutacin se ejecuta a la orden de trabajo que tiene mayor
duracin en horas.

49
4.2.2 Resultados del prototipo 01
Ilustracin 5 Vista previa de la ejecucin del prototipo 01

En este prototipo, los individuos estn recibiendo la misma calificacin, es decir, el


resultado de la funcin de evaluacin es igual para todos.

Se comprob que en cada generacin la mayora de individuos son iguales.

4.2.3 Anlisis de la situacin en el prototipo 01.

Los datos de prueba se deben plantear de forma diferente o en mayor


cantidad ya que en este momento slo hay 20 rdenes de produccin y sus
fechas de entrega a menos de un mes, de esta forma siempre se va a tener
el mismo resultado sobre todo en la variable de mayor peso que es el
cumplimiento.
Slo se est dividiendo la cantidad de una orden de trabajo en dos partes
(tomando como criterio la orden de trabajo que tiene el mayor tiempo de

50
ejecucin) pero no se est haciendo la reprogramacin de la ejecucin de
los procesos de la orden dividida para que se permita disminuir la fecha de
entrega de la orden de produccin.

4.2.4 Acciones para el siguiente prototipo.

En pro de mejorar los resultados se tomarn las siguientes:

Cuando se ejecute la funcin de mutacin en el individuo se deber hacer


una reprogramacin de la misma para que se corran los procesos y se
pueda cumplir o terminar la orden de produccin en menor tiempo.

4.2.5 Consideraciones para tener en cuenta en el prximo prototipo.

En este momento el algoritmo se detiene cuando se completa un nmero


determinado de generaciones, as que se pueden plantear otras opciones:
o Un buen criterio para detener el algoritmo es cuando el
cumplimiento se llegue al 100%.
o De la misma forma, se puede terminar el algoritmo cuando todos los
centros de produccin estn ocupados al 100%
La evaluacin de ocupacin de centro de produccin, si uno de stos
presenta ocupacin de ms del 100% se est dejando ese valor para medir
el promedio del individuo; se plantea que si la ocupacin del centro de
produccin sobrepasa el 100% solo se debe tomar hasta el 100% para no
daar el promedio.
Se plantea que para la funcin de mutacin se debera tomar los centros de
mayor ocupacin (que superen el 100%) y ejecutar alguna o las dos
acciones siguientes:
o Redistribuir el trabajo, es decir, hacer los mismo que se est
haciendo en este momento.
o Aumentar la disponibilidad del centro de produccin, es decir, las
horas disponibles por da para el centro.

51
4.3 PROTOTIPO 02

4.3.1 Condiciones del algoritmo.

Se realizaron las los siguientes cambios en el algoritmo para la generacin del


prototipo.

4.3.1.1 Funcin de mutacin.

Para la funcin de mutacin se aplicaron dos acciones:

Cuando se haga la divisin de la cantidad en la orden de trabajo se har


una reprogramacin corriendo las rdenes de trabajo siguientes.

4.3.2 Resultados del prototipo 02


Ilustracin 6 Vista previa de la ejecucin del prototipo 02

52
4.3.3 Anlisis de la situacin en el prototipo 02.

El prototipo ahora est cambiando de generacin en generacin, el resultado de la


funcin de evaluacin est tomando valores diversos dentro de cada una y as
mismo en el mejor individuo que se obtiene en cada nueva generacin.

Ahora el inconveniente que se est presentando es que el algoritmo no tiende a


converger al 100%, de lo contrario, aunque se presentan picos altos se nota una
tendencia hacia el 40 o 30%, en algunas ocasiones cuando se corre el algoritmo
varias veces empieza a mejorar los resultados pero no es en la mayora, lo que
significa que hasta ahora el algoritmo est muy inestable y se debe corregir esta
situacin, como posibles causas del inconveniente se han identificado las
siguientes:

Cuando se ejecuta la funcin de mutacin se est haciendo reprogramacin,


pero este proceso se est ejecutando sobre el centro de produccin, es
decir, se corren todos los trabajos programados en el centro de produccin
hacia atrs, lo que ciertamente reduce el tiempo de ejecucin de una orden
de produccin, pero en la reprogramacin no se est verificando si el
proceso que se va a correr hacia atrs cumple con la precedencia necesaria
del proceso anterior.
Es posible que el factor que est haciendo la diferencia entre los individuos
sea la evaluacin de colisiones ya que con el cruce se estn generando ms
colisiones.
Al realizar la funcin de cruce no se est haciendo reprogramacin por lo
que aumentan las colisiones.

4.3.4 Acciones para el siguiente prototipo.

Se considera que ejecutar las siguientes acciones en el algoritmo puede permitir


que las generaciones tiendan a mejorar en cada iteracin.

53
Cuando se corra la funcin de cruce se debe hacer una reprogramacin de
las rdenes de trabajo para que no se generen colisiones.
La funcin de mutacin se va a cambiar para que la orden de trabajo a la
que se divida la cantidad no sea la que ms tiempo se demore, si no que se
va a buscar una de las ordenes de produccin que no terminan a tiempo y
de esta se va a escoger la orden de trabajo ms demorada.

4.4 PROTOTIPO 03

4.4.1 Condiciones del algoritmo.

Para la generacin del prototipo 03 se realizaron las siguientes acciones:

4.4.1.1 Funcin de mutacin.

La funcin de mutacin se modific para que en lugar de buscar la orden de


trabajo que tena mayor tiempo de duracin se buscaran primero las
rdenes de produccin que no se cumplan y luego si tomar la orden de
trabajo de mayor duracin.
Se identific que la reprogramacin de las rdenes de trabajo no se debe
hacer por el centro de produccin sino por la orden de produccin, de tal
forma que sean las rdenes de trabajo las que se corran hacia atrs para
poder cumplir ms rpido la orden de produccin.

4.4.2 Resultados del prototipo 03.

En este prototipo se pudo identificar luego de correr el algoritmo con 1000


generaciones que el cumplimiento llega a un 100% y debido a que esta variable es
a la que en general se le asigna mayor peso puesto que es el objetivo principal de
la programacin se constituye este como un resultado satisfactorio para el trabajo.

54
4.4.3 Anlisis de la situacin en el prototipo 03.

A pesar de estar llegando al 100% en el cumplimiento, el comportamiento del


mejor individuo sigue sin subir del 90% y en general, el mejor individuo de cada
generacin tiende a disminuir en el resultado de su funcin de evaluacin,
adicionalmente en muy pocas ocasiones el comportamiento de cada generacin
con respecto a la anterior es estable.

Se identificaron posibles causas para obtener stos resultados:

En la funcin de mutacin se est seleccionando de las ordenes de


produccin no cumplidas la orden de trabajo que ms tiempo consume,
pero se identific que en varias oportunidades la fecha de inicio de esta
orden de trabajo es mayor a la fecha de entrega de la orden de produccin,
por lo que sin importar si se divide el trabajo en varios centros de
produccin tarda mucho en que la orden se cumpla.
Una vez se llega al 100% de cumplimiento, la funcin de mutacin sigue
dividiendo las rdenes de trabajo, lo cual ya no genera valor al algoritmo
por cuanto lo que se logra es terminar la orden mucho ms temprano sin
lograr deshacer las colisiones.

4.4.4 Acciones para el siguiente prototipo.

Las siguientes acciones se debern ejecutar para el prximo prototipo, y estn


enfocadas principalmente a la convergencia del algoritmo, a estabilizar el resultado
de la funcin de evaluacin del mejor individuo con cada nueva generacin y a
facilitar el anlisis de los datos de rendimiento y mejora entre generaciones.

La funcin de mutacin dividir las rdenes de trabajo cuya fecha inicial sea
menor a la fecha de entrega de la orden de trabajo.
En la funcin de mutacin, cuando el cumplimiento del individuo est en el
100%, se deber disolver una colisin haciendo uso de otro centro de

55
produccin que en el que se pueda ejecutar el proceso, si no se puede
ejecutar en otro centro de produccin, entonces se har reprogramacin del
centro de produccin.
Se implementar una tabla de resultados en la que se mostrarn los
mejores individuos de cada generacin, con el fin de correr varias veces el
algoritmo y as hacer anlisis ms fcilmente.

4.5 PROTOTIPO 04

4.5.1 Condiciones del algoritmo.

Para ejecutar este prototipo se realizaron las acciones que se describen a


continuacin.

4.5.1.1 Funcin de mutacin.

Cuando una orden de produccin no se encuentre en el 100% de


cumplimiento y el proceso que consume ms tiempo empieza despus de la
fecha de entrega de la orden de produccin, esta debe desplazarse por los
procesos anteriores hasta que pueda dividir una orden de trabajo cuyo inicio
sea menor que la fecha de entrega de la orden de produccin.
Cuando un individuo llegue al 100% de cumplimiento, no se debe hacer
divisin de cantidad de ninguna orden de trabajo, por el contrario se deben
buscar las rdenes de trabajo que se encuentra en colisin y hacer la
transferencia de una de ellas a otro centro de produccin donde se pueda
ejecutar.

4.5.1.2 Presentacin de datos

Se implement una tabla de datos en la cual se ven reflejados los mejores


individuos de cada generacin. El cambio anterior se realiz con el objetivo de

56
hacer anlisis rpido de cada ejecucin del algoritmo, en esta tabla se puede ver
de cada mejor individuo la generacin en que se cre, el resultado de la funcin de
evaluacin y cada una de las evaluaciones por separado de las variables que
constituyen la funcin de evaluacin (cumplimiento, ocupacin de mquina y
colisiones).

4.5.2 Resultados del prototipo 04.


Ilustracin 7 - Vista previa de la ejecucin del prototipo 04

57
Ilustracin 8 - Vista previa de la tabla de resultados obtenida en la ejecucin del prototipo 04

4.5.3 Anlisis de la situacin en el prototipo 04.


El cumplimiento est llegando al 100% desde las primeras generaciones, en
general, esto sucede desde la primera generacin, la variable que le
precede en peso o importancia es la de colisiones, pero esta no mejora en
cada nueva generacin y si lo hace, la mejora resulta muy poco
significativa, lo que redunda en que el mejor individuo de toda la corrida del
algoritmo se hall muy temprano entre las 10 primeras generaciones.
La variable de ocupacin de mquina tampoco sufre una mejora o cambios
significativos, en muchas ocasiones esta variable presenta el mismo
comportamiento durante varias generaciones.

58
4.5.4 Acciones para el siguiente prototipo.

En busca de un mejor anlisis y de solucionar los inconvenientes que se


presentaron en el prototipo 04 se deben tomar las siguientes acciones para el
siguiente prototipo.

Se debe generar una lnea de grfica para cada una de las variables que
componen la funcin de evaluacin.
Se debe generar una lnea de grfica para el promedio de la funcin de
evaluacin en cada generacin, con esto se podr comprobar el
comportamiento de generacin en generacin.
Cuando se disuelve una colisin se debe hacer reprogramacin tanto de la
orden de produccin como del centro de produccin.

4.6 PROTOTIPO 05

4.6.1 Condiciones del algoritmo.

Se realizaron los siguientes cambios para mejorar los resultados del algoritmo:

4.6.1.1 Funcin de cruce

Se modifico la funcin de cruce para que en lugar de intercambiar la


programacin de una orden de produccin completa, se intercambie la
programacin completa de todo un centro de produccin.

4.6.1.2 Funcin de mutacin.

Cuando se disuelve una colisin se hace reprogramacin tanto de la orden


de produccin como de los centros de produccin involucrados en la
disolucin de la colisin.

59
4.6.2 Resultados del prototipo 05.
Ilustracin 9 - Vista previa de la ejecucin del prototipo 05

4.6.3 Anlisis de la situacin en el prototipo 05.


En este prototipo el algoritmo se est comportando como se esperaba, el
promedio de evaluacin de cada generacin es irregular en las primeras
generaciones pero luego empieza a estabilizarse e igualmente empieza a
tender a 100%.
De igual forma es posible observar que las variables de cumplimiento y
colisiones mejoran tras cada nueva generacin, a tal punto que una vez
obtenido el 100% de cumplimiento de las rdenes de trabajo la tasa de
colisiones va mejorando en cada iteracin.

60
4.6.4 Acciones para el siguiente prototipo.

Se puede suprimir la variable de ocupacin de mquina ya que al procesar


las mismas rdenes de trabajo y las mismas cantidades esta no debe
cambiar y por eso su valor es constante.

4.7 COMPARACIN DEL PROTOTIPO 05

Uno de los objetivos planteados para este proyecto estableca la realizacin de una
comparacin del prototipo con alguna solucin utilizada actualmente en la industria
de artes grficas.

Para llevar a cabo este aspecto, solo se pudo tener acceso como referencia a una
aplicacin que realiza la programacin de una planta de produccin mediante el
uso de procesos de asignacin de tiempos secuenciales.

En principio se estim realizar dicha comparacin tomando como entradas


comunes los datos utilizados por dicha aplicacin para evaluar el rendimiento
comparativo de las dos soluciones. Sin embargo, el acceso a los datos utilizados
fue bastante complejo debido a que la estructura de datos utilizada por este
software presenta casos de redundancia de datos y no se dispone de
documentacin para poder interpretar los procesos all implementados. A pesar de
los inconvenientes presentados, se intent extraer la informacin en una
estructura compatible con el prototipo realizado, pero esta labor no pudo realizarse
exitosamente.

La nica comparacin planteada entonces consisti en medir el tiempo necesario


para que cada aplicacin proporcionara una solucin dado un nmero similar de
rdenes de produccin. Se pudo observar que los tiempos de ejecucin de la

61
aplicacin son menores a los obtenidos con el prototipo y en todos los casos las
diferencias presentadas en esta evaluacin eran tan grandes que se opt por no
realizar un anlisis preciso de las mismas.

62
5 EVALUACIN Y COMPARACIN DE RESULTADOS2

Para realizar la evaluacin se ejecut 10 veces el prototipo 05 con los siguientes


parmetros:

Tabla 1 - Entradas para ejecutar la evaluacin.

Variable Valor
PesodeCumplimiento 55%
PesodeColisiones 40%
PesodeOcupacin 5%
NmerodeIteracionesaejecutar 1000

La variable de cumplimiento tiene un mayor peso para la empresa de artes grficas


debido a que para ella es lo ms importante, lo que se debe asegurar en primer
lugar cuando se programa es que los clientes van a recibir su trabajo en las fechas
pactadas.

En segundo lugar se encuentra la variable de colisiones ya que si dos trabajos


llegan al mismo tiempo a un centro de produccin se generan sobrecostos al tener
que enviar uno de los trabajos a un satlite o tercero.

El peso de la ocupacin es pequeo debido a que siempre que se encuentren los


mismos trabajo por elaborar la ocupacin ser igualmente la misma slo que
distribuida en diferentes centros de produccin.

Se realiz la recopilacin de datos de cada una de las ejecuciones para graficar los
resultados y facilitar el anlisis.

2
Los datos que se utilizan para realizar la comparacin fueron suministrados informalmente por el
programador de la planta de produccin de una empresa de artes grficas para la cual, Alexander
Gmez trabaj durante ms de 4 aos.

63
De cada una de las ejecuciones se tomaron los siguientes datos:

El tiempo en minutos que se tom para terminar las iteraciones.


El resultado de evaluacin del mejor individuo.
La generacin en que se obtuvo el mejor individuo.
El promedio de evaluacin de los mejores individuos.
La evaluacin de cumplimiento obtenida en el mejor individuo.
La evaluacin de colisiones obtenida en el mejor individuo.

Con los datos mencionados anteriormente se evalu la conveniencia de un


algoritmo gentico para resolver el problema propuesto, a continuacin se
presenta la recopilacin de resultados:

Tabla 2 - Recopilacin de datos de evaluacin.

Nmero
Tiempo Mejor Generacin Promedio
De Cumplimiento Colisiones
(Minutos) Individuo MI Evaluacin
Ejecucin

1 46.45 0.9963526 458 0.9934957 1.0000000 0.9909000


2 45.87 0.9937093 969 0.9796103 1.0000000 0.9843000
3 47.03 0.9971631 951 0.9860408 1.0000000 0.9929000
4 48.67 0.9937448 983 0.9820988 1.0000000 0.9844000
5 45.68 0.8922163 996 0.8772974 0.9000000 0.9752000
6 42.30 0.9300478 997 0.9073648 0.9000000 0.9751000
7 56.36 0.9272276 994 0.9100486 0.9000000 0.9681000
8 47.58 0.9300137 994 0.9103084 0.9000000 0.9750000
9 51.87 0.9178273 992 0.9089283 1.0000000 0.9872620
10 49.63 0.9698272 901 0.9477360 1.0000000 0.9683730

64
5.1 TIEMPO DE EJECUCIN
Grfica 1 - Evaluacin del tiempo de ejecucin.

Promedio 48.14
Tiempo Menor 42.30
Tiempo Mximo 56.36
Desviacin estndar 3.85

5.1.1 Comparacin en tiempo de ejecucin.

En general, cuando el programador de la planta ejecuta la programacin con la


solucin analtica que existe en el momento, en promedio, este termina su
ejecucin en 8 minutos.

Adicionalmente el programador debe revisar la programacin generada y asignar


trabajos a centros de produccin que no tengan ocupacin, reasignar las
prioridades que se requieran, dividir los trabajos que se demoran mucho tiempo en
un centro de produccin y revisar que las precedencias de los procesos se cumplan
para que no hayan prdidas de tiempo o reprogramaciones en un centro de
produccin debido a que no se encuentre listo el trabajo anterior. Realizando esta

65
labor el programador se toma alrededor de 40 minutos y durante el da debe
repetirla por lo menos una vez, lo que en total suma 96 minutos.

Dado lo anterior, se observa que el tiempo de programacin se redujo en


aproximadamente un 50% ya que aunque se tome ms tiempo para ejecutar el
algoritmo no se debern realizar las tareas que actualmente se realizan.

5.2 MEJOR INDIVIDUO


Grfica 2 - Evaluacin del mejor individuo.

Promedio 0.95
Evaluacin Menor 0.89
Evaluacin Mxima 1.00
Desviacin estndar 0.04

5.2.1 Comparacin del mejor individuo.

El programador generalmente hace la programacin para mximo una o dos


semanas de trabajo, de tal modo que la evaluacin del mejor individuo no se
puede hacer de forma exacta, pero se estima que este llega al 40% como mximo

66
de tal forma que result mejor la evaluacin del mejor individuo ejecutando el
algoritmo gentico propuesto.

5.3 PROMEDIO DE EVALUACIN


Grfica 3 - Promedio de evaluacin.

Promedio 0.94
Evaluacin mnima 0.88
Evaluacin mxima 0.99
Desviacin estndar 0.04

El promedio de evaluacin en cada generacin muestra que este corresponde a la


evaluacin del mejor individuo, lo que refuerza la evaluacin de comparacin
realizada en el tem anterior.

67
5.4 GENERACIN MEJOR INDIVIDUO
Grfica 4 - Generacin del mejor individuo.

Promedio 923.50
Generacin mnima 458.00
Generacin mxima 997.00
Desviacin estndar 166.28

La desviacin estndar de la grfica 4 muestra que no es estable el


comportamiento de esta variable, aunque se genera de esta forma por la primera
ejecucin donde el mejor individuo se gener muy temprano con respecto al
promedio de las dems.

Esta variable no es comparable con la solucin analtica actual ya que en esta


solucin no se hacen iteraciones.

68
5.5 CUMPLIMIENTO
Grfica 5 Evaluacin de cumplimiento

Promedio 0.96
Menor cumplimiento 0.90
Mejor cumplimiento 1.00
Desviacin estndar 0.05

El cumplimiento muestra un comportamiento ptimo ya que en la mayora de las


ejecuciones se llega al 100% lo que hace confiable el algoritmo propuesto.

5.5.1 Comparacin del cumplimiento

Debido a que el programador no programa la totalidad de las rdenes de


produccin cuando la solucin analtica termina su ejecucin y esta programa en
secuencia lo que no permite llegar al 100% de cumplimiento el algoritmo
propuesto muestra un mejor desempeo en esta variable ya que el promedio de
cumplimiento supera el 95%.

69
5.6 COLISIONES
Grfica 6 - Evaluacin de colisiones.

Promedio 0.98
Menor cumplimiento 0.97
Mejor cumplimiento 0.99
Desviacin estndar 0.01

Que las colisiones en promedio obtengan una calificacin del 98% significa que el
2% de las rdenes de trabajo programadas por el algoritmo propuesto se
encuentran en el mismo centro de produccin al mismo tiempo, lo que es un
excelente resultado.

5.6.1 Evaluacin de las colisiones.

El programador de la planta no genera colisiones ya que hace la programacin da


a da lo que permite que no se generen, por lo tanto en esta variable el algoritmo
propuesto presenta un resultado que debe ser mejorado.

70
6 CONCLUSIONES

Los algoritmos genticos son en definitiva una alternativa factible para


abordar el problema de programacin de planta de produccin, ya que los
resultados obtenidos muestran una tendencia a mejorar con cada nueva
generacin.
La adaptacin del problema al modelo de algoritmos genticos y la
abstraccin de poblacin, individuo, cromosoma y alelo fue acertada dado
que en ninguna etapa del proceso fue necesario hacer un nuevo
planteamiento del modelo.
A pesar de realizar algunos cambios en las funciones de cruce y mutacin a
travs del desarrollo del modelo, fue posible aplicar los conceptos esenciales
de estos operadores al problema planteado de acuerdo a la representacin
planteada.
Se vivi la experiencia de replantear, aplicar cambios y hacer anlisis de
resultados y comportamientos en todos los elementos del AG tal y como lo
plantea el proceso evolutivo, lo que resulta satisfactorio para el trabajo.
A pesar de no tener como objetivo explcito del proyecto el proceso de
desarrollo de los prototipos, se evidenci que fue de vital importancia para
aclarar y corregir el planteamiento del modelo.
En los resultados obtenidos es posible observar cmo en la mayora de las
ejecuciones, el algoritmo alcanza el 100% de cumplimiento y un promedio
del 98% de colisiones. El anterior comportamiento indica que en la mayora
de casos es posible encontrar un individuo con mejor evaluacin en cada
generacin.
De igual forma, en los resultados se visualiza que la obtencin de los
mejores individuos de cada ejecucin se encuentra en las ltimas

71
iteraciones del algoritmo, por lo que es bastante probable que, al ejecutar el
algoritmo con un nmero mayor de poblaciones, se obtenga un individuo
con mejor calificacin que los encontrados.
Los tiempos de ejecucin del algoritmo fueron aceptables dentro de los
lmites establecidos para el ejercicio prctico por los autores. Sin embargo
para llevar el algoritmo a un ambiente de produccin, es necesario aplicar
otras tcnicas de programacin que permitan mejorar el rendimiento del
mismo.
Es viable enmarcar el algoritmo gentico planteado en una solucin vertical
de control y gestin de produccin, que permita unir toda la parte
transaccional del sistema con la programacin de la planta de produccin.
La descripcin del funcionamiento de los AG mediante la exposicin de un
ejemplo prctico en paralelo con el detalle terico de cada uno de los
elementos, permite tener una herramienta pedaggica que sirva como gua
a los futuros estudiantes interesados en el tema.

72
7 SUGERENCIAS

Resultara interesante incluir ms variables al modelo, tales como:


o Cambios en las prioridades de las rdenes de trabajo fijadas por el
programador de planta.
o Programacin en secuencia de trabajos con caractersticas similares.
o Considerar pausas en los centros de produccin:
Tiempos de alistamiento de mquina cada vez que se cambia
un trabajo.
Tiempo de mantenimiento de los centros de produccin.
Para nuevos prototipos generados a partir de los resultados del presente
trabajo de grado, se sugiere hacer una exploracin de otras tcnicas de
optimizacin, como posible planteamiento para abordar el problema tratado.
Hacer una variacin de la funcin de mutacin para que sugiera o agregue
turnos adicionales (aumentar la disponibilidad) en los centros de produccin
que se encuentren 100% ocupados.
Hacer una verificacin de los tiempos en que un centro de produccin est
sin trabajo para desplazar rdenes de trabajo a ese tiempo no utilizado.
Implementar hilos de procesamiento y/o procesamiento distribuido para
mejorar los tiempos de ejecucin del prototipo.

73
8 REFERENCIAS

[1] GOLDBERG. David. Genetic Algorithms in Search, Optimization and Machine


Learning. USA: Addison Wesley Longman Inc, 1989. 412 p. ISBN 0-201-15767-5.

[2] GEN. Mitsuo, CHENG. Runwei. Genetic Algorithms and Engineering Design.
New York. Wiley, 2000. 411 p. ISBN 0-471-12741-8.

[3] GEN. Mitsuo, CHENG. Runwei. Genetic Algorithms and Engineering


Optimization. New York. Wiley, 2000. 495 p. ISBN 0-471-31531-1.

[4] HSIAO-LAN. Fang, ROSS. Peter, CORNE. Ross y CORNE. Dave. A Promising
Genetic Algorithm Approach to Job-Shop Scheduling, Rescheduling and Open-Shop
Scheduling Problems. http://www6.uniovi.es/pub/EC/GA/papers/icga93-2.ps.gz

[5] SUK JAE. Jeong, SEOK JIN. Lim, KYUNG SUP. Kim. Hybrid approach to
production scheduling using genetic algorithm and simulation. Springer London,
2006. 136 p. ISSN 0268-3768

[6] PRIORE. Paolo, DE LA FUENTE. David, PUENTE. Javier, GMEZ. Alberto.


Secuenciacin Dinmica De Sistemas De Fabricacin Flexible Mediante Aprendizaje
Automtico. Universidad de Rioja, 2001. 549 p. ISSN 0210-8054.

[7] DARWIN. Charles. El origen de las especies. LongSeller, 2005. 240 p. ISBN
9875503487.

74

Você também pode gostar