FORMULACIÓN DE UN ALGORITMO GENÉTICO PARA EL PROBLEMA DE PROGRAMACIÓN DE ÓRDENES DE TRABAJO DE UNA EMPRESA DE ARTES GRÁFICAS PROYECTO DE GRADO JAVIER MAURICIO GAMBOA SALGADO Código: 544004 JOHN ALEXANDER GÓMEZ MARULANDA Código: 553019 FUNDACIÓN UNIVERSITARIA KONRAD LORENZ FACULTAD DE INGENIERÍA IX SEMESTRE DE INGENIERÍA DE SISTEMAS BOGOTÁ 1 FORMULACIÓN DE UN ALGORITMO GENÉTICO PARA EL PROBLEMA DE PROGRAMACIÓN DE ÓRDENES DE TRABAJO DE UNA EMPRESA DE ARTES GRÁFICAS PROYECTO DE GRADO JOHN ALEXANDER GÓMEZ MARULANDA Código: 553019 JAVIER MAURICIO GAMBOA SALGADO Código: 544004 Proyecto investigativo para optar al título de Ingeniero de Sistemas Director de proyecto de grado Ingeniero JUAN CARLOS GALEANO HUERTAS FUNDACIÓN UNIVERSITARIA KONRAD LORENZ FACULTAD DE INGENIERÍA IX SEMESTRE DE INGENIERÍA DE SISTEMAS BOGOTÁ 2 NOTA DE ACEPTACIÓN _____________________________________________ _____________________________________________ _____________________________________________ _____________________________________________ _____________________________________________ _____________________________________________ _____________________________________________ _______________________________ 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 compresión y aliento inagotables. Javier Gamboa A Dios porque en él está mi vida, a mi esposa, Heidi, porque sin ella no habría empezado esta parte del camino que hoy culmina y a mi hijo, Jiordie, porque en él retomo fuerzas. Alexander Gómez 5 CONTENIDO Pág. 1 EXISTE UN PROBLEMA .............................................................................. 12 1.1 DEFINICIÓN DE ENTRADAS DEL PROBLEMA ......................................... 13 1.1.1 Orden de Producción. ................................................................... 13 1.1.2 Proceso. ...................................................................................... 14 1.1.3 Centro de Producción. .................................................................. 14 1.1.4 Orden de Trabajo ........................................................................ 15 1.2 ¿CUAL ES LA PROPUESTA PARA SOLUCIONARLO? ................................. 17 2 PARA COMENZAR CON ALGORITMOS GENÉTICOS ...................................... 20 2.1 ¿QUÉ SON LOS ALGORITMOS GENÉTICOS? .......................................... 20 2.2 DESCRIPCIÓN DEL FUNCIONAMIENTO DE LOS AG ................................ 21 2.2.1 Problema de optimización ............................................................. 22 3 MODELAMIENTO DEL ALGORITMO GENETICO ............................................ 36 3.1 TRABAJOS REALIZADOS ...................................................................... 36 3.1.1 Programación de tienda abierta. ................................................... 36 3.1.2 Programación de producción ........................................................ 36 3.1.3 Secuenciación dinámica................................................................ 37 3.2 DEFINICIONES PROPIAS DEL ALGORITMO GENÉTICO ........................... 37 3.2.1 Individuos ................................................................................... 38 3.2.2 Cromosomas ............................................................................... 38 3.2.3 Alelos .......................................................................................... 38 3.3 GENERACIÓN DE LA POBLACIÓN INICIAL ............................................. 39 3.4 PROCESO DE SELECCIÓN..................................................................... 40 3.5 PROCESO DE CRUCE............................................................................ 40 3.6 PROCESO DE MUTACIÓN ..................................................................... 42 3.7 DEFINICIÓN DE LA FUNCIÓN DE EVALUACIÓN (FITNESS) ..................... 43 3.7.1 Cumplimiento (C )........................................................................ 43 3.7.2 Colisiones (T ) ............................................................................. 43 3.7.3 Ocupación de centros de producción (P ) ...................................... 43 3.8 FUNCIÓN DE EVALUACIÓN (FITNESS) .................................................. 44 4 EVALUACIÓN DE PROTOTIPOS .................................................................. 45 4.1 CONDICIONES PARA LA GENERACIÓN DE PROTOTIPOS ........................ 45 4.1.1 Datos de trabajo .......................................................................... 45 4.1.2 Proceso de selección .................................................................... 45 4.1.3 Probabilidades de cruce y mutación .............................................. 46 4.2 PROTOTIPO 01.................................................................................... 46 4.2.1 Condiciones del algoritmo............................................................. 46 4.2.2 Resultados del prototipo 01 .......................................................... 47 6 5 6 7 8 4.2.3 Análisis de la situación en el prototipo 01. ..................................... 47 4.2.4 Acciones para el siguiente prototipo. ............................................. 48 4.2.5 Consideraciones para tener en cuenta en el próximo prototipo. ...... 48 4.3 PROTOTIPO 02.................................................................................... 49 4.3.1 Condiciones del algoritmo............................................................. 49 4.3.2 Resultados del prototipo 02 .......................................................... 49 4.3.3 Análisis de la situación en el prototipo 02. ..................................... 50 4.3.4 Acciones para el siguiente prototipo. ............................................. 50 4.4 PROTOTIPO 03.................................................................................... 51 4.4.1 Condiciones del algoritmo............................................................. 51 4.4.2 Resultados del prototipo 03. ......................................................... 51 4.4.3 Análisis de la situación en el prototipo 03. ..................................... 52 4.4.4 Acciones para el siguiente prototipo. ............................................. 52 4.5 PROTOTIPO 04.................................................................................... 53 4.5.1 Condiciones del algoritmo............................................................. 53 4.5.2 Resultados del prototipo 04. ......................................................... 54 4.5.3 Análisis de la situación en el prototipo 04. ..................................... 55 4.5.4 Acciones para el siguiente prototipo. ............................................. 56 4.6 PROTOTIPO 05.................................................................................... 56 4.6.1 Condiciones del algoritmo............................................................. 56 4.6.2 Resultados del prototipo 05. ......................................................... 57 4.6.3 Análisis de la situación en el prototipo 05. ..................................... 57 4.6.4 Acciones para el siguiente prototipo. ............................................. 58 4.7 COMPARACIÓN DEL PROTOTIPO 05 ..................................................... 58 EVALUACIÓN Y COMPARACIÓN DE RESULTADOS ....................................... 60 5.1 TIEMPO DE EJECUCIÓN ....................................................................... 62 5.1.1 Comparación en tiempo de ejecución. ........................................... 62 5.2 MEJOR INDIVIDUO .............................................................................. 63 5.2.1 Comparación del mejor individuo. ................................................. 63 5.3 PROMEDIO DE EVALUACIÓN ................................................................ 64 5.4 GENERACIÓN MEJOR INDIVIDUO ......................................................... 65 5.5 CUMPLIMIENTO................................................................................... 66 5.5.1 Comparación del cumplimiento ..................................................... 66 5.6 COLISIONES........................................................................................ 67 5.6.1 Evaluación de las colisiones. ......................................................... 67 CONCLUSIONES ........................................................................................ 68 SUGERENCIAS........................................................................................... 70 REFERENCIAS ........................................................................................... 71 7 LISTA DE ILUSTRACIONES Pág. Ilustración 1 - Pasos para solucionar analíticamente el problema de programación de planta de producción................................................................................... 18 Ilustración 2 - Esquema general del funcionamiento de un AG ........................... 21 Ilustración 3 - Gráfica de la función a optimizar ................................................. 22 Ilustración 4 - Modelo general del AG propuesto................................................ 37 Ilustración 5 – Vista previa de la ejecución del prototipo 01 ............................... 47 Ilustración 6 – Vista previa de la ejecución del prototipo 02 ............................... 49 Ilustración 7 - Vista previa de la ejecución del prototipo 04 ................................ 54 Ilustración 8 - Vista previa de la tabla de resultados obtenida en la ejecución del prototipo 04 .................................................................................................... 55 Ilustración 9 - Vista previa de la ejecución del prototipo 05 ................................ 57 8 RESUMEN En el desarrollo del presente trabajo se propone generar una solución al problema de programación de planta de producción mediante la utilización de algoritmos genéticos, usándolos como técnica que permita no sólo cubrir las necesidades que ya abordan soluciones analíticas sino ir mas allá proponiendo una nueva organización de los recursos y de los trabajos a realizar, y permitiendo a través de ellos explorar al máximo el universo de posibilidades que se pueden presentar para solucionarlo. Se plantea un enfoque práctico que guía al lector por la conceptualización y el modelamiento de un algoritmo genético elemental, para luego proponer un modelo que represente una solución del problema planteado. 9 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 sólo con noventa máquinas para llevar a cabo los procesos, es una tarea que de entrada suena titánica. Adicionalmente, si a lo anterior se agrega que las tareas deben ser ejecutadas en un orden específico, que dependen en cierta proporción de la mano de obra y que día a día están 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 análisis complejos o aplicando una metodología que pocas personas se atreven a modificar y mucho menos tratan de cuestionar la idoneidad o la obtención de una mejor solución. Un escenario bastante desalentador se vislumbra cuando se verifica que obtener una solución a estos problemas puede demandar grandes cantidades de tiempo y recursos tanto técnicos como humanos. Es por esto que se realiza un algoritmo genético que pueda ser utilizado en la programación de planta de producción de una empresa de artes gráficas. En el desempeño de esta labor, es necesario realizar una representación válida de los elementos que componen el problema y una función 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. 10 El anterior panorama, plantea entonces la utilización de la tecnología 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 administración y organización de los recursos de producción se puedan dejar prácticamente en sus manos. 11 1 EXISTE UN PROBLEMA1 El sector manufacturero transforma materias primas en productos mediante la ejecución de procesos manuales o automáticos. 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 características son definidas por el cliente, lo que hace que cada producto sea totalmente nuevo a la hora de producirlo; las empresas de artes gráficas se encuentran en este grupo. Al no tener productos que se elaboren de la misma forma y en cantidades regulares, es necesario hacer una programación dinámica de la planta de producción en la cual se asegure el cumplimiento de los compromisos adquiridos con el cliente. Esta programación debe tener en cuenta todos los procesos que se deben ejecutar para terminar la elaboración 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 programación de la planta de producción de una empresa de artes gráficas considerando las situaciones expresadas anteriormente, permitiendo optimizar los recursos que se utilizan para la ejecución de los procesos y cumpliendo los compromisos adquiridos. 1 La información de este capítulo es obtenida a partir de la experiencia de los autores en el sector manufacturero, específicamente en empresas de artes gráficas. 12 1.1 DEFINICIÓN DE ENTRADAS DEL PROBLEMA Es de vital importancia realizar una buena definición de las entradas que influyen en su problema, dado que con base en ellas se desarrollará el proceso que intentará solucionar el problema específico. Para este problema se definen las variables especificadas a continuación. 1.1.1 Orden de Producción. La orden de producción (OP) corresponde a la orden que el área de ingeniería de producto o planeación hace a la planta de producción, en la cual consigna todas las especificaciones técnicas necesarias para llevar a cabo la producción del producto según lo acordado previamente con el cliente. Adicionalmente, en la OP se ingresan los datos correspondientes a cantidades, fechas de entrega, condiciones de negociación y aspectos técnicos adicionales de relevancia para el proceso productivo. De acuerdo a lo anterior y según el conocimiento y la experiencia de la industria gráfica y manufacturera, el área de ingeniería de producto o planeación plasma en la orden de producción la respuesta a las preguntas: ¿qué se hace? y ¿cómo se hace? 1.1.1.1 Características de la orden de producción. A continuación se presentan las características de la orden de producción que se tendrán en cuenta para el desarrollo del algoritmo propuesto. Cantidad: Es la cantidad de ejemplares o productos completos que la planta de producción debe elaborar. Fecha de entrega: La fecha de entrega corresponde al día en que se debe terminar de procesar la orden de producción en la planta para preparar la entrega del producto terminado al cliente. 13 1.1.2 Proceso. Es la acción o actividad que se ejecuta durante el proceso productivo sobre una orden de producción o parte de ella, en consecuencia, el proceso siempre es ejecutado por un centro de producción. En cualquier planta de producción un proceso debe poder ser ejecutado por al menos un centro de producción, sin importar si la acción se desempeña de forma manual o automática. 1.1.2.1 Características del proceso. A continuación se presentarán las características del proceso que se tendrán en cuenta para el desarrollo del algoritmo propuesto. Predecesor: Esta característica es de vital importancia para la programación de la planta de producción ya que corresponde al proceso que debe ser ejecutado antes de realizarse el proceso actual. Para este trabajo se define que un proceso sólo puede tener un predecesor, aunque no necesariamente deba tener uno. 1.1.3 Centro de Producción. Como centro de producción (CP) puede catalogarse el lugar específico en el que se desarrolla uno o más 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 producción o automático en el que una máquina ejecuta acciones o actividades sobre una orden de producción. Con base en los anteriores conceptos, se puede concluir que el CP es la máquina, persona o grupo de personas que ejecutan una serie de procesos sobre la orden 14 de producción 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 producción ejecuta dos procesos simultáneamente sobre una OP, éstos deben ser agrupados y nombrados como uno solo para que se puedan llevar a la programación en la planta. 1.1.3.1 Características del centro de producción. A continuación se presentarán las características del centro de producción que se tendrán en cuenta para el desarrollo del algoritmo propuesto. Disponibilidad: Es una variable sumamente importante para la programación de la planta ya que expresa el tiempo en horas al día que el centro de producción está disponible para ejecutar los procesos. Procesos que ejecuta: Esta es una lista de los procesos que pueden ser ejecutados en el centro de producción. En cada uno de los procesos se debe especificar su rendimiento. Rendimiento por proceso: Corresponde a la cantidad de unidades que el centro de producción puede hacer por hora ejecutando un proceso determinado. 1.1.4 Orden de Trabajo La orden de trabajo (OT) es la especificación técnica en cuanto a la ejecución de los procesos, los tiempos en que deben ser ejecutados y las cantidades que deben salir al fin de la ejecución. Una orden de trabajo corresponde a un solo centro de producción y a un único proceso a ser ejecutado en dicho centro, por lo tanto se crean tantas órdenes de trabajo por orden de producción como procesos se empleen para realizarla. 15 Las órdenes de trabajo se crean de acuerdo a la explosión de procesos que se hace en la ingeniería de producto o planeación. 1.1.4.1 Características de la orden de trabajo. A continuación se presentarán las características de la orden de trabajo que se tendrán en cuenta para el desarrollo del algoritmo propuesto. Orden de producción: Orden de producción a la cual pertenece la orden de trabajo. Proceso: Identifica el proceso que se debe ejecutar en la orden de trabajo. Centro de producción: Así como el proceso, esta característica identifica el centro de producción que ejecutará el proceso correspondiente. Prioridad: La prioridad es puesta por defecto desde ingeniería de producto o planeación con el mismo nivel para todas las órdenes de trabajo nuevas, sin embargo, el programador de la planta de producción puede modificar la prioridad en caso de que se deba ejecutar una orden de trabajo en cierto orden específico, dando una prioridad mayor a esta en el proceso de programación. Cantidad: Contrario a lo que se puede pensar, la cantidad de la OT no siempre corresponde a la cantidad de la orden de producción. Con mayor exactitud, en la OT la cantidad refleja el número de unidades que se deben procesar. En la mayoría de los procesos, la cantidad a ejecutar es mayor a la cantidad de la orden de producción, dado que se agregan desperdicios o en algunos casos de acuerdo al proceso, este se debe ejecutar dos o más veces. Se debe aclarar que esta cantidad es determinada por el proceso de ingeniería de producto o planeación de la orden de producción. Eficiencia: Corresponde a la eficiencia con que el centro de producción ejecuta un proceso en una orden de trabajo determinada, por defecto, la 16 eficiencia es definida en planeación, pero igualmente el programador puede cambiar la eficiencia de acuerdo a las condiciones físicas del trabajo a realizar. Tiempo: De acuerdo al rendimiento que tiene el centro de producción 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 característica se ingresa durante el proceso de programación ya que es allí cuando se conoce el tiempo de ejecución. Fecha de inicio: De acuerdo al proceso de programación esta variable es calculada y corresponde a la fecha y hora en que el centro de producción debe empezar a procesar la orden de trabajo. Fecha final: Es el resultado de sumar a la fecha de inicio de ejecución del proceso, el tiempo que se tarda en realizarse el mismo, es decir, corresponde a la fecha y hora en que el centro de producción debe finalizar la ejecución de la orden de trabajo. 1.2 ¿CUAL ES LA PROPUESTA PARA SOLUCIONARLO? La ilustración 1 muestra la forma analítica de solucionar el problema, tal y como se hace en varias empresas de artes gráficas: 17 Ilustración 1 - Pasos para solucionar analíticamente el problema de programación de planta de producción En las soluciones analíticas del problema, resulta bastante complicado agregar variables de decisión, tales como dividir el trabajo para que sea ejecutado paralelamente, o ejecutar el trabajo utilizando un recurso más eficiente o por lo menos diferente al inicialmente configurado. 18 De igual forma, cuando el número de órdenes de producción crece o se introducen nuevas variables, hacer el análisis se vuelve una tarea dispendiosa y complicada. Debido al anterior panorama, se propone dar solución al problema mediante la utilización de la técnica de algoritmos genéticos. 19 2 PARA COMENZAR CON ALGORITMOS GENÉTICOS 2.1 ¿QUÉ SON LOS ALGORITMOS GENÉTICOS? Los algoritmos genéticos (AG) son métodos utilizados para resolver problemas complejos de búsqueda y optimización, inspirados en la naturaleza y específicamente en el proceso evolutivo de los seres vivos. Según Charles Darwin [7], a lo largo de las generaciones, las poblaciones evolucionan en la naturaleza de acorde con los principios de la selección natural y la supervivencia de los más aptos. El medio ambiente ejerce una presión 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 características pasan a la siguiente generación. Estas características son transmitidas por los padres a sus hijos a través de los genes. Por imitación de este proceso, los AG son capaces de ir creando soluciones para problemas del mundo real. La evolución de dichas soluciones hacia valores óptimos del problema, depende en buena medida de una adecuada evaluación de las mismas. Goldberg en [1] define los algoritmos genéticos de la siguiente manera. “Los algoritmos genéticos, AG, con algoritmos de búsqueda basados en mecanismos de selección y de genética natural. Ellos combinan la ley del más fuerte entre estructuras de cadenas con intercambio de información estructurada y aleatoria para formar un algoritmo de búsqueda con algunas de las innovadoras bondades de la búsqueda humana. En cada generación, es creado un nuevo conjunto de criaturas artificiales usando bits y partes de los más fuertes de las anteriores 20 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 información histórica para especular en nuevos puntos de búsqueda con una mejora esperada en la ejecución.” 2.2 DESCRIPCIÓN DEL FUNCIONAMIENTO DE LOS AG De acuerdo a lo planteado en [2], es posible observar el esquema general del funcionamiento de un algoritmo genético a través de la ilustración 2. Ilustración 2 - Esquema general del funcionamiento de un AG 21 Cada uno de los elementos, operadores y procesos que componen un AG son ilustrados a continuación mediante un ejemplo práctico. 2.2.1 Problema de optimización En [2] se encuentra el siguiente problema en el cual se desea maximizar la siguiente función: Ilustración 3 - Gráfica de la función a optimizar 𝑴𝒂𝒙𝒊𝒎𝒊𝒛𝒂𝒓 𝒇(𝒙𝟏 , 𝒙𝟐 ) = 𝟐𝟏. 𝟓 + 𝒙𝟏 𝐬𝐢𝐧(𝟒𝝅𝒙𝟏 ) + 𝒙𝟐 𝐬𝐢𝐧(𝟐𝟎𝝅𝒙𝟐 ) Como parámetros iniciales se asignan los siguientes intervalos de las variables para reducir el espacio de búsqueda de solución: −𝟑. 𝟎 ≤ 𝒙𝟏 ≤ 𝟏𝟐. 𝟏 𝟒. 𝟏 ≤ 𝒙𝟐 ≤ 𝟓. 𝟖 22 2.2.1.1 Representación del problema La representación del problema es el proceso que permite establecer la forma como un dato va a ser procesado a través 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 características de un elemento, mientras que el fenotipo es el conjunto de características de ese organismo. Para este caso se decide representar el problema en cadenas binarias. La longitud de cada cadena depende de la precisión requerida en la solución. Por ejemplo, el dominio de la variable xj es [aj , bj] y la precisión requerida es de cinco posiciones decimales después del punto. Este parámetro de precisión implica que el rango de dominio de cada variable debería estar dividida en por lo menos (bj - aj) x 105 tamaños. Los bits requeridos (mj ) para una variable se calcula como se muestra a continuación: 2𝑚𝑗−1 < (𝑏𝑗 − 𝑎𝑗 ) × 105 ≤ 2𝑚𝑗 − 1 Una representación de una cadena binaria para un número real de la variable xj es: 𝑥𝑗 = 𝑎𝑗 + 𝑑𝑒𝑐𝑖𝑚𝑎𝑙(𝑠𝑢𝑏𝑠𝑡𝑟𝑖𝑛𝑔𝑗 ) × (𝑏𝑗 − 𝑎𝑗 ) 2𝑚𝑗 − 1 donde 𝑑𝑒𝑐𝑖𝑚𝑎𝑙(𝑠𝑢𝑏𝑠𝑡𝑟𝑖𝑛𝑔𝑗 ) representa el valor decimal de 𝑠𝑢𝑏𝑠𝑡𝑟𝑖𝑛𝑔𝑗 . Si se supone que la precisión se estima en cinco posiciones después del punto decimal, los bits requeridos para las variables x1 y x2 se calculan así: Para x1: (𝑏𝑗 − 𝑎𝑗 ) × 105 = (12.1 − (−3.0)) × 10000 = 𝟏𝟓𝟏𝟎𝟎𝟎 217 < 151000 ≤ 218 → 𝑚1 = 18 23 Para x2: (𝑏𝑗 − 𝑎𝑗 ) × 105 = (5.8 − 4.1) × 10000 = 𝟏𝟕𝟎𝟎𝟎 214 < 17000 ≤ 215 → 𝑚2 = 15 𝒎 = 𝒎𝟏 + 𝒎𝟐 = 𝟑𝟑 Por lo tanto la longitud del cromosoma es de 33 bits y se representa de la siguiente forma: 33 bits 𝑣𝑗 000001010100101001 101111011111110 18 bits 15 bits Para ver la representación de las variables x1 y x2 , los valores correspondientes de las mismas y su conversión a números reales, están dados los siguientes procedimientos: Variable Cadena binaria Número decimal x1 000001010100101001 5417 x2 101111011111110 24318 𝑥1 = −3.0 + 5417 × (12.1 − (−3.0)) = −2,687969 218 − 1 24 𝑥2 = 4.1 + 24318 × 2.2.1.2 (5.8 − 4.1) = 5,361653 215 − 1 Población inicial Una población es una representación abstracta de un segmento o conjunto de individuos. Para el caso específico de los AG, existe una serie de poblaciones que se van generando en la medida en que el algoritmo se ejecuta. La población 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 características de los mejores individuos de las poblaciones anteriores. Para el ejemplo, la población inicial consta de diez (10) individuos generados de forma aleatoria tal y como se muestra a continuación: 𝑣1 = [000001010100101001101111011111110] 𝑣2 = [001110101110011000000010101001000] 𝑣3 = [111000111000001000010101001000110] 𝑣4 = [100110110100101101000000010111001] 𝑣5 = [000010111101100010001110001101000] 𝑣6 = [111110101011011000000010110011001] 𝑣7 = [110100010011111000100110011101101] 𝑣8 = [001011010100001100010110011001100] 𝑣9 = [111110001011101100011101000111101] 𝑣10 = [111101001110101010000010101101010] donde sus respectivos valores reales son: 𝑣1 = [𝑥1 , 𝑥2 ] = [−2.687969, 5.361653] 𝑣2 = [𝑥1 , 𝑥2 ] = [0.470141, 4.170144] 𝑣3 = [𝑥1 , 𝑥2 ] = [10.419457, 4.661461] 𝑣4 = [𝑥1 , 𝑥2 ] = [6.159951, 4.109598] 𝑣5 = [𝑥1 , 𝑥2 ] = [−2.301286, 4.477282] 𝑣6 = [𝑥1 , 𝑥2 ] = [11.788084, 4.174346] 𝑣7 = [𝑥1 , 𝑥2 ] = [9.342067, 5.121702] 𝑣8 = [𝑥1 , 𝑥2 ] = [−0.330256, 4.694977] 𝑣9 = [𝑥1 , 𝑥2 ] = [11.671267, 4.873501] 𝑣10 = [𝑥1 , 𝑥2 ] = [11.446273, 4.171908] 25 2.2.1.3 Evaluación La evaluación es el proceso que permite determinar el valor de un individuo dada una función de comparación denominada función de evaluación. La definición acertada de la función de evaluación 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 búsqueda, 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 evaluación. En algunos casos la convergencia es muy rápida, 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 solución a estos problemas pasa por efectuar transformaciones en la función objetivo. El proceso de evaluación de un cromosoma consiste en los siguientes tres pasos: Convertir el genotipo del cromosoma a su fenotipo. En otras palabras, esto significa convertir la cadena de caracteres a sus valores reales. 𝑥 𝑘 = (𝑥1𝑘 , 𝑥2𝑘 ), 𝑘 = 1,2, … . , 𝑡𝑎𝑚𝑎ñ𝑜 𝑑𝑒 𝑙𝑎 𝑝𝑜𝑏𝑙𝑎𝑐𝑖ó𝑛 Evaluar la función objetivo con los valores anteriormente obtenidos. 𝑓(𝑥 𝑘 ) Convertir el valor de la función objetivo en un valor valido para realizar una evaluación y una posterior comparación. En el caso de este ejercicio, cabe anotar que se utiliza como función de evaluación la misma función objetivo. 26 𝑒𝑣𝑎𝑙(𝑣𝑘 ) = 𝑓(𝑥 𝑘 ), 𝑘 = 1,2, … . , 𝑡𝑎𝑚𝑎ñ𝑜 𝑑𝑒 𝑙𝑎 𝑝𝑜𝑏𝑙𝑎𝑐𝑖ó𝑛 Los valores de evaluación de cada cromosoma se muestran a continuación: 𝑒𝑣𝑎𝑙(𝑣1 ) = 𝑓(−2.687969, 5.361653) = 19.805119 𝑒𝑣𝑎𝑙(𝑣2 ) = 𝑓(0.470141, 4.170144) = 17.370896 𝑒𝑣𝑎𝑙(𝑣3 ) = 𝑓(10.419457, 4.661461) = 9.590546 𝑒𝑣𝑎𝑙(𝑣4 ) = 𝑓(6.159951, 4.109598) = 29.406122 𝑒𝑣𝑎𝑙(𝑣5 ) = 𝑓(−2.301286, 4.477282) = 15.686091 𝑒𝑣𝑎𝑙(𝑣6 ) = 𝑓(11.788084, 4.174346) = 11.900541 𝑒𝑣𝑎𝑙(𝑣7 ) = 𝑓(9.342067, 5.121702) = 17.958717 𝑒𝑣𝑎𝑙(𝑣8 ) = 𝑓(−0.330256, 4.694977) = 19.763190 𝑒𝑣𝑎𝑙(𝑣9 ) = 𝑓(11.671267, 4.873501) = 26.401669 𝑒𝑣𝑎𝑙(𝑣10 ) = 𝑓(11.446273, 4.171908) = 10.252480 De acuerdo a la anterior evaluación es simple ver que el cromosoma v4 es el más fuerte, mientras que el cromosoma v3 es el más débil. 2.2.1.4 Selección La selección es la encargada de transmitir y conservar aquellas características de las soluciones que se consideran valiosas a lo largo de las generaciones. Existen diversos métodos de selección dentro de los más usados están la selección por ruleta y por torneo. En la ruleta, la probabilidad que tiene un individuo de reproducirse es proporcional a su valor de función de evaluación, es decir, a su adaptación. Si consideramos la población Q que consta de n individuos y a fi como el valor de evaluación de un individuo i que es miembro de Q, la probabilidad pi de seleccionar un individuo i, está dada por: 𝑝𝑖 = 𝑓𝑖 ∑𝑛1 𝑓𝑖 La selección por torneo reporta un valor computacional muy bajo debido a su sencillez. Se selecciona un grupo de t individuos (normalmente t = 2, torneo 27 binario) y se genera un número aleatorio entre 0 y 1. Si este número es menor que un cierto umbral K (usualmente K = 0,75), se selecciona para reproducirse al individuo con mejor adaptación, y si este número es menor que K, se selecciona, por el contrario, al individuo con peor adaptación. En la mayoría de casos, es adoptada la rueda de ruleta como método de selección; con esto se logra una selección proporcional de la evaluación y se puede seleccionar una nueva población con respecto a la distribución de probabilidad basada en los valores de evaluación. Para el ejemplo, la rueda de ruleta puede ser construida de la siguiente forma: Calcular los valores de evaluación eval(vk) de cada cromosoma vk. 𝑒𝑣𝑎𝑙(𝑣𝑘 ) = 𝑓(𝑥), 𝑘 = 1,2, … . , 𝑡𝑎𝑚𝑎ñ𝑜 𝑑𝑒 𝑙𝑎 𝑝𝑜𝑏𝑙𝑎𝑐𝑖ó𝑛 Calcular la evaluación total de la población. 𝑡𝑎𝑚𝑎ñ𝑜 𝑝𝑜𝑏 𝐹= ∑ 𝑒𝑣𝑎𝑙(𝑣𝑘 ) 𝑘=1 Calcular la probabilidad de selección pk de cada cromosoma vk. 𝑝𝑘 = 𝑒𝑣𝑎𝑙(𝑣𝑘 ) , 𝑘 = 1,2, … . , 𝑡𝑎𝑚𝑎ñ𝑜 𝑑𝑒 𝑙𝑎 𝑝𝑜𝑏𝑙𝑎𝑐𝑖ó𝑛 𝐹 Calcular la probabilidad de selección acumulada qk para cada cromosoma vk. 𝑘 𝑞𝑘 = ∑ 𝑝𝑗 , 𝑘 = 1,2, … . , 𝑡𝑎𝑚𝑎ñ𝑜 𝑑𝑒 𝑙𝑎 𝑝𝑜𝑏𝑙𝑎𝑐𝑖ó𝑛 𝑗=1 El proceso de selección inicial lanzando la rueda de ruleta n veces, donde n es igual al tamaño de la población; cada vez que se lance la ruleta, un cromosoma simple es seleccionado para una nueva población de la siguiente forma: 28 Generar un número aleatorio r dentro del rango [0, 1]. Si 𝑟 ≤ 𝑞1 , entonces se selecciona el cromosoma v1; en caso contrario se selecciona el kesimo cromosoma 𝑣𝑘 (2 ≤ 𝑘 ≤ 𝑡𝑎𝑚𝑎ñ𝑜 𝑑𝑒 𝑙𝑎 𝑝𝑜𝑏𝑙𝑎𝑐𝑖ó𝑛) tal que 𝑞𝑘−1 < 𝑟 ≤ 𝑞𝑘 . La evaluación total de la población es: 10 𝐹 = ∑ 𝑒𝑣𝑎𝑙(𝑣𝑘 ) = 178.135372 𝑘=1 La probabilidad de selección 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 La probabilidad de selección 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 población. Una secuencia aleatoria de diez números entre el rango [0,1] se muestra a continuación: 0.301431 0.322062 0.766503 0.881893 0.350871 0.583392 0.177618 0.343242 0.032685 0.197577 29 El primer número aleatorio r1 = 0.301431 es más grande que la probabilidad acumulada q3 y es más pequeño que q4, lo que significa que el cromosoma v4 es seleccionado para la nueva población; el segundo número aleatorio r2 = 0.322062 es más grande que q3 y es más pequeño que q4, con lo cual nuevamente el cromosoma v4 es seleccionado para la nueva población. Una vez realizado el análisis de los diez números aleatorios la nueva población está conformada de la siguiente forma: 𝑣′1 = [100110110100101101000000010111001] (𝑣4 ) 𝑣′2 = [100110110100101101000000010111001] (𝑣4 ) 𝑣′3 = [001011010100001100010110011001100] (𝑣8 ) 𝑣′4 = [111110001011101100011101000111101] (𝑣9 ) 𝑣′5 = [100110110100101101000000010111001] (𝑣4 ) 𝑣′6 = [110100010011111000100110011101101] (𝑣7 ) 𝑣′7 = [001110101110011000000010101001000] (𝑣2 ) 𝑣′8 = [100110110100101101000000010111001] (𝑣4 ) 𝑣′9 = [000001010100101001101111011111110] (𝑣1 ) 𝑣′10 = [001110101110011000000010101001000] (𝑣2 ) 2.2.1.5 Cruce El operador de cruce permite realizar una exploración de toda la información almacenada hasta el momento en la población y combinarla para crear mejores individuos. Es una buena idea que, tanto la codificación como la técnica de cruce, se hagan de manera que las características 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 técnica de mejor adaptación a un problema específico, 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 creación de un individuo que combine las mejores características de los padres. 30 Para realizar el cruce entre parejas de cromosomas se utiliza el método de “un punto de corte” en el cual se selecciona aleatoriamente un punto de corte con rango [1, tamaño 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 población 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 𝑣1 = [0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 0] 𝑣2 = [0 0 1 1 1 0 1 0 1 1 1 0 0 1 1 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 0 0] Los cromosomas resultantes del intercambio de los genes a la derecha del punto de corte son: 𝑣′1 = [0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 0 0] 𝑣′2 = [0 0 1 1 1 0 1 0 1 1 1 0 0 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 0] 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 números 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 v’5 y v’7 son seleccionados para ser cruzados. Si se lanza un nuevo número aleatorio con rango [1, 33] para elegir el punto de corte (se obtuvo el número 15) se obtiene la siguiente operación: 31 Punto de corte 𝑣′5 = [1 0 0 1 1 0 1 1 0 1 0 0 1 0 1 1 0 1 0 0 0 0 0 0 0 1 0 1 1 1 0 0 1] 𝑣′7 = [0 0 1 1 1 0 1 0 1 1 1 0 0 1 1 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 0 0] Los nuevos hijos resultantes de la operación de cruce son: 𝑣′5 = [1 0 0 1 1 0 1 1 0 1 0 0 1 0 1 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 0 0] 𝑣′7 = [0 0 1 1 1 0 1 0 1 1 1 0 0 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1 1 1 0 0 1] 2.2.1.6 Mutación La mutación se considera un operador básico, que proporciona un pequeño elemento de aleatoriedad en el entorno de los individuos de la población mediante la alteración de uno o más genes con una probabilidad igual a la tasa de mutación. Si bien se admite que el operador de cruce es el responsable de efectuar la búsqueda a lo largo del espacio de posibles soluciones (exploración), también parece desprenderse de los experimentos efectuados por varios investigadores que el operador de mutación realiza una explotación de la población y va ganando en importancia a medida que la población de individuos va convergiendo. El objetivo del operador de mutación es producir nuevas soluciones a partir de la modificación de un cierto número de genes de una solución existente, con la intención de fomentar la variabilidad dentro de la población. Existen diversas formas de realizar la mutación, desde la más sencilla, donde cada gen muta aleatoriamente con independencia del resto de genes, hasta configuraciones más complejas donde se tienen en cuenta la estructura del problema y la relación 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 representación del mismo. 32 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 mutación 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 v’1 para el ejemplo y se asume que el gen a cambiar es el 18vo la operación de mutación se puede describir de la siguiente forma: Gen a cambiar 𝑣′1 = [1 0 0 1 1 0 1 1 0 1 0 0 1 0 1 1 0 1 0 0 0 0 0 0 0 1 0 1 1 1 0 0 1] El nuevo cromosoma v’1 es: 𝑣′1 = [1 0 0 1 1 0 1 1 0 1 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 1 0 1 1 1 0 0 1] Retomando el ejemplo, se torna un poco arbitrario elegir un mismo gen a mutar en cada cromosoma, por lo que se utiliza el siguiente método de elección del gen a mutar: Se establece como probabilidad de mutación pm = 0.01, lo cual indica que solo el 1% de los cromosomas tienden a ser mutados. Se genera una secuencia de números aleatorios rk (k = 1,2,…,330) entre el rango [0,1] con el fin de generar una probabilidad de mutación independiente para cada uno de los genes de la población (La población contiene diez individuos cada uno con 33 genes), la cual arroja los siguientes resultados: 33 Posición Bit Cromosoma No. Bit No. rk 105 164 199 329 4 5 7 10 6 32 1 32 0.009857 0.003113 0.000946 0.001282 Los genes a mutar y sus respectivos cromosomas según lo anterior son: 𝑣′4 = [111110001011101100011101000111101] 𝑣′5 = [100110110100101000000010101001000] 𝑣′7 = [001110101110011101000000010111001] 𝑣′10 = [001110101110011000000010101001000] Al realizar la operación de mutación los nuevos cromosomas quedan de la siguiente forma: 𝑣′4 = [111111001011101100011101000111101] 𝑣′5 = [100110110100101000000010101001010] 𝑣′7 = [101110101110011101000000010111001] 𝑣′10 = [001110101110011000000010101001010] 2.2.1.7 Una nueva población Cada iteración del algoritmo arroja una nueva población en la que se espera encontrar individuos cada vez mejor adaptados al problema planteado. En este caso, después de realizar las operaciones descritas anteriormente la nueva población generada es la siguiente: 𝑣′1 = [100110110100101101000000010111001] 𝑣′2 = [100110110100101101000000010111001] 𝑣′3 = [001011010100001100010110011001100] 𝑣′4 = [111111001011101100011101000111101] 𝑣′5 = [100110110100101000000010101001010] 𝑣′6 = [110100010011111000100110011101101] 𝑣′7 = [101110101110011101000000010111001] 𝑣′8 = [100110110100101101000000010111001] 𝑣′9 = [000001010100101001101111011111110] 𝑣′10 = [001110101110011000000010101001010] 34 Los valores reales correspondientes a cada cromosoma y su respectiva evaluación es la siguiente: 𝑒𝑣𝑎𝑙(𝑣′1 ) = 𝑓(6.159951, 4.109598) = 29.406122 𝑒𝑣𝑎𝑙(𝑣′2 ) = 𝑓(6.159951, 4.109598) = 29.406122 𝑒𝑣𝑎𝑙(𝑣′3 ) = 𝑓(−0.330256, 4.694977) = 19.763190 𝑒𝑣𝑎𝑙(𝑣′4 ) = 𝑓(11.907206, 4.873501) = 5.702781 𝑒𝑣𝑎𝑙(𝑣′5 ) = 𝑓(8.024130, 4.170248) = 19.91025 𝑒𝑣𝑎𝑙(𝑣′6 ) = 𝑓(9.342067, 5.121702) = 17.958717 𝑒𝑣𝑎𝑙(𝑣′7 ) = 𝑓(6.159951, 4.109598) = 29.406122 𝑒𝑣𝑎𝑙(𝑣′8 ) = 𝑓(6.159951, 4.109598) = 29.406122 𝑒𝑣𝑎𝑙(𝑣′9 ) = 𝑓(−2.687969, 5.361653) = 19.805119 𝑒𝑣𝑎𝑙(𝑣′10 ) = 𝑓(0.474101, 4.170248) = 17.370896 Hasta este punto se ha completado la primera iteración del algoritmo genético. La prueba en general corre 1000 iteraciones en la que se obtienen igual número de generaciones. En la prueba, se obtiene el mejor cromosoma en la 419na generación que tiene los valores descritos a continuación: 𝑣 ∗ = [111110000000111000111101001010110] 𝑒𝑣𝑎𝑙(𝑣 ∗ ) = 𝑓(11.631407, 5.724824) = 38.818208 𝑥1∗ = 11.631407 𝑥2∗ = 5.724824 𝒇(𝒙∗𝟏 , 𝒙∗𝟐 ) = 𝟑𝟖. 𝟖𝟏𝟖𝟐𝟎𝟖 35 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 genéticos y que de alguna forma tienen relación con la programación de planta de producción. 3.1.1 Programación de tienda abierta. En [4] es posible observar cómo por medio de la utilización de algoritmos genéticos sus autores afrontan Open-Shop, que corresponde a un problema de planificación o elaboración de calendarios, donde todos los trabajos tienen el mismo número de operaciones, cada operación se realiza en una máquina específica, pero no existe ninguna relación de precedencia entre las operaciones. Esta aproximación es un interesante trabajo debido a que hace una implementación similar a lo que se busca en el presente trabajo, aunque no cubre uno de los puntos vitales de la programación de una planta de producción como lo es el manejo de dependencias entre procesos. 3.1.2 Programación de producción En [5] se trata el problema de programación de producción, haciendo énfasis en tres factores: dependencias, averías y reparaciones de máquinas. En este trabajo se hace un hibrido, como lo llaman sus autores, entre algoritmos genéticos y simulación, utilizando los algoritmos genéticos para optimizar la 36 programación de la producción y la simulación para minimizar los tiempos de ejecución de los algoritmos genéticos. 3.1.3 Secuenciación dinámica En [6] se encuentra un análisis acerca de la implementación de sistemas de aprendizaje automático para resolver problemas de secuenciación dinámica que es en esencia la planeación y la programación. En [6] es posible observar que en la programación no es tenida en cuenta las prioridades que tiene cada trabajo o cada orden de producción, sin embargo es un trabajo realizado en el campo en el que se enmarca el proyecto. 3.2 DEFINICIONES PROPIAS DEL ALGORITMO GENÉTICO Gráficamente, el modelo general del algoritmo genético propuesto se muestra a en la ilustración 4. Ilustración 4 - Modelo general del AG propuesto A continuación se detalla cada componente del algoritmo genético, con el fin de realizar algunas precisiones necesarias. 37 3.2.1 Individuos Para el algoritmo propuesto, como individuo se definió una programación total de la planta de producción, la cual se compone de un número determinado de órdenes de producción organizadas de acuerdo a los parámetros considerados en el numeral 3.3. Cabe recordar que la programación de cada orden de producción contiene una serie de órdenes de trabajo que son cada una de las labores ejecutadas para realizar el trabajo solicitado. Un ejemplo de la programación de una orden de producción se muestra a continuación: 15 1 10.000,00 1 Tiempo de proceso 0,733729547 15 15 15 15 15 15 15 15 2 3 4 5 6 7 8 9 20.000,00 10.000,00 20.000,00 25.000,00 10.000,00 25.000,00 10.000,00 5.000,00 1 1 1 1 1 1 1 1 1,684494231 0,796622321 3,306331625 3,109839532 0,744601638 1,947040498 2,296211251 0,364298725 05/04/2009 05/04/2009 05/04/2009 05/04/2009 05/04/2009 05/04/2009 05/04/2009 05/04/2009 15 10 15.000,00 1 1,578615028 05/04/2009 03:35:18 OP CP Cantidad Eficiencia Fecha inicial Fecha final 05/04/2009 02:51:16 05/04/2009 03:35:18 05/04/2009 05/04/2009 05/04/2009 05/04/2009 05/04/2009 05/04/2009 05/04/2009 05/04/2009 02:51:16 03:35:18 03:35:18 03:35:18 03:35:18 03:35:18 03:35:18 03:35:18 04:32:20 04:23:05 06:53:40 06:41:53 04:19:58 05:32:07 05:53:04 03:57:09 05/04/2009 05:10:01 3.2.2 Cromosomas En concordancia con lo explicado acerca de la conformación 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 información 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 información que está relacionada en el numeral 1.1.4.1. 38 3.3 GENERACIÓN DE LA POBLACIÓN INICIAL Como punto de partida para el algoritmo, se establece una población de diez individuos; programaciones completas y diferentes de la planta de producción. La diferencia entre las programaciones de planta de producción radica en que cada una se realiza de acuerdo a los siguientes parámetros de ordenamiento previamente establecidos: Número de orden de producción ascendente y número de orden de trabajo ascendente. Número de orden de producción ascendente y número de orden de trabajo descendente. Número de centro de producción ascendente y número de orden de trabajo ascendente. Número de centro de producción ascendente y número de orden de trabajo descendente. Número de orden de producción ascendente y cantidad de la orden de trabajo ascendente. Número de orden de producción ascendente y cantidad de la orden de trabajo descendente. Cantidad de la orden de trabajo ascendente y número de la orden de trabajo ascendente. Cantidad de la orden de trabajo descendente y número de la orden de trabajo ascendente. Prioridad de la orden de trabajo ascendente. Prioridad de la orden de trabajo descendente. Así mismo, cada programación de planta de producción involucra la totalidad de órdenes de producción con una serie de órdenes de trabajo determinadas. 39 3.4 PROCESO DE SELECCIÓN Dentro de los procesos de selección disponibles se eligió el método de sorteo por rueda de ruleta. Este método se aplica a cada uno de los individuos con el fin de obtener aquellos que serán cruzados y/o mutados y está basado en la tasa proporcional de evaluación asignada a cada uno de ellos. Los pasos que se realizan para establecer la selección son los siguientes: Se establece el valor de cada individuo según la función de evaluación establecida para el algoritmo. Se halla la evaluación total de la población, 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 población (Se divide la evaluación del individuo entre la evaluación de la población). 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 número aleatorio r con rango entre [0, 1]. Finalmente el individuo se obtiene de comparar el número 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 características de los individuos con el fin utilizarlas como partes en la generación de nuevos individuos. 40 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 programación de una orden de producción entre dos individuos. La orden de producción a cambiar se selecciona aleatoriamente en un rango de [1, Número total de OP]. La decisión de aleatoriedad en la selección de la OP tiene como fundamento dos factores; el primero tiene como objetivo cumplir con una de las premisas que tiene la operación 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 población. Cambiar la fecha final del último proceso ejecutado en la misma orden de producción 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 generación de las nuevas poblaciones y a que en la actividad de permutación es posible realizar el recálculo de las fechas de finalización de las órdenes de trabajo. Es conveniente indicar que el proceso de selección de los individuos a cruzar, se establece con los parámetros establecidos en el numeral anterior. 41 3.6 PROCESO DE MUTACIÓN Mediante el operador de mutación se intenta realizar un cambio pequeño en el individuo que genere a su vez una pequeña modificación en su información, pero que sea significativo en cuanto al reprocesamiento de las órdenes de trabajo y de la función de evaluación. Como procedimientos candidatos a ser un operador de mutación se tienen los siguientes: Cambiar el centro de producción en el que se realiza una orden de producción, por otro que se encuentre disponible. Esto con el fin de realizar el mismo trabajo en el nuevo centro de producción, 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 más tiempo demanden de un centro de producción y realizarlas, si es posible, en dos o más CP que estén disponibles. Con este procedimiento se puede obtener una mejora en los tiempos generales de terminación de la orden de producción, debido a que en la medida en que estén disponibles otros centros de producción, un trabajo o proceso determinado puede realizarse simultáneamente en ellos. Retrasar las fechas de inicio de las órdenes de trabajo que más tiempo demanden de un centro de producción. Esto implica cambiar el orden de elaboración de los trabajos en un centro de producción dando prioridad a aquellas que más tiempo tarden en realizarse. En la implementación del AG, se va a considerar la segunda opción de mutación, debido a que permite realizar más cambios en el procesamiento del individuo. 42 3.7 DEFINICIÓN DE LA FUNCIÓN DE EVALUACIÓN (FITNESS) La función de evaluación es aquella que permite medir a cada uno de los individuos generados en una determinada población. Esta función tiene una serie de parámetros o variables que permiten llevar a cabo la mencionada evaluación del individuo. Las variables a tener en cuenta en esta función son las siguientes: 3.7.1 Cumplimiento (C ) Una orden de producción se cumple cuando se termina la ejecución 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 colisión 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 producción. 3.7.3 Ocupación de centros de producción (P ) La ocupación de cada centro de producción 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 ocupación de centros de producción corresponde al promedio de ocupación que tienen todos los centros de producción que se encuentran programados en el individuo. 43 3.8 FUNCIÓN DE EVALUACIÓN (FITNESS) A cada una de las variables anteriormente citadas se le asigna un grado de importancia (W ) dentro de la función de evaluación. Este grado se ve representado en un porcentaje para cada una de las variables e indica que tan importante es la variable en la evaluación de los individuos. Teniendo en cuenta los anteriores conceptos la función que utiliza el algoritmo genético propuesto para evaluar a cada uno de sus individuos es la siguiente: 𝐹 = 𝑊𝐶 𝐶 + 𝑊𝑃 𝑃 + 𝑊𝑇 𝑇 con 𝑊𝐶 , 𝑊𝑃 , 𝑊𝑇 > 0 𝑦 𝑊𝐶 + 𝑊𝑃 + 𝑊𝑇 = 1 44 4 EVALUACIÓN DE PROTOTIPOS 4.1 CONDICIONES PARA LA GENERACIÓN DE PROTOTIPOS 4.1.1 Datos de trabajo Cada prototipo que se genere tendrá como datos de trabajo los siguientes: Ítem Centros de producción Procesos Ordenes de producción Ordenes de trabajo Cantidad 93 25 20 276 Los centros de producción y los procesos se tomaron de la información que en general se maneja en una empresa de artes gráficas, las ordenes de producción 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 gráfica, a los procesos necesarios se les creó el proceso que lo precede para hacer la programación de la planta. De igual forma se crearon los procesos que se ejecutan en cada centro de producción. 4.1.2 Proceso de selección Para cada individuo se calcula el porcentaje de su evaluación con respecto al total de la población. Se organiza dicho porcentaje ascendentemente. Se genera un número aleatorio n entre 0 y 1 y se elige el individuo cuyo porcentaje acumulado de evaluación es inmediatamente menor que n. 45 4.1.3 Probabilidades de cruce y mutación Probabilidad de Cruce 75% Probabilidad de Mutación 10% Método de selección Ruleta 4.2 PROTOTIPO 01 4.2.1 Condiciones del algoritmo. Se destacan las siguientes condiciones para la generación del prototipo. 4.2.1.1 Función de cruce. La función de cruce intercambia entre los dos individuos seleccionados todas las órdenes de trabajo de una orden de producción. La orden de producción que se cruza es elegida de manera aleatoria entre la cantidad total de ordenes de producción en el individuo. 4.2.1.2 Función de mutación. La función de mutación consiste en dividir en dos partes iguales la cantidad a procesar de una orden de trabajo para que sea ejecutada cada una simultáneamente en dos centros de producción diferentes. La función de mutación se ejecuta a la orden de trabajo que tiene mayor duración en horas. 46 4.2.2 Resultados del prototipo 01 Ilustración 5 – Vista previa de la ejecución del prototipo 01 En este prototipo, los individuos están recibiendo la misma calificación, es decir, el resultado de la función de evaluación es igual para todos. Se comprobó que en cada generación la mayoría de individuos son iguales. 4.2.3 Análisis de la situación en el prototipo 01. Los datos de prueba se deben plantear de forma diferente o en mayor cantidad ya que en este momento sólo hay 20 órdenes de producción 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. Sólo 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 47 ejecución) pero no se está haciendo la reprogramación de la ejecución de los procesos de la orden dividida para que se permita disminuir la fecha de entrega de la orden de producción. 4.2.4 Acciones para el siguiente prototipo. En pro de mejorar los resultados se tomarán las siguientes: Cuando se ejecute la función de mutación en el individuo se deberá hacer una reprogramación de la misma para que se corran los procesos y se pueda cumplir o terminar la orden de producción en menor tiempo. 4.2.5 Consideraciones para tener en cuenta en el próximo prototipo. En este momento el algoritmo se detiene cuando se completa un número 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 producción estén ocupados al 100% La evaluación de ocupación de centro de producción, si uno de éstos presenta ocupación de más del 100% se está dejando ese valor para medir el promedio del individuo; se plantea que si la ocupación del centro de producción sobrepasa el 100% solo se debe tomar hasta el 100% para no dañar el promedio. Se plantea que para la función de mutación se debería tomar los centros de mayor ocupación (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 producción, es decir, las horas disponibles por día para el centro. 48 4.3 PROTOTIPO 02 4.3.1 Condiciones del algoritmo. Se realizaron las los siguientes cambios en el algoritmo para la generación del prototipo. 4.3.1.1 Función de mutación. Para la función de mutación se aplicaron dos acciones: Cuando se haga la división de la cantidad en la orden de trabajo se hará una reprogramación corriendo las órdenes de trabajo siguientes. 4.3.2 Resultados del prototipo 02 Ilustración 6 – Vista previa de la ejecución del prototipo 02 49 4.3.3 Análisis de la situación en el prototipo 02. El prototipo ahora está cambiando de generación en generación, el resultado de la función de evaluación está tomando valores diversos dentro de cada una y así mismo en el mejor individuo que se obtiene en cada nueva generación. 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 mayoría, lo que significa que hasta ahora el algoritmo está muy inestable y se debe corregir esta situación, como posibles causas del inconveniente se han identificado las siguientes: Cuando se ejecuta la función de mutación se está haciendo reprogramación, pero este proceso se está ejecutando sobre el centro de producción, es decir, se corren todos los trabajos programados en el centro de producción hacia atrás, lo que ciertamente reduce el tiempo de ejecución de una orden de producción, pero en la reprogramación no se está verificando si el proceso que se va a correr hacia atrás cumple con la precedencia necesaria del proceso anterior. Es posible que el factor que está haciendo la diferencia entre los individuos sea la evaluación de colisiones ya que con el cruce se están generando más colisiones. Al realizar la función de cruce no se está haciendo reprogramación 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 iteración. 50 Cuando se corra la función de cruce se debe hacer una reprogramación de las órdenes de trabajo para que no se generen colisiones. La función de mutación se va a cambiar para que la orden de trabajo a la que se divida la cantidad no sea la que más tiempo se demore, si no que se va a buscar una de las ordenes de producción que no terminan a tiempo y de esta se va a escoger la orden de trabajo más demorada. 4.4 PROTOTIPO 03 4.4.1 Condiciones del algoritmo. Para la generación del prototipo 03 se realizaron las siguientes acciones: 4.4.1.1 Función de mutación. La función de mutación se modificó para que en lugar de buscar la orden de trabajo que tenía mayor tiempo de duración se buscaran primero las órdenes de producción que no se cumplían y luego si tomar la orden de trabajo de mayor duración. Se identificó que la reprogramación de las órdenes de trabajo no se debe hacer por el centro de producción sino por la orden de producción, de tal forma que sean las órdenes de trabajo las que se corran hacia atrás para poder cumplir más rápido la orden de producción. 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 programación se constituye este como un resultado satisfactorio para el trabajo. 51 4.4.3 Análisis de la situación 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 generación tiende a disminuir en el resultado de su función de evaluación, adicionalmente en muy pocas ocasiones el comportamiento de cada generación con respecto a la anterior es estable. Se identificaron posibles causas para obtener éstos resultados: En la función de mutación se está seleccionando de las ordenes de producción no cumplidas la orden de trabajo que más 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 producción, por lo que sin importar si se divide el trabajo en varios centros de producción tarda mucho en que la orden se cumpla. Una vez se llega al 100% de cumplimiento, la función de mutación 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 más temprano sin lograr deshacer las colisiones. 4.4.4 Acciones para el siguiente prototipo. Las siguientes acciones se deberán ejecutar para el próximo prototipo, y están enfocadas principalmente a la convergencia del algoritmo, a estabilizar el resultado de la función de evaluación del mejor individuo con cada nueva generación y a facilitar el análisis de los datos de rendimiento y mejora entre generaciones. La función de mutación dividirá las órdenes de trabajo cuya fecha inicial sea menor a la fecha de entrega de la orden de trabajo. En la función de mutación, cuando el cumplimiento del individuo esté en el 100%, se deberá disolver una colisión haciendo uso de otro centro de 52 producción que en el que se pueda ejecutar el proceso, si no se puede ejecutar en otro centro de producción, entonces se hará reprogramación del centro de producción. Se implementará una tabla de resultados en la que se mostrarán los mejores individuos de cada generación, con el fin de correr varias veces el algoritmo y así hacer análisis más fácilmente. 4.5 PROTOTIPO 04 4.5.1 Condiciones del algoritmo. Para ejecutar este prototipo se realizaron las acciones que se describen a continuación. 4.5.1.1 Función de mutación. Cuando una orden de producción no se encuentre en el 100% de cumplimiento y el proceso que consume más tiempo empieza después de la fecha de entrega de la orden de producción, 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 producción. Cuando un individuo llegue al 100% de cumplimiento, no se debe hacer división de cantidad de ninguna orden de trabajo, por el contrario se deben buscar las órdenes de trabajo que se encuentra en colisión y hacer la transferencia de una de ellas a otro centro de producción donde se pueda ejecutar. 4.5.1.2 Presentación de datos Se implementó una tabla de datos en la cual se ven reflejados los mejores individuos de cada generación. El cambio anterior se realizó con el objetivo de 53 hacer análisis rápido de cada ejecución del algoritmo, en esta tabla se puede ver de cada mejor individuo la generación en que se creó, el resultado de la función de evaluación y cada una de las evaluaciones por separado de las variables que constituyen la función de evaluación (cumplimiento, ocupación de máquina y colisiones). 4.5.2 Resultados del prototipo 04. Ilustración 7 - Vista previa de la ejecución del prototipo 04 54 Ilustración 8 - Vista previa de la tabla de resultados obtenida en la ejecución del prototipo 04 4.5.3 Análisis de la situación en el prototipo 04. El cumplimiento está llegando al 100% desde las primeras generaciones, en general, esto sucede desde la primera generación, la variable que le precede en peso o importancia es la de colisiones, pero esta no mejora en cada nueva generación 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 ocupación de máquina tampoco sufre una mejora o cambios significativos, en muchas ocasiones esta variable presenta el mismo comportamiento durante varias generaciones. 55 4.5.4 Acciones para el siguiente prototipo. En busca de un mejor análisis 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 línea de gráfica para cada una de las variables que componen la función de evaluación. Se debe generar una línea de gráfica para el promedio de la función de evaluación en cada generación, con esto se podrá comprobar el comportamiento de generación en generación. Cuando se disuelve una colisión se debe hacer reprogramación tanto de la orden de producción como del centro de producción. 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 Función de cruce Se modifico la función de cruce para que en lugar de intercambiar la programación de una orden de producción completa, se intercambie la programación completa de todo un centro de producción. 4.6.1.2 Función de mutación. Cuando se disuelve una colisión se hace reprogramación tanto de la orden de producción como de los centros de producción involucrados en la disolución de la colisión. 56 4.6.2 Resultados del prototipo 05. Ilustración 9 - Vista previa de la ejecución del prototipo 05 4.6.3 Análisis de la situación en el prototipo 05. En este prototipo el algoritmo se está comportando como se esperaba, el promedio de evaluación de cada generación 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 generación, a tal punto que una vez obtenido el 100% de cumplimiento de las órdenes de trabajo la tasa de colisiones va mejorando en cada iteración. 57 4.6.4 Acciones para el siguiente prototipo. Se puede suprimir la variable de ocupación de máquina 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 COMPARACIÓN DEL PROTOTIPO 05 Uno de los objetivos planteados para este proyecto establecía la realización de una comparación del prototipo con alguna solución utilizada actualmente en la industria de artes gráficas. Para llevar a cabo este aspecto, solo se pudo tener acceso como referencia a una aplicación que realiza la programación de una planta de producción mediante el uso de procesos de asignación de tiempos secuenciales. En principio se estimó realizar dicha comparación tomando como entradas comunes los datos utilizados por dicha aplicación 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 documentación para poder interpretar los procesos allí implementados. A pesar de los inconvenientes presentados, se intentó extraer la información en una estructura compatible con el prototipo realizado, pero esta labor no pudo realizarse exitosamente. La única comparación planteada entonces consistió en medir el tiempo necesario para que cada aplicación proporcionara una solución dado un número similar de órdenes de producción. Se pudo observar que los tiempos de ejecución de la 58 aplicación son menores a los obtenidos con el prototipo y en todos los casos las diferencias presentadas en esta evaluación eran tan grandes que se optó por no realizar un análisis preciso de las mismas. 59 5 EVALUACIÓN Y COMPARACIÓN DE RESULTADOS2 Para realizar la evaluación se ejecutó 10 veces el prototipo 05 con los siguientes parámetros: Tabla 1 - Entradas para ejecutar la evaluación. Variable Valor Peso de Cumplimiento Peso de Colisiones Peso de Ocupación Número de Iteraciones a ejecutar 55% 40% 5% 1000 La variable de cumplimiento tiene un mayor peso para la empresa de artes gráficas debido a que para ella es lo más 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 producción se generan sobrecostos al tener que enviar uno de los trabajos a un satélite o tercero. El peso de la ocupación es pequeño debido a que siempre que se encuentren los mismos trabajo por elaborar la ocupación será igualmente la misma sólo que distribuida en diferentes centros de producción. Se realizó la recopilación de datos de cada una de las ejecuciones para graficar los resultados y facilitar el análisis. 2 Los datos que se utilizan para realizar la comparación fueron suministrados informalmente por el programador de la planta de producción de una empresa de artes gráficas para la cual, Alexander Gómez trabajó durante más de 4 años. 60 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 evaluación del mejor individuo. La generación en que se obtuvo el mejor individuo. El promedio de evaluación de los mejores individuos. La evaluación de cumplimiento obtenida en el mejor individuo. La evaluación de colisiones obtenida en el mejor individuo. Con los datos mencionados anteriormente se evaluó la conveniencia de un algoritmo genético para resolver el problema propuesto, a continuación se presenta la recopilación de resultados: Tabla 2 - Recopilación de datos de evaluación. Número Tiempo Mejor Generación Promedio De Cumplimiento Colisiones (Minutos) Individuo MI Evaluación Ejecución 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 61 5.1 TIEMPO DE EJECUCIÓN Gráfica 1 - Evaluación del tiempo de ejecución. Promedio Tiempo Menor Tiempo Máximo Desviación estándar 48.14 42.30 56.36 3.85 5.1.1 Comparación en tiempo de ejecución. En general, cuando el programador de la planta ejecuta la programación con la solución analítica que existe en el momento, en promedio, este termina su ejecución en 8 minutos. Adicionalmente el programador debe revisar la programación generada y asignar trabajos a centros de producción que no tengan ocupación, reasignar las prioridades que se requieran, dividir los trabajos que se demoran mucho tiempo en un centro de producción y revisar que las precedencias de los procesos se cumplan para que no hayan pérdidas de tiempo o reprogramaciones en un centro de producción debido a que no se encuentre listo el trabajo anterior. Realizando esta 62 labor el programador se toma alrededor de 40 minutos y durante el día debe repetirla por lo menos una vez, lo que en total suma 96 minutos. Dado lo anterior, se observa que el tiempo de programación se redujo en aproximadamente un 50% ya que aunque se tome más tiempo para ejecutar el algoritmo no se deberán realizar las tareas que actualmente se realizan. 5.2 MEJOR INDIVIDUO Gráfica 2 - Evaluación del mejor individuo. Promedio Evaluación Menor Evaluación Máxima Desviación estándar 0.95 0.89 1.00 0.04 5.2.1 Comparación del mejor individuo. El programador generalmente hace la programación para máximo una o dos semanas de trabajo, de tal modo que la evaluación del mejor individuo no se puede hacer de forma exacta, pero se estima que este llega al 40% como máximo 63 de tal forma que resultó mejor la evaluación del mejor individuo ejecutando el algoritmo genético propuesto. 5.3 PROMEDIO DE EVALUACIÓN Gráfica 3 - Promedio de evaluación. Promedio Evaluación mínima Evaluación máxima Desviación estándar 0.94 0.88 0.99 0.04 El promedio de evaluación en cada generación muestra que este corresponde a la evaluación del mejor individuo, lo que refuerza la evaluación de comparación realizada en el ítem anterior. 64 5.4 GENERACIÓN MEJOR INDIVIDUO Gráfica 4 - Generación del mejor individuo. Promedio Generación mínima Generación máxima Desviación estándar 923.50 458.00 997.00 166.28 La desviación estándar de la gráfica 4 muestra que no es estable el comportamiento de esta variable, aunque se genera de esta forma por la primera ejecución donde el mejor individuo se generó muy temprano con respecto al promedio de las demás. Esta variable no es comparable con la solución analítica actual ya que en esta solución no se hacen iteraciones. 65 5.5 CUMPLIMIENTO Gráfica 5 – Evaluación de cumplimiento Promedio Menor cumplimiento Mejor cumplimiento Desviación estándar 0.96 0.90 1.00 0.05 El cumplimiento muestra un comportamiento óptimo ya que en la mayoría de las ejecuciones se llega al 100% lo que hace confiable el algoritmo propuesto. 5.5.1 Comparación del cumplimiento Debido a que el programador no programa la totalidad de las órdenes de producción cuando la solución analítica termina su ejecución y esta programa en secuencia lo que no permite llegar al 100% de cumplimiento el algoritmo propuesto muestra un mejor desempeño en esta variable ya que el promedio de cumplimiento supera el 95%. 66 5.6 COLISIONES Gráfica 6 - Evaluación de colisiones. Promedio Menor cumplimiento Mejor cumplimiento Desviación estándar 0.98 0.97 0.99 0.01 Que las colisiones en promedio obtengan una calificación del 98% significa que el 2% de las órdenes de trabajo programadas por el algoritmo propuesto se encuentran en el mismo centro de producción al mismo tiempo, lo que es un excelente resultado. 5.6.1 Evaluación de las colisiones. El programador de la planta no genera colisiones ya que hace la programación día a día lo que permite que no se generen, por lo tanto en esta variable el algoritmo propuesto presenta un resultado que debe ser mejorado. 67 6 CONCLUSIONES Los algoritmos genéticos son en definitiva una alternativa factible para abordar el problema de programación de planta de producción, ya que los resultados obtenidos muestran una tendencia a mejorar con cada nueva generación. La adaptación del problema al modelo de algoritmos genéticos y la abstracción de población, 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 mutación a través del desarrollo del modelo, fue posible aplicar los conceptos esenciales de estos operadores al problema planteado de acuerdo a la representación planteada. Se vivió la experiencia de replantear, aplicar cambios y hacer análisis 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 explícito 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 cómo en la mayoría de las ejecuciones, el algoritmo alcanza el 100% de cumplimiento y un promedio del 98% de colisiones. El anterior comportamiento indica que en la mayoría de casos es posible encontrar un individuo con mejor evaluación en cada generación. De igual forma, en los resultados se visualiza que la obtención de los mejores individuos de cada ejecución se encuentra en las últimas 68 iteraciones del algoritmo, por lo que es bastante probable que, al ejecutar el algoritmo con un número mayor de poblaciones, se obtenga un individuo con mejor calificación que los encontrados. Los tiempos de ejecución del algoritmo fueron aceptables dentro de los límites establecidos para el ejercicio práctico por los autores. Sin embargo para llevar el algoritmo a un ambiente de producción, es necesario aplicar otras técnicas de programación que permitan mejorar el rendimiento del mismo. Es viable enmarcar el algoritmo genético planteado en una solución vertical de control y gestión de producción, que permita unir toda la parte transaccional del sistema con la programación de la planta de producción. La descripción del funcionamiento de los AG mediante la exposición de un ejemplo práctico en paralelo con el detalle teórico de cada uno de los elementos, permite tener una herramienta pedagógica que sirva como guía a los futuros estudiantes interesados en el tema. 69 7 SUGERENCIAS Resultaría interesante incluir más variables al modelo, tales como: o Cambios en las prioridades de las órdenes de trabajo fijadas por el programador de planta. o Programación en secuencia de trabajos con características similares. o Considerar pausas en los centros de producción: Tiempos de alistamiento de máquina cada vez que se cambia un trabajo. Tiempo de mantenimiento de los centros de producción. Para nuevos prototipos generados a partir de los resultados del presente trabajo de grado, se sugiere hacer una exploración de otras técnicas de optimización, como posible planteamiento para abordar el problema tratado. Hacer una variación de la función de mutación para que sugiera o agregue turnos adicionales (aumentar la disponibilidad) en los centros de producción que se encuentren 100% ocupados. Hacer una verificación de los tiempos en que un centro de producción 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 ejecución del prototipo. 70 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, GÓMEZ. Alberto. Secuenciación Dinámica De Sistemas De Fabricación Flexible Mediante Aprendizaje Automático. Universidad de Rioja, 2001. 549 p. ISSN 0210-8054. [7] DARWIN. Charles. El origen de las especies. LongSeller, 2005. 240 p. ISBN 9875503487. 71