propuesta de mejora de la programaciÓn...

63
PROPUESTA DE MEJORA DE LA PROGRAMACIÓN DE LA PRODUCCIÓN BASADA EN MÉTODOS CUANTITATIVOS EN LA EMPRESA CAFÉ SEMILLA S.A.S EN BOGOTÁ D.C. Elizabeth Cruz Pulido 20062015090 Correo [email protected] Julián Darío Tovar Roa 20062015050 Correo [email protected] LINDSAY ÁLVAREZ POMAR Directora del trabajo de grado Trabajo para optar al título de: INGENIERO INDUSTRIAL UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE CALDAS FACULTAD DE INGENIERÍA PROYECTO CURRICULAR DE INGENIERÍA INDUSTRIAL BOGOTÁ D.C. 2017

Upload: truonghanh

Post on 31-Aug-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

PROPUESTA DE MEJORA DE LA PROGRAMACIÓN DE LA PRODUCCIÓN BASADA EN

MÉTODOS CUANTITATIVOS EN LA EMPRESA CAFÉ SEMILLA S.A.S EN BOGOTÁ D.C.

Elizabeth Cruz Pulido 20062015090 Correo [email protected]

Julián Darío Tovar Roa 20062015050 Correo [email protected]

LINDSAY ÁLVAREZ POMAR Directora del trabajo de grado

Trabajo para optar al título de: INGENIERO INDUSTRIAL

UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE CALDAS FACULTAD DE INGENIERÍA

PROYECTO CURRICULAR DE INGENIERÍA INDUSTRIAL BOGOTÁ D.C.

2017

2

Índice de Contenido 1. TÍTULO ..................................................................................................................................... 4

2. RESUMEN ................................................................................................................................. 4

3. INTRODUCCIÓN ....................................................................................................................... 4

4. PLANTEAMIENTO DEL PROBLEMA .......................................................................................... 6

4.1. Descripción del Problema ................................................................................................ 7

4.2. Elementos del Problema .................................................................................................. 7

4.3. Pregunta del Problema................................................................................................... 10

4.4. Subpreguntas del Problema ........................................................................................... 10

5. OBJETIVOS ............................................................................................................................. 10

5.1. Objetivo General ............................................................................................................ 10

5.2. Objetivos Específicos ...................................................................................................... 10

6. JUSTIFICACIÓN ....................................................................................................................... 11

7. DELIMITACIÓN, ALCANCES Y LIMITACIONES DEL PROYECTO ............................................... 11

8. MARCO DE REFERENCIA ........................................................................................................ 12

8.1. Antecedentes ................................................................................................................. 12

8.2. Marco Teórico ................................................................................................................ 13

8.3. Marco Conceptual .......................................................................................................... 14

8.4. Marco Espacial ............................................................................................................... 19

8.5. Marco Temporal ............................................................................................................. 20

8.6. Variables ......................................................................................................................... 20

8.7. Propuesta de modelo y algoritmo.................................................................................. 20

9. HIPÓTESIS .............................................................................................................................. 26

10. DISEÑO METODOLÓGICO .................................................................................................. 41

10.1. Identificación y adaptación de la técnica cuantitativa de scheduling ........................ 41

10.2. Datos de entrada para la técnica identificada ............................................................ 41

10.3. Validación del modelo ................................................................................................ 43

10.4. Aplicación del algoritmo híbrido ................................................................................ 43

10.5. Evaluación del impacto ............................................................................................... 44

10.6. Informe de resultados ................................................................................................ 44

10.7. Diseño de la interfaz de usuario ................................................................................. 45

11. RESULTADOS ...................................................................................................................... 45

11.1. Escritura del código .................................................................................................... 45

3

11.2. Comprobación del funcionamiento del algoritmo ..................................................... 52

11.3. Análisis de errores en el modelo ................................................................................ 54

11.4. Estandarización y proporcionalidad de los parámetros ............................................. 56

11.5. Reducciones del máximo de los tiempos de terminación .......................................... 58

11.6. Diagramas de Gantt .................................................................................................... 58

11.7. Artículo científico escrito con base en este trabajo ................................................... 60

12. CONCLUSIONES Y RECOMENDACIONES ............................................................................ 60

13. GLOSARIO DE ANGLICISMOS ............................................................................................. 61

14. BIBLIOGRAFÍA ..................................................................................................................... 62

Índice de Gráficas Gráfica 1 Diagrama de flujo del algoritmo híbrido (elaboración propia) ..................................... 26 Gráfica 2. Diagrama de Gantt del conjunto 1 antes de la mejora (elaboración propia). ............... 58 Gráfica 3. Diagrama de Gantt del conjunto 1 tras la aplicación del algoritmo híbrido (elaboración propia). .......................................................................................................................................... 59 Gráfica 4. Diagrama de Gantt del conjunto 11 antes de la mejora (elaboración propia). ............. 59 Gráfica 5. Diagrama de Gantt del conjunto 11 tras la aplicación del algoritmo híbrido (elaboración propia). ..................................................................................................................... 59

Índice de Tablas Tabla 1. Tiempos de terminación encontrados por el algoritmo para el ejemplo de Liou, Hsieh (2015) (elaboración propia) .......................................................................................................... 53 Tabla 2. Resultados relacionados con las instancias de Taillard (elaboración propia). ................ 54 Tabla 3. Resultados de los errores del modelo sin quitar los 2 errores causados por imprevistos (elaboración propia). ..................................................................................................................... 56 Tabla 4. Resultados de los errores del modelo quitando los 2 errores causados por imprevistos (elaboración propia). ..................................................................................................................... 56 Tabla 5. Promedios y mínimos de R2 en las máquinas 1, 5, 6, 7, 8, 9 y 10 (elaboración propia). 57 Tabla 6. Resultados de mejora (elaboración propia). ................................................................... 58

4

1. TÍTULO “PROPUESTA DE MEJORA DE LA PROGRAMACIÓN DE LA PRODUCCIÓN BASADA EN MÉTODOS CUANTITATIVOS EN LA EMPRESA CAFÉ SEMILLA S.A.S EN BOGOTÁ D.C.”.

2. RESUMEN Se hizo una propuesta de mejora de la programación de la producción en Café Semilla S.A.S., para lo cual primero se ajustó un modelo de scheduling al sistema de producción, dicho modelo resultó ser: | , , , , , , , ℎ, í | , se tomaron como parámetros de este modelo las medidas realizadas en la empresa; se midieron los tiempos en 11 secuencias diferentes durante 7 meses. En este tipo de modelos se usan algoritmos genéticos y algoritmos híbridos para encontrar , por lo que se escribió un algoritmo híbrido de algoritmos genéticos y de optimización de enjambre de partículas usando Visual Basic de Excel, teniendo en cuenta que es el único software que tiene la empresa en el que se puede escribir el algoritmo. Posteriormente se aplicó el algoritmo, y se encontró una disminución en , al comparar la secuenciación que hace la empresa actualmente, con la secuenciación propuesta por el algoritmo, la disminución promedio en fue del 16,45%. El archivo de Excel con el algoritmo le fue entregado a la empresa Café Semilla S.A.S., para que si así lo elige pueda continuar haciendo su programación de la producción con base en los resultados del algoritmo, y de este modo mejorar la programación de la producción por medio de una reducción en .

3. INTRODUCCIÓN Según el Observatorio de la Región Bogotá – Cundinamarca N. 24 realizado por la Cámara de Comercio de Bogotá por medio de la Dirección de Gestión de Conocimiento de la Vicepresidencia de Gobernanza, Bogotá junto con Cundinamarca aporta el 29,7% del PIB de Colombia, constituyéndose en la región más fructífera del país en 2014. En el Observatorio N.24 se pueden encontrar los porcentajes del PIB asociados a las demás regiones del país1. Al terminar el 2014, en Bogotá se encontraban constituidas 324.000 empresas, de las cuales el 44% son del sector servicios, 35% del sector comercial, y un 13% del sector industrial (en el que se encuentra el sector de tostión y molienda del café), 8% otros (González, Gutiérrez, 2012). Con los números anteriores, se puede entender que Bogotá es una ciudad que mueve la economía del país gracias principalmente a los servicios y comercialización. Este es el contexto que enmarca el sector de tostión y molienda del café en Bogotá D.C. 1 Se puede encontrar en:

https://www.ccb.org.co/content/download/6273/89085/file/Observatorio%20de%20la%20Región%20Bogotá%20Cundinamarca%20N.%2024.pdf

5

El café es el segundo commodity más transado a nivel mundial (después del petróleo). Esto implica que el precio del café es un indicador que puede afectar a muchas empresas y familias que viven de la producción, comercialización, transformación y venta de productos basados en el café (González, Gutiérrez, 2012). Existen dos tipos de café que pueden distinguirse: Arábico y Robusto. El primero es originario de Etiopía y el segundo de África Occidental. El café que se produce en Colombia es café arábico suave colombiano (SIC, 2013). Aproximadamente desde 1989 varios productores optaron por aumentar la calidad del grano, lo que llevó a la segmentación del mercado del café en los llamados cafés especiales. Los cafés especiales se dividen en gourmets, orgánicos, crecidos a la sombra, comercio justo, y otros. Los cafés especiales no se consideran commodities porque no son transados en todo el mundo y porque sus características de calidad hacen que no cualquier productor los pueda producir, por ello, los cafés especiales han abierto mercados que no se ven tan afectados por la volatilidad en el precio del café como commodity. Las herramientas de ingeniería industrial se aplican, entre otros casos, en sistemas productivos en los que no se conoce con certeza la mejor combinación posible del uso de recursos para la producción de bienes y servicios. El sistema productivo para la realización de este proyecto es la empresa Café Semilla S.A.S. Esta empresa perteneciente al sector de tostión y molienda de café, fue constituida bajo el apoyo y supervisión del SENA, Fondo Emprender, FONADE y la Presidencia de La República. Café Semilla S.A.S produce y comercializa café, grano tostado y molido, particularmente café gourmet, orgánico y tradicional, ofrece cursos de torrefacción, barista y catación. La empresa se fundó en el año 2009, y con el transcurrir del tiempo se ha ajustado a las dinámicas del comercio, lo que le ha permitido no solo sobrevivir sino además crecer. Entre las áreas de la empresa en las que hay un interés de mejora, está la programación de la producción. La empresa había informado que esta área es un área propicia a mejorar. Se planteó un modelo de scheduling, y se confirmó una mejora, medida como una reducción en el máximo de los tiempos de terminación de los trabajos, variable conocida como , la reducción es en promedio del 16,45%. Café Semilla S.A.S, cuenta con tres familias de productos que son: café tradicional, café gourmet y café orgánico, los cuales para su proceso de elaboración deben pasar por todos los puestos de trabajo, a saber: selección, trillada, tostada, molida, empaque, pesaje, selle, etiquetado, rotulado y embalaje con tamaños de producto de ¼ de libra, ½ libra, 1 libra y 5 libras. Por lo anterior, el sistema de producción se ajusta al tipo flow-shop, es decir, hay 10 máquinas en serie, y cada trabajo debe ser procesado por cada máquina. Todos los trabajos siguen la misma ruta (Pinedo, 2012).

6

Se observó el sistema flow shop de Café Semilla en busca de las restricciones del sistema. Se encontró presencia de restricciones de familias (tres familias como se mencionó), de tiempos de alistamiento de las máquinas, tiempos de transporte entre las máquinas, restricción de permutación, restricción de lotes en algunas máquinas, y restricción de aplazamiento de tareas al día siguiente si se acaba el tiempo del día, lo que lleva a plantear el modelo siguiente | , , , , , , , ℎ, í | , como el modelo de programación de la producción en Café Semilla S.A.S. Otras restricciones fueron descartadas, como la de fallos en las máquinas, tiempos de inicio temprano de los trabajos, etc., como se explicará posteriormente. Los problemas de sistemas Flow Shop son de tipo NP Hard (Garey et Al., 1976), el modelo planteado para Café Semilla S.A.S. es también tipo NP Hard, de hecho se trata de una generalización del modelo básico de flow shop. Para obtener el modelo flow shop básico a partir del modelo encontrado, simplemente háganse igual a cero los tiempos de alistamiento y de transporte, dispóngase un sólo trabajo por cada familia, permítase las máquinas no procesen por lotes, y que todos los procesamientos se puedan hacer en un día de trabajo (Liou, Hsieh, 2015). Para problemas de flow shop es común utilizar algoritmos híbridos con el fin de encontrar mejores secuencias de los trabajos, de acuerdo a alguna medida de desempeño. Debido a su carácter probabilístico, los algoritmos híbridos no pueden garantizar la optimalidad de la solución que proveen. El modelo | , , , , , , , ℎ, í | , puede ser tratado mediante algoritmos híbridos. En particular, para este trabajo se utilizó un algoritmo híbrido que resulta de la teoría de algoritmos genéticos, y de optimización de enjambre de partículas (Liou, Hsieh, 2015).

4. PLANTEAMIENTO DEL PROBLEMA Café Semilla S.A.S, es una empresa con experiencia en la elaboración de productos de café de alta calidad. Tanto los productos como el buen servicio de atención son aspectos que la hacen tener una excelente calificación según sus clientes. Mediante métodos cuantitativos para la programación de la producción el tiempo de producción se redujo, lo que se corresponde con la medida de desempeño más utilizada en programación de la producción: el tiempo de terminación máximo. Esta medida de desempeño es relevante para la empresa pues su reducción permitiría que la gerente tuviera más tiempo para otras actividades, disminuir el tiempo de toma de decisiones de la secuenciación, entre otros. Estas mejoras dependen de que la empresa implemente las soluciones aportadas por la herramienta computacional, lo cual no es obligatorio para el cumplimiento de los objetivos de este trabajo. La herramienta computacional que se adecuó permite facilitar la toma de decisiones de programación de la producción, y la empresa puede seguir usándola en el futuro si así lo decide.

7

4.1. Descripción del Problema Actualmente la empresa café Semilla no cuenta con un procedimiento sistemático para la toma de decisiones en la programación de la producción. Este tipo de decisiones se toman empíricamente y/o basados en la experiencia, lo cual es susceptible de mejora en el rendimiento de la realización de las órdenes de producción. El problema tratado en este trabajo fue establecer un programa de producción específico para cualquier conjunto de trabajos que se requiera secuenciar, por medio de una herramienta computacional, para facilitar la toma de decisiones de programación de la producción en la empresa Café Semilla S.A.S. La utilidad de aplicar un algoritmo híbrido (en este caso de algoritmo genético y de optimización de enjambre de partículas) por medio del software Excel, para la programación de la producción se evidencia en la realización de sugerencias en la toma de decisiones de producción en cuanto a la secuencia de ejecución de las órdenes de trabajo, y realizar mejoras a corto plazo en los tiempos de terminación de la producción en el sistema Café Semilla S.A.S.

4.2. Elementos del Problema Acorde a lo expuesto hasta este punto, se listan los elementos del problema: • El sistema de producción de la empresa Café Semilla es Flow Shop, y este tipo de sistemas

son problemas NP Hard, los cuales generalmente son tratados por medio de diferentes tipos de algoritmos que serán detallados en el capítulo 8 (Marco de Referencia).

• El software con el que cuenta la empresa para la realización del programa es Excel, para lo cual es necesario el manejo del lenguaje VBA en la programación de macros.

• Las características del proceso de producción de productos de café de la empresa Café Semilla

se explican a continuación: Se trabajan tres familias de café: orgánico, tradicional y gourmet. Para ello la empresa cuenta con 10 puestos de trabajo por los cuales debe pasar cualquier tipo de café que se realice, estos puestos son: selección, trillada, tostada, molida, empaque, pesaje, sellado, etiquetado, rotulado y embalaje. Las presentaciones de producto terminado son de ¼ de libra, ½ libra, 1 libra y 5 libras. En los procesos de trillada, tostada y molida, las máquinas trabajan por lotes y el tiempo de procesamiento por lote es fijo en cada máquina, lo que quiere decir que estas máquinas, para realizar su proceso, deben esperar a que la cantidad de café que vayan a procesar de una familia específica sea lo más cercano al tamaño de lote con el que trabajan y el tiempo de ejecución del procesamiento se mantiene a pesar de la cantidad de la masa o café con la que se puso a trabajar. A continuación se muestra un diagrama del proceso

8

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19marcadormarcadormarcadormarcadormarcadormarcadormarcadormarcadormarcadormarcadormarcador

A continuación se muestra un diagrama del proceso

Proceso manual en el que se separan las semillas de acuerdo a su calidad (peso y tamaño) en tres familias: Café Orgánico Café Tradicional Café Gourmet Consiste en eliminar la cubierta del grano o cáscara mediante fricción ejercida por tambores. La capacidad de esta máquina es de 280 lb Los granos de café adquieren las propiedades de color, textura y aroma acordes con las especificaciones de calidad de su familia. La capacidad de esta máquina es de 25 lb

SELECCIÓN

TRILLADA

TOSTADA

9

Implica reducir a polvo el café tostado adquiriendo una textura granulosa. La capacidad de esta máquina es de 280 libras. El café es empacado en bolsas con recubrimiento metálico interno para la conservación del producto. Este proceso se realiza en una báscula digital por la cual pasan las bolsas de café de tamaño ¼ de libra, ½ libra, 1 libra y 5 libras. Proceso de sellar las bolsas de café para conservar sus propiedades. En este proceso se le adhiere el esticker del producto correspondiente En este proceso se le adhiere al producto las especificaciones de conservación y fecha de vencimiento Las órdenes de producción son despachadas.

MOLIDA

EMPAQUE

PESAJE

SELLADO

ETIQUETADO

ROTULADO

EMBALAJE

10

• La definición de los trabajos en Café Semilla S.A.S. es de la siguiente forma: Se definen 12 trabajos, uno por cada pareja de tipo de producto y presentación. Siendo 3 tipos de productos y 4 presentaciones, 3 * 4 = 12 tipos de trabajos. Cada trabajo está compuesto por la cantidad de paquetes que se van a producir de cada tipo de producto y de cada presentación. A manera de ejemplo, el trabajo 1 podría ser la producción de 127 paquetes de café Orgánico de ¼ libra, el trabajo 2 la producción de 89 paquetes de café Orgánico de ½ libra, el trabajo 3 la producción de 150 paquetes de café Orgánico de 1 libra, y así sucesivamente.

4.3. Pregunta del Problema En esta sección se da lugar a la Pregunta del Problema que fue respondida con este trabajo. La Pregunta del Problema es: ¿Cómo mejorar el proceso de toma de decisiones de programación de la producción en la empresa Café Semilla S.A.S.?

4.4. Subpreguntas del Problema Las siguientes preguntas también fueron respondidas con la realización de este trabajo: ¿Qué técnicas cuantitativas se pueden usar para la toma de decisiones de programación de la producción? ¿Qué información se necesita para el análisis de la programación de producción a través de la técnica identificada? ¿Cuál o cuáles podrían ser las mejoras a efectuar en la empresa? ¿Cómo darle continuidad a la mejora planteada en la empresa?

5. OBJETIVOS Los objetivos de este trabajo de grado se basan en el objetivo de la empresa de mejorar su programación de la producción de productos de café.

5.1. Objetivo General

• Proponer una mejora en la programación de la producción basada en métodos cuantitativos en la empresa Café Semilla S.A.S.

5.2. Objetivos Específicos

• Identificar y adaptar una técnica cuantitativa de programación de producción que permita apoyar el proceso de toma de decisiones de la empresa a través de una herramienta computacional

• Obtener los datos de la información de entrada para el análisis de la programación de producción a través de la técnica identificada

11

• Aplicar el modelo, analizar la validez de los resultados, ajustar el modelo y evaluar su impacto

• Diseñar la interfaz de usuario de la herramienta computacional y socializarlo con la empresa

6. JUSTIFICACIÓN Con este trabajo se apunta a facilitar la toma de decisiones de programación de la producción en Café Semilla S.A.S. En este escenario, el tipo de herramienta que se planteó es una herramienta que integra un modelo de programación de la producción (el modelo | , , , , , , , ℎ, í | ), una meta-heurística de resolución del modelo (algoritmo híbrido de algoritmo genético y optimización por enjambre de partículas), y software de ejecución para procesar los datos y encontrar resultados que permitan tomar las decisiones de programación de la producción (código en Visual Basic de Excel). La creación de modelos viene con una discrepancia entre la situación que describe el modelo, y la situación que de hecho se puede observar en el mundo real. Esta discrepancia se debe reducir para que el modelo sea aplicable en una situación real (Hillier, Lieberman, 2010). Con este trabajo se logró verificar que la herramienta propuesta es aplicable a la situación real de la programación de la producción en la empresa. Al aplicar el modelo, se encontraron mejoras en la programación de la producción de Café Semilla S.A.S., las mejoras constaron principalmente en la reducción del tiempo de terminación máximo (reducción del 16,45% en promedio), y la facilidad para la toma de decisiones futuras para la programación de la producción. Estas mejoras redundan en otras mejoras de modo indirecto, particularmente ahora la gerente de Café Semilla S.A.S. podría tener más tiempo para dedicarle a otras actividades. Estas mejoras justificaron el trabajo realizado.

7. DELIMITACIÓN, ALCANCES Y LIMITACIONES DEL PROYECTO Este trabajo se encuentra delimitado temáticamente por la planeación de la producción de modo general. Dentro de la planeación de la producción, este trabajo está delimitado temáticamente por la programación de la producción. Alcances: El alcance del trabajo corresponde a las actividades de programación de la producción de productos de café en la empresa Café Semilla S.A.S. Sus resultados están direccionados a facilitar la toma de decisiones en la empresa respecto a la programación de la producción. Limitaciones: El trabajo se limitó a sugerir una herramienta computacional para la programación de la producción de productos de café elaborados en Café Semilla S.A.S. El desarrollo de esta herramienta no es de carácter vinculante a los procesos de la empresa, es decir, la empresa es libre de usar o no la herramienta para la toma de decisiones de programación de la producción. El tiempo con el que se contó para la recolección de la información fue de siete

12

meses, en los cuales no se pudo obtener toda la información de los tiempos de alistamiento de todas las máquinas al pasar de procesar una familia a todas las demás. Estos tiempos se determinaron mediante promedios y se asumió que el tiempo de alistamiento de pasar de la familia a la familia , es el mismo que el de pasar de la familia a la familia .

Tipo de estudio: Este trabajo es de tipo aplicación porque consistió en la aplicación y ajuste de una herramienta computacional para el área productiva de la empresa Café Semilla S.A.S.

8. MARCO DE REFERENCIA El marco de referencia se centra en el scheduling de sistemas tipo flow shop, como el de la empresa Café Semilla S.A.S.

8.1. Antecedentes La optimización del scheduling en sistemas tipo flow shop es un problema combinatorio tipo NP-Hard. Existen muchas heurísticas para tratar este problema en particular. Heurísticas de este tipo se pueden aplicar para determinar la programación de la producción en Café Semilla S.A.S., teniendo en cuenta que su aplicación no se ve afectada por la naturaleza específica de los trabajos y máquinas de la empresa (Zhang, Ning, Ouyang, 2010). Las heurísticas para hacer scheduling en sistemas tipo flow shop se han usado en muchos casos con éxito, como en fábricas de bolsas de papel, fábricas de juguetes, en empresas de servicios, y en general en cualquier sistema productivo que tenga máquinas (entidades procesadoras) y trabajos, tal que todos los trabajos sigan la misma secuencia en las máquinas (Pinedo, 2012), como sucede en la empresa Café Semilla S.A.S. El modelo específico que se propuso | , , , , , , , ℎ, í | , se resuelve mediante meta-heurísticas, particularmente mediante algoritmos genéticos. En la literatura se encontró un caso específico de resolución de un modelo muy similar, y la resolución se hacía por medio de un algoritmo híbrido, por lo que en este trabajo se optó por adoptar ese algoritmo híbrido (Liou, Hsieh, 2015). Este algoritmo híbrido se aplica independientemente de la forma específica de las ecuaciones de tiempos de terminación de los trabajos y de tiempos de espera en las máquinas, en otras palabras, el algoritmo solamente requiere o bien los tiempos de terminación de los trabajos y de espera de las máquinas, o las ecuaciones recursivas de tiempos de terminación de los trabajos, sin que tengan que ser de una forma específica; es necesaria esta aclaración porque el modelo | , , , , , , , ℎ, í | , no es exactamente igual al modelo del artículo de Liou y Hsieh (2015), sin embargo ello no impide que se aplique el algoritmo. La diferencia básica es la adición de las restricciones de batch y día, las cuales son necesarias pues algunas de las estaciones de trabajo de Café Semilla S.A.S. requieren que los trabajos se procesen por lotes, y al final del día se aplazan para el día siguiente las actividades que no se hayan completado, las actividades pueden ser transportes, alistamientos y/o procesamientos.

13

La definición de los trabajos se basa en los productos y sus familias. No necesariamente cada unidad en una orden de producción equivale a un trabajo, por ejemplo, 238 paquetes de café orgánico ¼ de libra se conciben como un solo trabajo con sus parámetros de tiempos del modelo, es decir, si se define un trabajo como 238 paquetes de café orgánico ¼ de libra, se mide su tiempo de procesamiento en cada máquina, su tiempo de transporte entre cada par de máquinas, y el tiempo de alistamiento de su familia, café orgánico, desde la familia anterior (incluyendo el alistamiento inicial si café orgánico es la primera familia) en cada máquina. Con estos antecedentes sobre el problema se procede a enunciar el marco teórico.

8.2. Marco Teórico Existe una amplia variedad de heurísticas (y meta-heurísticas) para aplicar en sistemas tipo flow shop. En la empresa Café Semilla S.A.S. la producción se hace mediante un sistema tipo flow shop en el que se presentan las siguientes restricciones: agrupación de productos por familias (restricción ), tiempos de alistamiento en las máquinas entre dos familias diferentes (llamada restricción , ), tiempos de transporte entre máquinas (restricción , , ), mantenimiento de la permutación de los trabajos en la secuencia ( ), procesamiento por lote en algunas máquinas (la restricción ℎ), y aplazamiento de las actividades que no se alcancen a realizar durante un día de trabajo para el día siguiente (restricción í ). En el anteproyecto se propuso que en Café Semilla S.A.S. había una restricción de mantenimiento o descomposición de las máquinas ( ), sin embargo, una inspección cercana reveló que esa restricción no se presenta. En la empresa sí se hace mantenimiento a las máquinas, pero el mantenimiento no afecta la programación de la producción de un conjunto específico de trabajos. La razón por la que dicha programación no se afecta, es que el mantenimiento a las máquinas se hace entre cada 6 meses a un año, mientras que la producción que se programa difícilmente excede una semana o unos pocos días (en las 11 mediciones que se hicieron la producción duró entre 5 y 7 días en cada medición). Entonces sí existe mantenimiento de máquinas, pero ello no afecta la programación de la producción de un conjunto específico de trabajos. Por ejemplo, si se secuencian 9 trabajos (que según lo observado es una cantidad de trabajos que se presenta con regularidad), la realización de estos trabajos tomaría menos de una semana, el mantenimiento de las máquinas no afecta la programación de la producción, y en últimas se secuencia antes y después del mantenimiento a las máquinas. El mantenimiento a las máquinas se trata como una actividad de gestión aparte de la programación de la producción. A continuación se presentarán otras restricciones, y se explicará por qué no se presentan en el sistema flow shop de Café Semilla S.A.S.

- Programación de interrupciones o preemption: se denota como , y significa que un trabajo se puede interrumpir para continuar otro en la máquina. La razón fundamental por la que no se presenta esta restricción es porque esta restricción es útil en sistemas con máquinas paralelas. Si Café Semilla S.A.S. fuera un sistema tipo flow shop flexible, esta restricción podría ser útil para reducir el tiempo de terminación

14

máximo de los trabajos, pero como no hay máquinas en paralelo en ninguna etapa del sistema, no se incluye esta restricción.

- Bloqueo: escrito como , significa que los buffers o espacios de almacenamiento entre máquinas pueden tener un número limitado de trabajos, de modo que si el buffer se llena, se produce un bloqueo en la máquina anterior al buffer pues no puede liberar el trabajo (no hay espacio). En Café Semilla S.A.S. no se presenta esta restricción debido al tamaño volumétrico de los trabajos, y al espacio disponible en la empresa. En los años de operación de la empresa, nunca ha sucedido que una cola entre máquinas se bloquee, incluso cuando se presentan picos altos de demanda.

Las restricciones que sí aplican para el sistema flow shop de la empresa Café Semilla S.A.S. se explicarán más adelante en la sección 8.3. Marco Conceptual. En este trabajo se encontró un algoritmo híbrido que se pudo aplicar al modelo de scheduling de Café Semilla S.A.S. mediante su aplicación se logró encontrar mejoras a la programación de la producción, como reducciones al tiempo de terminación máximo, y facilidad para la toma de decisiones de programación de la producción.

8.3. Marco Conceptual Los conceptos relevantes a desarrollar en el marco conceptual siguiendo el marco teórico son los siguientes:

• Modelos de scheduling. • Modelos inicialmente considerados para el sistema flow shop de la empresa Café

Semilla S.A.S. • Modelo básico flow shop. • Modelo MIP para | | .

• Modelos de scheduling: Los modelos de scheduling siguen cierta notación

estandarizada, en la que se describe el sistema que se modela mediante tres partes: tipo de sistema, restricciones, y función objetivo. La notación general de los modelos de scheduling es la siguiente (Pinedo, 2012): | | A continuación se define cada parte,

: tipo de sistema : una sola máquina

: máquinas en paralelo : máquinas con distintas velocidades en paralelo, = ⁄ , donde es el subíndice de

trabajo, es el subíndice de máquina, es el tiempo de procesamiento del trabajo en la máquina , es el tiempo de procesamiento estándar del trabajo independiente de las máquinas, es la velocidad a la que la máquina puede hacer un trabajo.

: máquinas con distintas velocidades en cada trabajo en paralelo, = ⁄

15

: Flow shop de máquinas, todos los trabajos siguen la misma ruta de máquinas : Flow shop flexible, varias máquinas en paralelo en algunas o todas las etapas

: Job shop de máquinas, los trabajos tienen distintas rutas en las máquinas : Job shop flexible, máquinas en paralelo en algunos o todos los centros de trabajo : Open shop de máquinas, trabajos con ruta variable (definida por programación)

: restricciones : parámetro de momento de inicio más temprano del trabajo

: preemption, se pueden programar interrupciones de los trabajos : precedencia, los trabajos tienen relaciones de precedencia/sucedencia entre sí

, : tiempo de alistamiento entre las familias − 1 e en la máquina .

, , : tiempo de transporte del trabajo de la familia entre las máquinas y + 1 : familias de trabajos, al ser de la misma familia no tienen tiempo de setup o alistamiento

entre sí los trabajos : procesamiento por lote, se pueden procesar varios trabajos al tiempo

: las máquinas pueden no estar disponibles en algún momento : subconjunto de máquinas que pueden atender al trabajo

: se mantiene la permutación del sistema (orden FIFO) : hay buffers entre máquinas, si se llena un buffer la máquina precedente se bloquea al

terminar el trabajo actual hasta que el buffer libere espacio para almacenar el trabajo : se tiene que programar para no usar buffers, la espera de los trabajos es igual a cero : recirculación, los trabajos pueden revisitar máquinas í : se aplazan para el día siguiente las actividades que no se alcancen a hacer en un día de

trabajo

: función objetivo Definiendo como la fecha de entrega del trabajo , como el tiempo de terminación del trabajo , como retraso del trabajo , como tardanza del trabajo , como variable binaria igual a 1 si el trabajo se termina después de la fecha de entrega, como la anticipación del trabajo , como ponderación del trabajo , se tiene que: = − = max (0, ) = 1 í í , 0 = max (0, − ) Son funciones objetivo comunes las siguientes: A A ∑ ∗ A ∑ ∗ A ∑ ∗ A ∑ ∗ + ′ ∗ A

16

• Modelos inicialmente considerados para el sistema flow shop de la empresa Café Semilla S.A.S.: Con lo visto hasta ahora se propusieron varios modelos para el caso de la empresa. Cada modelo se fue descartando conforme se obtenía evidencia que permitiera hacer dichos descartes. El modelo más básico que captura los elementos conocidos de la empresa es el siguiente. | | En este modelo existen 10 máquinas en un sistema flow shop, se mantiene la permutación del sistema mediante una política FIFO, y se busca minimizar el tiempo de terminación máximo. Se han desarrollado metaheurísticas para este problema (Shao, Pi, 2016). La restricción prmu existe en Café Semilla S.A.S. porque es una política de la empresa, lo que obedece a una facilidad en la gestión de la producción, porque si se permite alterar el orden de los trabajos en cada máquina, entonces habría una secuencia de trabajos por cada máquina (un total de 10 secuencias), lo cual requiere un mayor esfuerzo de gestión que considerar sólo una secuencia para todos los trabajos; además considerando que en varias máquinas los trabajos son muy similares, por ejemplo en el trillado los granos de café de un trabajo se ven igual a los de otro de la misma familia, entonces alterar la secuencia de los trabajos en cada máquina puede llevar a confusión sobre la identidad de cada trabajo. A continuación se muestran otros modelos que se propusieron inicialmente para representar el sistema flow shop de la empresa. | , | || | | | , ℎ( )| | , , , ℎ| | , , , , , , | El modelo | , | no funciona porque por el tamaño de los trabajos no hay bloqueo ( ) en el sistema. El modelo || no funciona porque no tiene restricciones, y el sistema de la empresa sí tiene restricciones como la de . | | no es un modelo adecuado porque en la empresa no hay bloqueo. | , ℎ| no sirve para este caso porque no tiene en cuenta los tiempos de alistamiento. El modelo | , , , ℎ| al contener preemption no funciona dado que no hay máquinas en paralelo en ninguna de las etapas. El modelo | , , , , , , | fue el primero que se intentó aplicar, sin embargo rápidamente fue evidente que este modelo no sirve por la presencia de loteo en algunas máquinas y el aplazamiento de las actividades que no se alcanzan a completar en un día de trabajo. En esta misma sección se presentará el modelo encontrado que mejor refleja la situación real de Café Semilla S.A.S., después de presentar algunas heurísticas básicas para sistemas flow shop.

17

• Modelo básico flow shop: El modelo | | tiene algunas características que se observan en los demás modelos flow shop con diferentes restricciones; analizar dichas características permite tener un marco para abordar el modelo flow shop apropiado para la empresa Café Semilla S.A.S. Existe una equivalencia entre minimizar el máximo tiempo de terminación de los trabajos y minimizar el tiempo de ocio en la máquina (la última máquina del flow shop) porque el tiempo de terminación máximo es igual al tiempo de terminación del último trabajo en la máquina , y sólo hay dos formas en que puede aumentar dicho tiempo de terminación: que aumenten los tiempos de procesamiento de los trabajos (tiempos que se consideran parámetros), y que aumente el tiempo que la máquina espera para procesar los trabajos (variable de tiempo de ocio en la máquina ). La idea escrita en el párrafo anterior se puede mostrar matemáticamente. Primero se escribe la ecuación de tiempos de terminación de los trabajos para el modelo | | . La notación tradicional del sistema flow shop básico utiliza el subíndice para las máquinas, sin embargo en las ecuaciones a mostrar se usará la notación de flow shop con familias teniendo en cuenta que es el modelo en que se centra este trabajo. Dada una permutación de los trabajos en particular, se denota por el trabajo que se hace en la -ésima posición en la permutación; por otra parte sea la -ésima máquina o etapa por la que cada trabajo debe ser procesado. Se pueden computar los valores de terminación de cada trabajo en cada máquina usando el siguiente conjunto de ecuaciones recursivas:

, = max , , , + , ∀ > 0, > 0 (1)

, = 0 ∀ (2)

, = 0 ∀ (3) Esta es una forma de expresar el modelo flow shop básico. Cada trabajo inicia su procesamiento en la máquina apenas termina su procesamiento en la máquina anterior − 1 (variable , ) o apenas el trabajo anterior − 1 termine su procesamiento en la máquina (variable , ) lo que tarde más, es decir el máximo entre estas dos variables. Cada trabajo termina su procesamiento en la máquina tras un tiempo , . Los tiempos de espera de las máquinas, o tiempos de ocio de las máquinas, se pueden expresar así,

, = max 0, , − , ∀ , (4) La máquina comienza a esperar al trabajo desde que termina el procesamiento del trabajo anterior − 1 en la máquina , , hasta que el trabajo termina su procesamiento en la máquina anterior − 1 , ; la máquina no espera si el trabajo sale de la máquina − 1 antes de (o al mismo tiempo) que la máquina termine el trabajo anterior − 1. Otra forma equivalente de expresar los tiempos de terminación en el modelo flow shop básico es la siguiente.

, = , + , (5)

18

La ecuación (1) es equivalente a la ecuación (5), para mostrarlo solamente se necesita la siguiente igualdad. max( , ) = + max(0, − ) ∀ , ∈ ℝ (6) Como , son números reales, se pueden presentar tres casos: > , < , = . Si la ecuación (6) se cumple en estos tres casos entonces se cumple para cualquier par de números reales.

Caso > ⇒ max( , ) = ; + max(0, − ) = + 0 =

Caso < ⇒ max( , ) = ; + max(0, − ) = + − =

Caso = ⇒ max( , ) = = ; + max(0, − ) = + 0 = = Teniendo que la ecuación (6) se cumple para cualquier pareja de números reales, se puede expresar que, max , , , = max 0, , − , + , ⇒ max , , , = , + , (7)

Reemplazando la ecuación (7) en la ecuación (1) se tiene

, = , + , + , Reemplazando ,

, = , + , + , ⇒ , = , + , + , + , + ,

Reemplazando , , , , , , hasta j = 1

, = , + , + , + , + , + , + , + , + ⋯ + , + , + ,+ ,

⇒ , = , + ,

Que resulta ser la misma ecuación (5), esta equivalencia entre la ecuación (1) y la ecuación (5) es importante para formular el modelo | , , , , , , , ℎ, í | , partiendo del modelo conocido | , , , , , , | , con la equivalencia entre la ecuación (1) y la ecuación (5) se puede hacer el proceso inverso, es decir, de un modelo que expresa los tiempos de terminación de los trabajos en la máquina en función de los tiempos de ocio de la máquina

, se puede obtener el modelo de los tiempos de terminación de cada trabajo en cada máquina como ecuación recursiva. Esto fue necesario porque Liou, Hsieh (2015) expresan el modelo | , , , , , , | poniendo los tiempos de terminación de los trabajos en función de los tiempos de ocio de las máquinas como en la ecuación (5), pero resultó más fácil modelar | , , , , , , , ℎ, í | con la forma de la ecuación (1).

19

• Modelo MIP para | | : Se puede formular un MIP para el modelo | | , como sigue (Pinedo, 2012): Sea el subíndice de trabajo, el subíndice de la posición del trabajo en la secuencia; para este modelo MIP es necesaria esta distinción entre trabajo y posición del trabajo para crear las variables de decisión binarias. Sea el subíndice de las máquinas. Sea el número de máquinas. Sea el número de trabajos. Sea , el tiempo de procesamiento del trabajo en la máquina . Sea , una variable binaria igual a 1 si el trabajo está en posición en la secuencia, 0 en caso contrario. Sea , el tiempo de ocio de la máquina entre la salida del trabajo en posición y la entrada del trabajo en la posición + 1 Sea , el tiempo de espera del trabajo en la posición entre su salida de la máquina y su entrada a la máquina + 1. Entonces, usando la equivalencia de la minimización del tiempo de terminación máximo con la minimización del tiempo de ocio en la última máquina del sistema flow shop se tiene,

min = , ∗ , + ,

. . , = 1 = 1, … ,

, = 1 = 1, … ,

, + , , + , − , − , , − , = 0 = 1, , − 1; = 1, , − 1

, = 0 = 1, … , − 1

, = 0 = 1, … , − 1 La tercera restricción expresa la diferencia entre el tiempo de inicio del trabajo en la posición + 1 en la máquina + 1, y el tiempo de terminación del trabajo en la posición en la máquina

. Las primeras dos restricciones son las restricciones de asignación para asegurar que sólo un trabajo se asigne a una sola posición y viceversa.

8.4. Marco Espacial Geográficamente, el Proyecto se realizó en Bogotá, en las instalaciones de Café Semilla S.A.S. donde se llevan a cabo los procesos de producción.

20

8.5. Marco Temporal Este trabajo tardó 10 meses aproximadamente, desde junio de 2016, hasta marzo de 2017, de los cuales aproximadamente 7 meses se dedicaron a las mediciones en la empresa, y 3 meses a crear este documento y la herramienta computacional. En cuanto al uso de los resultados de este trabajo, se puede decir que su vida útil se prolongará hasta que la situación de la producción de productos de café cambie de manera significativa y los resultados no funcionen en dicha situación. Por ejemplo, si en algún momento futuro cambian los productos de modo que algunos productos siguen diferentes rutas en las máquinas, el sistema se volvería tipo Job shop, por lo que ya no se podría usar la herramienta computacional creada en este trabajo; sin embargo, de acuerdo a la empresa, los productos no van a cambiar a tal punto que cambie el sistema de producción.

8.6. Variables En las investigaciones en general se establecen variables, independientes y dependientes para operacionalizar la hipótesis, es decir, para que se pueda medir si la hipótesis se invalida con los resultados, o si por el contrario no se puede descartar su validez. Variables independientes:

• Modelo de scheduling para el sistema de producción de la empresa. • Algoritmo híbrido para solucionar el modelo. • Software de ejecución para aplicar el algoritmo híbrido.

Variable dependiente:

• Cambio en el máximo de los tiempos de terminación de los trabajos que se programan en la empresa Café Semilla S.A.S.

8.7. Propuesta de modelo y algoritmo El modelo que se encontró que representa el comportamiento del sistema de la empresa es | , , , , , , , ℎ, í | , en este modelo se minimiza el tiempo de terminación máximo porque para la gerente es importante que la producción se realice en el tiempo más corto posible. Además, al no existir fechas de entrega definidos para todos los trabajos (y en ocasiones para ningún trabajo), no se pueden usar medidas de desempeño como la tardanza, que utilizan los fechas de entrega de los trabajos. La restricción de familias ( ) se presenta porque entre los trabajos de cada familia de productos no existen tiempos de alistamiento; por ejemplo, la máquina de trillado no debe alistarse para pasar de un trabajo de café orgánico a otro trabajo de café orgánico, en cambio, si se pasa de un trabajo de café orgánico a uno de café gourmet entonces la máquina sí debe ser alistada anteriormente. La restricción de tiempos de alistamiento ( , ) se presenta porque algunas máquinas deben ser alistadas antes de procesar trabajos que provienen de familias de productos diferentes. Si no se

21

invierte tiempo alistando la máquina de molido cuando se cambia por ejemplo de un trabajo de café gourmet a un trabajo de café tradicional, la calidad del producto de café tradicional se afectaría pues podría contener partes de café gourmet. La restricción de tiempos de transporte ( , , ) se presenta porque aunque son tiempos muy cortos en el tamaño actual de la empresa, se invierte tiempo desplazando los trabajos entre las máquinas. Esta restricción fue también de interés para la empresa, ya que con el crecimiento que está teniendo y que planea tener, a futuro es posible que estos tiempos de transporte aumenten conforme aumente el tamaño de las máquinas y del volumen de producción. La restricción de lotes de trabajos ( ℎ) se presenta porque algunas máquinas requieren que se procese cierta cantidad de masa de café. Esta restricción es similar pero no igual a la restricción ℎ de Pinedo (2012), hay dos diferencias, no hay una cantidad de trabajos sino una cantidad de masa de los trabajos que se procesa por lote, y el tiempo de procesamiento del lote no depende del tiempo de procesamiento de los trabajos sino que es una cantidad fija. Lo anterior se debe a que algunas máquinas requieren trabajar con una cantidad fija de masa de café, por ejemplo, la máquina de trillada trabaja con 280 libras de café de una sola familia, para este ejemplo café orgánico, entonces para procesar café orgánico se ingresan 280 libras de este café a la máquina de trillada, independientemente de la masa de los trabajos de café orgánico, siempre que no superen esa capacidad. Por ejemplo, la suma de las masas de los trabajos de café orgánico podría ser de 276 libras, sin embargo se procesarían 280 libras en la máquina y las 4 libras que sobran se dejarían en un inventario aparte, por ello el tiempo de procesamiento por lote es siempre el mismo sin importar el tamaño del trabajo a procesar. En algunos casos que se observaron, no alcanzaban a haber 280 libras para procesar, siguiendo el ejemplo, si en la máquina 4 (molida) hay 276 libras a procesar y no se pueden completar las 280 libras pues no hay café para hacerlo, entonces se procesan las 276 libras con la misma duración que si fueran 280 libras, es por ello que Café Semilla S.A.S. hace su producción cuando las órdenes de producción permiten que se hagan 280 libras de cada familia, o lo más cercano que se pueda a este número. Las máquinas 3 y 4 (tostada y molida respectivamente) comúnmente procesan por debajo de su capacidad, teniendo en cuenta la pérdida de agua que va sufriendo el café en su procesamiento. La restricción de aplazamiento de actividades que no se completan en un día de trabajo ( í ) se presenta porque al final de cada día de trabajo, si aún faltan actividades por realizar (alistamientos, transportes, y procesamientos) si no se alcanza a hacer por completo dichas actividades entonces se aplazan para el día siguiente. La restricción ya fue analizada previamente (véase la sección 7.3 Marco Conceptual, tema Modelos posibles para el sistema flow shop de la empresa Café Semilla S.A.S.) Meta-heurística para el modelo anterior: en la literatura se encontró que el modelo | , , , , , , | , ya ha sido estudiado, el cual es similar al modelo | , , , , , , , ℎ, í | . Otros modelos similares también se encontraron, en la mayoría de los casos, se usaban algoritmos genéticos y/o algoritmos híbridos para resolver los

22

modelos, por lo que se decidió utilizar uno de estos algoritmos para el sistema bajo estudio (Liou, Hsieh, 2015). Los problemas de scheduling en sistemas flow shop en los que los trabajos se hacen por grupos (o familias), y hay tiempos de alistamiento en las máquinas para cambiar de grupo, son conocidos como problemas FSDGS (por su sigla en inglés “Flow shop Sequence Dependent Group Scheduling”), este problema ha sido estudiado (Wang, Cheng, 2009). Franca et Al., (2005) desarrollaron algoritmos genéticos y un algoritmo memético para obtener permutaciones de trabajos en el problema FSDGS (usaron una metaheurística). Salmasi et Al., (2010) propusieron un modelo de programación matemática para minimizar el tiempo total de flujo para el problema FSDGS, el cual resolvieron mediante un algoritmo híbrido de búsqueda tabú y de colonia de hormigas (nuevamente usaron metaheurísticas). Naderi, Salmasi (2012) propusieron una metaheurística híbrida de algoritmos genéticos y de recocido simulado para resolver el problema FSDGS. Los algoritmos genéticos fueron desarrollados inicialmente por Holland (1975). Estos algoritmos se basan en la teoría evolutiva de las ciencias biológicas, mediante la supervivencia del más adaptado que en terminología de optimización hace referencia al mejoramiento de la función objetivo de un problema dado. En general, los algoritmos genéticos requieren de la definición de cromosomas, que son la forma que toman las posibles soluciones del problema para que se pueda aplicar el algoritmo; estos algoritmos también requieren de una medida de desempeño, y dos operadores definidos para las soluciones factibles del problema: mutación y cruzamiento. En el scheduling, los cromosomas se definen como secuencias factibles del problema, es decir, no se requiere una modificación radical a una secuencia creada aleatoriamente para que se convierta en un cromosoma, lo importante es que sea una secuencia factible. La medida de desempeño en este caso se define como el tiempo de terminación máximo de una secuencia, que siempre corresponde con el tiempo de terminación del último trabajo de la secuencia en la última máquina del sistema flow shop. En algoritmos genéticos, la medida de desempeño revela qué tan adaptados están los cromosomas al medio, esta medida se realiza en cada cromosoma (también llamado individuo, y el conjunto de cromosomas o individuos es llamado población o generación) y por medio de su valor se decide cuáles cromosomas se van a reproducir para crear una nueva generación (operador de cruzamiento aplicado), los cromosomas más aptos pueden también sufrir mutaciones y con ellas generar nuevos individuos (operador de mutación); en scheduling, las secuencias con menores tiempos de terminación máximo pueden reproducirse y mutar de modo aleatorio para crear una nueva generación, a la cual se le medirá nuevamente la medida de desempeño, y se reproducirá/mutará a los más aptos, durante un número específico de iteraciones o generaciones (Sivanandam, Deepa, 2008). La optimización por enjambre de partículas fue desarrollada inicialmente por Kennedy, Eberhart (1995), en esta metaheurística, las soluciones factibles del problema (por ejemplo secuencias, para el caso de scheduling) son consideradas como individuos de un enjambre. Al igual que en enjambres bien sea de insectos, o de aves, o de peces, si cualquiera de los individuos encuentra

23

refugio o alimento (deseable medida de desempeño, bien sea de minimización o de maximización) este individuo se acercará hacia el refugio o alimento, y otros individuos le seguirán. Si otro de los individuos, al seguir al enjambre encuentra otro alimento deseable, mantendrá su movimiento entre el alimento (medida de desempeño) que acaba de encontrar, y el mejor alimento encontrado por el enjambre. En optimización por enjambre de partículas se definen dos tipos de individuos: gbest y lbest; gbest quiere decir “global best” haciendo referencia al individuo de todo el enjambre que tiene la mejor medida de desempeño. El enjambre es entonces dividido en subgrupos, y en cada subgrupo alguno de los individuos tiene la mejor medida de desempeño, entonces este individuo es llamado lbest, por “local best”, es decir, el individuo con la mejor medida de desempeño local. Los individuos se van acercando hacia la mejor medida de desempeño, y cada individuo puede moverse también hacia otras soluciones, lo que evita que el enjambre como un todo caiga en un óptimo local (Sivanandam, Deepa, 2008). En scheduling, cada individuo del enjambre es una secuencia factible. El individuo gbest es aquel que tenga el menor tiempo de terminación máximo de todo el enjambre, y los individuos lbest son aquellos con el menor tiempo de terminación máximo en cada subgrupo del enjambre. Se ha creado con éxito un algoritmo híbrido de los dos algoritmos anteriores, un algoritmo en el que cada secuencia es un cromosoma y a la vez un individuo de un enjambre. En éste algoritmo híbrido los individuos mueren y producen nuevas generaciones (como en algoritmos genéticos), y la decisión de a cuáles cromosomas se les aplicarán los operadores de cruzamiento y mutación se toma con base en los individuos gbest y lbest (como en optimización por enjambre de partículas). El algoritmo híbrido que se aplicó en este trabajo consta de los siguientes pasos (Liou, Hsieh, 2015) : Paso 1: Inicialización, en este paso se genera de modo aleatorio una población de secuencias, de tamaño ∗ , en la que es el número de trabajos a secuenciar, y es el tamaño de los subgrupos (Liou, Hsieh (2015) recomiendan un valor de = 6). Paso 2: División, en este paso la población se divide en subgrupos, cada uno de tamaño . Paso3: Codificación, teniendo en cuenta que en el modelo | , , , , , , , ℎ, í | hay familias, no cualquier secuencia es factible, por lo que a cada secuencia generada aleatoriamente se le debe aplicar un esquema de codificación que se mostrará más adelante, para convertir secuencias generadas aleatoriamente en secuencias por familias. Paso 4: Evaluación, se le mide el tiempo de terminación máximo a cada secuencia

Paso 4.1.: Selección, en cada subgrupo se selecciona el individuo con el menor tiempo de terminación máximo (lbest), y después se elige el individuo con el menor tiempo de terminación máximo de toda la población (gbest).

24

Paso 4.2.: Mutación y cruzamiento, los operadores de mutación y cruzamiento se aplican a los − 1 individuos lbest y 1 gbest para generar una población nueva de ∗ secuencias.

Paso 5: Reproducción, los nuevos individuos se asignan a los subgrupos. Paso 6: Terminación, si ya se han acabado las iteraciones, retornar gbest, de lo contrario volver al Paso 2. Liou, Hsieh (2015) recomiendan una cantidad de iteraciones igual a ∗ /2. Se procede entonces a explicar el esquema de codificación que se aplica a las secuencias para hacerlas factibles. Esquema de codificación: dado que el modelo a solucionar tiene restricción de familias, existen secuencias no factibles. Uno de los supuestos del modelo | , , , , , , , ℎ, í | es que cada familia de trabajos se hace consecutivamente. No se permiten secuencias en las que un trabajo de una familia se hace dentro de otra familia. Por ejemplo, si hay dos familias 1, y 2, la familia 1 tiene los trabajos 1, 2 y 3, por otra parte la familia 2 tiene los trabajos 4 y 5, las siguiente secuencia es ilegal: 1 2 4 5 3. En este ejemplo el trabajo 3 no se hizo consecutivamente dentro de su familia (el esquema de codificación aplicado resultaría en la secuencia 1 2 3 4 5 para este caso). Como otro ejemplo, una secuencia factible sería 5 4 2 1 3, en esta secuencia cada familia hace sus trabajos consecutivamente. El esquema de codificación propuesto por Liou, Hsieh (2015) es el siguiente: Paso1: Generar una permutación aleatoria de trabajos, llámesele Paso2: Crear un vector de grupos ( por group vector) así, = [1, 1, … ,1 , 2, 2, … ,2 , 3, 3, … ,3 … , , … , ] Paso 3: Computar el valor de grupo para cada trabajo en la secuencia, y guardar ese valor en el vector _ , el cuál se define así: _ ( ) = ( ) ∀ = 1, … , . Siguiendo el ejemplo de dos familias, el _ de los trabajos 1, 2, y 3 será igual a 1, y el _ de los trabajos 4, y 5 será igual a 2, en otras palabras, el _ de un trabajo dado es igual al número de su familia. Paso 4: Crear un vector vacío _ , introducir _ ( ) en el vector _ , si y sólo si _ ( ) ∉ _ ∀ . Añadir ( ) a su familia. _ da la secuencia en que se hacen las familias, y ( ) da la secuencia de trabajos dentro de cada familia, para generar una secuencia factible a partir de cualquier secuencia inicial. _ guarda los elementos no repetidos de _ en el orden en que estos aparecen, por lo que el tamaño de _ siempre es igual a (solo hay elementos no repetidos en _ ), entonces _ es el orden en que se van a producir las familias. Con esta información, en la

25

secuencia factible se ponen los trabajos que tengan _ igual a _ , de modo que la secuencia esté ordenada por familias. Forma de aplicación de los operadores de mutación y cruzamiento: Se consideran cuatro formas de aplicar estos operadores, de los cuales tres son de mutación, y una de cruzamiento. Las formas de mutación son: mutación por inversión, mutación de intercambio recíproco, y mutación de inserción. Para todas las formas, se crean dos valores enteros aleatorios: 1 y 2, tales que 2 > 1, y 1, 2 ≤ (en algunos operadores 1, 2 < , como se detalla más adelante). Mutación por inversión Si ocurre esta mutación en alguno de los lbest, se toman las posiciones 1 y 2 dentro de la secuencia del lbest a mutar. Posteriormente se invierte la parte de la secuencia entre 1 y 2, y se le aplica el esquema de codificación para evitar que la mutación cree secuencias no factibles. Por ejemplo, sea 1 = 2, 2 = 5, si la secuencia lbest es: [3 4 2 1 6 5], la mutación sería [3 6 1 2 4 5], a la cual se le debe aplicar nuevamente el esquema de codificación. Si el subgrupo contiene a gbest, se aplica la mutación sobre gbest. Mutación de intercambio recíproco En esta mutación se intercambian los trabajos en las posiciones 1 y 2, y luego se aplica el esquema de codificación. Por ejemplo, si 1 = 1, 2 = 4, y si la secuencia lbest es: [5 2 1 3 4], la mutación sería [3 2 1 5 4], a la que posteriormente se le aplica el esquema de codificación. Si el subgrupo contiene a gbest, se aplica la mutación sobre gbest. Mutación de inserción En esta mutación el trabajo en la posición 1 se traslada a la posición 2. Si 1 = 2, 2 = 6, y la secuencia lbest es: [6 3 5 1 4 7 2], la mutación es [6 5 1 4 7 3 2] a la cual se le aplica consecuentemente el esquema de codificación. Si el subgrupo contiene a gbest, se aplica la mutación sobre gbest. Cruzamiento de dos puntos En el operador de cruzamiento se requieren dos secuencias, en las cuales siempre está presente gbest, y la otra secuencia es alguno de los lbest. Se conserva la parte de la secuencia entre 1 y 2 de alguna de las dos secuencias, y esta parte se reemplaza en la de la otra secuencia, los trabajos restantes se toman de la otra secuencia. Si 1 = 2, 2 = 4, siendo gbest = [2 1 3 5 4], y lbest = [4 2 3 5 1], tomando la parte de la secuencia de 1 a 2 de gbest, y el resto de trabajos de lbest, la secuencia nueva sería: [4 1 3 5 2] a la cual se le aplica el esquema de codificación. Con los conceptos anteriores se procede a mostrar un posible diagrama de flujo del algoritmo híbrido, en dicho diagrama tCru es la tasa de cruzamiento, tMut es la tasa de mutación, Ale, R1, y R2 son número aleatorios, Iter es al iteración actual del algoritmo, ms es el tamaño de los subgrupos, N es el total de trabajos a secuenciar.

26

9. HIPÓTESIS Gráfica 1 Diagrama de flujo del algoritmo híbrido (elaboración propia)

27

Parámetros y variables del modelo: se comenzará mostrando el modelo | , , , , , , | con el cual se puede obtener posteriormente el modelo | , , , , , , , ℎ, í | . Subíndices Sea , la posición de las familias (o grupos) en la secuencia, = 1,2, … , Sea , la posición de los trabajos en la secuencia, = 1,2, … , Sea , la máquina (etapa o estación de trabajo), = 1,2, … , Sean , , , subíndices alias que representan a , , respectivamente en las sumatorias Parámetros Sea , el número de familias (o grupos) Sea , el número total de trabajos (o la suma de los trabajos en cada familia) Sea , el número de máquinas (etapas o estaciones de trabajo) Sea , el número de trabajos del grupo o familia Sea , , , el tiempo de procesamiento del trabajo de la familia , en la máquina (minutos) Sea , , el tiempo de alistamiento entre las familias − 1 e en la máquina (minutos) Sea , , , el tiempo de transporte del trabajo de la familia , entre las máquinas y + 1 (minutos) Variables Sea , el número que identifica el trabajo a realizar en la posición Sea , el vector de secuencia de los trabajos, cuyo elemento es , y su tamaño es Sea , el número que identifica la familia a realizar en la posición Sea , el vector de secuencia de las familias, cuyo elemento es , y su tamaño es Sea , , , el tiempo de terminación del trabajo de la familia , en la máquina (minutos) Sea , , , el tiempo de ocio de la máquina , mientras espera al trabajo de la familia , tras la terminación del trabajo anterior (minutos) Modelo | , , , , , , | (Liou, Hsieh, 2015)

, , = , , + , + , ,

+ , + , , + , , , ∀ , ,

Reorganizando,

, , = , + , , + , , + , , + , ,

, ∀ , , (8)

Los tiempos de ocio son, para el caso del primer trabajo de cada familia

, , = , , + , , − , , − , , , , + , , > , , + , 0, , ∀ , Los tiempos de ocio en las máquinas para los trabajos siguientes serán

28

, , = , , + , , − , , , , , + , , > , , 0, , ∀ , > 1, Las funciones a trozos de tiempos de ocio son equivalentes a funciones de máximo, en particular obsérvese que, = − , >0,

Entonces, = max (0, − ) Esta equivalencia siempre se cumple para cualquier par de números reales , ∈ ℝ, también por medio de los tres casos > , < , =

Caso > ⇒ = − , >0, = − ; = max(0, − ) = −

Caso < ⇒ = − , >0, = 0 ; = max(0, − ) = 0

Caso = ⇒ = − , >0, = 0 ; = max(0, − ) = 0

Teniendo esta equivalencia, los tiempos de ocio en las máquinas se presentan de la siguiente manera,

, , = max 0, , , + , , − , , − , ∀ , (9)

, , = max (0, , , + , , − , , ) ∀ , > 1, (10) Con las ecuaciones (8), (9) y (10) se calculan los tiempos de terminación de los trabajos y el tiempo de terminación máximo de cualquier secuencia, con lo cual se eligen los individuos gbest y lbest del algoritmo híbrido. Antes de proceder con estas mismas ecuaciones a establecer el modelo | , , , , , , , ℎ, í | , se mostrarán las ecuaciones (8), (9), y (10) con algunos valores específicos de los subíndices que se pueden realizar para mostrar detalles relacionados con el modelo.

, , = 0 ∀ ,

, , = , , + , + , ,

+ , + , , + , , = 0

Dado que la máquina 0, en realidad no existe, Su tiempo de procesamiento es 0 (cualquier trabajo en la máquina 0 está disponible para la máquina 1), su tiempo de setup es 0 (no se gasta tiempo alistando una máquina que no existe), y por último, su tiempo de ocio es 0 (todos los trabajos se encuentran en la máquina 0 al inicio, es decir, la máquina 0 no espera ningún trabajo, y por ende no tiene tiempo de ocio). Cada uno de los términos de la ecuación anterior es igual a 0.

, , = max (0, , , − , , − s , ) ∀ Porque, , , = 0 ∀ , reemplazando en (9),

, , = max (0, , , + , , − , , − , )

29

Si > 1

, , = max (0, , , − , , ) Que se obtiene reemplazando , , = 0 en (10),

, , = max (0, , , + , , − , , ) Como se puede ver, los tiempos de ocio de la primera máquina dependen de los tiempos de transporte desde el estado inicial de los trabajos hasta la primera máquina; si estos tiempos de transporte son iguales a cero (implicando que los trabajos se encuentran instantáneamente listos para ser procesados por la primera máquina), entonces la primera máquina no tiene tiempos de ocio (son iguales a cero).

, , = 0 ∀ , La familia 0 no existe, , , representa el tiempo en que en cada máquina se termina cada trabajo de esta familia inexistente, o en otras palabras, el tiempo en que puede iniciar cada trabajo de la familia 1, el cual es igual a cero porque no hay impedimentos para el inicio de la familia 1. Para los tiempos de terminación de la primera familia en la primera máquina:

⇒ , , = , + , , + , ,

Dado que

, , + , ,

= 0

Porque la primera sumatoria es inexistente pues va desde 1 hasta 0. Similarmente para los tiempos de terminación de la primera familia en cada máquina:

⇒ , , = , + +

Recordando que para el primer trabajo de la primera familia, > 1

, , = , , + , , − , , − , , , , + , , > , , + , 0,

Teniendo que , , = 0

, , = , , + , , − , , , , + , , > , 0,

Teniendo que la ecuación (6) se cumple para cualquier pareja de números reales, entonces las ecuaciones (9) y (10) de tiempos de ocio se pueden expresar así,

, , = max (0, , , + , , − , , − , ) ⇒ ,1, = max ,1, −1 + ,1, −1 , −1, −1, + , − −1, −1 , − , ∀ , (11)

30

, , = max 0, , , + , , − , , ⇒ , , = max , , + , , , , , − , , ∀ , > 1, (12)

La ecuación (8) presenta los tiempos de terminación utilizando la forma de la ecuación (5), ahora se procederá a convertir la ecuación (8) a la forma de la ecuación (1). De la ecuación (8) obténgase , , , , , , , , , etc.

, , = , + , , + , ,

, , = , + , , + , , + , , + , , = , , + , , + , ,

, , = , + , , + , , + , , + , , + , , + , , = , , + , , + , , ⇒ , , = , + , , + , , + , , + , , + ⋯ + , , + , , + , , + , ,= , , + , , + , , ∀ > 1 Observando que la ecuación anterior no se modifica si se cambia de máquina, pues ésta no afecta los términos de las sumatorias, se hacen las siguientes relaciones.

, , = , , + , , + , , ∀ > 1,

, , = , + , , + , , ∀

, , = , , + , , + , ,= , + , , + , , + , , + , , + ⋯ + , , + , , + , ,+ , , Recordando que es la cantidad de trabajos de la familia 1, y por ende , , se corresponde con el tiempo de terminación del último trabajo de la familia 1 en la máquina . Ahora con los tiempos de terminación de la segunda familia en cualquier máquina , , , , , , etc.

, , = , + , + , , + , , + , , + , , + ⋯ + , , + , , ⇒ , , = , + , , + , , + , + , , + , , + ⋯ + , , + , , ⇒ , , = , + , , + , , + , ,

, , = , + , + , , + , , + , , + , , + , , + , , + ⋯ + , , + , , ⇒ , , = , , + , , + , + , + , , + , , + , , + , , + ⋯ + , , + , , ⇒ , , = , , + , , + , ,

, , = , + , + , , + , , + , , + , , + , , + , , + , , + , , + ⋯ + , ,+ , , ⇒ , , = , , + , , + , + , + , , + , , + , , + , , + , , + , , + ⋯+ , , + , , ⇒ , , = , , + , , + , ,

Ahora para cualquier trabajo > 1 de la segunda familia

31

, , = , + , + , , + , , + ⋯ + , , + , , + , , + , , + ⋯ + , , + , , ⇒ , , = , , + , , + , + , + , , + , , + ⋯ + , , + , , + , , + , ,+ ⋯ + , , + , , ⇒ , , = , , + , , + , , ∀ > 1

Continuando con la tercera familia para encontrar el patrón que forman las ecuaciones.

, , = , + , + , + , , + , , + , , + , , + ⋯ + , , + , , + , , + , ,+ ⋯ + , , + , , ⇒ , , = , + , , + , , + , ,

, , = , + , + , + , , + , , + ⋯ + , , + , , + , , + , , + ⋯ + , ,+ , , + , , + , , + ⋯ + , , + , , ⇒ , , = , , + , , + , ,

Para cualquier familia en la secuencia, de la ecuación (8) se tiene,

, , = , + ⋯ + , + , , + , , + ⋯ + , , + , , + , , + , ,+ ⋯ + , , + , , + , , + , , + ⋯ + , , + , , + ⋯ + , ,+ , , + ⋯ + , , + , , ⇒ , , = , + ⋯ + , + , , + , , + ⋯ + , , + , , + ⋯ + , , + , ,+ ⋯ + , , + , ,

, , = , + ⋯ + , + , , + , , + , , + , , + ⋯ + , , + , , + , , + , ,+ ⋯ + , , + , , + ⋯ + , , + , , + ⋯ + , , + , , ⇒ , , = , + , , + , , + , + ⋯ + , + , , + , , + ⋯ + , , + , , + ⋯+ , , + , , + ⋯ + , , + , , ⇒ , , = , + , , + , , + , , ∀ , (13)

Para los demás trabajos de la familia ,

, , = , + ⋯ + , + , , + , , + ⋯ + , , + , , + , , + , , + ⋯ + , ,+ , , + ⋯ + , , + , , + ⋯ + , , + , ,

, , = , + ⋯ + , + , , + , , + ⋯ + , , + , , + , , + , , + , , + , ,+ ⋯ + , , + , , + ⋯ + , , + , , + ⋯ + , , + , , ⇒ , , = , , + , , + , + ⋯ + , + , , + , , + ⋯ + , , + , , + , , + , ,+ ⋯ + , , + , , + ⋯ + , , + , , + ⋯ + , , + , , ⇒ , , = , , + , , + , , ∀ , > 1, (14)

Reemplazando los tiempos de ocio en (13) por (11), y en (14) por (12), entonces,

, , = , + , , + , , + , , ∀ , , , = max , , + , , , , , + , − , , − , ∀ ,

32

⇒ , , = , + max , , + , , , , , + , − , , − , + , ,+ , , ⇒ , , = , , + max , , + , , , , , + , ∀ , (15)

, , = , , + , , + , , ∀ , > 1, , , = max , , + , , , , , − , , ∀ , > 1, ⇒ , , = max , , + , , , , , − , , + , , + , , ⇒ , , = , , + max , , + , , , , , ∀ , > 1, (16)

Las ecuaciones (15) y (16) muestran la ecuación (8) con la forma de la ecuación (1), con esta forma se dará lugar al modelo | , , , , , , , ℎ, í | , para lo cual primero se enunciarán nuevos parámetros y variables necesarios por la presencia de lotes en algunas máquinas del sistema de producción y por la posibilidad de aplazamiento de actividades al día siguiente si no se completan en un día de trabajo. Subíndices Sea , subíndice auxiliar para los lotes (por b de batch en inglés) Sea , subíndice alias que representa a en las sumatorias Parámetros Sea , , tiempo de procesamiento por lote de trabajos de la familia en la máquina (minutos) Sea , la capacidad de la máquina si procesa por lotes (libras) Sea , , la masa del trabajo en posición de la familia en posición (libras) Sea , el parámetro binario que indica si la máquina procesa por lotes, 1 si la máquina procesa por lotes y 0 si procesa cada trabajo individualmente Sea mt, la cantidad de minutos que dura una jornada laboral (minutos) Sea mD, la cantidad de minutos de un día (minutos) Variables Sea , la posición (dentro de la secuencia) del trabajo inicial de la familia Sea , la posición (dentro de la secuencia) del trabajo final de la familia Sea , , , el número de lote de la máquina en que se terminará de producir el trabajo en posición de la familia en posición , la cuenta se reinicia en cada familia Sea , , el número total de lotes de la familia en posición en la máquina Sea , , , la posición (dentro de la familia) del trabajo inicial de los trabajos que terminan en el lote en que se produce el trabajo de la familia en la máquina Sea , , , la posición (dentro de la familia) del trabajo final de los trabajos que terminan en el lote en que se produce el trabajo de la familia en la máquina Sea , , , el número de trabajos de la familia en posición a terminar de producir en el lote

de la máquina Sea , , , el tiempo total de transporte del trabajo en la posición de la familia en posición entre las máquinas y + 1. Si la máquina + 1 procesa por lotes, , , varía en virtud de

33

que el trabajo en posición pertenezca a un lote en la máquina + 1. La máquina + 1 debe esperar que lleguen todos los trabajos del lote al que pertenece el trabajo en posición antes de comenzar su procesamiento. Si la máquina + 1 no procesa por lotes entonces , , es igual al tiempo de transporte entre y + 1 más el tiempo de terminación en la máquina del trabajo de la familia , pues la máquina + 1 no necesita esperar otros trabajos para empezar a

procesar el trabajo de la familia (minutos) Sea , , el tiempo total de alistamiento en la máquina entre las familias en posición − 1 e . Para la primera familia , es igual al tiempo de alistamiento, y para las siguientes familias

, es igual al tiempo de alistamiento más el tiempo de terminación del último trabajo de la familia anterior (minutos) Sea , , , el tiempo total de procesamiento del trabajo j de la familia i en la máquina k, medido desde el inicio de la producción, que no considera la restricción día sino que permite que el procesamiento termine en cualquier tiempo, incluso después del final del día Sea , , , el día en el que se completa el procesamiento del trabajo de la familia en la máquina Sea , , , el día en que se completa el transporte del trabajo de la familia entre las máquinas y + 1 Sea , , el día en el que se completa el alistamiento de la máquina para cambiar entre las familias − 1 e Definición de las variables Las variables recién definidas se pueden expresar matemáticamente como sigue,

= 1 +

La posición en la secuencia del primer trabajo de cada familia es igual a 1 más el valor acumulado de los tamaños de familias anteriores. Por ejemplo, si la familia 1 tiene 4 trabajos = 4, la familia 2 tiene 5 trabajos = 5, entonces la posición del primer trabajo de la familia 3 es 5 + 4 + 1 = 10, porque las familias 1 y 2 ocupan las primeras 9 posiciones de la secuencia, la posición 10 será la posición del primer trabajo de la familia 3 (asumiendo que la secuencia de familias es 1, 2 y 3, para este ejemplo).

=

La posición en la secuencia del último trabajo de cada familia es igual al valor acumulado de las familias anteriores incluyendo la familia actual. Siguiendo el ejemplo anterior, el último trabajo de la familia 1 es = 4, y el último trabajo de la familia 2 es + = 9.

, , = ∑ ,

La ecuación de , , muestra que el lote en que se hace el trabajo en posición de la familia en posición en la máquina es un número entero debido a que la función techo denotada por las

34

barras verticales alrededor de la fracción siempre devuelve un número entero. Esto es lógico puesto que no tiene sentido físico hablar de lotes con decimales. El número de lote en que se termina un trabajo dado aumenta conforme aumente la masa de los trabajos terminados anteriormente; a mayor sea la capacidad de la máquina , menor número de lotes serán necesarios.

La relación ∑ , da como resultado el número de veces que se tendría que usar

la capacidad de la máquina para producir los trabajos de la familia en posición desde el trabajo en posición hasta el trabajo en posición , por ello la sumatoria va desde = hasta = . Si esta relación da como resultado un número decimal, se debe aproximar al siguiente entero superior, por ejemplo, si ∑ , = 2.1 quiere decir que se va a

usar la capacidad de la máquina 2.1 veces, pero como la máquina no puede operar durante una fracción de su tiempo de procesamiento sino que siempre el tiempo de procesamiento por lote será la totalidad del parámetro , entonces para usar la capacidad de la máquina 2.1 veces el tiempo total será 3 veces el parámetro , lo que se obtiene usando la función techo como se mostró.

, = ∑ ,

La ecuación de , es igual que la de , , , la diferencia es que la sumatoria no va hasta sino hasta lo que elimina el subíndice en , . Este número representa la cantidad total de lotes que se harán en la máquina de la familia .

, ,, , = ≥≤ , , ,

La ecuación de la variable , , utiliza la función “cont” que es una función que sirve para contar el número de repeticiones de valores dentro de un vector o dentro de los elementos de un conjunto, la función cont devuelve el número de veces que se repite el valor del último argumento dentro de los valores de los argumentos anteriores. Así, , , será igual al número de veces que el valor se repita dentro de los elementos del conjunto compuesto por

, , sobre todos los valores de entre y . Por ejemplo en un sistema de 5 trabajos en la familia 2, máquina 3, los valores de , , ∀ podrían ser [1, 1, 3, 3, 4] lo que indica que el primer y el segundo trabajo de la familia 2 se terminarán en el lote 1, los trabajos 3 y 4 se terminarán en el lote 3, y el último trabajo en el lote 4. Si se quiere saber el número de trabajos que terminarán de ser procesados en el lote = 3, se aplicaría la ecuación de , , , la cual cuenta el número de veces que se repite el número 3 dentro del conjunto del ejemplo, en este caso , , = 2

, , = , ,, , + 1

35

Para determinar los trabajos que pertenecen a un lote a ser procesado por la máquina nótese que los valores acumulados de la variable , , sobre el subíndice siempre coinciden con la posición del trabajo final de los lotes a realizar en la máquina , esto implica que si se le suma 1 a los valores acumulados de , , se obtiene la posición del primer trabajo del siguiente lote. Para conocer el primer trabajo no del siguiente lote sino del lote actual, habría que hacer la suma acumulada hasta el lote anterior, es decir, , , − 1.

, , = , ,, ,

La ecuación para determinar el trabajo final de un lote dado será la suma acumulada sobre el subíndice de la variable , , hasta el valor del lote , , Con el fin de mostrar el funcionamiento de las dos ecuaciones anteriores se puede hacer el siguiente ejemplo. Supóngase un sistema flow shop de 8 trabajos en la familia 1, hay 7 máquinas, la máquina 6 procesa por lotes, la variable , , puede tener los siguientes valores en los respectivos 8 trabajos [1, 1, 1, 1, 3, 4, 4, 4], y la variable , , respectiva será [4, 0, 1, 3] porque se terminan 4 trabajos en el lote 1, 0 trabajos en el lote 2, etc. Aquí se puede ver lo que se dijo sobre los valores acumulados de , , , en [4, 0, 1, 3] 4 corresponde al trabajo que cierra el primer lote, 4 + 0 = 4 es el trabajo en que acaba el segundo lote, 4 + 0 + 1 = 5 es el valor del último trabajo en el lote 3, y por último 4 + 0 + 1 + 3 = 8 es el último trabajo del lote 4. Continuando el ejemplo anterior, si se quiere conocer los trabajos que pertenecen al cuarto lote el vector [4, 0, 1, 3] muestra que el cuarto lote comienza con el trabajo 4 + 0 + 1 + 1 = 6 y termina con el trabajo 4 + 0 + 1 + 3 = 8, es decir que el cuarto lote incluye los trabajos 6, 7 y 8. Nótese que para obtener el primer trabajo del cuarto lote fue necesario sumar +1 a la variable

, , acumulada hasta el tercer lote, pues dicha variable acumulada representa el último trabajo del tercer lote, por lo que el siguiente trabajo (+1) es el primero del cuarto lote. Ahora, para saber el lote del trabajo 7 se usa la variable , , = 4, y para saber el lote anterior a la terminación del trabajo 7 sería , , − 1 = 3, o sea que el primer trabajo que pertenece al cuarto lote será el valor acumulado hasta , , − 1 de , , , sumando +1 a este acumulado, y el último trabajo que pertenece al cuarto lote será el valor acumulado hasta , , de , , . Aquí se usó de ejemplo el trabajo 7, pero también se podría usar el trabajo 6 o el trabajo 8, pues , , = 4 y , , = 4, por lo que los valores acumulados de , , serán los mismos. Terminando el ejemplo, matemáticamente el valor acumulado hasta , , − 1 de , , , sumando +1 se escribe,

, , = , ,, , + 1 = , , + 1 = (4 + 0 + 1) + 1 = 6

Por otra parte el valor acumulado hasta , , de , , es,

36

, , = , ,, , = , , = (4 + 0 + 1 + 3) = 8

Según lo anterior el primer trabajo del cuarto lote es el trabajo 6, y el último trabajo es el trabajo 8, lo que corresponde exactamente con los valores del ejemplo. Para máquinas con lotes,

, , =max

≥ , , + −1=1

≤ , , + −1=1

, , + , ,

La finalidad de la ecuación de , , es encontrar el tiempo de transporte total del trabajo en la posición de la familia en la posición entre las máquinas y + 1. , , es igual al máximo valor de la suma , , + , , , variando entre , , + ∑ −1=1 y , , + ∑ −1=1 , los trabajos entre estas dos cotas son los trabajos que pertenecen a un mismo lote en la máquina + 1. Para máquinas sin lotes,

, , = , , + , , En las máquinas que no tienen lote, el tiempo que le toma a los trabajos llegar a la máquina + 1 se calcula como , , + , , , porque en este caso el trabajo en posición de la familia en posición inicia su transporte entre las máquinas y + 1 apenas termina su procesamiento en la máquina (variable , , ) y tras un tiempo , , el trabajo arriba a la máquina + 1. Si una máquina dada + 1 procesa por lotes, esta máquina debe esperar a que lleguen todos los trabajos del lote a procesar, y si cada trabajo del lote llega en un momento diferente, entonces la máquina + 1 comenzará a procesar cuando llegue el último de los trabajos, es decir, el trabajo con el máximo tiempo de llegada a la máquina + 1, o matemáticamente max , , + , , . Cada trabajo tiene su tiempo de llegada diferente , , + , , . Los trabajos que pertenecen al lote que va a procesar la máquina + 1 se encuentran entre , , y , , para cualquier que termine en el mismo lote. Para la primera familia = 1,

, = , Para las familias siguientes > 1,

, = , + , , Hay una igualdad que existe entre la posición del primer trabajo y del último, tanto en familias como en lotes, teniendo en cuenta que sus ecuaciones son de sumas acumuladas. Es decir,

37

teniendo se puede determinar , y teniendo , , se puede encontrar , , . Esas igualdades son de esta manera,

− 1 + = + 1 − 1 + = =

, , − 1 + , , , , = , ,, , + 1 − 1 + , , , ,

= , ,, , + , , , , = , ,

, , = , ,

Con la definición de variables terminada se planteará la ecuación de tiempos de terminación para el modelo | , , , , , , , ℎ, í | . Se puede recurrir a la búsqueda de patrones en las ecuaciones, así como se hizo para establecer la ecuación de tiempos de terminación para el modelo | , , , , , , | con la forma de la ecuación (1). Después de establecer las ecuaciones de tiempos de terminación, se miraron los datos medidos de tiempos, con el fin de que las ecuaciones representen los tiempos observados; aun así se presentó error aunque bajo, un promedio de 0,58% como se explicará con mayor detalle en la sección 11. Resultados. Las ecuaciones a continuación se presentarán sin la restricción í , como si todas las actividades se pudieran hacer en un solo día de trabajo. Tras establecer los tiempos de terminación se introducirá la restricción í .

, , = ( , ∗ , , + max ( , , , , )) + (1 − )( , ,+ max ( , , , , )) El paréntesis que multiplica a representa el tiempo de terminación del primer trabajo de la primera familia en la primera máquina si esta máquina procesa por lotes; ∗ , , representa el tiempo de procesamiento del primer trabajo, si por ejemplo la masa del primer trabajo es 2.1 veces la capacidad de la máquina 1, entonces , , = 3 porque la máquina debe producir un total de 3 lotes para terminar el primer trabajo, lo que toma un tiempo total de ∗ , , , similar al tiempo , , que se presenta si la máquina 1 no procesa por lotes. Pero la máquina 1 no puede comenzar a procesar instantáneamente el trabajo 1 de la familia 1, antes de comenzar debe alistarse la máquina 1 y el trabajo 1 debe ser transportado hasta la máquina. La máquina 1 comenzará el procesamiento apenas se complete el que tarde más de estos dos eventos, es decir max ( , , , , ), y lo mismo si la máquina 1 no procesa por lotes. Ahora para determinar la ecuación de , , se mostrarán las ecuaciones de , , , , , , para ver el patrón que forman.

38

, , = ( , ∗ , , + max ( , , , , )) + (1 − )( , ,+ max ( , , , , ))

, , = ( , ∗ , , + max ( , , , , )) + (1 − )( , ,+ max ( , , , , )) Las ecuaciones de , , , , , y la ecuación de , , no se diferencian, por la definición de , por ejemplo si las máquinas 1 y 2 no procesan por lotes entonces , , = , , , y

, , = , , + , , , sin embargo este cambio en no aparece en las ecuaciones de tiempos de terminación. En , , no se incluye , , pues , , = 0. Siguiendo el patrón visto,

, , = ( , ∗ , , + max ( , , , , )) + (1 − )( , ,+ max ( , , , , )) ∀ > 1 Se construirá la ecuación de , , , comenzando por , , , , , hasta que se forme un patrón,

, , = ( , ∗ , , + max ( , , , , )) + (1 − )( , ,+ max ( , , , , ))

, , = ( , ∗ , , + max ( , , , , )) + (1 − )( , ,+ max ( , , , , )) Nuevamente la ecuación , , , es similar a las ecuaciones , , y , , , en , y

, se agrega el tiempo de terminación del último trabajo de la familia anterior. Este tiempo de terminación no es necesario en la ecuación , porque la familia anterior no existe. Terminando el patrón,

, , = ( , ∗ , , + max ( , , , , )) + (1 − )( , ,+ max ( , , , , )) ∀ , (17) Para terminar de construir las ecuaciones de tiempos de terminación, se buscará el patrón que formen las ecuaciones , , , , , , para formular la ecuación de , ,

, , = ( , ∗ [ , , − , , ] + max ( , , , , , )) + (1 − )( , ,+ max ( , , , , , ))

, , = ( , ∗ [ , , − , , ] + max ( , , , , , )) + (1 − )( , ,+ max ( , , , , , )) Las ecuaciones de , , y , , tienen algunos cambios respecto a la ecuación de , , . La diferencia , , − , , indica la cantidad de lotes adicionales que se deben hacer para producir el trabajo 2 de la familia , pues cabe la posibilidad de que los trabajos 1 y 2 pertenezcan al mismo lote, ese caso , , − , , = 0, o puede que se requieran varios lotes adicionales, en ese caso la diferencia será igual a dicha cantidad de lotes adicionales. Otro cambio es la desaparición de los tiempos de alistamiento que se reemplaza por el tiempo de terminación del trabajo anterior dentro de la misma familia, esto se debe a que en los trabajos donde > 1 la máquina ya ha sido alistada previamente, y para iniciar debe completarse el trabajo anterior − 1. Dado lo anterior,

39

, , = ( , ∗ [ , , − , , ] + max ( , , , , , )) + (1 − )( , ,+ max ( , , , , , )) ∀ , > 1, (18) Teniendo las ecuaciones (17) y (18) se procederá a agregar la restricción í . No cualquier tiempo de terminación es factible, si un tiempo de terminación se encuentra por fuera del intervalo de tiempo que dura la jornada laboral de cada día (medido en minutos en este trabajo), entonces no se puede llevar a cabo. Lo mismo ocurre con los tiempos en que se completan los transportes y los alistamientos. Si í , , es el día en que se termina el trabajo de la familia en la máquina entonces el intervalo de tiempo que dura la jornada laboral de ese día es: í , , − 1 ∗ , + í , , − 1 ∗ Se requiere restar 1 al día para obtener el momento de inicio del día. Si cualquier actividad no se alcanza a realizar en una jornada laboral entonces se aplaza para el día siguiente. En particular, para los tiempos de terminación del primer trabajo de cada familia,

, , = , , , , , ≤ + í , , − 1 ∗ , ∗ , , + (1 − ) , , + í , , ∗ , (19)

Como se puede ver en la ecuación (19), para el día siguiente solamente se aplaza el procesamiento, bien sea que la máquina procese o no por lotes. La ecuación (19) aplica ∀ , . Ahora para los tiempos de terminación de los demás trabajos de cada familia, > 1,

, , = , , , , , ≤ + í , , − 1 ∗ , ∗ [ , , − , , ] + (1 − ) , , + í , , ∗ , (20)

La ecuación (20) aplica ∀ , > 1, Las actividades de transporte y de alistamiento también pueden ser aplazadas al día siguiente, a continuación se presentarán las ecuaciones correspondientes. Para las actividades de transporte en máquinas que procesan por lote ( = 1),

40

, ,

=

max ≥ , , + ≤ , , +

, , + , , , max

≥ , , + ≤ , , +

, , + , , ≤ + í , , − 1 ∗max

≥ , , + ≤ , , +

, , + í , , ∗ , (21)

Para las actividades de transporte en máquinas que no procesan por lote ( = 0),

, , = , , + , , , , , + , , ≤ + í , , − 1 ∗, , + í , , ∗ , (22)

Las ecuaciones (21) y (22) aplican ∀ , , , su aplicación depende del valor de Para las actividades de alistamiento de las familias siguientes a la primera familia > 1 (la primera familia siempre se alista en el día 1, si no se alcanza a alistar en el día 1 implica que el parámetro de tiempo de alistamiento es mayor a la cantidad de tiempo de trabajo del día, lo cual haría imposible realizar la actividad, en general todos los parámetros de tiempos deben ser menores o iguales al tiempo de trabajo de un día, de lo contrario en ningún día se podrían hacer sus actividades correspondientes),

, = , + , , , , + , , ≤ + í , − 1 ∗ , + í , ∗ , ∀ , (23)

Las ecuaciones (19) a (23) son las que se usan para calcular los tiempos de terminación de las actividades en el código de VBA. Por último sobre la restricción í , se puede pensar que no es necesaria si se calculan los tiempos de terminación sin considerar el horario de trabajo y después se suma a los tiempos de terminación el tiempo sin trabajo de cada día, pero eso no resulta en los tiempos de terminación correctos, para mostrarlo basta un ejemplo pequeño. Supóngase que el día dura 30 unidades de tiempo y el tiempo de trabajo al día son 10 unidades de tiempo, en un sistema de una máquinas y dos trabajos, los tiempos de procesamiento son para el trabajo 1: 5 y para el trabajo 2: 6 unidades de tiempo, si la secuencia es trabajo 1 y después de trabajo 2, el tiempo de terminación del trabajo 1 sería 5 unidades de tiempo, y del trabajo 2 sería 11 unidades de tiempo. El trabajo 2 termina después de las 10 unidades de tiempo de trabajo al día, si se le suma el tiempo sin trabajo de cada día (20 unidades de tiempo), el tiempo de terminación del trabajo 2 sería 31 unidades de tiempo; si en cambio se aplaza el trabajo para el día siguiente, el tiempo de terminación del trabajo 2 sería 30 + 6 = 36 unidades de tiempo. La razón por la que no sirve sumar el tiempo sin trabajo de cada día es que en esa forma no se aplazan las actividades sino que se interrumpen al final del día y se resumen al día siguiente, lo cual no sucede en Café Semilla S.A.S.

41

Se puede disminuir el máximo de los tiempos de terminación de los trabajos que se programan en la empresa Café Semilla S.A.S. por medio de tres elementos: un modelo de scheduling adecuado al sistema de producción de la empresa, un algoritmo híbrido que busque minimizar el máximo de los tiempos de terminación de los trabajos, y software que esté disponible para uso de la empresa que ejecute este algoritmo y le muestre a la empresa tanto la secuencia encontrada como los tiempos de terminación. Resultado de la hipótesis: se encontró una disminución en el máximo de los tiempos de terminación de los trabajos, dicha disminución fue en promedio de 16,45%, mínimo del 3,64%, y máximo del 26,55%. En todas las 11 mediciones hubo mejora.

10. DISEÑO METODOLÓGICO A continuación se expone la metodología que se siguió para llevar a cabo el presente trabajo, lo que permitió cumplir con los objetivos propuestos.

10.1. Identificación y adaptación de la técnica cuantitativa de scheduling

El primer paso que se hizo fue modelar el sistema bajo estudio, a saber, el tipo de sistema de producción y sus restricciones en Café Semilla S.A.S. con lo cual se formuló un modelo de scheduling. Bajo observación directa del sistema de producción en funcionamiento, se encontró que existen tiempos de alistamiento en las máquinas cuando se producen cambios de familias de productos. También existen tiempos de transporte, debido a la distancia entre las máquinas, cada trabajo debe ser transportado entre cada par de máquinas. Existen familias de productos, lo que sirve para establecer la restricción fmls. La permutación de los trabajos se mantiene constante por política de la empresa (como se explicó anteriormente). Las máquinas 2, 3, y 4 procesan por lotes. Y por último, las actividades (alistamientos, transportes, y procesamientos) que no se alcanzan a realizar en un día de trabajo se aplazan para el día siguiente. Con base en las observaciones, el modelo que se encontró que representa el sistema de producción de Café Semilla S.A.S. es el modelo | , , , , , , , ℎ, í | . A este modelo se llegó mediante observación directa del sistema de producción.

10.2. Datos de entrada para la técnica identificada Para el modelo | , , , , , , , ℎ, í | se requieren como datos de entrada los tiempos de procesamiento de cada trabajo de cada familia en cada máquina que no procesa por lotes, los tiempos de procesamiento de cada familia en cada máquina que procesa por lotes, los tiempos de transporte de cada trabajo entre cada par de máquinas, los tiempos de alistamiento de las máquinas entre cada par de familias, la duración de una jornada laboral, y las capacidades de las máquinas que procesan por lotes.

42

Para comparar los resultados del modelo con los resultados actuales de la empresa se requiere además conocer la secuencia en que se hacen los trabajos y los tiempos de terminación de cada uno de los trabajos de cada familia en cada máquina. Se realizaron 11 mediciones diferentes de estos datos de entrada. En cada medición los parámetros variaron, no solamente por la variabilidad propia de la medición sino porque en cada medición la definición de los trabajos es diferente. Por ejemplo en la medición 1 el trabajo 1 consistió en producir 28 libras de café orgánico ¼ de libra (antes de la pérdida de agua), mientras que en la medición 2 el trabajo 1 consistió en producir 104 libras de café orgánico ¼ de libra (antes de la pérdida de agua). Los parámetros del trabajo 1 cambian drásticamente de la medición 1 a la medición 2, por lo que estos parámetros no se pueden promediar directamente (en la sección 11. Resultados se hace un análisis de los parámetros). En la medición de los parámetros se contó con la ayuda de la empresa, pues en cada medición resulta imposible medir los tiempos de varios parámetros que ocurren simultáneamente. La directora de producción colaboró reuniendo los valores de los parámetros y de tiempos de terminación conforme se iban midiendo, al mismo tiempo que personalmente se midieron algunos parámetros con un cronómetro y luego se registraron en un cuaderno a mano los valores sobre plantillas escritas con anterioridad. Después se leyeron los valores de los parámetros y de los tiempos de terminación para copiarlos en un archivo de Excel y continuar con el trabajo. Debido a que los procesos de producción no están estandarizados la empresa no tenía establecidos los valores de los parámetros. La empresa planea continuar cambiando sus métodos por lo que las mediciones realizadas no se consideran como tiempos estándar. Sin embargo la empresa tuvo la intención de que las mediciones revelaran tiempos cercanos a un posible estándar, por lo que se decidió medir los parámetros con una precisión de 1 segundo; los cronómetros pueden medir centésimas de segundo, pero para la empresa no es necesaria tanta precisión. Por otra parte, los tiempos de terminación se midieron con menos precisión, con precisión de 1 minuto porque debido a la falta de estandarización existe aún ambigüedad sobre el momento exacto en que termina un trabajo, y además si la empresa quiere establecer un estándar en sus parámetros de tiempos, no necesita medir los tiempos de terminación con precisión, pues los tiempos de terminación son resultado de la secuencia elegida y de los parámetros de tiempos, si se cambia la secuencia, se cambian los tiempos de terminación, por lo que los únicos tiempos que ameritan mayor precisión son los parámetros de tiempos. Como se dijo, a pesar de que los parámetros de tiempos se midieron con precisión de 1 segundo, eso no significa que ahora estos tiempos sean estándar de la empresa, pues la empresa puede seguir cambiando sus procesos. Sin importar como se realicen los procesos, cuando la empresa establezca su estándar y mida los parámetros de tiempos, estos parámetros se pueden copiar en el archivo de Excel con el código VBA y correr el algoritmo para determinar la secuencia de programación de la producción. En el futuro la empresa puede seguir usando este software, y si cambia de estándar solamente debe cambiar los parámetros en el archivo de Excel para continuar determinando las secuencias de programación de la producción. El software no está sujeto a los

43

valores de las mediciones que se realizaron, si los parámetros cambian, el algoritmo se puede seguir ejecutando, cambiando los parámetros. En los anexos de este trabajo se encuentran tablas con los datos medidos de los parámetros en las 11 mediciones. El único dato que no se incluye es el de las demandas pues la empresa no dio permiso de que se publicaran estos valores. Los valores de parámetros de tiempos por otro lado, si se pueden publicar pues como no son el estándar definitivo de la empresa se pueden tomar como valores didácticos para comprobar el funcionamiento del algoritmo y la mejora en la disminución del tiempo de terminación máximo de las secuencias de producción.

10.3. Validación del modelo Se obtuvieron 11 secuencias a las cuales se les midió el tiempo de terminación máximo, el tiempo de terminación de cada trabajo, y los parámetros de tiempo (alistamiento, transporte, y procesamiento). Para validar el modelo, éste debe dar un resultado cercano al de tiempos de terminación a los medidos en las 11 secuencias. El modelo tuvo un error relativamente bajo, en promedio de 0,58%, el error absoluto fue en promedio de 15,84 minutos, es decir que en promedio el modelo se desvía por 15,84 minutos de los valores observados. La razón por la que el promedio del porcentaje de error da tan bajo es porque los valores de tiempos de terminación son altos pues incluyen el tiempo en que no se trabaja de cada día (pero si no se incluyen estos tiempos no habría restricción í como se dijo anteriormente). Cabe resaltar que en 2 de 1.070 ocasiones surgieron imprevistos y la empresa decidió aplazar el procesamiento para el día siguiente a pesar de que se podía realizar en el mismo día si no hubiera inconveniente. Eso quiere decir que en 2 de 1.070 ocasiones el error es bastante grande (cada ocasión hace referencia a la terminación de un trabajo en una máquina, en las 11 mediciones se midieron 1.070 tiempos de terminación) pues el modelo no considera imprevistos que pueden suceder de modo aleatorio con una probabilidad muy baja (2/1.070 = 0,0019). En la sección 11. Resultados se hace un análisis más cercano del error en el modelo. El modelo | , , , , , , , ℎ, í | representa tanto lógicamente como empíricamente el sistema de producción de Café Semilla S.A.S. y en consecuencia se considera validado. Lo representa lógicamente porque incluye todas las restricciones que se presentan en el sistema de producción de la empresa, pensar en el modelo es pensar en el sistema de producción de la empresa; y lo representa empíricamente pues el error es bajo y en todo caso los modelos matemáticos siempre están sujetos al error pues nunca representan totalmente la realidad misma.

10.4. Aplicación del algoritmo híbrido Sabiendo que el modelo se ajusta aceptablemente a la situación real del scheduling de Café Semilla S.A.S., se procedió a crear el código del algoritmo híbrido en Visual Basic de Excel.

44

Se eligió Visual Basic de Excel porque este es el único software que tiene la empresa en el que se puede desarrollar el algoritmo híbrido. Existe software más eficiente como Matlab (Liou, Hsieh, 2015), sin embargo la empresa no cuenta con la disponibilidad para adquirir este tipo de software dentro de su planeación, por lo que se optó por utilizar el software que ya tiene la empresa, y que le permitiría empezar a usar el algoritmo híbrido lo antes posible. El código de VBA ya se había comenzado a escribir con anterioridad, para poder calcular los tiempos de terminación del modelo y hacer la validación. Se agregó el algoritmo híbrido al código de VBA para tener la posibilidad de revisar que se produzcan reducciones en el tiempo de terminación máximo de las 11 secuencias medidas. Se hizo debugging al código para asegurar que el algoritmo funcione como se espera, en este aspecto se copió el ejemplo de Liou, Hsieh (2015) y se aplicó el algoritmo hasta que el resultado fuera el mismo. Después se aplicó el algoritmo a las 11 secuencias y se encontró una mejora promedio del 16,45% que equivale a una reducción promedio de 1.375,7 minutos, y en promedio una reducción de 1 día de producción. Se tomaron cinco instancias de Taillard (instancias que tradicionalmente se han usado para hacer benchmarking de algoritmos) de sistemas Flow shop (Taillard, 1993). No se tomaron más por las limitaciones de memoria de VBA. El algoritmo siempre estuvo cerca de la cota superior de tiempo de terminación máximo en cada instancia, pero no logró entrar dentro del intervalo de la cota inferior y superior. En la sección 11. Resultados se muestran las instancias de Taillard con más detalle.

10.5. Evaluación del impacto Habiendo creado el código del algoritmo híbrido, y tras encontrar la mejora en las 11 mediciones como la reducción del tiempo de terminación máximo en cada medición, se midió el impacto como la reducción porcentual promedio del tiempo de terminación máximo (16,45%), la reducción absoluta promedio (1.375,7 minutos) y la reducción promedio de días de producción (1 día). Las 11 mediciones se realizaron a lo largo de 7 meses, lo que implica que cada medición toma entre 2 y 3 semanas, 2,54 semanas por medición en promedio. De estas 2,54 semanas, la producción dura 1 semana o menos, y en el resto de tiempo la empresa consigue clientes y órdenes de producción suficientes para hacer una nueva programación de la producción. Con las reducciones encontradas por el algoritmo la empresa podría tener más tiempo para dedicar a otras actividades.

10.6. Informe de resultados Se elaboró un corto informe de resultados en Word para que la empresa conozca las mejoras que se sugieren a partir de la solución del modelo de scheduling. Este informe de resultados se le entregó a la empresa quien estará en su derecho de optar por seguir las sugerencias o no seguirlas, pues no está obligada de seguir los resultados que aporta el modelo.

45

Las sugerencias que se le hicieron a la empresa fueron de dos tipos: la reducción que pueden tener los tiempos de terminación máximos si se siguen los resultados del algoritmo; y la mejora en la toma de decisiones de programación de la producción, si se usa el código que se creó para la empresa.

10.7. Diseño de la interfaz de usuario Finalmente, el archivo de Excel que se le entregó a la empresa se adecuó para su uso por parte del personal. Aprovechando el conocimiento previo de la gerente general en el manejo de Excel, con esta herramienta podrá hacer la programación de la producción si así lo decide. Se hizo una hoja especial de instrucciones para que en caso de ser necesario, la gerente o el tomador de decisiones de producción pueda saber cómo utilizar el archivo. Para facilitar el manejo del archivo se incluyeron cuatro botones que están explicados en las instrucciones del archivo de Excel, uno para iniciar el algoritmo (llamado “Iniciar Secuenciación”, otro para cambiar los datos (llamado “Cambiar Datos”) en caso de que hayan varios conjuntos de datos diferentes (en el caso de este trabajo 11 conjuntos de datos, pero si la empresa estandariza sus procesos habría un conjunto de datos por cada estándar), otro para determinar los tiempos de terminación de alguna secuencia en particular (llamado “Probar Secuencia Específica”), y por último un botón para hacer el diagrama de Gantt de una secuencia (llamado “Realizar Diagrama de Gantt”).

11. RESULTADOS Esta sección contiene varios resultados, no solamente aquellos relacionados con la empresa, sino también resultados que fueron necesarios de obtener para asegurar que el algoritmo funcione como se espera. Los resultados se dividen en siete secciones que se presentan a continuación.

11.1. Escritura del código El código se escribió siguiendo las convenciones de Visual Basic publicadas por Microsoft2. Los nombres de variables y parámetros se eligieron bajo las mismas convenciones3. Se crearon dos archivos de Excel, uno para la empresa y uno para analizar los resultados. En el archivo de la empresa se siguieron todas las convenciones de Microsoft, pero en el archivo de análisis se hizo una excepción: no se restringió el largo de cada línea de código. Restringir el largo de cada línea de código a un número máximo de caracteres permite que se pueda imprimir

2 Convenciones para la escritura de código en Visual Basic: https://msdn.microsoft.com/en-

us/library/aa240822(v=vs.60).aspx 3 Convenciones para nombrar variables y parámetros: https://msdn.microsoft.com/en-

us/library/aa240858(v=vs.60).aspx

46

de modo más legible el código, pero no restringir dicho máximo permite que se pueda leer más fácilmente el código en el computador por lo que se hicieron ambas formas. La mayoría de las variables del código no son variables que pertenezcan al modelo, sino que son variables que se necesitan bien sea por las limitaciones de VBA, o para facilitar la lectura y mantenimiento del código. El código como tal no se publica, pero a continuación se nombrarán algunas de las variables y secciones del código para explicar su proceso de escritura. Un ejemplo de variable que se define por las limitaciones de VBA es la variable lngMaxTrabFlias que es una variable tipo Long (guarda números enteros) la cual guarda la máxima cantidad de trabajos que tiene alguna de las familias. Esta variable es necesaria porque VBA solamente puede redimensionar un arreglo una vez, después de redimensionar un arreglo, solamente el último elemento puede ser redimensionado, los demás se mantienen con el mismo tamaño aunque se aplique el comando de redimensionar. Por ejemplo el parámetro p_ijk (que representa el parámetro , , en VBA), al redimensionar el parámetro p_ijk se escribe, ReDim p_ijk(1 To g, 1 To lngMaxTrabFlias, 1 To m) De modo que el primer elemento puede tener g valores (uno para cada familia), el tercer elemento m valores (uno para cada máquina), y el segundo elemento puede tener lngMaxTrabFlias valores uno para cada trabajo dentro de cada familia. Si se quisiera determinar la cantidad de trabajos que hay en una familia dada i se usaría n_i(i) donde n_i es el parámetro de tamaño de cada familia. Teniendo n_i(i) se podría pensar en escribir el siguiente código para redimensionar el parámetro p_ijk sin necesidad de usar lngMaxTrabFlias (no funciona), For i = 1 To g ReDim p_ijk(1 To g, 1 To n_i(i), 1 To m) Next i El problema sucede cuando la familia 1 es más pequeña que cualquiera de las otras familias. Si la familia 1 tiene por ejemplo tres trabajos y la familia 2 tiene cuatro trabajos entonces al redimensionar por primera vez el parámetro p_ijk su redimensionamiento será ReDim p_ijk(1 To g, 1 To 3, 1 To m), si se vuelve a redimensionar el parámetro p_ijk en el bucle For su tamaño seguirá siendo el mismo, a pesar de que la familia 2 tiene cuatro trabajos. Cuando se llame al parámetro p_ijk en el último trabajo de la familia 2, así, p_ijk(2, 4, m) se producirá un error en tiempo de ejecución de la forma subíndice fuera del intervalo. Una solución que no involucra la creación de la variable lngMaxTrabFlias es redefinir todos los parámetros y variables de modo que el trabajo esté en última posición, por ejemplo en lugar p_ijk(i, j, k) se llamaría al parámetro como p_ijk(i, k, j), pero entonces el código pierde consistencia en su lectura, pues el lector tendría que recordar que p_ijk está definido en el orden i, j, k en el modelo, pero en el orden i, k, j en el código. Además esta

47

solución no sirve si hay dos o más elementos que varían de tamaño, pues VBA sólo permite redimensionar varias veces el último elemento de cada arreglo. La única forma para asegurar que no se produzca el error en tiempo de ejecución de subíndice por fuera del intervalo es hacer que el tamaño de cada elemento sea el máximo que pueda tener, por ello es necesaria la variable lngMaxTrabFlias, de este modo si la familia 2 tiene cuatro familias y las demás familias tienen menos trabajos entonces lngMaxTrabFlias = 4. Esto crea ceros en las demás familias, por ejemplo si la familia 1 tiene tres trabajos su cuarta posición en p_ijk nunca será llenada y VBA inicializa toda variable automáticamente en cero, esto no afecta la ejecución del código pues dicha cuarta posición nunca será llamada ni su valor será leído para hacer algún cálculo o computar algún valor. No se pondrán aquí todas las variables adicionales que se crearon para el código pues esas variables ya se encuentran comentadas en el código VBA (se puede ver el código al presionar Alt-F11 en cualquiera de los archivos de Excel, el de la empresa o el de análisis, y luego hacer doble clic en el Módulo 1). En general se comentó todo el código de VBA porque es parte de las convenciones de Microsoft y para facilitar el mantenimiento del código a futuro. Como ejemplo de variables adicionales que se crearon para facilitar la lectura del código está la variable lngCombinsSetupEntreFlias() que es un arreglo tipo Long y sirve para determinar el número de filas que se debe bajar en la tabla de tiempos de alistamiento para encontrar el tiempo de alistamiento o setup entre cualquier combinación de dos familias en una máquina dada. La ubicación de las combinaciones de familias en la tabla de tiempos de alistamiento es una decisión de diseño de dicha tabla. Habrían muchas formas posibles en que se pueden disponer las combinaciones de familias en una tabla, se optó por una forma en la que los números de las familias se acomoden de forma creciente hacia abajo. Si la familia 0 representa el inicio de la producción, familia 1 es Orgánico, familia 2 Gourmet, y familia 3 Tradicional, entonces el orden de las combinaciones de familias en la tabla de tiempos de alistamiento sería, de 0 a 1 de 0 a 2 de 0 a 3 de 1 a 2 de 1 a 3 de 2 a 1 de 2 a 3 de 3 a 1 de 3 a 2 Como se puede ver, el primer número de cada combinación va aumentando hacia abajo, y el segundo número aumenta también hacia abajo de acuerdo a las posibles combinaciones en las que el primer número es la familia que se procesó anteriormente y el segundo número es la

48

familia que se va a procesar. Por ello no existen las combinaciones de 1 a 1, de 2 a 2, o de 3 a 3, pues no hay alistamientos al interior de cada familia; tampoco existen combinaciones como de 1 a 0, de 2 a 0, o de 3 a 0, pues la familia 0 sólo representa el inicio de la producción. De la lista de combinaciones se pueden extraer varios hechos, por ejemplo si es el número de familias, entonces las primeras filas son las combinaciones desde la familia 0. La siguiente familia (familia 1) tiene − 1 filas, y de hecho el resto de familias tiene − 1 combinaciones, pues desde cada familia se pueden alistar el resto de familias menos ella misma, entonces el total de filas de la tabla de alistamiento es igual a + ( − 1) = este hecho se usó en la detección de errores del código, hay error si el número de filas de la tabla de tiempos de alistamiento no es igual a . La variable lngCombinsSetupEntreFlias() determina el número de filas que se debe bajar en la tabla de alistamiento para cualquier par de familias exceptuando la familia 0, pues no se necesita esta variable para el caso de la familia 0. Así, lngCombinsSetupEntreFlias(2, 3) retornaría el número de fila de la combinación de familias de 2 a 3, es decir 7. Nótese que la notación de esta variable es como si fuera una función matemática, el lector lo puede interpretar si así lo desea como una función matemática, pero para VBA es una variable. Para calcular lngCombinsSetupEntreFlias() existen dos casos, o bien el primer número es mayor al segundo, o viceversa (no existe el caso en que sean iguales). Sea el primer número s1, y el segundo número s2, entonces si s1 > s2 el siguiente código calcula la variable lngCombinsSetupEntreFlias(s1, s2) = (g) + (g - 1) * (s1 - 1) + s2 El primer término es (g) que ocupan las primeras g filas de la familia 0, el segundo término (g - 1) * (s1 - 1) es el número de filas después de las (g) primeras hasta la fila anterior al inicio de la familia s1. Recuérdese que cada familia tiene (g – 1) filas, al multiplicar este número por (s1 – 1) se obtiene la fila anterior al inicio de la familia s1. Por último se suma s2, como s1 > s2 entonces s2 es la fila de la combinación de s1 a s2. Para el caso en que s1 < s2, la ecuación es similar, lngCombinsSetupEntreFlias(s1, s2) = (g) + (g - 1) * (s1 - 1) + s2 – 1 El cambio es que al final se le resta 1, pues como s1 < s2 y no existe la combinación de s1 a s1, entonces s2 siempre estará una fila más abajo de la necesaria. Esta variable lngCombinsSetupEntreFlias() se crea sólo para facilitar la lectura del código. En los lugares donde se usa lngCombinsSetupEntreFlias() se podría reemplazar por las definiciones mostradas, pero ello haría aún más intrincado el código, más difícil de leer y mantener en el futuro.

49

No es necesario escribir el funcionamiento de cada variable y cada parte del código, pues el código se encuentra comentado, aunque no con tanto detalle como aquí se hizo para evitar alargar demasiado el código, sino con el detalle suficiente para entender lo que hace cada variable y cada parte del código. A continuación se describirá el código asociado a cada uno de los cuatro botones que se diseñaron para facilitar el uso del archivo por parte de la empresa. Botón Iniciar Secuenciación: Este botón es el botón principal del archivo de Excel de la empresa y la mayoría del tiempo fue el único botón, pues inicialmente no se consideró añadir mayor funcionalidad que la de hacer la secuenciación. La subrutina asociada al botón “Iniciar Secuenciación” se encuentra en el Módulo 1 y se llama “Iniciar”. Esta subrutina se divide en cuatro partes: revisión de errores, definición de variables de VBA, lectura de parámetros y cálculo de variables, y aplicación del algoritmo híbrido. No se utilizó directamente un pseudocódigo para diseñar este código pues en el artículo de Liou, Hsieh (2015) se encuentran los pasos del algoritmo, los cuales fueron escritos en la subrutina “Iniciar”; y para el cálculo de los tiempos de terminación de cada actividad (alistamiento, transporte, y procesamiento) se copió en el código el modelo que se presentó en la sección 8. Marco De Referencia.

- Revisión de errores: en esta parte de la subrutina “Iniciar” se revisan muchos de los errores que pueden suceder. La cantidad de errores revisados trata de ser exhaustiva, sin embargo no se puede demostrar que se revisen todos los errores posibles, pues siempre cabe la posibilidad de que haya un error no revisado. Los revisión de errores procura que las tablas estén bien ubicadas, que las tablas no tengan valores ilegales (números menores que cero, celdas vacías, o no numéricas), y que los datos que no están en las tablas sean valores adecuados (como el tamaño del subgrupo, la tasa de mutación, etcétera).

- Definición de variables de VBA: lo que en el modelo se llaman subíndices, parámetros, y variables, en VBA es llamado en general variables. En esta parte se hacen todas las definiciones.

- Lectura de parámetros y cálculo de variables: Se leen de la hoja “Datos” los parámetros del modelo, como los parámetros de tiempos, las capacidades de las máquinas, y las masas (antes de la pérdida de agua) de los trabajos. Esta lectura sólo se puede realizar si las tablas están bien acomodadas, de allí la importancia de la revisión de errores, para que la lectura de datos no se comprometa, y cada parámetro sea en la ejecución del código lo mismo que en la hoja “Datos”. Se computan algunas variables como lngCombinsSetupEntreFlias() de la que ya se comentó.

- Aplicación del algoritmo híbrido: En esta última sección del código se ejecuta el algoritmo híbrido. Los tiempos de terminación se calculan según como se mostró al final de la sección 8.

Botón Cambiar Datos: Este botón sirve para cambiar el conjunto de datos de parámetros en la hoja “Datos” por otro conjunto rápidamente y disminuyendo la probabilidad de error de hacerlo manualmente.

50

En la escritura de las tablas de parámetros de la hoja “Datos” el usuario puede cometer muchos errores, por ejemplo para el usuario no necesariamente tiene que ser claro el significado de expresiones como “de 1 a 2” que hace referencia al alistamiento de la familia 1 a la familia 2. Por ejemplo en Café Semilla S.A.S. las familias se llaman Orgánico, Gourmet, y Tradicional, no se llaman familia 1, familia 2, y familia 3. Para evitar este tipo de errores y usos inadecuados del archivo de Excel de la empresa, se creó otra hoja llamada “Mediciones” en la que la empresa puede anotar los datos de nuevos estándares si los desarrolla. La subrutina asociada al botón “Cambiar Datos” se encuentra en el Módulo 1 y se llama “Cambiar_Datos”. Esta subrutina se divide en dos partes: lectura de los datos en la hoja “Mediciones”, y escritura de datos en la hoja “Datos”. En esta subrutina la detección de errores es mucho menor que en la subrutina “Iniciar” pero si hay detección, por ejemplo si no se encuentran tablas en las mediciones se produce un error. También se revisa que cada dato sea legal (numérico, mayor o igual que cero, no vacío, dependiendo del caso) así como otros errores relacionados.

- Lectura de los datos en la hoja “Mediciones”: En la hoja “Mediciones” se encuentran los conjuntos de datos que se pueden usar para correr el algoritmo. De izquierda a derecha, la primera tabla siempre es la de órdenes de producción, que en Café Semilla S.A.S. equivale a la cantidad de paquetes que se producirían si no existiera pérdida de agua. La empresa calcula la cantidad de paquetes resultantes de la producción usando el porcentaje de pérdida de agua, el cual no es necesario de conocer para hacer la secuenciación, pues la decisión de la cantidad de órdenes de producción no se toma en la programación de la producción sino antes.

- Escritura de datos en la hoja “Datos”: Tras leer los datos en la hoja “Mediciones”, estos son escritos en la hoja “Datos” nombrando y posicionando cada tabla adecuadamente para la aplicación del algoritmo híbrido.

Botón Probar Secuencia Específica: Este botón sirve para determinar los tiempos de terminación de una secuencia específica escrita en la hoja “Resultados”. Para la empresa puede ser relevante comprobar los tiempos de terminación de secuencias específicas. Dado el carácter aleatorio del algoritmo híbrido, no se puede garantizar que las secuencias encontradas por el algoritmo son óptimas y no existan otras secuencias con menor tiempo de terminación máximo. Si la empresa tiene duda de que una secuencia específica es mejor que las encontradas por el algoritmo, puede comprobarlo con este botón. Además, si se deja escrita la secuencia específica, al presionar el botón “Iniciar Secuenciación” el algoritmo utilizará la secuencia específica como una de las secuencias de la población de secuencias en la primera iteración. Una forma de utilizar esta funcionalidad es correr el algoritmo una vez y al final copiar la secuencia encontrada como secuencia específica y correr de nuevo el algoritmo, en ocasiones se encuentran mejores soluciones de esta forma.

51

La subrutina asociada al botón “Probar Secuencia Específica” se encuentra en el Módulo 1 y se llama “Probar_Secuencia”. Esta subrutina se divide en dos partes: lectura de datos y cálculo de variables, y cálculo de C_ijk.

- Lectura de datos y cálculo de variables: Se leen los datos y se calculan las variables necesarias para calcular C_ijk.

- Cálculo de C_ijk: Se calcula C_ijk y los resultados se escriben en la hoja “Resultados”

El código de esta subrutina se copió de la subrutina “Iniciar” pues es la misma subrutina exceptuando la aplicación del algoritmo híbrido. Botón Realizar Diagrama de Gantt: Este botón sirve realizar el diagrama de Gantt de la secuencia que tenga los tiempos de terminación en la hoja “Resultados”. Como la duración de la jornada laboral en Café Semilla S.A.S. es de 8 horas, 16 horas de cada día no se trabaja, entonces el diagrama de Gantt tendría 2/3 de su espacio en blanco. En la subrutina se borran estos 2/3 de espacio en blanco y los días se separan por jornada laboral. La subrutina asociada al botón “Realizar Diagrama de Gantt” se encuentra en el Módulo 1 y se llama “Diagrama_Gantt”. Esta subrutina se divide en dos partes: lectura de datos y cálculo de variables, y creación del diagrama de Gantt.

- Lectura de datos y cálculo de variables: Similar a subrutinas anteriores pero con el objetivo de hacer el diagrama de Gantt.

- Creación del diagrama de Gantt: En esta parte del código se definen el estilo del diagrama, los colores de cada familia, los colores de cada trabajo dentro de cada familia, la escala del eje horizontal, etcétera. VBA utiliza la forma RGB para definir colores, pero con la forma HSL es más fácil dividir los colores para que se diferencien las familias en el diagrama de Gantt, porque en la forma HSL, H: Hue se divide en 360 grados de la rueda de colores.

Una opción en la escritura del código era usar variables de entorno público o de módulo. En lenguajes de programación, el entorno de las variables define en dónde se puede leer y escribir sobre las variables. Una variable de entorno público o de módulo podría ser leída por todas las subrutinas del Módulo 1. Por ejemplo la variable Dim r As Long se encuentra en las cuatro subrutinas, por lo que si se definiera en un entorno público o de módulo, sólo habría que escribir una vez la definición de la variable r y todas las subrutinas podrían usarla. La variable r no tendría problema en un entorno público o de módulo, pues en cada módulo su valor se cambia según la necesidad pues es una variable auxiliar. El problema sería para las variables cuyo valor depende de la ejecución previa de una subrutina. Por ejemplo, si C_ijk que es la variable que guarda el tiempo de terminación de cada trabajo de cada familia en cada máquina, fuera una variable de entorno público o de módulo entonces podría pasar que se ejecutara la subrutina “Iniciar” en la cual C_ijk adquiere los valores encontrados por el algoritmo híbrido, luego si se cambiara de datos a otro conjunto mediante la subrutina

52

“Cambiar_Datos” y luego se probara una secuencia con la subrutina “Probar_Secuencia” los tiempos de terminación C_ijk no serían los de la secuencia probada sino los de la secuencia encontrada por el algoritmo híbrido, y el usuario no tendría forma de saberlo; lo mismo ocurriría si se hiciera un diagrama de Gantt, en el diagrama se usarían los C_ijk encontrados por el algoritmo y no los de la secuencia específica. Además, varias partes del código de cada subrutina dependen de que cada variable se inicialice en cero por defecto, con variables de entorno público o de módulo, las variables no se inicializarían en cero sino que guardarían el último valor que hayan recibido en la ejecución de las subrutinas. Para evitar este tipo de errores imprevisibles es preferible definir cada variable dentro de cada subrutina. Con respecto al modelo, si una actividad se aplaza para el día siguiente, el día se actualiza con un código de la siguiente forma:

dia_ijk(i, j, k) = dia_ijk(i, j, k) + 1

11.2. Comprobación del funcionamiento del algoritmo Para comprobar el funcionamiento del algoritmo, se hizo un ejemplo que aparece en el artículo de Liou, Hsieh (2015), si el algoritmo funciona, el resultado debe ser al menos tan bueno como el del ejemplo. También se tomaron cinco instancias de Taillard para comparar el desempeño del algoritmo (Taillard, 1993). Ejemplo de Liou, Hsieh (2015): Este ejemplo consta de 10 trabajos, 4 máquinas y 4 familias, el tiempo de terminación máximo que se encontró en el artículo es de 185 unidades de tiempo; el tiempo de terminación máximo encontrado con el código de Visual Basic es de 185 unidades de tiempo. Como el resultado del algoritmo creado en este trabajo es igual que el del artículo, se puede asumir que el código del algoritmo funciona pues por azar no se podría lograr el valor de 185 unidades de tiempo. Hay que tener en cuenta que este algoritmo híbrido es un algoritmo estocástico, es decir, es un algoritmo que depende de la aleatoriedad para funcionar, por lo que cabe la pregunta de si fue por azar que el algoritmo encontró la misma solución que el artículo. Para ver la probabilidad de que esto suceda, se debe considerar el tamaño del espacio de búsqueda (o región factible), que en este caso al ser de 10 trabajos, el espacio de búsqueda consiste de 10! posibilidades (porque el algoritmo genera inicialmente secuencias aleatorias, a las que luego se les aplica el esquema de codificación). Sea A, el evento de encontrar la solución en la que el tiempo de terminación máximo es de 185, entonces: P(A) = 1/10! = 0.000000276 Como se puede ver es demasiado improbable esta ocurrencia, la cual se hace aún más improbable cuando se vuelve a correr el algoritmo, porque éste no recuerda la mejor solución de ejecuciones anteriores y aun así retorna el mismo valor de 185 para el tiempo de terminación máximo.

53

En el archivo de Excel de análisis, en la hoja “Mediciones” se encuentran registrados los datos del ejemplo de Liou, Hsieh (2015). La secuencia óptima que se encontró en el artículo de Liou, Hsieh (2015) es: [5, 4, 3, 7, 6, 8, 9, 10, 1, 2] con un tiempo de terminación máximo de 185; esta es una de las secuencias encontradas por el código de VBA. Dada la naturaleza estocástica de los algoritmos genéticos, fue necesario repetir el algoritmo para comprobar que siempre diera el mismo resultado de 185 unidades de tiempo para el tiempo de terminación máximo. El algoritmo se repitió más de 30 veces y en todos los casos el resultado final siempre fue el mismo, independientemente de los individuos con que iniciaba la población. Lo anterior permite mostrar otro aspecto del funcionamiento del algoritmo, que se encontró durante las múltiples ejecuciones (más de 30) que se hicieron para verificar que el algoritmo trabaja como se espera. Existe más de una secuencia de trabajos que tienen un tiempo de terminación máximo de 185 unidades de tiempo. En el artículo de Liou, Hsieh (2015) solamente se da una secuencia, y no se especifica sobre la existencia de otras soluciones. Mediante el algoritmo que se codificó en Visual Basic, se encontraron las siguientes secuencias con dicho tiempo de terminación máximo: [5, 3, 4, 7, 6, 8, 9, 10, 1, 2], también [5, 4, 3, 6, 7, 8, 9, 10, 1, 2], [5, 3, 4, 6, 7, 8, 9, 10, 1, 2] y la original: [5, 4, 3, 7, 6, 8, 9, 10, 1, 2]. Con el botón “Probar Secuencia Específica” se puede comprobar los tiempos de terminación de estas secuencias. Por ejemplo para la secuencia [5, 3, 4, 6, 7, 8, 9, 10, 1, 2] la siguiente tabla muestra sus tiempos de terminación,

Tabla 1. Tiempos de terminación encontrados por el algoritmo para el ejemplo de Liou, Hsieh (2015) (elaboración propia)

Instancias de Taillard: se tomaron cinco instancias de Taillard y se les aplicó el algoritmo híbrido. No se tomaron más de cinco secuencias por las limitaciones de tamaño de los arreglos en VBA, entonces se tomaron tantas secuencias cómo fue posible. Por ejemplo para arreglos de tres dimensiones, la cantidad máxima de datos en cada dimensión es de 512 en VBA. Las instancias de Taillard que se tomaron son las siguientes,

Instancia 3 de Taillard 20x5 Instancia 9 de Taillard 20x10 Instancia 8 de Taillard 20x20 Instancia 4 de Taillard 50x5 Instancia 1 de Taillard 50x10

La notación 20x5, 20x10, y así sucesivamente significa que el problema tiene 20 trabajos y 5 máquinas, 20 trabajos y 10 máquinas respectivamente. Dentro de cada tipo de sistema hay 10 instancias de Taillard que se pueden elegir. Las instancias fueron elegidas de modo aleatorio.

5 3 4 6 7 8 9 10 1 2

1 9.00 21.00 31.00 43.00 63.00 79.00 83.00 102.00 124.00 137.00

2 23.00 41.00 61.00 79.00 90.00 112.00 118.00 133.00 151.00 169.00

3 40.00 59.00 75.00 95.00 111.00 122.00 142.00 149.00 161.00 176.00

4 57.00 61.00 96.00 111.00 124.00 141.00 147.00 159.00 179.00 185.00

54

En el archivo de Excel de análisis hay una hoja llamada “Análisis del Algoritmo” dentro de esta hoja se encuentran las secuencias que encontró el algoritmo para cada instancia de Taillard, así como el tiempo de terminación máximo encontrado y la cota superior de Taillard de cada instancia para comparar qué tan lejos estuvo el algoritmo. El algoritmo se corrió varias veces en cada instancia hasta que no se encontrara disminución en el tiempo de terminación máximo. En la misma hoja del archivo de Excel se mide el error absoluto y el error relativo en cada instancia. La siguiente tabla muestra algunos de estos resultados,

Tabla 2. Resultados relacionados con las instancias de Taillard (elaboración propia).

Aunque el algoritmo siempre estuvo cercano a la cota superior nunca la alcanzó, es posible que se deba a que el algoritmo está diseñado para sistemas Flow shop con familias, tiempos de alistamiento y de transporte, mientras que las instancias de Taillard son del sistema Flow shop básico. Teniendo en cuenta lo anterior, el error porcentual promedio del algoritmo en las instancias de Taillard es de 2,36% respecto a la cota superior, y el error absoluto promedio es de 53 unidades de tiempo. Este error es relativamente bajo y por azar sería muy improbable encontrar secuencias con tiempos de terminación tan bajos como los encontrados por el algoritmo híbrido en las instancias de Taillard. A partir de este resultado sería interesante tratar de encontrar qué es lo que tiene el algoritmo híbrido que no le permite encontrar secuencias dentro de la cota inferior y superior, también sería interesante comunicar este resultado a Liou y Hsieh, autores del algoritmo, pues en su artículo no hicieron benchmarking con instancias de Taillard.

11.3. Análisis de errores en el modelo En el archivo de Excel de análisis se incluye una hoja denominada “Análisis del modelo”, en esta hoja se mide el error del modelo respecto a las 11 mediciones. Específicamente se mide el error de 1.070 tiempos de terminación diferentes que provienen de las 11 mediciones. La medición 1 tiene diez trabajos y diez máquinas para un total de 100 tiempos de terminación. La medición 2 tiene nueve trabajos y diez máquinas para un total de 90 tiempos de terminación. La medición 3 tiene nueve trabajos y diez máquinas para un total de 90 tiempos de terminación. La medición 4 tiene nueve trabajos y diez máquinas para un total de 90 tiempos de terminación. La medición 5 tiene once trabajos y diez máquinas para un total de 110 tiempos de terminación. La medición 6 tiene nueve trabajos y diez máquinas para un total de 90 tiempos de terminación. La medición 7 tiene diez trabajos y diez máquinas para un total de 100 tiempos de terminación.

Taillard20x5(3) 1,081 1,098 17 1.57%

Taillard20x10(9) 1,593 1,636 43 2.70%

Taillard20x20(8) 2,200 2,261 61 2.77%

Taillard50x5(4) 2,751 2,765 14 0.51%

Taillard50x10(1) 3,025 3,153 128 4.23%

Error

porcentual

respecto a cota

superior

Error absoluto

respecto a cota

superior (u.t)

Cota superior

(u.t)

u.t: unidades

de tiempo

Resultado

(u.t)

55

La medición 8 tiene nueve trabajos y diez máquinas para un total de 90 tiempos de terminación. La medición 9 tiene diez trabajos y diez máquinas para un total de 100 tiempos de terminación. La medición 10 tiene diez trabajos y diez máquinas para un total de 100 tiempos de terminación. La medición 11 tiene once trabajos y diez máquinas para un total de 110 tiempos de terminación. Sumando los tiempos de terminación de todas las mediciones la cantidad de tiempos de terminación es 1.070. En la hoja “Análisis del Modelo” se encuentra el error absoluto promedio en cada conjunto de datos, así como el error porcentual promedio, el error absoluto máximo de cada conjunto, y el error porcentual máximo. Debajo de los 11 conjuntos de mediciones se encuentra el promedio, el mínimo y el máximo de cada uno de estos errores en los 11 conjuntos. Algunos resultados notables son: el error absoluto promedio en los 1.070 tiempos de terminación es de 15,84 minutos, que es un error aceptable para la empresa Café Semilla S.A.S., este error significa que el tiempo de terminación real está en promedio alejado 15,84 minutos del resultado del modelo, es decir que el tiempo de terminación máximo de una secuencia que se ejecute en la realidad tiene en promedio una diferencia de 15,84 minutos respecto al tiempo de terminación predicho por el modelo. Para Café Semilla S.A.S. el máximo error absoluto promedio que se podría aceptar sería de 30 minutos, pues si el error del modelo fuese mayor que media hora no se podría controlar la producción usando los diagramas de Gantt si en promedio cada trabajo termina con media hora o más de diferencia de lo que se había planeado. El máximo del error absoluto promedio es de 24,53 minutos, inclusive el máximo sigue estando por debajo de la media hora. Por otra parte el máximo del error absoluto máximo fue de 1.032,55 minutos, un error altísimo. Errores de este nivel se presentaron sólo en 2 tiempos de terminación de los 1.070 tiempos de terminación. En el archivo de Excel de análisis se les puso formato especial. Estos 2 errores se presentaron porque hubo imprevistos en la empresa que obligaron a aplazar los procesamientos para el día siguiente. Es claro que el modelo propuesto es determinístico, todos sus parámetros se definen como constantes, y no se tienen en cuenta imprevistos que puedan surgir durante la producción. Si se remueven estos dos errores, el error absoluto promedio deja de estar por encima de los 15 minutos y pasa a estar por encima de los 13 minutos. La siguiente tabla muestra los resultados relacionados con el error sin quitar los 2 errores extremos,

56

Tabla 3. Resultados de los errores del modelo sin quitar los 2 errores causados por imprevistos (elaboración propia).

Y la siguiente tabla es la misma que la anterior pero quitando los 2 errores extremos,

Tabla 4. Resultados de los errores del modelo quitando los 2 errores causados por imprevistos (elaboración propia).

En las dos tablas anteriores se observa que varios errores disminuyen al quitar los 2 errores extremos, como los errores relacionados con el error absoluto máximo y el error porcentual máximo (segunda fila de datos, la primera fila es similar en las dos tablas). En cuanto al error porcentual del modelo, a pesar de los 2 errores extremos que se presentaron por improvistos en la empresa, los errores porcentuales promedio son muy bajos, 0,55% en promedio para los 1.070 tiempos de terminación. El máximo error porcentual promedio es de 0.81% que no alcanza al 1%. Estos errores son así de bajos principalmente porque los tiempos de terminación son muy altos, entonces un error absoluto que pueda ser considerable (por ejemplo mayor a media hora) tendría un error porcentual bajo.

11.4. Estandarización y proporcionalidad de los parámetros Debido a que la definición de los trabajos cambia en cada programación de la producción los parámetros del modelo no se pueden estandarizar directamente. Por ejemplo si en la programación de la producción de hoy el trabajo 1 es producir 50 libras de café ¼ de libra Orgánico (antes de la pérdida de agua), y en la programación de la producción del mes siguiente el trabajo 1 es producir 9 libras de café ¼ de libra Orgánico (antes de la pérdida de agua), los parámetros del trabajo 1 tendrán valores diferentes en cada programación de la producción, incluso si la empresa ha estandarizado sus procesos de producción.

15.84 11.14 24.53 0.55% 0.30% 0.81%

222.05 28.10 1,032.55 6.66% 2.20% 23.09%

Máximo del

error porcentual

promedio

Promedio del

error absoluto

máximo

(minutos)

Mínimo del

error absoluto

máximo

(minutos)

Máximo del

error absoluto

máximo

(minutos)

Promedio del

error porcentual

máximo

Mínimo del

error porcentual

máximo

Máximo del

error porcentual

máximo

Promedio del

error absoluto

promedio

(minutos)

Mínimo del

error absoluto

promedio

(minutos)

Máximo del

error absoluto

promedio

(minutos)

Promedio del

error porcentual

promedio

Mínimo del

error porcentual

promedio

13.88 11.14 23.59 0.52% 0.30% 0.81%

48.58 28.10 141.00 4.07% 2.20% 4.77%

Máximo del

error porcentual

promedio

Promedio del

error absoluto

máximo

(minutos)

Mínimo del

error absoluto

máximo

(minutos)

Máximo del

error absoluto

máximo

(minutos)

Promedio del

error porcentual

máximo

Mínimo del

error porcentual

máximo

Máximo del

error porcentual

máximo

Promedio del

error absoluto

promedio

(minutos)

Mínimo del

error absoluto

promedio

(minutos)

Máximo del

error absoluto

promedio

(minutos)

Promedio del

error porcentual

promedio

Mínimo del

error porcentual

promedio

57

Empero la empresa considera que algunos parámetros de los trabajos se pueden predecir. Podría haber proporcionalidad en algunos parámetros respecto a la masa de los trabajos o respecto a las órdenes de trabajo. Por ejemplo en la máquina o etapa 1, la empresa observa que el tiempo de procesamiento en la máquina 1 es directamente proporcional a la masa de los trabajos, en las máquinas 5 a 10 el tiempo de procesamiento es directamente proporcional a las órdenes de trabajo, pudiendo ser antes o después de la pérdida de agua. En el archivo de Excel de análisis, en la hoja “Análisis de Parámetros” se calculan los coeficientes de correlación de Pearson al cuadrado, o R2 de los tiempos de procesamiento con las masas de los trabajos (para la máquina 1), y de los tiempos de procesamiento con las órdenes de trabajo antes y después de la pérdida de agua (para las máquinas 5 a 10), con el fin de tener una idea cuantitativa de la proporcionalidad que la empresa considera que existe. Los resultados soportan esta idea. Los porcentajes de pérdida de agua se generaron aleatoriamente pues no se midieron directamente durante las 11 mediciones, pues no es un parámetro que afecte el modelo. Sin embargo la empresa estima que el porcentaje de pérdida de agua está entre el 10% y el 25% dependiendo de varios factores del café, en ese intervalo de porcentajes se generaron valores aleatorios. La siguiente tabla muestra un resumen de estos resultados,

Tabla 5. Promedios y mínimos de R

2 en las máquinas 1, 5, 6, 7, 8, 9 y 10 (elaboración propia).

La máquina 1 sólo tiene cálculos de R2 antes de la pérdida de agua pues así es como lo considera la empresa, en todo caso si se genera un número de porcentaje de pérdida de agua seguramente los valores de R2 siguen siendo altos como lo muestra el resto de datos. Los valores de R2 son altos, por ejemplo para la máquina 1 el R2 promedio es de 0,955, y para la máquina 5 el R2 promedio es de 0,968. En el archivo de Excel de análisis se pueden observar estos números y otros relacionados, como R2 mínimo y el porcentaje de los conjuntos cuyo R2 es mayor que 0,9. En todos los casos los coeficientes R2 muestran que sí existe correlación como la empresa lo considera, y en ese sentido se podrían predecir y estandarizar los parámetros de tiempos de procesamiento, pues si se conoce la cantidad de minutos que se requiere para procesar una libra en la máquina 1, entonces se puede determinar el tiempo de procesamiento en la máquina 1 de cualquier trabajo que se defina. Lo mismo aplica para las máquinas 5 a 10, porque las máquinas 2 a 4 procesan por lotes y sus tiempos de procesamiento ya tienen baja variabilidad.

Antes de la pérdida de agua Después de la pérdida de agua

promedio R2 mínimo R2

Máquina 1 0.955 0.888 promedio R2 mínimo R2

Máquina 5 0.968 0.875 0.968 0.877

Máquina 6 0.923 0.739 0.923 0.739

Máquina 7 0.932 0.804 0.932 0.803

Máquina 8 0.864 0.556 0.864 0.554

Máquina 9 0.927 0.841 0.927 0.843

Máquina 10 0.942 0.870 0.941 0.869

58

11.5. Reducciones del máximo de los tiempos de terminación Uno de los resultados más importantes de este trabajo es la reducción en el máximo de los tiempos de terminación. Este trabajo se hizo en términos de lograr esta mejora. En el archivo de Excel de análisis, en la hoja “Análisis del Modelo” se muestran los tiempos de terminación de las secuencias encontradas por el algoritmo en cada uno de los 11 conjuntos de datos medidos, así como el cambio en los tiempos de terminación de cada trabajo (algunos aumentan y otros disminuyen), la reducción del máximo de los tiempos de terminación (con su promedio, mínimo, y máximo), la cantidad de días de producción y el promedio de días reducidos por el algoritmo. La siguiente tabla muestra los resultados principales,

Tabla 6. Resultados de mejora (elaboración propia).

La tabla anterior muestra que en todos los casos hay mejora, la mejora mínima es de 276,68 minutos de reducción en el máximo de los tiempos de terminación. Por otra parte la máxima mejora es una reducción de 2.712,49 minutos que representa dos días de reducción. En promedio el máximo de los tiempos de terminación se encuentra un día antes con el algoritmo híbrido. La mejora absoluta promedio es de 1.376,37 minutos que corresponde a una mejora porcentual de 16,46%. En este caso los porcentajes parecen altos porque aunque los tiempos de terminación son altos, las mejoras también lo son. Este es el resultado que la empresa Café Semilla S.A.S. esperaba encontrar con la realización de este trabajo.

11.6. Diagramas de Gantt Una forma de visualizar rápidamente las mejoras es por medio de diagramas de Gantt. La siguiente gráfica es el diagrama de Gantt del conjunto 1 que se midió (rojo: Gourmet, verde: Orgánico, azul: Tradicional)

Gráfica 2. Diagrama de Gantt del conjunto 1 antes de la mejora (elaboración propia).

1,376.37 276.68 2,712.49 16.46% 3.63% 26.55% 1

Mejora porcentual

máxima

Promedio de días

de producción

reducidos

Mejora absoluta

promedio

(minutos)

Mejora absoluta

mínima (minutos)

Mejora absoluta

máxima (minutos)

Mejora porcentual

promedio

Mejora porcentual

mínima

0 480 960 1440 1920 2400 2880

1

3

5

7

9tr5

tr4

tr6

tr7

tr3

tr2

tr1

tr9

tr10

tr8

59

Y el siguiente diagrama de Gantt es la mejora que se encontró:

Gráfica 3. Diagrama de Gantt del conjunto 1 tras la aplicación del algoritmo híbrido (elaboración propia).

Las gráficas anteriores muestran la reducción de un día de la producción. En el conjunto 11 la reducción es de dos días, se puede observar a continuación,

Gráfica 4. Diagrama de Gantt del conjunto 11 antes de la mejora (elaboración propia).

Gráfica 5. Diagrama de Gantt del conjunto 11 tras la aplicación del algoritmo híbrido (elaboración propia).

Los diagramas de Gantt pueden servirle a la empresa para controlar que la programación de la producción se lleve a cabo de la forma planeada, además se puede observar de forma gráfica la mejora que aporta el algoritmo híbrido.

0 480 960 1440 1920 2400

1

3

5

7

9tr6

tr4

tr7

tr5

tr8

tr10

tr9

tr1

tr3

tr2

0 480 960 1440 1920 2400 2880 3360 3840

1

3

5

7

9tr10tr8tr9tr11tr7tr4tr5tr6tr1tr3tr2

0 480 960 1440 1920 2400 2880

1

3

5

7

9tr9tr11tr8tr10tr7tr6tr5tr4tr2tr1tr3

60

11.7. Artículo científico escrito con base en este trabajo Con base en el trabajo realizado se escribió un artículo científico en inglés para publicación en una revista internacional. En los anexos se puede encontrar este artículo que muestra el aporte al conocimiento, no sólo de la empresa, sino del scheduling general a partir de este trabajo.

12. CONCLUSIONES Y RECOMENDACIONES Se cumplió el objetivo general de proponer una mejora en la programación de la producción basada en métodos cuantitativos en la empresa Café Semilla S.A.S., esta mejora consistió en un programa de VBA que permite tomar las decisiones de programación de la producción en menos tiempo y permite comparar diferentes secuencias de producción, además de predecir el tiempo que tardará realizar dicha secuencia. La técnica cuantitativa de programación de la producción que se identificó para apoyar el proceso de toma de decisiones de la empresa a través de una herramienta computacional es la de la aplicación de scheduling para minimizar el tiempo de terminación máximo por medio de un algoritmo genético escrito en VBA. Se analizó la validez de los resultados, se ajustó el modelo y se evaluó su impacto, esto fue necesario porque los primeros modelos que se propusieron no correspondían con la realidad de la programación de la producción de Café Semilla S.A.S., por ejemplo el primer modelo | , , , , , , | no incluía la posibilidad de lotes en algunas de las máquinas, por lo que se planteó el modelo | , , , , , , , ℎ| , pero rápidamente fue evidente que este modelo no tiene en cuenta las interrupciones que se hacen en Café Semilla S.A.S. al final del día con las actividades que no se alcanzan a completar en un día laboral, por lo que se propuso el modelo | , , , , , , , ℎ, í | el cuál incluye todos los elementos necesarios para predecir con error bajo (menor de 15 minutos) los tiempos de terminación. La evaluación del impacto se hizo midiendo el porcentaje de mejora en el tiempo de terminación máximo, con un promedio de 16,46%. Cuando se creó el programa de VBA y se le hizo debugging (ver Glosario de Anglicismos para su definición), el programa fue socializado en la empresa para que ésta pueda seguir utilizando el programa si así lo decide. El archivo de Excel que se le entregó a la empresa, diseñado en este trabajo se caracteriza por ser flexible y confiable, con el algoritmo híbrido se pueden comparar secuencias que la empresa planea producir con la secuencia que provee el algoritmo, haciendo esta comparación por medio del tiempo de terminación máximo. Pero la flexibilidad de este programa va más allá, si por ejemplo se eliminan tiempos de transporte, basta con reemplazarlos con ceros en el archivo de Excel de la empresa; si a futuro la empresa decide cambiar el estándar de sus procesos, y por ejemplo se elimina alguna estación de trabajo, se puede eliminar dicha estación del archivo de Excel y volver a correr el algoritmo con los cambios nuevos; así mismo, si se crea una nueva familia de productos (de hecho la empresa está comenzando a producir una línea de café de bajo precio y calidad inferior a la de sus otras familias establecidas) se puede incluir esta nueva familia y correr el algoritmo.

61

Una conclusión a nivel de aprendizaje personal, es que temas de posgrado como los algoritmos genéticos no son necesariamente difíciles para estudiantes de pregrado. No solamente no son difíciles, sino que son trabajables a un nivel de pregrado. En sí un algoritmo genético no se diferencia de un algoritmo cualquiera en el sentido de que al igual que cualquier otro algoritmo, un algoritmo genético es una serie de pasos. El hecho de que el algoritmo incluya aleatoriedad no lo hace más difícil puesto que en la carrera de ingeniería industrial la aleatoriedad se ve en muchas materias, como teoría de colas y planeación de la producción, entre otras. El modelo de programación de la producción es específico para la empresa Café Semilla S.A.S. no se encontró ningún modelo similar en la literatura. El proceso de creación del modelo tuvo dificultades, pero la educación que hemos recibido en la carrera de ingeniería industrial de la Universidad Distrital permitió plantear un modelo adecuado de error bajo para el sistema de producción de la empresa. A la empresa se le recomendó utilizar el archivo de Excel con el código de VBA para que realice su programación de la producción.

13. GLOSARIO DE ANGLICISMOS En el siguiente glosario se presentan los significados de anglicismos usados en este trabajo. Batch: Significa lote, que en Café Semillas S.A.S. hace referencia a la masa de un grupo de trabajos, dicha masa no puede exceder la capacidad de la máquina medida en las mismas unidades de masa de los trabajos. Commodity: Son bienes que no se diferencian sustancialmente uno de otro según su productor, por ejemplo el trigo, si hay dos productores en dos lugares diferentes del mundo, pueden producir trigo y será esencialmente el mismo bien al mismo precio. Por ello el café de baja calidad es un commodity (el café de Café Semilla S.A.S. no se considera commodity teniendo en cuenta que por su calidad y procesamiento se diferencia del café de otros productores). Debugging: Depuración del código fuente, proviene del inglés “bug” que significa insecto, y en el contexto de códigos de programación “bug” significa error (bien sea de error de compilación o error en tiempo de ejecución). “Debug” significa quitar los insectos, que en el contexto de códigos de programación hace referencia al proceso de quitar los errores del código. Flow Shop: Tipo de sistema de producción en el que todas las máquinas (o entidades procesadoras) se disponen en serie, una después de otra, y todos los trabajos siguen la misma serie de máquinas en el mismo orden. NP Hard: Quiere decir “Nondeterministic Polynomial-time Hard” y significa que en un problema matemático de este tipo, el tiempo de resolución del problema crece con el tamaño del problema de un modo que no se puede aproximar usando ecuaciones polinomiales para predecir dicho tiempo de resolución, por lo que en problemas de gran tamaño se usan heurísticas y metaheurísticas para resolver el problema aunque sin garantizar la optimalidad de la solución.

62

Permutation: su abreviación es prmu lo que da origen a la restricción prmu. “Permutation” se puede traducir directamente como “permutación”, hace referencia a que la secuencia de trabajos mantiene constante su orden (o permutación) en cada máquina. Por ejemplo, si la secuencia de trabajos es 3-1-2 en la máquina 1, es la misma secuencia en todas las demás máquinas (si se quita la restricción prmu, la secuencia podría cambiar, por ejemplo podría ser 1-3-2 en la máquina 4). Scheduling: En inglés la palabra “scheduling” se usa en muchos contextos, por ejemplo el scheduling de proyectos, el scheduling de las clases que hacen los estudiantes en los colegios, entre otros. Sin embargo en este trabajo sólo interesa el significado de “scheduling” en el contexto de producción, en donde significa secuenciación de un conjunto de trabajos en un número de máquinas. Software: Programa de una computadora creado para realizar tareas específicas. Para este trabajo, el software utilizado fue Excel. Visual Basic for Applications: Es el nombre del lenguaje de programación en el que se escribió el código.

14. BIBLIOGRAFÍA (González, Gutiérrez, 2012) González-Pérez, M. A. y Gutiérrez-Viana, S. Cooperation in coffee markets: the case of Vietnam and Colombia. Journal of Agribusiness in Developing and Emerging Economies, Vol. 2 Iss: 1, 2012, pp. 57 – 73 (SIC, 2013) Superintendencia de Industria y Comercio, Estudio Sectorial del Café, 2013, revisado por última vez en 5 de abril de 2016: http://www.sic.gov.co/recursos_user/documentos/promocion_competencia/Estudios_Economicos/Estudios_Economicos/Estudios_Mercado/EstudiosectorialCafe.pdf (Pinedo, 2012) Michael Pinedo, “Scheduling, Theory, Algorithms, and Systems”, 4th Edition, Springer, New York, USA, 2012, ISBN 978-1-4614-1986-0 (Garey et Al., 1976) Garey, M., Johnson, D., Sethi, R., The complexity of flowshop and jobshop scheduling. Mathematics of Operations Research, Volume 1, 1976, Issue 2, Pages 117-129 (Liou, Hsieh, 2015) Cheng-Dar Liou, Yi-Chih Hsieh, A hybrid algorithm for the multi-stage flow shop group scheduling with sequence-dependent setup and transportation times, Int. J. Production Economics, Volume 170, 2015, Pages 258-267 (Hillier, Lieberman, 2010) Hillier, F. y Lieberman, G. Introducción a la Investigación de Operaciones.9ed.McGraw Hill.2010. (Zhang, Ning, Ouyang, 2010) Changsheng Zhang, Jiaxu Ning, Dantong Ouyang, A hybrid alternate two phases particle swarm optimization algorithm for flow shop scheduling problem,

63

Computers & Industrial Engineering, Volume 58, Issue 1, February 2010, Pages 1-11, ISSN 0360-8352 (Shao, Pi, 2016) Weishi Shao, Dechang Pi, A self-guided differential evolution with neighborhood search for permutation flow shop scheduling, Expert Systems with Applications, Volume 51, 1 June 2016, Pages 161-176, ISSN 0957-4174 (Wang, Cheng, 2009) Wang, X., Cheng, T. C. E., Heuristics for parallel-machine scheduling with job class setups and delivery to multiple customers. Int. J. Production Economics, Volume 119, 2009, Pages 199-206 (Franca et Al., 2005) Franca, P. M., Gupta, J. N. D., Mendes, A. S., Moscato, P., Veltink, K. J., Evolutionary algorithms for scheduling a flowshop manufacturing cell with sequence dependent family setups. Comput. Ind. Eng., Volume 48, Issue 3, 2005, Pages 491-506 (Salmasi et Al., 2010) Salmasi, N., Logendran, R., Reza Skandari, M., Total flow time minimization in a flowshop sequence-dependent group scheduling problem. Comput. Oper. Res., Volume 37, Issue 1, 2010, Pages 199-212 (Naderi, Salmasi, 2012) Naderi, B., Salmasi, N., Permutation flowshops in group scheduling with sequence-dependent setup times. European Journal of Industrial Engineering., Volume 6, Issue 2, 2012, Pages 177-198 (Holland, 1975) Holland, J. H., Adaptation in natural and artificial systems, 1975, Ann Arbor MI: The University of Michigan Press (Sivanandam, Deepa, 2008) Sivanandam, S., N., Deepa, S., N., Introduction to Genetic Algorithms, first edition, 2008, Springer, India. (Kennedy, Eberhart, 1995) Kennedy, J., Eberhart, R., Particle Swarm Optimization, From Proc. IEEE Int’l Conf. on Neural Networks (Perth, Australia), IEEE Service Center, Piscataway, NJ, IV: 1942-1948, 1995. (Taillard, 1993) Taillard, E., Benchmarks for basic scheduling problems. European Journal of Operational Research 64.2, 1993, Pages: 278-285.