24
Programación de Operaciones en Configuración Flowshop, Usando un Algoritmo Genético Liliana Chavaje Ávila, Francisco Ortiz Tena, Ricardo Pérez Rodríguez y Arturo Hernández Aguírre Comunicación de CIMAT No. I-20-01/24.08.2020 (CC/CIMAT)

Programación de Operaciones en Configuración Flowshop, CC

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programación de Operaciones en Configuración Flowshop, CC

Programación de Operaciones en Configuración Flowshop, Usando un Algoritmo Genético

Liliana Chavaje Ávila, Francisco Ortiz Tena,Ricardo Pérez Rodríguez y Arturo Hernández Aguírre

Comunicación de CIMAT No. I-20-01/24.08.2020

(CC/CIMAT)

Page 2: Programación de Operaciones en Configuración Flowshop, CC

Programación de operaciones en configuración flowshop, usando un algoritmo genético

Autores

Liliana Chavaje Ávila1, Francisco Ortiz Tena1, Ricardo Pérez Rodríguez2, Arturo Hernández-Aguirre3

1 DIPFI UAQ Universidad Autónoma de Querétaro, Posgrado de la Facultad de Ingeniería, Cerro de las Campanas s/n Col. Las Campanas, Querétaro, 76010, México. [email protected] , [email protected]

2 CONACYT – UAQ Universidad Autónoma de Querétaro, Facultad de Ingeniería, Cerro de las Campanas s/n Col. Las Campanas, Querétaro, 76010, México. [email protected]

3 CIMAT Centro de Investigación en Matemáticas, Jalisco s/n Col. Valenciana, Guanajuato, 36023, México. [email protected]

Querétaro, Qro., Agosto del 2020.

Page 3: Programación de Operaciones en Configuración Flowshop, CC

RESUMEN

El presente reporte técnico ofrece la solución del problema de programación de operaciones en configuración flowshop. Se tiene una cantidad definida de trabajos a procesar, los cuales se deben realizar en un determinado número de máquinas, bajo la condición operacional de que los trabajos tienen la misma secuencia de fabricación en las máquinas indicadas, es decir, los productos deben de ser fabricados adecuadamente cumpliendo con los estándares de calidad y con un mínimo de costos y de tiempo de fabricación (Wolde, Berhan, & Jilcha, 2018). Lo que se busca es minimizar el tiempo en el que se tienen que procesar la totalidad de los trabajos en todas las máquinas. La solución encontrada se obtiene por medio del uso de un algoritmo genético codificado en el lenguaje de programación C++

Palabras clave: programación de operaciones, algoritmo genético, flowshop

Page 4: Programación de Operaciones en Configuración Flowshop, CC

CONTENIDO

Contenido 1 Introducción .....................................................................................................................................................1

2 Planteamiento del problema ........................................................................................................................1

3 Metodología .......................................................................................................................................................4

3.1 Algoritmo genético .........................................................................................................................................4

3.2 Caso de estudio ..............................................................................................................................................5

3.2.1 Generación de la población de trabajos a realizar ..................................................................................5

3.2.2 Cálculo de la aptitud ................................................................................................................................7

3.2.3 Selección ............................................................................................................................................... 10

3.2.4 Cruza ..................................................................................................................................................... 12

3.2.5 Mutación .............................................................................................................................................. 14

3.2.6 Reemplazo generacional ...................................................................................................................... 15

3.2.7 Determinación del mejor individuo ...................................................................................................... 16

4. Resultados .................................................................................................................................................... 17

5. Conclusiones ................................................................................................................................................ 18

6. Referencias .................................................................................................................................................... 19

7. Anexo 1 .......................................................................................................................................................... 20

Page 5: Programación de Operaciones en Configuración Flowshop, CC

1

1 Introducción

Debido a la utilidad y aplicación económica e industrial, el problema de la programación de operaciones en configuración flowshop ha llamado la atención de numerosos investigadores, buscando la solución del mismo bajo diferentes condiciones de operación y/o diferentes funciones objetivo; así, como aplicando diferentes técnicas de optimización en su solución. El problema consiste de dos

principales elementos: (1) un grupo de 𝑚 máquinas y (2) un conjunto de 𝑘 trabajos a

ser procesados en el grupo de las máquinas. Cada uno de los 𝑘 trabajos tiene el mismo orden de procesamiento en las máquinas. Cada trabajo únicamente puede ser procesado en una única máquina a la vez. Cada trabajo es únicamente procesado una vez en cada máquina. Las operaciones no son preferentes y los tiempos de configuración de las operaciones son independientes de las secuencias y, por lo tanto, pueden incluirse en el tiempo de procesamiento. La solución al problema se obtiene al encontrar el orden en que los trabajos deben ingresar a cada una de las maquinas, respetando las condiciones de operación

mencionadas. Generalmente el objetivo más común es concluir los 𝑘 trabajos en las

𝑚 máquinas en el menor tiempo posible. Conway et al., (1967) hizo la primera

propuesta de la notación. Para cualquier tipo de problema, se pueden encontrar (𝑘!)𝑚 diferentes alternativas de representar la solución. Sin embargo, la mayoría de las

investigaciones se han centrado en el desarrollo de soluciones basadas en una

representación mediante una permutación. Debido a esto, el espacio se reduce a 𝑘! soluciones. En el problema de programación flowshop clásico, se permite colas de

trabajos en cualquiera de las máquinas 𝑚 en las secuencias de procesamiento (Allahverdi et al., 1999).

2 Planteamiento del problema El problema de producción en línea, también conocido como producción en cadena, producción en masa, producción en serie o fabricación en serie. Se basa en delegar una función específica o tarea u operación a cada trabajador en una maquina también específica, concibiéndose entonces lo que se conoce como línea de ensamble. Estas líneas de ensamble, por su naturaleza revolucionara de manufactura, son de mucho uso en prácticamente cualquier producto o servicio. Por ejemplo, se usan en alimentos procesados, electrodomésticos, automóviles, materiales diversos para la construcción, servicios públicos, entre muchos otros. El problema radica, en que cierta empresa,

tendrá 𝑘 órdenes de producción (trabajos) que son requeridos por diferentes clientes,

cada orden se realizará en 𝑚 máquinas, donde cada orden de producción debe pasar por la máquina 1, después por la máquina 2, y así sucesivamente. Esto quiere decir

que no puede pasar a la máquina 𝑚 + 1, sin antes haber pasado por la máquina 𝑚. La finalidad es realizar una programación de producción en línea, es que se realicen todos los trabajos, en todas las máquinas, reduciendo los tiempos de operación

Page 6: Programación de Operaciones en Configuración Flowshop, CC

2

totales. Ciertas consideraciones deben ser tomadas en cuenta entre ellas que no se consideran tiempos de ajustes de las máquinas entre un trabajo y otro, y los trabajos no pueden ser interrumpidos. Un modelo matemático para el problema de programación de operaciones en

configuración flowshop es descrito por Gupta (2006), donde se describe como un proceso continuo, ininterrumpido de flujo de trabajos a través de varias máquinas. En una empresa, se considera el flujo de trabajo en una sola dirección, ya que todos los trabajos siguen la misma ruta de fabricación. Se considera que cada trabajo tiene un tiempo de procesamiento conocido en cada máquina. Como se mencionó, el flujo de trabajo es unidireccional, esto significa que, el orden en el que los trabajos son procesados en las diferentes máquinas es el mismo para los

𝑘 trabajos. Puesto que la nomenclatura de máquina es muy general, las máquinas se numerarán, de tal manera que cada trabajo debe realizarse en la máquina 1 primero,

en la máquina 2 segundo, y por último en la máquina 𝑚. Con la numeración de máquinas y la terminología de trabajos y máquinas, el modelo matemático para el flowshop se define de la siguiente manera por Tanaev et, al. (1994)

Dados 𝑘 trabajos que se tienen que procesar en 𝑚 máquinas en el mismo orden de fabricación, el tiempo de proceso del trabajo 𝑖 en la máquina 𝑗 siendo 𝑝𝑖𝑗 (𝑖 =

1,2, … , 𝑛; 𝑗 = 1,2, … , 𝑚); es deseado encontrar el orden en que los 𝑛 trabajos deben ser

procesados en las 𝑘 máquinas, con la finalidad de minimizar el tiempo total o costo de fabricación.

El problema previamente planteado, tiene (𝑛!)𝑚 posibles soluciones. Incluso para un

problema pequeño como 𝑛 = 𝑚 = 5, el número de posibles soluciones es tan amplio

que obtener una lista de ellos sería imposible. Algunos supuestos del flowshop deben ser considerados, Ashour (1972) propone los siguientes: que las máquinas no presentarán fallas, el rendimiento y ausentismo de los operadores, retrasos en el suministro de materiales, reparaciones o herramientas, la variabilidad de los tiempos de producción, cambios en las especificaciones de los trabajos, defectos de producción y presiones de los clientes que puede ocasionar prisas para completar las ordenes. De igual manera se deben realizar las siguientes consideraciones acerca de los trabajos propuestos por Gupta (1979): cada trabajo se libera en la industria al comienzo del período de programación; cada trabajo tiene su propio tiempo para realizarse, el cual es fijo y no está sujeto a cambios; cada trabajo es independiente uno de otro; cada trabajo consiste de operaciones específicas, la cual es realizada por una única máquina; cada trabajo tiene un orden, el cual, es idéntico para cada uno de los trabajos; cada trabajo (y sus operaciones) requiere un conocido y finito tiempo de procesamiento por las diferentes máquinas. Estos tiempos deben incluir, tiempos de traslado y de ajustes, siendo independiente de trabajos anteriores y posteriores; cada trabajo debe ser procesado una única vez en una máquina; cada trabajo puede esperar entre máquina y, por lo tanto, se permite el inventario de producción en proceso entre máquinas. Para las máquinas se deben tener las siguientes consideraciones: cada máquina consiste de una única máquina y que la empresa cuenta solo con una; cada máquina al comienzo se encuentra desocupada; cada máquina en la empresa opera independientemente de otras máquinas, por lo tanto, es capaz de operar a su propia

Page 7: Programación de Operaciones en Configuración Flowshop, CC

3

tasa de salida máxima; cada máquina puede procesar un único trabajo a la vez y cada máquina está disponible a través del tiempo de operación, por lo que se desestiman fallas, mantenimientos y otras causas. Respecto a las políticas de operación se consideran las siguientes consideraciones:

cada operación es procesada tan rápido como sea posible, por lo tanto, no debe haber tiempos de espera intencional; cada trabajo es considerado como una entidad indivisible, a pesar, de que pueda estar compuesta por unidades individuales; cada trabajo, una vez aceptado, debe ser procesado hasta completarse, por lo que no existen cancelaciones; cada operación, una vez comenzada en una máquina, debe terminarse antes de que se pueda comenzar con otra operación; cada trabajo no puede ser procesado en diferentes máquinas a la vez; cada máquina cuenta con un espacio de espera adecuado para permitir que los trabajos esperen antes de comenzar su procesamiento; las máquinas serán únicamente ocupadas para todo el flowshop y cada máquina procesa los trabajos en la misma secuencia, no se permite saltar los trabajos. Una manera muy útil de representar una solución es a través de un diagrama de Gantt. Se tiene el ejemplo de procesar una serie de trabajos en dos máquinas para ello. Los datos de los tiempos requeridos en cada máquina para cada trabajo se pueden apreciar en la Tabla 1.

Trabajo Máquina 1 Máquina 2

1 1 4 2 2 1

3 3 5 4 7 2 5 4 4 6 3 6 7 1 2 8 7 4

Tabla 1: Datos para el diagrama de Gantt. Considere que se tiene la secuencia establecida, es decir, 1, 2, 3, 4, 5, 6, 7, 8. En la Figura 1 se puede identificar, a través del diagrama de Gantt, la secuencia establecida, nótese también el momento en el que se culminan todos los trabajos, conocido como

makespan o 𝐶𝑚𝑎𝑥.

Figura 1. Diagrama de Gantt para la secuencia establecida.

Se puede observar, en la Figura 1, que la máquina 1 siempre trabajará de manera continua, puesto que no debe esperar a ninguna máquina. De igual manera el trabajo

Page 8: Programación de Operaciones en Configuración Flowshop, CC

4

𝑘 = 1, que en este caso coincide con el 1 del ejercicio, de la secuencia, trabajará

también de manera continua, puesto que las máquinas 𝑚 empezarán siempre con ese trabajo.

3 Metodología

3.1 Algoritmo genético El algoritmo genético, recibe su nombre del término biológico ya que imita un proceso de “sobrevivencia del más apto”. Las soluciones factibles del problema son consideradas como cromosomas codificado por un conjunto de genes. Los más comunes son el binario (0,1) y el numérico (0,1,2,…). Por ejemplo, los cromosomas de una sola variable cuyos valores factibles son 0,1,2,3,4,5,6,7 y 8 pueden representarse mediante los códigos binarios (0000, 1000, 01000, 1100, 0010, 1010, 0110, 1110 y 0001).

La población se define como un conjunto de 𝑁 soluciones factibles con 𝑀 cromosomas. La aptitud de un cromosoma se mide en términos de una función objetivo adecuada, se considera que un cromosoma más apto produce un mejor valor para la función objetivo. La idea final del algoritmo genético consiste en seleccionar a dos padres a partir de la población. En seguida los genes de los dos padres se cruzan y posiblemente mutan para producir hijos. La descendencia reemplaza los dos cromosomas más débiles, los que arrojan un peor resultado, y se repite el proceso de seleccionar nuevos padres.

Para implementar el algoritmo genético a un problema real requiere detalles adicionales que serán específicos de cada problema. De igual manera, las reglas para seleccionar los padres y crear hijos pueden variar. Por ejemplo, los padres se pueden seleccionar totalmente al azar de una población, o pueden consistir en los dos cromosomas más aptos. En resumen, el algoritmo genético se puede aplicar de la siguiente manera: Paso 1:

a) Genere una población aleatoria 𝑋 de 𝑁 cromosomas factibles.

b) Para cada cromosoma 𝑠 en la población seleccionada, evalúe su aptitud

asociada. Se obtiene 𝑠* como la mejor solución disponible hasta ahora. c) Se codifica cada cromosoma mediante una representación binaria o numérica.

Paso 2:

a) Se seleccionan dos cromosomas padres de la población 𝑋. b) Se realiza la cruza de los genes padres para crear dos hijos. c) Se mutan los genes del hijo de manera aleatoria. d) Si las soluciones obtenidas no son factibles, se repite el paso 2 hasta lograr la

factibilidad, si no es así, reemplace los dos padres más débiles con los nuevos

hijos para formar una nueva población 𝑋 y actualice 𝑠*, a continuación vaya al paso 3.

Page 9: Programación de Operaciones en Configuración Flowshop, CC

5

Paso 3:

a) Si se alcanza una condición de terminación, deténgase; 𝑠* es la mejor solución disponible. En caso contrario repita el paso 2.

3.2 Caso de estudio Una empresa de producción debe realizar los siguientes trabajos en 5 máquinas diferentes, se requiere, para cada trabajo, utilizar las máquinas en secuencia, es decir,

el trabajo 𝑛 debe siempre empezar con la máquina 1, luego la máquina 2 y así sucesivamente, es decir no se pueden saltar máquinas. Los datos de los tiempos requeridos en cada máquina para cada trabajo se detallan en la Tabla 2.

Trabajo Maq. 1 Maq. 2 Maq. 3 Maq. 4 Maq. 5

1 45 31 54 54 64

2 44 7 52 66 57

3 26 19 65 34 27

4 74 83 94 76 60

5 19 41 31 50 33

6 20 28 42 63 29

7 23 30 10 27 26

8 46 19 11 5 36

9 76 76 34 6 91

10 57 31 33 8 19

Tabla 2: Tiempos requeridos en cada máquina para cada trabajo. El problema fue resuelto haciendo uso del IDE CodeBlocks utilizando como método de solución el algoritmo genético con la siguiente metodología.

3.2.1 Generación de la población de trabajos a realizar

Para representar a la población primeramente se genera un vector, el cuál contiene una secuencia de trabajo a realizar. El vector tendrá la misma cantidad de posiciones que de trabajos haya por programar. Un ejemplo del vector mencionado es el siguiente:

7 5 8 9 1 10 2 3 4 6

De acuerdo al vector utilizado como ejemplo, indica que primero se procesara el trabajo 7, después el trabajo 5, luego el 8 y así sucesivamente. Se debe tener cuidado al momento de generar la población que ningún trabajo se repita en las posiciones del vector, puesto que cada trabajo debe ser procesado una única vez.

Código en C++ para generar los vectores de la población

Page 10: Programación de Operaciones en Configuración Flowshop, CC

6

Note que la función población se auxilia de un vector auxiliar para reordenar aleatoriamente en la matriz mpoblacion, matriz donde se almacenan los individuos de la población.

A manera de ejemplo, en la Figura 2 se muestran algunos vectores generados por el código previamente descrito.

Page 11: Programación de Operaciones en Configuración Flowshop, CC

7

Figura 2. Secuencias para realizar los diferentes trabajos.

3.2.2 Cálculo de la aptitud

Ahora bien, para cada vector de la población, se requiere calcular su aptitud, que para

el caso de la programación de trabajos en configuración flowshop es el tiempo requerido para procesar los trabajos mencionados de acuerdo a la secuencia elegida. La idea para realizar el cálculo de la aptitud es sencilla, ir almacenando todos los tiempos después de cada trabajo realizado. A continuación, se tiene un ejemplo con el siguiente vector solución

1 2 3 4 5 6 7 8 9 10

La máquina 1 primero tiene que procesar el trabajo 1, luego el trabajo 2 y así sucesivamente. Ahora bien, el trabajo 1 no puede pasar a la máquina 2 sin antes haber terminado el tiempo necesario en la maquina 1 y así sucesivamente. En este

reporte se hace uso de una matriz auxiliar 𝐴𝑚𝑛, donde la 𝑚 indiza la máquina,

mientras que la 𝑛 indiza el trabajo, esto es, cada fila representa la máquina donde se hace el proceso, como en el diagrama de Gantt, y cada columna representa el tiempo acumulado al terminar cada trabajo según el orden de la secuencia. Por lo tanto

primero se tiene que actualizar la matriz para todas las 𝑚 = 1 y para todas las 𝑛 = 1, con la suma de los tiempos que se tarde en realizar cada trabajo. Los tiempos para el vector propuesto se puede revisar en la Tabla 3.

45 89 115 189 208 228 251 297 373 430

76

130

184

248

Tabla 3: Suma de los tiempos para el trabajo 1 y para la máquina 1.} Una vez realizado los primeros cálculos y para actualizar los demás tiempos, se deben

verificar dos tiempos anteriores, es decir, el primero de ellos es que la máquina 𝑛, la máquina utilizar, haya terminado de realizar su trabajo anterior y el otro es que el

trabajo 𝑛 haya terminado su procesamiento en la máquina anterior a la máquina a utilizar. Supongamos que se quiere actualizar en la matriz 𝐴𝑖𝑗 ∀𝑖 ≠ 1, 𝑗 ≠ 1, entonces

se debe verificar que el tiempo en 𝐴(𝑖−1)𝑗 y compararlo con el tiempo 𝐴𝑖(𝑗−1), el que sea

mayor, indica la disponibilidad para realizar ese trabajo en esa máquina. Se tiene el

ejemplo para actualizar el valor de la matriz 𝐴22. Se debe verificar el tiempo que se

tiene en 𝐴12 = 76 y 𝐴21 = 89, por lo que hasta las 89 unidades de tiempo se puede procesar el trabajo 2 en la máquina 2. En la Tabla 4 se aprecian los datos de los tiempos para el vector solución propuesto.

45 89 115 189 208 228 251 297 373 430

76 96 134 272 313 341 371 390 466 497

130 182 247 366 397 439 449 460 500 533

184 250 284 442 492 555 582 587 593 601

Page 12: Programación de Operaciones en Configuración Flowshop, CC

8

248 307 334 502 535 584 610 646 737 756

Tabla 4: Suma de los tiempos para el vector solución propuesto.

El último tiempo, ubicado en este caso en 𝐴5,10, es la aptitud para el vector solución.

Esto es, para la secuencia de trabajos propuesta se ocupan 756 unidades de tiempo en completar todos los trabajos. Ahora se presenta un segundo ejemplo con el vector solución

1 8 10 6 3 2 5 4 7 9

La matriz antes mencionada se puede visualizar ahora de la siguiente forma

Se puede apreciar que con esta secuencia el tiempo total de procesamiento se encuentra en 761, 5 unidades más de tiempo que la anterior secuencia. Código en C++ para el cálculo de la aptitud.

Page 13: Programación de Operaciones en Configuración Flowshop, CC

9

A manera de ejemplo, en la Figura 3 se muestra el resultado para el cálculo de la aptitud para cada vector de la población.

Page 14: Programación de Operaciones en Configuración Flowshop, CC

10

Figura 3. Aptitud para cada vector de la población.

3.2.3 Selección

La selección consiste, en que una parte de cada generación existente, se selecciona con la finalidad de producir una nueva generación. Su selección dependerá principalmente de la aptitud, donde aquellos vectores que tengan un mejor resultado en la función objetivo, es decir su aptitud, son seleccionados y los otros son descartados. Primeramente, para efectos de este reporte, se seleccionan dos vectores donde cada uno contienen la información de la secuencia de trabajos a realizar, en este caso se

eligen de manera aleatoria, y se comparan por torneo. El torneo consiste en que de los dos vectores seleccionados compiten en cuanto a su aptitud, y aquel que beneficie más a la función objetivo es seleccionado y el otro es descartado, en este caso el vector que tenga un menor tiempo en el procesamiento de todos los trabajos es el seleccionado, o bien ganador del torneo. En el siguiente ejemplo, una selección por torneo para los vectores de la población es generada. Se toma como ejemplo base el vector del ejemplo de aptitud con un valor de 756. Si se tiene otro vector con una aptitud de tiempos de 740, entonces, el ganador del torneo es el que tiene una aptitud de 740, este vector es almacenado en el grupo de padres seleccionados y el otro es descartado. Ahora, si se pone a competir el vector con una aptitud de 756 con otro de 780, entonces, el ganador del torneo es el que tiene una aptitud de 756, este vector es almacenado en el grupo de padres seleccionados y el otro es descartado. La finalidad para este reporte técnico, es tener la mitad de los padres que tengan una mejor aptitud respecto a la función objetivo en el grupo de padres seleccionados. Código en C++ para generar la selección

Page 15: Programación de Operaciones en Configuración Flowshop, CC

11

A manera de ejemplo, en la Figura 4 se muestra el resultado para la selección por torneo.

Figura 4. Resultado de la selección por torneo.

Page 16: Programación de Operaciones en Configuración Flowshop, CC

12

3.2.4 Cruza

La cruza consiste en generar una nueva población usando el grupo de padres seleccionados. De manera general y para efectos de este reporte técnico, de manera aleatoria de eligen dos vectores del conjunto de padres seleccionados y se procede a la cruza, tomando información parcial del primer padre elegido (vector uno) e información parcial del segundo padre elegido (vector dos) para generar un descendiente. En la Tabla 5 se puede observar la información contenida del primer padre elegido para la cruza, (vector Padre 1), y la información contenida del segundo padre elegido para la cruza, (vector Padre 2). Se realiza una cruza de orden, que para este algoritmo se hace un corte desde la posición 3 hasta la 7, es decir, la información contenida en dichas posiciones del primer padre (vector Padre 1) es copiada al descendiente de manera directa en la misma posición que el padre (vector Padre 1). La información que hace falta, se copia en el mismo orden que se tiene en el segundo padre (vector Padre 2), la información del descendiente queda representada en la Tabla 6.

Padre 1 10 8 1 9 2 3 7 5 4 6

Descendiente 1 9 2 3 7

Tabla 5: Información del Padre 1 siendo copiada a descendiente

Padre 2 2 7 5 10 4 3 9 8 6 1

Descendiente 5 10 1 9 2 3 7 4 8 6

Tabla 6: Descendiente obtenido de la cruza Código en C++ para generar la cruza.

Page 17: Programación de Operaciones en Configuración Flowshop, CC

13

A manera de ejemplo, en la Figura 5 se observa los descendientes obtenidos de la cruza

Page 18: Programación de Operaciones en Configuración Flowshop, CC

14

Figura 5. Descendientes obtenidos de la cruza.

3.2.5 Mutación

La mutación consiste en modificar aleatoriamente parte de la información de algunos descendientes. La mutación se puede presentar en un solo descendiente o en algunos de ellos, eso dependerá del diseñador del algoritmo genético. Para este reporte

únicamente se realiza la mutación sobre el 10 por ciento de los descendientes. Suponga que se tiene el descendiente indicado en la Tabla 7. En la posición 0 se tiene indicado el trabajo A, en la posición 1 se tiene indicado el trabajo B, y asi sucesivamente. La mutación realiza un cambio entre cada componente, podemos observar en la Tabla 8 que el descendiente ya mutado tuvo un cambio en posición de la 3 a la 6 y viceversa.

A B C D E F G H I

0 1 2 3 4 5 6 7 8

Tabla 7: Descendiente sin mutar.

A B C G E F D H I

0 1 5 3 4 2 6 7 8

Tabla 8: Descendiente mutado. Código en C++ para realizar la mutación:

Page 19: Programación de Operaciones en Configuración Flowshop, CC

15

A manera de ejemplo, en la Figura 6 se muestra la mutación obtenida del 10 por ciento de los descendientes.

Figura 6. Mutación del 10 por ciento de los descendientes.

3.2.6 Reemplazo generacional

Su finalidad es determinar quién se mantiene o se descarta, de entre los padres y los descendientes, a fin de ser considerados en el algoritmo en su siguiente generación de individuos. Existen diferentes formas de realizarlo, una de ellas es reemplazo 50

Page 20: Programación de Operaciones en Configuración Flowshop, CC

16

por ciento – 50 por ciento, en el cuál la mitad de los padres y la mitad de los descendientes se mantienen. El reemplazo por torneo en el cuál se compite entre padres y descendientes para determinar quién es más apto en términos de la función objetivo y por ende quien debe mantenerse en la población, o también el reemplazo del 100 por ciento en el cuál todos los padres se descartan y los descendientes son

los que se mantienen. En este reporte se realiza un reemplazo generacional del 100 por ciento. Código en C++ para el reemplazo generacional.

A manera de ejemplo en la Figura 7 se muestra el reemplazo generacional.

Figura 7. Reemplazo generacional.

3.2.7 Determinación del mejor individuo

De la última generación obtenida, es importante, determinar cuál de ellos es el que mejor aptitud tiene, es decir, de las secuencias de trabajo obtenidas, determinar, cuál de ellas produce un menor tiempo de procesamiento en llevarlas a cabo.

Page 21: Programación de Operaciones en Configuración Flowshop, CC

17

Código en C++ para identificar el mejor individuo.

A manera de ejemplo en la figura 8 se muestra el campeón para esta primera iteración.

Figura 8. La mejor propuesta generada con el valor de su aptitud.

4. Resultados

Se realizaron 10 corridas del algoritmo genético, cada corrida contiene 20 generaciones. Las mejores secuencias de trabajos a procesar y su correspondiente aptitud se muestran en la Tabla 9.

Corrida Secuencias de trabajos a realizar Aptitud

1 7, 1, 2, 9, 5, 4, 10, 8, 6, 3 706

2 4, 2, 10, 9, 5, 3, 1, 7, 6, 8 705

3 2, 5, 9, 1, 4, 3, 7, 6, 8, 10 713

4 6, 9, 1, 2, 4, 8, 5, 7, 10, 3 703

5 7, 4, 8, 2, 10, 5, 6, 9, 1, 3 698

6 3, 5, 6, 1, 9, 8, 2, 7, 4, 10 706

7 9, 7, 8, 6, 2, 4, 1, 5, 10, 3 702

8 7, 4, 6, 8, 10, 2, 3, 9, 1, 5 706

9 10, 7, 2, 3, 9, 1, 4, 5, 8, 6 699

10 3, 8, 9, 5, 7, 2, 4, 6, 1, 10 697

Promedio 703.5 Tabla 9: Resultados de las 10 corridas.

De la Tabla 9, en promedio se tiene que el tiempo para realizar las 10 órdenes de trabajo es de 703.5, el tiempo mínimo cálculo se obtuvo en la corrida 5 en la cual se

Page 22: Programación de Operaciones en Configuración Flowshop, CC

18

ocupan 698 unidades de tiempo para realizar las 10 órdenes de trabajo, y a su vez la corrida 3 es la que mayor tiempo obtuvo con 713. En el anexo 1 se puede observar el diagrama de Gantt para la mejor solución, se puede notar que a pesar de que el trabajo 4 genera tiempos muertos, el algoritmo, entre el

trabajo 7 y el 4, es la mejor solución obtenida para reducir el tiempo total de trabajo. En la Figura 9, podemos observar el gráfico de cajas y bigotes, generado por los datos obtenidos en la Tabla 9. Donde se puede identificar que la mediana es 703, el promedio de 703.5, el cuartil inferior de 698 y un cuartil superior de 706, se observa que a pesar de que se tenga un dato de 713, que es la secuencia 3, es un dato que se puede considerar atípico, ya que se observa que el bigote superior, el extremo superior, está relativamente alargado, mientras que el bigote inferior se observa que está muy junto a la caja.

Figura 9. Gráfico de cajas y bigotes.

5. Conclusiones El problema de flowshop scheduling, que es muy frecuente en los problemas de secuencias de producción, tomando en cuenta ciertas consideraciones, es presentado en este reporte técnico, con la finalidad de reducir el tiempo en el que se tarda en

realizar 𝑘 trabajos. El uso del algoritmo genético cumple con la finalidad de resolver el problema, ya que se ha podido reducir considerablemente el tiempo total para poder realizar 10 trabajos consecutivos, cumpliendo con las diferentes restricciones planteadas. Es un método muy eficaz ya que permite obtener una buena solución al momento de reducir el

tiempo total necesario para realizar cierta cantidad de trabajos.

Page 23: Programación de Operaciones en Configuración Flowshop, CC

19

6. Referencias Allahverdi, A., Gupta, J. N., & Aldowaisan, T. (1999). A review of scheduling research involving setup considerations. Omega, 27(2), 219-239.

Ashour, S. (1972). Measures of Performance. In Sequencing Theory (pp. 34-64). Springer, Berlin, Heidelberg. Conway, M., & Maxwell, W. (1967). Miller, Theory of Scheduling. Reading: Addison Wesley. Gupta, J. N. (1979). A review of flowshop scheduling research. In Disaggregation (pp. 363-388). Springer, Dordrecht. Gupta, J. N., & Stafford Jr, E. F. (2006). Flowshop scheduling research after five decades. European Journal of Operational Research, 169(3), 699-711. Reza Hejazi*, S., & Saghafian, S. (2005). Flowshop-scheduling problems with makespan criterion: a review. International Journal of Production Research, 43(14), 2895-2929. Sotskov, Y. N., & Tanaev, V. S. (1994). Scheduling theory and practice: Minsk group results. Intelligent Systems Engineering, 3(1), 1-8.

Wolde, M. G., Berhan, E., & Jilcha, K. (2018). Production Improvement with flow shop scheduling heuristics in Household utensils manufacturing company. Cogent Engineering, 5

Page 24: Programación de Operaciones en Configuración Flowshop, CC

20

7. Anexo 1