scieee AI-readable full text Open interactive document viewer

Diseño y resolución de un modelo de programación lineal para la planifica ción del mantenimientoenunentorno productivo. Aplicación a unaempresa de fabricación de piezas aeronáuticas

Pérez García, Rafael

Abstract

En este Trabajo Fin de Máster se lleva a cabo el completo desarrollo de una herramienta robusta, eficaz y totalmente funcional para la resolución del problema de planificación del mantenimiento de un conjunto de equipos en un entorno productivo. Aunque se trate de un trabajo académico, se ha adaptado la herramienta al caso de estudio de una factoría con máquinas de control numérico. La primera parte del documento analiza el problema a abordar y pone en contexto el proyecto, incluyendo una revisión literaria de estudios previos en esta materia. Posteriormente, se desarrolla el core de la herramienta, mostrando la formulación matemática empleada para modelar el problema y la forma de implementarlo en Python. A continuación, se describe la estructura modular de la herramienta y se presentan distintos casos de aplicación que demuestran el correcto funcionamiento de la herramienta, llegando así a cumplir con los objetivos del proyecto. La incorporación de esta herramienta permitirá no solo ahorrar costes, también extender la vida útil del equipo, asegurando la máxima disponibilidad del conjunto de máquinas.

Full text

28 Proyecto Fin de Carrera Ingeniería de Telecomunicación Formato de Publicación de la Escuela Técnica Superior de Ingeniería Autor: F. Javier Payán Somet Tutor: Juan José Murillo Fuentes Dep. Teoría de la Señal y Comunicaciones Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2013 Trabajo Fin de Máster Máster Universitario en Organización Industrial y Gestión de Empresas Diseño y resolución de un modelo de programación lineal para la planificación del mantenimiento en un entorno productivo. Aplicación a una empresa de fabricación de piezas aeronáuticas Autor: Rafael Pérez García Tutores: Jesús Racero Moreno Andrés Padillo Eguía Dpto. de Organización Industrial y Gestión de Empresas I Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2024 Trabajo Fin de Máster Máster Universitario en Organización Industrial y Gestión de Empresas Diseño y resolución de un modelo de programación lineal para la planificación del mantenimiento en un entorno productivo. Aplicación a una empresa de fabricación de piezas aeronáuticas Autor: Rafael Pérez García Tutores: Jesús Racero Moreno ( Profesor Titular de Universidad) Andrés Padillo Eguía ( Profesor Sustituto Interino) Dpto. de Organización Industrial y Gestión de Empresas I Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2024 Trabajo Fin de Máster: Diseño y resolución de un modelo de programación lineal para la planificación del mantenimiento en un entorno productivo. Aplicación a una empresa de fabricación de piezas aeronáuticas Autor: Rafael Pérez García Tutores: Jesús Racero Moreno Andrés Padillo Eguía El tribunal nombrado para juzgar el trabajo arriba indicado, compuesto por los siguientes profesores: Presidente: Vocal/es: Secretario: acuerdan otorgarle la calificación de: El Secretario del Tribunal Fecha: A todos los que me han acompañado en esta aventura Que el tiempo no dedicado a otras personas haya merecido la pena Agradecimientos C on este trabajo pongo punto final a mi vida como estudiante. No puedo finalizarla sin antes agradecer a mi familia el haberme ayudado a llegar hasta aquí, los logros conseguidos no hubiesen sido posibles sin ellos. También me gustaría agradecer a Jesús por su disposición desde el primer momento, su interés en el proyecto y su disponibilidad cada vez que lo he necesitado. Rafael Pérez García Sevilla, 2024 III XÍndice 5.1 Python y librerías de optimización 38 5.2 Módulo de entrada 39 5.2.1 Lectura de datos disponibles 39 Fichero XML 40 Fichero Excel 43 5.2.2 Análisis de los mantenimientos 44 5.3 Implementación del modelo 45 5.4 Resultados de salida 49 5.4.1 Operación del solver 49 5.4.2 Visualización de la solución 51 5.4.3 Estado final de los equipos 52 5.4.4 Fichero de salida 52 6 Validación y análisis del modelo implementado 55 6.1 Validación 55 6.1.1 Datos de entrada 55 6.1.2 Resultados del problema 56 6.2 Caso práctico 57 6.2.1 Datos de entrada 57 6.2.2 Resultados del problema 58 6.3 Análisis de sensibilidad de tamaño de periodos 58 6.3.1 Primer análisis 59 6.3.2 Segundo análisis 60 6.4 Análisis paramétrico del solver 62 6.5 Caso real 70 6.5.1 Datos de entrada 70 6.5.2 Resultados del problema 71 7 Conclusiones 73 7.1 Extensiones y líneas futuras 74 Bibliografía 77 Índice de Figuras 1.1 Análisis de los costes de mantenimiento durante el ciclo de vida de un activo. CAPEX: costos de adquisición (diseño, desarrollo y fabricación); OPEX: costos de operación (instalación, formación operación y mantenimiento) [18] 3 1.2 Previsión de evolución de la inflación en el mercado del mantenimiento industrial en EEUU [13] 4 1.3 Previsión de evolución de la inflación en el mercado del mantenimiento industrial en EEUU [13] 5 1.4 Evolución detallada de la inflación en el mercado del mantenimiento industrial en EEUU [13] 5 1.5 Previsión de crecimiento del mercado de MRO a nivel global, con especial detalle en EMEA. [13] 6 1.6 Estadísticas sobre tiempos de inactividad no planificados [12] 6 1.7 Plan para reducir los tiempos de inactividad no planificados [12] 7 2.1 Tipos de mantenimiento 12 4.1 Representación gráfica del intervalo Ts pt 30 5.1 Arquitectura de la herramienta 38 5.2 Diagrama de flujo del módulo de entrada 40 5.3 Estructura de primer nivel del archivo XML de datos de entrada 41 5.4 Sección Per formanceIndicatorList 41 5.5 Sección GlobalPer formanceIndicator 42 5.6 Sección ScheduleList 42 5.7 Datos de operación del equipo número 1 en el problema real 43 5.8 Datos de utilidad para cada uno de los mantenimientos 43 5.9 Condiciones iniciales para el potencial de funcionamiento para cada mantenimiento 44 5.10 Ejemplo de preprocesado de las condiciones iniciales para unificar mantenimientos 45 5.11 Definición del modelo 45 5.12 Diagrama de flujo del solver 46 5.13 Definición de las variables 46 5.14 Definición de las restricciones 47 XI XII Índice de Figuras 5.15 Definición de la función objetivo 47 5.16 Ejecución del optimizador 47 5.17 Diagrama de flujo del módulo de salida 49 5.18 Ejemplo de la evolución detallada de las soluciones encontradas 50 5.19 Ejemplo de la evolución de las soluciones encontradas encontradas y del gap relativo 50 5.20 Ejemplo de la solución obtenida en un problema en el que se alcanza el óptimo directamente 51 5.21 Ejemplo de resultados mostrados por pantalla 51 5.22 Interfaz de la evolución diaria de los potenciales del posible mantenimiento conjunto 52 5.23 Estado del potencial de los equipos en cada uno de los mantenimientos al final del horizonte de planificación 52 6.1 Planificación de las tareas del problema en el que se está buscando el óptimo 56 6.2 Planificación del problema de forma óptima 57 6.3 Evolución del potencial de funcionamiento para el problema de validación 57 6.4 Tareas programadas en el subproblema 1 57 6.5 Planificación obtenida para el subproblema 1 58 6.6 Evolución del potencial de funcionamiento para el subproblema 1 58 6.7 Evolución del potencial de funcionamiento para el subproblema 1 con ε=0.6 58 6.8 Tareas programadas en el subproblema 2 59 6.9 Evolución de las soluciones encontradas encontradas y del gap relativo correspondiente al problema piloto 61 6.10 Evolución detallada de las soluciones encontradas correspondiente al problema piloto 61 6.11 Datos de utilidad para cada uno de los mantenimientos 71 6.12 Estado del potencial de los equipos en cada uno de los mantenimientos en el instante inicial 71 6.13 Estado del potencial de los equipos para el mantenimiento conjunto 71 6.14 Interfaz de la evolución diaria de los potenciales del posible mantenimiento conjunto 71 6.15 Estado del potencial de los equipos en cada uno de los mantenimientos en el instante final 72 6.16 Evolución de las soluciones encontradas encontradas y del gap relativo para el caso real 72 Índice de Tablas 3.1 Frecuencias de inspección consideradas en el modelo 24 5.1 Peso con el que se pondera la duración al incluir un nuevo tipo de mantenimiento al conjunto 45 6.1 Parámetros del problema y condiciones iniciales de los equipos 55 6.2 Parámetros del problema 56 6.3 Parámetros del problema y condiciones iniciales de los equipos para el primer subproblema 57 6.4 Parámetros del subproblema 1 58 6.5 Parámetros del segundo problema 59 6.6 Parámetros del problema y condiciones iniciales de los equipos para el segundo subproblema 59 6.7 Parámetros del problema piloto 60 6.8 Parámetros del problema y condiciones iniciales de los equipos para el problema piloto 60 6.9 Resultados obtenidos para la simulación del problema piloto 62 6.10 Resultados del análisis realizado con el parámetro lp_method 67 6.11 Resultados del análisis de la combinación de los parámetros lp_method yPreprocess 67 6.12 Resultados del análisis de la combinación de los parámetros lp_method y Cuts 68 6.13 Resultados del análisis de la combinación de los parámetros Cuts y Cut_pasess 68 6.14 Resultados del análisis de la combinación de los parámetros Cuts yClique 69 6.15 Resultados del análisis de la combinación de los parámetros Clique y Pump_passes 69 6.16 Resultados del análisis para el parámetro Threads 69 6.17 Valores de los distintos parámetros para el ajuste final del solver 70 6.18 Parámetros del caso de aplicación real 70 XIII 1 Introducción y objetivos 1.1 Introducción En el ámbito del diseño de sistemas y equipos, se siguen una serie de etapas generalizadas que varían dependiendo del producto en desarrollo. Estas etapas suelen contar con herramientas específicas para garantizar el éxito en el diseño del producto. Sin embargo, una vez que el producto se lanza al mercado, empieza un proceso de degradación progresiva que, eventualmente, impide que cumpla con su función original. Aquí es donde entra en juego el mantenimiento. Independientemente del tipo de mantenimiento requerido o de la forma en que se lleve a cabo, todas las tareas de mantenimiento implican un coste adicional que cualquier empresa debe asumir para mantener su nivel de operación deseado. El impacto económico de las tareas de mantenimiento varía según el sector, pero el mayor coste se asocia con la incapacidad del producto para seguir proporcionando la función requerida mientras está en reparación o mantenimiento. Poniendo el foco de atención en las empresas de mecanizado, estas enfrentan varios problemas de mantenimiento que afectan su eficiencia y productividad. Para entender la magnitud del problema, es fundamental realizar un análisis económico que divida los costos asociados al mantenimiento en costes directos e indirectos. Los costes directos incluyen repuestos, componentes, insumos y mano de obra. Los costes indirectos se relacionan con la parada de los equipos y la pérdida de producción, como la subcontratación para cumplir con la demanda y la interferencia en la producción. Para estimar estos costos de manera precisa, es crucial tener un conocimiento profundo de la capacidad de la fábrica, la operación de los equipos y las necesidades de producción. Algunos parámetros clave incluyen el valor de la hora-hombre, la disponibilidad de equipos, la tasa de productividad y el tiempo de inactividad de los equipos. Además, indicadores como la tasa promedio de fallos y el tiempo medio entre fallos son esenciales para prever los recursos necesarios y alargar la vida útil de los equipos. Las empresas de mecanizado, en particular, enfrentan varios problemas de mantenimiento que afectan su eficiencia y productividad. Entre estos problemas destacan las irrupciones no planificadas causadas por los fallos inesperados de las máquinas, implicando costes adicionales asociados a las reparaciones urgentes y al desecho de las piezas mecanizadas por estar fuera de la tolerancia requerida. Otro de los problemas más comunes es precisamente la programación del mantenimiento. A menudo esta tarea suele ser compleja, especialmente en empresas con múltiples líneas de producción y alta variedad de máquinas, agravándose 1 2Capítulo 1. Introducción y objetivos aún más el problema a causa de la falta de coordinación entre los departamentos de producción y de mantenimiento, especialmente si no se planifica adecuadamente. A esto es necesario sumar que muchas empresas de mecanizado no cuentan con sistemas adecuados para el monitoreo y recolección de datos en tiempo real sobre el estado de sus máquinas. Sin datos precisos, es difícil predecir cuándo una máquina podría fallar, por lo que se acaba optando por una estrategia de mantenimiento correctivo, esperando el fallo de los equipos. Como se ve, la planificación adecuada de las tareas de mantenimiento es crucial debido a su impacto significativo en la productividad y seguridad de las operaciones. A pesar de que las fases de diseño de un producto están bien estudiadas, una vez que el producto está en uso, existe una laguna considerable en cuanto a la planificación del mantenimiento. Aunque algunos productos, por sus circunstancias de uso, sí están obligados a cumplir con mantenimientos definidos legalmente, no existe una metodología universal para llevar a cabo y planificar estas tareas. Debido a la gran diversidad de casos que se pueden encontrar, cada uno se deberá abordar de una forma diferente, aunque habrá muchos que presenten unas características comunes [ 17 ]. En este contexto, surge el concepto de gestión de activos. Este concepto surge a medida que las organizaciones se percataron de la necesidad de incluir los activos dentro del esquema general de la organización para gestionar adecuadamente el mantenimiento y la confiabilidad [ 16 ]. La gestión de activos implica realizar un inventario de todos los activos de la organización, clasificarlos y jerarquizarlos según su criticidad y el impacto que tendría su falla en la operación. Esto permite asignar recursos de manera eficiente. En el ámbito industrial, los activos abarcan desde máquinas hasta procesos. Este proyecto se centra específicamente en las máquinas de control numérico por computadora (CNC) ubicadas en Indaero Grupo Emergy, y busca planificar su mantenimiento de manera óptima. Hasta ahora la planificación del mantenimiento se ha estado llevando a cabo de forma manual a partir de la experiencia del personal de la empresa, de forma que se realiza el mantenimiento de los equipos según las indicaciones de sus fichas técnicas y en base a un análisis del histórico de elementos con mayor tasa de fallas. Este proyecto pretende automatizar este proceso mediante la utilización de un algoritmo de optimización lineal en variables enteras, aprovechando los resultados de un proyecto de I+D en el que Indaero está participando. El objetivo es que la herramienta tome como entrada la planificación de la producción resultante del proyecto de I+D y proporcione como salida un diagrama tipo Gantt con la programación del mantenimiento, es decir, debe emplear los gaps entre los tiempos de producción de las máquinas y planificar en ellos el mantenimiento. Esto no solo automatizará el proceso, sino que también garantizará una solución óptima, mejorando la eficiencia y reduciendo los costes asociados al mantenimiento y los tiempos de inactividad no planificada. 1.2 Motivación Este proyecto surge a raíz de una colaboración entre la universidad de Sevilla y el Ejército del Aire. Ambos permitieron al autor complementar su formación académica con una visión más amplia y práctica del sector aeronáutico en el ámbito laboral. Como resultado de esa fructífera estancia en la Base Aérea de Morón de la Frontera surgió como proyecto 1.2 Motivación 3 un TFM para darle continuidad al trabajo allí realizado. A modo de resumen, este proyecto consistió en desarrollar una herramienta para una planificación óptima de la operación y el mantenimiento de una flota de aeronaves militares. Este proyecto permitió al autor conocer el amplio abanico de problemas de gestión que se pueden resolver de forma óptima mediante programación linear. Tal fue la experiencia, que finalmente llevó al autor a cursar el Máster en Organización y Gestión de Empresas (MOIGE). En un primer momento se intentó continuar con el proyecto en el presente TFM, y de esta forma afinar el modelo incorporando nuevas casuísticas y desarrollando un ejecutable. Sin embrago, debido a la incorporación del autor a la plantilla de Indaero Grupo Emergy, esta idea evolucionó a la de aplicar los conocimientos adquiridos para adaptar la herramienta para la optimización del mantenimiento de los centros de control numérico de esta empresa. Como ya se indicaba en [ 17 ], el problema de compaginar la operación y el mantenimiento en cualquier flota de equipos es un problema común a todos los sectores, por lo que la herramienta elaborada bajo aquel proyecto se diseñó lo más genérica posible para poderse adaptar en cualquier ámbito industrial. Partiendo del avance realizado en la sección anterior, la gestión eficiente del mantenimiento en empresas de mecanizado es un aspecto crítico que afecta directamente la productividad, los costos operativos y la competitividad en el mercado. La industria de mecanizado, caracterizada por su alta precisión y demandas estrictas de calidad, depende en gran medida de la disponibilidad y fiabilidad de sus máquinas. Un fallo inesperado o un mantenimiento mal programado puede causar retrasos significativos en la producción, aumentar los costos y comprometer la calidad del producto final. La motivación detrás de este estudio radica en la necesidad de abordar estos desafíos y optimizar la planificación del mantenimiento para minimizar el impacto en la producción. Figura 1.1 Análisis de los costes de mantenimiento durante el ciclo de vida de un activo. CAPEX: costos de adquisición (diseño, desarrollo y fabricación); OPEX: costos de operación (instalación, formación operación y mantenimiento) [18]. Para cuantificar lo explicado anteriormente y dotar al proyecto de justificación económica, se ha realizado una búsqueda de las previsiones de mercado más recientes sobre el impacto del mantenimiento. Centrando el estudio en EEUU, en [ 13 ] han analizado la evolución de este mercado desde 2019, permitiendo ver cómo ha atravesado el sector la pandemia de la Covid-19 y que previsiones se tiene de cara al futuro. Este estudio se basa 4Capítulo 1. Introducción y objetivos en dos factores principales: los salarios y los servicios. En la Figuras 1.3 - 1.4 se puede ver la evolución comentada anteriormente, mostrando la Figura 1.3 otros factores que también afecta a al índice de crecimiento del mercado de mantenimiento de forma indirecta, por lo que no va incluido directamente en el propio índice. Estos otros factores son la evolución del coste de la energía y del IPC. A continuación, se analiza la influencia de cada factor en el mercado de MRO (Maintenance, Repair and Overhaul). Figura 1.2 Previsión de evolución de la inflación en el mercado del mantenimiento industrial en EEUU [13]. • Salarios: La alta competencia por la mano de obra en el sector privado ha mantenido elevados los salarios desde 2020. Se espera que la presión sobre los salarios disminuya a medida que la economía se desacelere y la demanda de trabajo se estabilice. • Costos de Contratos: Han aumentado significativamente desde 2021 debido a la mayor demanda de servicios de MRO y el incremento en los costos de insumos. Se espera que estos costos disminuyan gradualmente en los próximos años. • Precios de la energía: Tiene una influencia indirecta en los costes de los servicios debido a su impacto en los proveedores de dichos servicios. La estabilización de los mercados de energía debería aliviar parte de la presión sobre los costos de MRO. • IPC: Impacta en los costes de materiales, salarios, demanda, decisiones de inversión, etc. 1.2 Motivación 5 Figura 1.3 Previsión de evolución de la inflación en el mercado del mantenimiento industrial en EEUU [13]. Figura 1.4 Evolución detallada de la inflación en el mercado del mantenimiento industrial en EEUU [13]. Según [13], el análisis anterior puede extenderse al resto del globo. En la Figura 1.5 se muestra de forma detallada la situación pasada, la actual y la prevista en cuanto a inflación del índice de MRO para las distintas zonas del plante. Para EE.UU. se prevé que los costos de MRO vuelvan a la norma prepandémica hacia finales de 2023 o principios de 2024, mientras que en Europa serán los países no pertenecientes a la Eurozona los que experimenten una mayor inflación. 12 Capítulo 2. Revisión de la literatura – Mantenimiento predictivo: es un mantenimiento basado en la condición que se realiza siguiendo una predicción obtenida del análisis repetido o de características conocidas y de la evaluación de los parámetros significativos de la degradación del elemento. Tipos de mantenimientos Correctivo Inmediato Diferido Preventivo Predeterminado Basado en la condición Basado en la condición Predictivo Overhaul Figura 2.1 Tipos de mantenimiento. Por otra parte, se puede definir el mantenimiento programado como un subconjunto del mantenimiento preventivo y correctivo diferido, realizado de acuerdo con un calendario o un número de unidades de uso establecidas. Este tipo de mantenimiento es esencial para planificar y optimizar el tiempo y recursos destinados a las actividades de mantenimiento. Dejando de lado la clasificación establecida por la norma, existen otras muchas formas de clasificar los mantenimientos: mantenimiento rutinario o no rutinario, mantenimiento por calendario / por cumplimiento de horas de funcionamiento / por ciclos, mantenimiento programado o no programado, y dentro de los mantenimientos programados se pueden clasificar también en función del horizonte temporal considerado en programación a largo plazo y corto plazo. En lo que aquí respecta, este estudio está centrado en la programación de los distintos mantenimientos predeterminados, ya que a priori no se podrían conocer las averías que van surgiendo en los equipos. Además, solo se considerarán aquellos mantenimientos con cierta periodicidad en el calendario y se tomará un horizonte temporal de una semana, lo que permite considerar la planificación como de corto plazo. Esta programación se realizará empleando técnicas de modelado propias de la programación lineal. Esta técnica matemática define un objetivo a optimizar sujeto a una serie de restricciones, todo ello modelado con expresiones matemáticas lineales. En el contexto del mantenimiento, esta técnica se utiliza para planificar y programar las actividades de mantenimiento de manera que se minimicen los costes y el tiempo de inactividad, mientras se cumplen con las restricciones operativas y de recursos. 2.2 Los problemas del mantenimiento El mantenimiento en las empresas de mecanizado presenta una serie de desafíos significativos que pueden afectar tanto la eficiencia operativa como la rentabilidad. Estos problemas se agravan cuando se trata de la planificación del mantenimiento preventivo y la programación de la producción en un entorno con múltiples líneas de producción. En la gran inmensa mayoría de las empresas de mecanizado la estrategia de mantenimiento seguida suele ser el mantenimiento correctivo aplicado a los equipos a raíz de la detección de una falla. 2.2 Los problemas del mantenimiento 13 Esta técnica de mantenimiento, lejos de ser óptima desde el punto de vista de los costes, sigue estando presente en muchas empresas debido a la dificultad de la planificación de las actividades de mantenimiento. En este apartado, se identificarán y analizarán los elementos que intervienen en estos problemas y se explorarán las soluciones propuestas por diversos autores. Entre las causas de esta problemática es muy común encontrarse las objeciones de producción al paro de las máquinas. El impacto del mantenimiento en el flujo de producción previsto es considerable, pero un mayor impacto causa cuando ese paro de las máquinas no está previsto, obligando a buscar centros de trabajo alternativos y a reprogramar las tareas. En un entorno con múltiples líneas de producción, coordinar estas paradas de manera eficiente es crucial para minimizar el impacto negativo en la producción. Centrando el análisis en la producción, como es previsible, está no será constante a lo largo del horizonte de planificación considerado. La carga de trabajo puede variar significativamente en función de los pedidos recibidos, siendo esencial encontrar huecos entre los pedidos para realizar el mantenimiento sin afectar la producción en curso. Además, fruto de dicha variabilidad el desgaste de los equipos no siempre será el mismo. Las máquinas que operan en condiciones severas o con alta utilización requieren un mantenimiento más frecuente. Este aspecto está fuertemente relacionado con la naturaleza de los mantenimientos aplicados a los equipos, correspondiéndose con mantenimientos basados en tiempo de uso de las máquinas. Otro de los aspectos claves a considerar a la hora de planificar el mantenimiento son los recursos necesarios para llevar a cabo estas tareas de mantenimiento, como técnicos especializados, herramientas y repuestos, que deben estar disponibles cuando se necesitan. La gestión de estos recursos se vuelve una tarea sencilla si se cuenta con una planificación previa de los mantenimientos a realizar. De la lista anterior de recursos, el único que precisa de mayor atención es el personal de mantenimiento, ya que los insumos y herramientas se pueden conseguir con mayor antelación, pero no un aumento puntual de la plantilla. De aquí en adelante, esta cuestión se tendrá en cuenta bajo la denominación de capacidad de mantenimiento requerida, que deberá ser contrastada con la capacidad máxima disponible. Relacionado con la capacidad, un problema frecuente es discernir qué equipos mantener cuando se está en una situación límite de carga de mantenimiento. En una política de mantenimiento correctivo se realizaría el mantenimiento que menos impacta en el flujo de producción, aunque esta decisión es compleja especialmente cuando hay múltiples líneas de producción y diferentes niveles de criticidad de los equipos. Por el contrario, en una política de mantenimiento preventivo, la planificación conjunta de mantenimientos y producción ya contempla esa interrupción de la producción. La solución que en este documento se propone ante esta situación es la definición de unas holguras para la entrada en mantenimiento, evitando paradas prematuras. De esta forma se consigue adelantar uno de los mantenimientos de forma que el impacto en los costes sea mínimo. Ante esta problemática, la mayoría de los autores que han buscado darle solución al problema centran su enfoque en modelar el problema a través de la programación lineal buscando la mejor solución a un problema sujeto a una serie de restricciones lineales. Estos 14 Capítulo 2. Revisión de la literatura modelos consideran variables como tiempos de operación, ventanas de mantenimiento, disponibilidad de recursos y potenciales de mantenimiento. La solución óptima encontrada en estos problemas depende en gran medida del objetivo buscado. Suele ser común funciones de coste centradas en maximizar la disponibilidad de los equipos o en disminuir el coste del mantenimiento. Otro enfoque es el uso de distribuciones probabilísticas para modelar el tiempo hasta el fallo de las máquinas y determinar las frecuencias óptimas de mantenimiento, como la distribución de Weibull. Entrando en la parte más técnica del proceso, la forma empleada para resolver al problema suele ser mediante algoritmos de ramificación y poda (branch and bound), con la posibilidad de incluir cortes que facilitan la exploración del espacio de soluciones donde se espera que esté el óptimo. Adicionalmente, existen autores que optan por otras técnicas como son los métodos de descomposición, como la de Bender o Dantzig-Wolfe o métodos de programación dinámica y generación de columnas. A pesar de la multitud de estudios realizados en este ámbito, el tamaño de los problemas y su complejidad son tales que hacen necesario el empleo de heurísticas para encontrar soluciones satisfactorias en un tiempo razonable. Estas técnicas empíricas pueden ser útiles cuando los problemas no pueden ser resueltos mediante técnicas exactas como la programación lineal. Entre las técnicas empleadas por otros autores destacan los algoritmos genéticos, el recocido simulado y los métodos de búsqueda tabú con y sin elitismo. Como puede verse, el abanico de técnicas empleadas en las distintas fases de la resolución del problema es bastante amplio, así como la forma de modelar el problema. Sin embargo, en esta última parte destacan dos corrientes claramente diferenciadas: resolver la planificación de los mantenimientos de forma conjunta con la programación de la producción o resolver ambos problemas de forma separada. Aunque muchos autores están de acuerdo en que el primer enfoque proporciona mejores resultados, la complejidad del problema ha conllevado en muchos casos a optar por el segundo enfoque. La revisión de la literatura realizada muestra que estas técnicas pueden ser adaptadas y mejoradas para satisfacer las necesidades específicas de cada empresa, contribuyendo a una operación más eficiente y rentable. 2.3 Resolución de los problemas de mantenimiento No hay mejor forma de comenzar este apartado que abordando el problema desde sus inicios. Aunque el origen del mantenimiento es, sin duda, tan antiguo como las primeras máquinas que utilizó el hombre, el mantenimiento industrial tal como se entiendo hoy día hizo su aparición, como actividad sistemáticamente organizada, a comienzos del siglo XX. Al parecer, los primeros casos conocidos tuvieron lugar en fundiciones de Estados Unidos y en el sector militar: en aviones y submarinos durante la Primera Guerra Mundial [ 7 ]. Sin embargo, ya desde principios del siglo XIX, con la revolución industrial, se puso de manifiesto la necesidad de controlar las fallas de los equipos. Desde entonces hasta pasada Primera Guerra Mundial, la única política de mantenimiento existente consistía en la reparación de los equipos averiados, denominado hoy día mantenimiento correctivo. 2.3 Resolución de los problemas de mantenimiento 15 Con posterioridad a esta etapa inicial, el mantenimiento, como otros campos de la Organización Industrial, experimentan un notable desarrollo durante la Segunda Guerra Mundial y en la posguerra debido a diferentes aplicaciones de interés militar. Desde 1945 se comienza a emplear la redundancia de componentes en el diseño, reduciendo la “criticidad del fallo”. No fue hasta 1950 cuando los ingenieros japoneses iniciaron un nuevo concepto de mantenimiento, que consistía en algo tan simple como seguir las recomendaciones de los fabricantes de los equipos acerca del cuidado de estos en la operación y el mantenimiento. Surge así la política de mantenimiento preventivo. Entorno a la década de los 60 se formalizan técnicas de ensayo y medidas físicas con el fin de conocer la probabilidad de fallo de cada componente y desarrollar criterios para la predicción de fallas. Estos criterios darán lugar al mantenimiento predictivo. A finales de esta década comienza la aplicación sistemática de las técnicas de fiabilidad, permitiendo la predicción de los costes derivados de los fallos y el cálculo de la rentabilidad de la actividad de mantenimiento. Aun así, el comportamiento de determinados componentes no presentaba fácil predicción, escapándose de los modelos al uso, algo que aún hoy perdura ya que se pasa del modelo clásico de curva de tasa de fallo en forma de bañera a seis modelos diferentes en el mantenimiento basado en la fiabilidad (Reliability-Centered Maintenance, RCM). Es necesario destacar también que en esta época aparece una creciente consciencia de la utilidad de disponer de estadísticas históricas de averías para el análisis y planificación del mantenimiento, así como el desarrollo de diversos métodos de optimización de políticas de mantenimiento. Poniendo el foco en el RCM, esta nueva filosofía se originó en un esfuerzo conjunto del gobierno y la industria aeronáutica norteamericana, a fin de establecer un proceso lógico y diseñar actividades de mantenimiento apropiadas para las aeronaves y con unas frecuencias óptimas. El éxito del RCM en la industria aeronáutica no tuvo precedentes, en un periodo de 16 años posterior a su implantación, las aerolíneas comerciales no experimentaron incremento en los costes unitarios de mantenimiento, aun cuando el tamaño y la complejidad de las aeronaves, así como los costes de operación se incrementaron durante el mismo periodo. También, para el mismo periodo, se incrementaron los records de seguridad de las aerolíneas [ 15 ]. La filosofía del RCM se basa en la gestión del mantenimiento a través de un equipo multidisciplinar de trabajo que se encarga de optimizar la fiabilidad operaciones de un sistema que funciona bajo unas condiciones de trabajo definidas. Entendiéndose la fiabilidad como la capacidad de una instalación para cumplir su función, y en caso de que falle, lo haga del modo menos dañino posible. Para ello, se establecen las actividades más efectivas de mantenimiento en función de la criticidad de los activos pertenecientes a dicho sistema, teniendo en cuenta los posibles efectos que originarán los modos de fallos de estos activos, a la seguridad al ambiente y a las operaciones. Es a partir de los años 70 cuando aparecen dos líneas de análisis acerca del mantenimiento claramente diferenciadas. Una de ellas contempla los parámetros del mantenimiento de máquinas desde un punto de vista constructivo y del diseño, introduciendo conceptos de salud y envejecimiento. La forma de abordar los problemas se basa en el modelado del desgaste de los equipos, intentando en la medida de lo posible facilitar por diseño las reparaciones. La otra línea de pensamiento se centra más en analizar la rentabilidad de la reparación en términos económicos y, en base a ello, establecer la mejor política de 16 Capítulo 2. Revisión de la literatura mantenimiento. Esta línea gano fuerza a raíz del accidente de Piper Alpha (1988), fue entonces cuando se comenzó a hablar del concepto "Gestión de Activos" abordando así el estudio del coste del ciclo de vida de los activos (ACCV). Como ya se indicó en el Capítulo 1, este enfoque permite asociar el campo de la economía y la ingeniería. Mediante la identificación del coste del ciclo de vida se puede comparar diferentes opciones en función de los costes y seleccionar el activo óptimo, así como determinar el instante óptimo de reemplazo del activo. Hoy día ambos enfoques se integran en una vista más a nivel de sistemas, donde tanto el diseño (intercambiabilidad) como la gestión del ciclo de vida van de la mano. Llevando el estudio a la actualidad, el auge de la inteligencia artificial y los gemelos digitales han mejorado enormemente la eficiencia de los mantenimientos preventivos. El hecho de tener una réplica exacta de los equipos y una monitorización en tiempo real permite simular el comportamiento y detectar cualquier desviación respecto al esperado. Además, el análisis de los datos mediante machine learning proporciona otra vía para identificar patrones y tendencias que no son visibles a simple vista. Esto puede proporcionar información valiosa sobre cómo mejorar el rendimiento de los equipos y prolongar su vida útil. Según los estudios, estás novedosas técnicas permiten un ahorro en costos de mantenimiento de un 20%, a lo que hay que sumar el mejor aprovechamiento de su ciclo de vida. [ 20 ] Dejando de lado la evolución histórica del mantenimiento en la industria. Se va a realizar a continuación un estudio más detallado de las distintas técnicas que emplean otros autores para abordar la planificación del mantenimiento. Por norma general, para realizar la planificación hay que tener en cuenta también las necesidades de operación de los equipos. Sin embargo, este proyecto está centrado únicamente en el mantenimiento debido a que la planificación de la operación ya viene dada. A pesar de ello, se van a presentar las distintas formas en las que se ha abordado el problema completo, diferenciando entre los enfoques ya introducidos en la sección anterior. 2.3.1 Enfoque integral El enfoque con el que los distintos autores abordan los problemas de mantenimiento se puede dividir en dos grupos principalmente. Por un lado, están aquellos que se centran en resolver todo el problema en su conjunto mientras que otros optan por aislar cada uno de los subproblemas y resolverlos por separado. En lo que continua se hará una distinción entre los métodos empleados para resolver cada tipo de problemas, comenzando con el problema completo. El primer artículo estudiado es [ 8 ], el cual se centra en el desarrollo de un modelo que aborda la planificación del mantenimiento preventivo y la programación de la producción un entorno con múltiples líneas de producción, considerando múltiples objetivos. Este enfoque multiobjetivo del modelo busca optimizar simultáneamente varios criterios conflictivos como son la fiabilidad de las líneas de producción, los costes de mantenimiento y los tiempos inoperativos de los equipos, a diferencia del enfoque de objetivo único o múltiples objetivos tratados normalmente en el resto de papers revisados. En cuanto a las restricciones empleadas, se definen ocho expresiones que garantizan el cumplimiento de las condiciones iniciales, la actualización de la vida de los componentes y que las tareas no se solapan. Además, el ampliar el alcance a un entorno con múltiples líneas de producción 2.3 Resolución de los problemas de mantenimiento 17 añade una capa adicional de complejidad ya que también considera la interacción de entre los recursos de diferentes líneas de producción. Estos componentes de los equipos pueden ser comunes o no en las distintas líneas de producción y fallan según una tasa de fallo dada por una distribución de Weibur. El artículo más reciente de los analizados es [ 14 ]. Estos autores emplean una distribución de Weibur para modelar el tiempo hasta el fallo de las máquinas, de forma que determinan las frecuencias óptimas de mantenimiento teniendo en cuenta los tiempos de mantenimiento preventivo y correctivo. En cuanto al modelo matemático, emplean una formulación MILP (Mixed-Integer Lineal Programming) con el objetivo de minimizar el coste total de la tardanza en una producción de una sola línea. Además, en este paper se realiza un análisis de sensibilidad para evaluar cómo afectan los cambios en los parámetros del modelo. Como último estudio a revisar dentro de esta sección está [ 17 ]. Ahí se distinguen dos tipos de mantenimientos, por un lado están aquellos por cumplimiento de un número de horas de funcionamiento, en este caso horas de vuelo, y por otro lado se tienen los mantenimientos por cumplimiento de días de calendario. Como ya se deja ver, este estudio está enfocado al mantenimiento de una flota de aviones y aborda el problema mediante una formulación MILP. Inicialmente resuelve el problema para un tipo de mantenimiento, después para el otro y finalmente se integran en una misma formulación. Aunque a simple vista las restricciones son diferentes a las de [ 8 ], el concepto es muy similar. Además, ambas funciones multiobjetivo buscan minimizar el coste del mantenimiento. 2.3.2 Enfoque secuencial De aquí en adelante se centrará el estudio en un enfoque secuencial del problema, es decir, desagregarlo en cada uno de los subproblemas que lo componen. La forma de proceder ahora sería resolver uno de los subproblemas de optimización y una vez que se obtiene el óptimo, que en este caso sería local, esas variables quedarían fijas y serían datos para el siguiente subproblema de optimización, así hasta obtener la solución total del problema. Teniendo en cuenta la importancia del mantenimiento y el enorme peso que se le ha dado durante todo el documento, es evidente que a la hora de dividir el problema entre el mantenimiento y la operación se debe dar prioridad al mantenimiento a la hora de realizar la planificación. Como no se debe permitir que un equipo opere más allá de lo que debería, la mayoría de los autores que abordan un enfoque secuencial plantean en primer lugar la planificación del mantenimiento y, posteriormente, en los gaps que quedan entre mantenimientos se planifica la operación. Es más, en caso de realizarse al revés es muy probable que la situación óptima desde el punto de vista de la producción se alcance dando lugar a un problema de planificación de mantenimientos que no sea factible. Esto se puede dar por varias causas, ya sea por la obligación de realizar mantenimientos de forma simultánea, ocasionando picos que exceden la capacidad de mantenimiento, o por la imposibilidad de realizar la parada de mantenimiento debido a gaps estrechos entre tiempos de funcionamiento. A pesar de esta problemática, es este el enfoque que se resuelve en el presente proyecto dado que uno de los inputs es la programación de las tareas. A continuación, se presentan diversos estudios que abordan el enfoque secuencial. 18 Capítulo 2. Revisión de la literatura Para comenzar, un enfoque similar al usado en [ 17 ] es el planteado en [ 1 ]. Este paper emplea intervalos de tiempo en los que los equipos pueden entrar en mantenimiento, sin embargo, las variables son justo las inversas de las que se usan en [ 17 ]. En cuanto a las restricciones, emplea cuatro conjuntos distintos, uno para las ventanas temporales de mantenimiento, otro para la capacidad de mantenimiento y otros para la ejecución del mantenimiento. La función objetivo usada no es de mucha complejidad ya que solo busca maximizar la operación de los equipos. Aunque este paper está muy enfocado al mantenimiento de plantas eólicas, uno de los conceptos interesantes que plantea es la distinción entre los componentes de los propios equipos, extendiendo el mantenimiento directamente a los componentes. Otro de los papers en los que se sigue esta corriente es [ 2 ]. Ellos dividen el problema de forma que resuelven primero la planificación de los mantenimientos y después la planificación de la producción, ambas las realiza mediante la resolución de un MIP (Mixed Integer Programming). Una particularidad del trabajo expuesto en [ 2 ] es el modelo empleado para resolver el primero de los problemas, en él tiene en cuenta las condiciones de deterioro de los equipos para determinar las frecuencias de mantenimiento. Para ello modela el deterioro mediante procesos de Markov, en los que los equipos pueden encontrarse en varios estados de funcionamiento dependiendo del nivel de deterioro y las transiciones entre estados se dan con una cierta probabilidad. El enfoque lineal junto con la componente probabilística de los procesos de Markov permiten una mejor gestión del mantenimiento y la producción, optimizando los costos y minimizando el tiempo de inactividad de las máquinas. Además, este artículo emplea heurísticas para mejorar la aplicabilidad del modelo en escenarios complejos. Al igual que el paper anterior, si se centra la búsqueda en el modelado del deterioro de los equipos y el cálculo de las frecuencias de mantenimiento, [ 4 ] también emplea los procesos de Markov, introduciendo el concepto de cadenas de Markov. Este paper se aleja de los enfoques MILP expuestos anteriormente y se centra en demostrar como el cálculo óptimo de las frecuencias de mantenimiento ayuda a reducir los costes de mantenimiento. Como técnicas novedosas respecto a lo encontrado en otros papers, aquí se plantea una optimización estocástica, lo cual es fundamental en entornos productivos reales donde la incertidumbre juega un papel crucial a la hora de determinar el deterioro. La aplicación conjunta de estas técnicas permite una representación precisa de del proceso de deterioro. Volviendo de nuevo al enfoque secuencial, otro caso interesante es abordado en [ 5 ]. Al igual que ocurren en [ 14 ], los autores de [ 5 ] también modelan la frecuencia de mantenimiento a partir de una distribución de Weibur. Poniendo el foco en la forma de abordar el problema, ellos resuelven el problema de planificación de la operación y el mantenimiento para un solo equipo tanto de forma conjunta como por separado, comparando los resultados obtenidos con cada enfoque. Para ello emplean un MILP en el que minimizan el tiempo total ponderado de finalización de las tareas. Las conclusiones que sacan los autores de esta comparación es algo ya anunciado con anterioridad, el enfoque integrado permite una optimización global del sistema, en lugar de optimizaciones locales que pueden no ser eficientes. Además, al optimizar simultáneamente la producción y el mantenimiento se logra una reducción notable en los costes totales, siendo este enfoque de especial utilidad en máquinas que suponen un cuello de botella para la producción. 2.3 Resolución de los problemas de mantenimiento 19 En linea con el enfoque secuencial del problema, existen autores que solamente se centran en la resolución de la planificación del mantenimiento, olvidándose de la programación de tareas. Es decir, se centran en resolver la primera etapa del problema. Uno de estos casos es el encontrado en [ 10 ], en él se presentan tres modelos con sus respectivos casos prácticos. Llama la atención de forma especial el segundo de ellos donde se propone una función objetivo que minimiza el coste de realizar mantenimiento preventivo y la probabilidad del mantenimiento correctivo, todo ello modelado con un MILP. Otro aspecto novedoso hasta ahora es la introducción del concepto de reprogramación dinámica del mantenimiento cuando falla un componente. Además, este paper va en línea con lo definido en [ 17 ] ya que define los conceptos de "hard life" y "soft life". La primera de ellas establece un límite estricto para los intervalos de mantenimiento, mientras que el segundo es un parámetro de antigüedad después del cual se se permite el mantenimiento de un equipo si el coste de set up ha sido activado por algún otro mantenimiento. Un estudio mucho más profundo sobre la distinción entre estos enfoques se puede ver en [ 11 ] donde se proporciona una visión general de los avances y tendencias en este campo, destacando los beneficios de la integración y los desafíos asociados. Sin embargo, a pesar de todas las evidencias mostradas sobre la ventaja de resolver el problema de forma conjunta o, en su defecto, resolviendo primero la planificación de mantenimientos, en este proyecto se está obligado a resolver el problema de forma inversa. Para ello se empleará como punto de partida lo expuesto en [ 17 ], tomando solamente los mantenimientos por calendario. 3 Requisitos de mantenimiento de las máquinas Este capítulo analiza el problema de mantenimiento en Indaero, presentando las dificultades que se encuentran a la hora de realizar una planificación. Posteriormente se enfoca en presentar los datos disponibles para abordar el problema y propone una adaptación de un modelo de programación lineal, basado en técnicas de mantenimiento de flota de aviones, para mejorar la productividad y reducir el tiempo de inactividad en Indaero. 3.1 El problema de mantenimiento en una empresa de mecanizados El caso de estudio sobre el que se aplicará este proyecto es la empresa del sector aeroespacial Indaero. Esta empresa cuenta con capacidad para llevar a cabo una amplia variedad de procesos como es el mecanizado, costura, termoconformado, pintura o montaje. La organización del layout de la empresa agrupa los distintos centros de trabajo por procesos específicos. Sin embargo, para los fines de este proyecto, se pondrá el foco exclusivamente en el mantenimiento de las máquinas CNC. La diversidad de piezas fabricadas en Indaero implica que el flujo de producción sea altamente variable. Las piezas mecanizadas, que son el principal interés, generalmente se asignan a una máquina CNC específica cuyas capacidades técnicas se ajustan a las características de la pieza a fabricar. Aunque en algunos casos se dispone de máquinas CNC de respaldo, existen varias máquinas CNC críticas que no tienen backup, lo que puede generar cuellos de botella en la producción si una de ellas falla o necesita mantenimiento. De forma usual, la empresa opera en un único turno, aunque si la demanda lo requiere cabe la posibilidad de doblar el turno para maximizar la capacidad productiva y cumplir con los plazos de entrega exigidos en el sector aeronáutico. Esta dinámica de operación continua añade una capa adicional de complejidad a la planificación del mantenimiento, ya que cualquier parada programada debe minimizar la interrupción del flujo de producción. Actualmente, el sistema de mantenimiento establecido en Indaero está constituido por una hoja de manteniendo para cada equipo donde se agrupa según la periodicidad las inspecciones que se deben realizar y a qué componentes y sistemas. Es decir, el sistema de 21 28 Capítulo 4. Modelado del problema de gestión del mantenimiento La programación lineal se basa en tres componentes principales: • Función Objetivo: Una función lineal que se desea maximizar o minimizar. En este caso, el objetivo es minimizar el tiempo de inactividad de las máquinas CNC debido a las actividades de mantenimiento. • Variables de Decisión: Representan las decisiones que se deben tomar. En este proyecto, las variables de decisión controlan el tiempo específico en el que se debe realizar el mantenimiento de cada máquina y la asignación de las máquinas a las tareas de mantenimiento. •Restricciones: Un conjunto de ecuaciones o desigualdades lineales que representan las limitaciones del problema. Estas restricciones incluyen la disponibilidad de las máquinas, la capacidad del personal de mantenimiento y las ventanas de tiempo en las que se puede realizar el mantenimiento sin interrumpir la producción. La programación lineal proporciona un enfoque sistemático y eficiente para abordar cualquier problema de optimización. La implementación del modelo de programación lineal puede llevarse a cabo utilizando herramientas de software específicas para estos fines o mediante librerías y funciones desarrolladas para los lenguajes de programación como Python o Matlab. Estas herramientas permiten resolver problemas de programación lineal de manera eficiente, facilitando el modelado del problema y permitiendo cierta customización del solver. Antes se seguir, es necesario realizar una aclaración sobre la forma de modelar el problema. Tras revisar la literatura, la mayoría de los autores controlan la entrada de los equipos en mantenimiento mediante una variable a modo de contador, rctt ip . Hay ciertos autores que optan por poner el contador a cero tras el mantenimiento, sin embargo, otro grupo de autores realiza justo lo contrario. Está última técnica será la que se emplee en este proyecto, se restaurará el contador al máximo cuando el equipo entre en mantenimiento y no volverá a parar hasta que el contador no esté por debajo de un umbral, rctmin,p . Este contador es lo que en el documento se denomina potencial de periodos de funcionamiento restante. A continuación se detallarán los elementos que componen el modelo empleado para la planificación del mantenimiento en Indaero, empezando por los datos y variables para posteriormente describir las restricciones y la función objetivo. Finalmente se mostrará el modelo completo. 4.2 Definición de datos y parámetros Siguiendo el orden definido en la sección anterior se han definido los parámetros correspondientes a los datos de entrada del problema, relativos al horizonte temporal, al estado inicial de los equipos, a las características de cada uno de los mantenimientos, etc. Cabe destacar el papel principal que tiene el esquema de tareas planificadas ya que supondrá el 4.2 Definición de datos y parámetros 29 requerimiento más estricto. A priori, para ir probando el funcionamiento de la herramienta mientras se desarrollaba, el esquema de tareas de definió de forma manual. Más adelante en el documento se expondrá la forma final en la que se cargará el esquema de tareas. A continuación se definen los índices, periodos y conjuntos requeridos, asegurando una representación precisa y coherente del problema. •Conjuntos: agrupan elementos relacionados que comparten características comunes. -I: Conjunto de todas las máquinas consideradas en el problema. Para representar cada máquina se define el índice i∈ {1,2,...,NI} , donde NI es el número total de máquinas. -T: Conjunto de todos los periodos t en los que se divide el horizonte temporal. Se define t∈ {1,2,...,NT} , donde NT es el número total de periodos que componen el horizonte de planificación. En este modelo se asume que los periodos representan la duración de una unidad de tiempo durante la cual se puede llevar a cabo el mantenimiento de las máquinas CNC. Más adelante en el documento se realiza un estudio de sensibilidad para determinar la granularidad, optando finalmente por la equivalencia de los periodos con minutos. -M: Conjunto de todos los tipos de mantenimientos p considerados en el problema como resultado del análisis realizado en el capítulo 3. El índice p representa a cada tipo de mantenimiento y está definido como p∈ {1,2,...,NM} , siendo NM el número total de tipos de mantenimientos que se pueden aplicar a los equipos, siendo el mismo para todos los equipos. • Parámetros: datos conocidos del modelo incluyen todos los valores necesarios para definir el problema de manera cuantitativa. -Cmax :Máxima capacidad de mantenimiento simultáneo -Mp: Periodos de tiempo requeridos para completar la tarea de mantenimiento de tipo p. Durante este tiempo las máquinas no están disponibles para operar -DM p: Frecuencia de inspección del mantenimiento tipo p∈M . Coincide con el potencial de periodos restaurados tras el mantenimiento -at i: Variable binaria que toma el valor unidad si la máquina i∈I se encuentra realizando alguna tarea en el periodo t∈T . Se calcula a partir de la programación de tareas dada. -rctInit ip : Periodos restantes en la máquina i∈I al comienzo del horizonte temporal (t=−1) para que tenga que entrar en mantenimiento de tipo p∈M . Se emplea a modo de condición inicial para establecer el estado de las máquinas al comienzo de la simulación 30 Capítulo 4. Modelado del problema de gestión del mantenimiento -rctmin,p: Potencial mínimo de periodos restantes para que una máquina tenga que entrar en mantenimiento de tipo p∈M , valor por encima del cual no se podrá entrar en mantenimiento. Este parámetro se empleará para evitar que los equipos paren para mantenimiento cuando aún están lejos de la fecha de mantenimiento. • Intervalos temporales: para esta formulación solo será necesario definir un intervalo temporal especial. Una de las particularidades de este modelo es la evaluación de las restricciones hacia atrás en el tiempo. Para ello, es necesario calcular para cada instante t cuántos periodos como máximo llevaría una máquina en mantenimiento suponiendo que lo esté en el periodo t. De esta forma se define Ts pt como: -Ts pt: Máximo intervalo de tiempo en el que la máquina se encontraría en mantenimiento tipo p si en el periodo t lo está. Es decir, son los periodos de tiempo t′∈T , tales que t′∈ {max{1,t−Mp+1}, ..., t} Para visualizar este intervalo de forma sencilla se va a suponer una simulación formada por 10 periodos de tiempo, es decir NT=10 , y donde solo existe un mantenimiento cuya duración es Mp=1=2 periodos. Para un instante intermedio, por ejemplo t=6 , el intervalo Ts pt estará formado por los periodos 5 y 6, es decir, Ts 1,6=t5,t6 . Esto implica que si un equipo entra en mantenimiento en el periodo 4, el el periodo 6 ya habrá terminado su mantenimiento, por lo que no será tenido en cuenta en ese periodo para evaluar los posibles estados en los que se encuentra. De la misma forma, un equipo que entren en mantenimiento en el periodo 5 sí que afecta al estado de las máquinas en el siguiente periodo ya que aún estaría en mantenimiento. Figura 4.1 Representación gráfica del intervalo Ts pt. 4.3 Descripción de variables El problema, tal y como se ha descrito, está constituido por una serie de variables de decisión sobre las que la herramienta actuará para decidir la mejor combinación de valores óptimas que hacen que la función objetivo sea la menor posible. Estas variables de decisión serán las que permitan determinar qué equipo es el que es el que entra en mantenimiento y en que instante de tiempo. 4.4 Descripción de las restricciones 31 -mt ip =1si la máquina i∈Ientra en mantenimiento tipo pen el periodo t∈T 0en caso contrario -rctt ip: Potencial de periodos restantes evaluado al final del periodo t para que la máquina i∈Ideba entrar en mantenimiento tipo p(vida restante) -Z: Valor de la función objetivo que se pretende minimizar Adicionalmente, se tiene otra variable de decisión, pero sobre la que no actuará el solver. Esta variable será elegida por el usuario para ajustar el comportamiento de la herramienta. La variable en cuestión es ε y pondera la importancia de los términos de la función objetivo. 4.4 Descripción de las restricciones Las restricciones del modelo aseguran que las soluciones obtenidas sean factibles y cumplan con todas las condiciones impuestas al problema para que se asemeje a la realidad en Indaero. A continuación, se pasa a describir las restricciones agrupándolas según función. Capacidad En ningún periodo se debe sobrepasar la capacidad de mantenimiento existente, entendida esta capacidad en términos de personal disponible para realizar las tareas de inspecciones a los equipos. En principio se va a considerar una capacidad constante, aunque la herramienta es capaz de trabajar con una capacidad variable en el horizonte temporal considerado. 1. El número total de equipos en mantenimiento en el periodo tdebe ser menor que el máximo disponible ∑ p∈M∑ t′∈Ts pt ∑ i∈I mt′ ip ≤Cmax,∀t∈T(4.1) Incompatibilidad de estados Es físicamente imposible que un mismo equipo esté sometido a mantenimiento al mismo tiempo que se encuentra realizando una tarea. Por lo tanto, cuando un equipo este asignado a una tarea, este no podrá entrar en mantenimiento mientras dure dicha tarea. Además, este modelo impide la realización de más de un tipo de mantenimiento de forma simultánea sobre el mismo equipo (∑p∈NM∑t′∈Ts pt mt′ ip ≤1) . En caso de haber realizado la programación del mantenimiento y de las tareas de forma conjunta, esta restricción imposibilitaría la asignación de equipos a tareas hasta que no finalicen su apropiado mantenimiento. 2. Si un equipo realiza alguna tarea en el periodo t , no se le puede asignar ningún tipo de mantenimiento que se solape en el tiempo con dicha tarea ∑ p∈M∑ t′∈Ts pt mt′ ip +at i≤1,∀t∈T,i∈I(4.2) 32 Capítulo 4. Modelado del problema de gestión del mantenimiento Ejemplo Volviendo con el ejemplo anterior para Ts pt , para t=6 la restricción desarrollada queda: m5 i,1+m6 i,1+a6 i≤1∀i∈I Por lo que si una máquina está operando en el periodo 6, no podrá entrar en mantenimiento ni el periodo 6 ni en el 5, ya que aún permanecerá en mantenimiento en el periodo 6. Actualización del contador de periodos restantes, rctt ip Se pueden dar dos situaciones distintas en cada periodo de tiempo en función del estado de los equipos. Aquellos equipos que no sean asignados a mantenimiento en el instante t , se encuentren o no realizando tareas, deberán reducir todos sus potenciales de periodos restantes para entrar en mantenimiento en una unidad, dado que ambas variables se miden en la misma dimensión de tiempo. En caso de que los equipos se dispongan a comenzar las tareas de mantenimiento en el instante t , estos deberán restaurar el potencial de periodos restantes para realización de ese mantenimiento en concreto, restableciéndolo en su valor máximo. Este valor, que coincide con la frecuencia de inspección, variará según el tipo de mantenimiento considerado. A diferencia del potencial del mantenimiento mencionado anteriormente, los potenciales del resto de mantenimientos se actualizarán según el primero de los casos. Para modelar este requerimiento, es necesario tener en cuenta que la variable rctt ip evalúa el potencial de periodos restante para la entrada en mantenimiento al final de cada periodo, por lo que refleja la entrada en mantenimiento que ya ha tenido lugar en ese periodo. La actualización de los potenciales de periodos restantes para la entrada en mantenimiento se controlará mediante dos grupos de restricciones. El primero de ellos (expresiones (4.3) - (4.4) ) es el que actualiza los potenciales, mientras que el segundo grupo (expresiones (4.5) - (4.6) ) se encarga de restablecer el potencial cuando el equipo entra en mantenimiento, es decir, mt ip =1. 3. En caso de que mt ip =0 , entonces se fuerza a que rctt ip =rctt−1 ip −1 , pero si mt ip =1 , estas restricciones de cumplen y son las restricciones (4.5) y (4.6) las que pasan a actuar. rctt ip ≤rctt−1 ip +DM pmt ip −(1−∑ t′∈Ts pt mt ip),t=2,...,NT,∀i∈I,p∈M(4.3) rctt ip ≥rctt−1 ip −(1−∑ t′∈Ts pt mt ip),t=2,...NT,∀i∈I,p∈M(4.4) 4. En caso contrario, si mt ip =1 entonces se fuerza a que rctt ip =DM p . Al igual que pasaba antes, si mt ip =0 estas restricciones se cumplen y las que restringen son la (4.3) y (4.4). rctt ip ≤DM p,∀i∈I,t∈T,p∈M(4.5) 4.4 Descripción de las restricciones 33 rctt ip ≥DM p·∑ t′∈Ts pt mt′ ip,∀t∈T,i∈I,p∈M(4.6) Condiciones iniciales 5. Es necesario establecer el valor inicial que tomará el contador de periodos restante para la entrada en mantenimiento ( rctt ip ). Como esta variable está evaluada al final de cada periodo, es necesario ajustar el valor inicial a partir de los datos del periodo anterior, teniendo en cuenta la entrada o no de los equipos en mantenimiento en ese primer periodo de tiempo. Ambas restricciones son complementadas por (4.5) y (4.6) de la misma forma que lo hacen (4.3) y (4.4) , de esta forma se consigue abarcar todo el horizonte de planificación. Visto de otra forma, podrían entenderse como un caso particular de las expresiones (4.3)- (4.4). rct1 ip ≤rctInit ip +DM pm1 ip −(1−m1 ip),∀i∈I,p∈M(4.7) rct1 ip ≥rctInit ip −(1−m1 ip),∀i∈I,p∈M(4.8) Limitación de las variables Todas las variables se encuentran acotadas superior e inferiormente. Algunos de estos límites ya han sido definidos en restricciones anteriores para ajustar el comportamiento del sistema, los que no se han definido aún se hacen a continuación. Cabe destacar que algunas de las siguientes restricciones han sido incluidas directamente en la definición de las variables, especialmente los límites relativos a las variables de decisión, que serán variables booleanas. 6. El tiempo restante para entrar en mantenimiento debe ser positivo rctt ip ≥0,∀i∈I,t∈T,p∈M(4.9) Umbrales de mantenimiento 7. Para evitar una entrada prematura de los equipos a mantenimiento se definen unos umbrales por encima de los cuales los equipos no podrán ser asignados a mantenimiento. De esta forma se consigue evitar a toda costa que entren cuando aún posean potencial suficiente para seguir operando o estando disponible. La forma de proceder de esta restricción es forzar a que mt ip =0mientras que rctt ip >rctmin,p. DM p−rctt−1 ip ≥DM p−rctmin,p·mt ip,t=2,...,NT,∀i∈I,p∈M(4.10) 34 Capítulo 4. Modelado del problema de gestión del mantenimiento Ejemplo Supóngase que la frecuencia con la que se realiza el único mantenimiento existente es de 10 periodos y que rctmin,p=3. Para el periodo t=6la restricción queda: 10 −rct5 i,1≥(10 −3)·m6 i,1∀i∈I 10 −rct5 i,1≥7·m6 i,1∀i∈I Si el valor de rctt−1 ip es 5, la restricción queda: 10−5≥7·m6 i,1 , por lo que m6 i,1 debe ser 0 para cumplir la desigualdad. En cambio, si en ese periodo el valor de rctt−1 ip cae por debajo de rctmin,p , es decir, la máquina iestá próxima a su fecha de mantenimiento, entonces la restricción permite que m6 i,1tome el valor de 1. Cabe destacar en este punto la compacidad de la formulación presentada. El hecho de haber definido unos intervalos temporales que van hacia atrás posibilita una formulación óptima desde el punto de vista computacional. 4.5 Descripción de la función objetivo Aunque es cierto que los mantenimientos por calendarios deben realizarse en la fecha que les corresponda, se ha optado por una función objetivo que se centra en maximizar la disponibilidad del conjunto de las máquinas CNC. Para lograrlo se opta por una función multiobjetivo, donde combina la minimización del número de paradas para mantenimiento con la maximización del potencial de periodos restantes para entrar en mantenimiento al final del horizonte temporal, ponderando cada tipo de mantenimiento con el tiempo consumido al realizar dicha tarea de inspección. La importancia de cada objetivo se puede ajustar de forma manual a través de la variable ε . Matemáticamente, la función objetivo se expresa como: min Z = (1−ε)·∑ t∈T∑ i∈I∑ p∈M mt ipDM p−ε·∑ i∈I∑ p∈M rctT ip (4.11) Se ha optado por esta función objetivo y no por maximizar en todo momento el potencial disponible debido a que en el horizonte temporal considerado ya se están cumpliendo los objetivos de misiones, por lo que la disponibilidad en ese intervalo de tiempo es suficiente. Sin embargo, no se sabría a priori lo severo que puede llegar a ser el siguiente horizonte temporal a considerar, de ahí que se opte por este enfoque. 4.6 Modelo completo El modelo completo desarrollado en este proyecto integra varias componentes clave para la planificación del mantenimiento de un conjunto de equipos en un entorno de producción. Para ello, utiliza un enfoque MILP para encontrar la mejor combinación posible de tareas de mantenimiento, con el objetivo de minimizar el impacto en la disponibilidad de los equipos 4.6 Modelo completo 35 y reducir los costos operativos. A continuación, se presenta un resumen del modelo en su totalidad, destacando cómo se combinan sus diferentes partes para ofrecer una solución robusta y eficaz. Minimizar (1−ε)·∑ t∈T∑ i∈I∑ p∈M mt ipDM p−ε·∑ i∈I∑ p∈M rctT ip sujeto a ∑ p∈M∑ t′∈Ts pt ∑ i∈I mt′ ip ≤Cmax,∀t ∑ p∈M∑ t′∈Ts pt mt′ ip +at i≤1,∀t,i rctt ip ≤rctt−1 ip +DM pmt ip −(1−∑ t′∈Ts pt mt ip),t=2,...,NT,∀i,p rctt ip ≥rctt−1 ip −(1−∑ t′∈Ts pt mt ip),t=2,...,NT,∀i,p rctt ip ≤DM p,∀i,t,p rctt ip ≥DM p·∑ t′∈Ts pt mt′ ip,∀t,i,p rct1 ip ≤rctInit ip +DM pm1 ip −(1−m1 ip),∀i,p rct1 ip ≥rctInit ip −(1−m1 ip),∀i,p rctt ip ≥0,∀i,t,p DM p−rctt−1 ip ≥DM p−rctmin,p·mt ip,t=2,...,NT,∀i,p (4.12) 5 Implementación del modelo de programación lineal En este capítulo se describe el proceso seguido para la resolución del problema, desde la implementación el modelo en Pyhton a partir de los datos de entrada hasta los resultados generados. Para abordar el problema de la planificación del mantenimiento en Indaero e implementar el modelo del capítulo anterior se han seguido una serie de pasos. Se va a realizar una breve descripción del proceso seguido antes de detallar cómo se han realizado. En primer lugar, ha sido necesario elegir un lenguaje que tenga capacidad para resolver problemas MILP donde implementar la formulación desarrollada. Tras decidir cómo se va a formular el problema y la forma de implementarlo, da comienzo el proceso de plasmar en dicho lenguaje todas y cada una de las restricciones definidas en el Capítulo 4. Finalizada la fase de modelado del problema, se ha decidido seguir un proceso basado en la estructura típica de los desarrollos aeronáuticos ( V&V ). En primer lugar, se ha verificado que la captura de requisitos satisface las necesidades del usuario. Para lograrlo se ha desarrollado cada una de las restricciones de forma simbólica y se ha comprobado que cumplen con su función. Posteriormente se ha ido ejecutando el código por partes, comprobando que no se producen intersecciones entre restricciones a medida que estas se han ido incluyendo. Al no estar los códigos aún depurados, esta fase consumió un tiempo considerable del proyecto, poniendo de manifiesto de inmediato la necesidad de optimizar un poco la manera en la que se estaba programando para que a la hora de abordar el problema, con una dimensión mucho mayor que lo que se estaba considerando hasta el momento, este pudiera ser resuelto en un tiempo razonable. Además, debido a la falta de ajustes en el solver, hay casos en los que a la herramienta le cuesta encontrar soluciones por lo que, dada la familiaridad del autor con el lenguaje de MATLAB, se ha programado el problema también es este otro lenguaje para comparar las soluciones. Con esta medida se ha logrado asegurar que ambas programaciones son correctas. Este proceso de verificación y validación se ha llevado a cabo cada vez que se han introducido nuevos cambios en el código. Finalizada esta etapa, lo siguiente será validar el modelo mediante una serie de casos prácticos. Este proceso cuenta con una componente iterativa, ya que en algunos de los casos no es hasta este punto cuando se detectan los errores, de ahí la importancia del proceso de verificación para evitar consumir tiempo en tareas erróneas. Centrándose en 37 44 Capítulo 5. Implementación del modelo de programación lineal Figura 5.9 Condiciones iniciales para el potencial de funcionamiento para cada mantenimiento. • Hoja Mantenimientos simultáneos: Detalla los mantenimientos susceptibles de realizarse en el horizonte de planificación considerado. Esta hoja será resultado del cálculo realizado por el módulo de Lectura de datos y será rellenado de forma automática por la herramienta. Dada su importancia, se ha decidido analizarla en un apartado independiente. 5.2.2 Análisis de los mantenimientos Como se explicó en el Capítulo 3, tras las pruebas realizadas se decidió unificar los mantenimientos de todos los sistemas con un misma frecuencia de inspección y realizar posteriormente un procesado del potencial de cada uno de los equipos para esos mantenimientos con el fin de determinar la posibilidad de aprovechar la parada en un mantenimiento de mayor frecuencia para ahorrar tiempos en mantenimientos de mayor duración. El primer paso a realizar antes de combinar los mantenimientos es la lectura de los datos oficiales de los mantenimientos, como son su duración, umbral mínimo de entrada a mantenimiento y potencial de minutos restaurados tras la parada en mantenimiento. Para ello se cargan los datos del fichero Excel definido anteriormente con la función read_excel de la librería Pandas . Tras esto es necesario conocer el estado de los potenciales de los equipos, para lo cual se cargan desde el mismo Excel las condiciones iniciales para el potencial de cada mantenimiento. Como todos estos mantenimientos se encuentra sincronizados, lo próximo a realizar es la evaluación del potencial de cada mantenimiento para determinar si en el próximo horizonte de planificación algún equipo debe entrar en algún otro mantenimiento aparte del de frecuencia semanal. Esta tarea se realiza evaluando para cada equipo todos los tipos de mantenimiento y seleccionando aquellos cuyo potencial se encuentren por debajo del horizonte de planificación y, en caso de existir más de uno, se unen bajo el mismo mantenimiento. Como resultado de esto se tendrá un solo tipo de mantenimiento para cada equipo, donde cada uno de estos mantenimientos tendrá una duración que dependerá del número de mantenimientos que se realicen en paralelo. Dentro de este análisis, cada vez que un nuevo mantenimiento se une al resto se suma su duración a la del conjunto de mantenimientos anteriores, pero con la salvedad de que esa duración se reduce cierto porcentaje, que irá disminuyendo a medida que aumenta el número de mantenimientos a realizar. Se ha optado por esta técnica ya que se han ido explorando los mantenimientos por orden de duración, de forma que si se unen tres mantenimientos, el último en añadir sea el de mayor duración y al que se le realiza una menor reducción de la duración. El objetivo de esta forma de proceder es evitar reducciones de duración excesivas en mantenimientos de muy larga duración, para ello se han empleado los siguientes pesos de la Tabla 5.1 para la duración de cada nuevo mantenimiento. 5.3 Implementación del modelo 45 Tabla 5.1 Peso con el que se pondera la duración al incluir un nuevo tipo de mantenimiento al conjunto. Nºde mttos. 1 2 3 4 5 Pesos 1 0.85 0.9 0.95 0.95 Aunque este resultado se empleará posteriormente para la resolución del problema, el resultado de este análisis se ha trasladado al fichero Excel donde se encuentran el resto de datos de entrada para el problema con el fin de permitirle al usuario tener conocimiento en todo momento de lo que se está realizando. Esta visual se muestra en la Figura 5.10, donde las Xrepresentan para cada equipo aquellos mantenimientos que se han unificado para su realización conjunta en el caso de que ese equipo entre en mantenimiento durante el horizonte de planificación. Adicionalmente, en la misma visual de Excel se ha añadido una columna extra con la duración de esos mantenimientos conjuntos. Nótese que se ha extraído de este análisis el mantenimiento de frecuencia de inspección diaria por carecer de sentido y que, tras el preprocesado de los mantenimientos, el número de mantenimientos a abordar en el problema de optimización se reduce a 1, aunque con una duración distinta para cada equipo. Figura 5.10 Ejemplo de preprocesado de las condiciones iniciales para unificar mantenimientos. 5.3 Implementación del modelo El segundo módulo es donde se ha desarrollado y configurado el solver. Para la implementación del modelo de programación lineal es necesario ir definiendo las expresiones que componen el modelo de forma estructurada. En la Figura 5.12 se muestra un esquema de los pasos a seguir. En primer lugar es necesario definir el modelo indicando el solver a emplear. En este punto se puede configurar el solver para que su desempeño se ajuste lo máximo posible al tipo de problemas que se está resolviendo. Este punto se abordará con profundidad en el siguiente capítulo. # Definición del modelo Modelo = mip.Model("Modelo", solver_name=CBC) Figura 5.11 Definición del modelo. 46 Capítulo 5. Implementación del modelo de programación lineal Figura 5.12 Diagrama de flujo del solver. El siguiente paso es definir las variables mediante la función add_var . Este comando permite establecer las dimensiones de cada una de las variables, así como un límite superior y otro inferior, ahorrando el tener que definir después una restricción para limitar las variables. Para definir las variables ha sido necesario un bucle para cada uno de los índices. # Definición de variables m = [[[Modelo.add_var(’m({},{},{})’.format(i, t, p), var_type= BINARY) for p in range(N_M)] for t in range(N_T)] for i in range(N_I)] rct = [[[Modelo.add_var(’rct({},{},{})’.format(i, t, p), var_type= INTEGER, lb=0, ub=D_p[p]) for p in range(N_M)] for t in range( N_T)] for i in range(N_I)] Figura 5.13 Definición de las variables. A continuación, se definen todas las restricciones, aprovechando para asociarles un nombre. En la Figura 5.14 se muestran a modelo de ejemplo las dos primeras restricciones. 5.3 Implementación del modelo 47 Como paso final antes de ejecutar el solver, solo faltaría definir la función objetivo, lo cual se realiza mediante el campo objective . Como se indicó en la introducción de este capítulo, tras la definición en Python del modelo se ejecuta directamente desde este módulo, pero los resultados se extraen en un módulo aparte que se verá a continuación. # Definición de restricciones """ CAPACIDAD """ for t in range(N_T): Modelo += xsum(m[i][tprima][p] for p in range(N_M) for i in range(N_I) for tprima in range(max(0, t - M_D[i] + 1), t + 1)) <= C_max, "Capacidad_" + str(t) """ INCOMPATIBILIDAD DE ESTADOS """ for (i, t) in product(range(N_I), range(N_T)): Modelo += (xsum(m[i][tprima][p] for p in range(N_M) for tprima in range(max(0, t - M_D[i] + 1), t + 1)) + a[i, t] <= 1, " Inc_Estados_(" + str(i) + "," + str(t) + ")") Figura 5.14 Definición de las restricciones. Como se ha visto en el fragmento de código anterior, cada vez que aparece un sumatorio en la restricción ha sido necesario implementar un bucle en el código para poder representar el sumatorio. Esto mismo aplica para el caso de la función objetivo. # Definición función objetivo Modelo.objective = minimize((1 - epsilon) * xsum(m[i][t][p] * D_p[p ] for p in range(N_M) for t in range(N_T) for i in range(I)) - epsilon * xsum(rct[i][N_T - 1][p] for p in range(N_M) for i in range(N_I))) Figura 5.15 Definición de la función objetivo. # Optimización print(’Resolución del problema\n’) status_ip = Modelo.optimize() Figura 5.16 Ejecución del optimizador. Para visualizar mejor la forma de implementar en Python el modelo y el uso de la librería MIP, se ha incluido a continuación un ejemplo sencillo a modo de explicación. 48 Capítulo 5. Implementación del modelo de programación lineal Ejemplo Supóngase un problema de optimización lineal entera definido por las siguientes expresiones, donde x e y son las variables del modelo definidas dentro del conjunto I={1,...,10}, para el cual se define el índice i. Min ∑ i∈I 2xi+yi s.a. xi+yi≤10,∀i∈I 10xi−3yi≥5,∀i∈I Suponiendo que los datos han sido definidos y cargados previamente con el módulo de entrada, la implementación del módulo del solver para este caso se realizará según el siguiente fragmento de código: import mip from mip import xsum, minimize, CBC, BINARY, INTEGER from itertools import product # Definición del modelo Modelo = mip.Model("Modelo", solver_name=CBC) # Configuración del solver Modelo.cuts = 3 Modelo.lp_method = mip.LP_Method.AUTO Modelo.pump_passes = 500 Modelo.clique = 2 # Definición de variables x = [Modelo.add_var(’x({})’.format(i), var_type=BINARY) for i in range(I)] y = [Modelo.add_var(’y({})’.format(i), var_type=BINARY) for i in range(I)] # Definición de restricciones for i in range(I): Modelo += x[i] + y[i] <= 10 Modelo += 10*x[i] - 3*y[i] >= 5 # Definición función objetivo Modelo.objective = minimize(xsum(2*x[i] + y[i] for i in range(I))) # Optimización status_ip = Modelo.optimize() 5.4 Resultados de salida 49 5.4 Resultados de salida El otro módulo que acompaña al solver de la herramienta es un postprocesador de los resultados, el cual posibilita el pasar de los datos numéricos que aporta el solver a las representaciones y tablas mostradas en el fichero Excel de salida. Este módulo tiene como entrada tanto la salida del optimizador como los datos de entrada del problema (fichero Excel de entrada), ya que es necesario determinar las condiciones finales de los equipos para cada uno de los mantenimientos. Figura 5.17 Diagrama de flujo del módulo de salida. 5.4.1 Operación del solver Comenzando por los primeros resultados que ofrece el script, estas figuras se corresponden con el desempeño del solver durante el proceso de búsqueda de nuevas soluciones, desde la resolución de la relajación LP del problema hasta la propia exploración del espacio de soluciones. Aunque la librería empleada para resolver el problema MILP en Python no posee un visualizador de la performance del solver, como si ocurre con las funciones del lenguaje MATLAB, se ha desarrollado una interfaz para replicar la ventaja que ofrece MATLAB en este aspecto, transladándola a Excel para su consulta en cualquier momento. Esta gráfica se puede ver en la Figura 5.18, apreciándose en ella la evolución de las soluciones obtenidas y de los límites inferior y superior. 50 Capítulo 5. Implementación del modelo de programación lineal Figura 5.18 Ejemplo de la evolución detallada de las soluciones encontradas. Adicionalmente a la figura anterior, se ha elaborado otra figura un poco más amigable desde el punto de vista del usuario. Esta otra figura se divide en dos gráficas. La primera de ellas es parecida a la figura anterior con la salvedad de que solo se muestran en ella las soluciones encontradas y ambos límites, dejando de lado la dinámica del solver y las fases previas a la exploración del espacio de soluciones. Por su parte, la segunda gráfica se centra en mostrar la diferencia entre la mejor solución encontrada y el límite inferior de la función objetivo. Este gap proporciona una idea de cuan buena es la solución encontrada y cómo de lejos se está de óptimo teórico. Se calcula como el cociente entre entre el gap absoluto y una corrección del valor de la mejor solución encontrada, siendo el gap absoluto la diferencia entre la mejor solución encontrada (U) y el menor valor del límite inferior de la función objetivo (L). Gap realtivo(%) = 100 ·U−L abs(U)−1(5.1) En los casos en los que la primera solución encontrada sea directamente la solución óptima en la parte superior de la Figura 5.19 se mostrará solo un punto y en la inferior un línea en la cota de 0, indicando que la única solución encontrada es la óptima y que cuenta con un gap nulo. Figura 5.19 Ejemplo de la evolución de las soluciones encontradas encontradas y del gap relativo. 5.4 Resultados de salida 51 A modo ilustrativo se representa en la Figura 5.20 la forma en la que se verían las gráficas desarrolladas en el caso de que se encuentre el óptimo en la primera solución encontrada. En la gráfica de la izquierda se puede observar cómo se ha producido un aumento del límite inferior para hacer que la solución encontrada sea la óptima. Figura 5.20 Ejemplo de la solución obtenida en un problema en el que se alcanza el óptimo directamente. De forma paralela a las figuras mostradas, se ha adaptado la herramienta para que cada vez que se ejecute se muestren por pantalla los errores obtenidos, dado el caso en que esto ocurra. Además, en el módulo de postprocesado se han formateado varios de los resultados obtenidos para que el usuario pueda verlos por pantalla. Entre esta información se encuentra el número total de soluciones, el valor de la mejor solución encontrada junto con su gap y el estado de la resolución del problema, indicando si se ha podido resolver o no y si se ha alcanzado el óptimo en este último caso. Figura 5.21 Ejemplo de resultados mostrados por pantalla. 5.4.2 Visualización de la solución La herramienta proporciona como resultado el potencial que le resta a cada equipo para realizar el hipotético mantenimiento conjunto. En un principio se comenzó presentando la evolución de los potenciales de forma lineal en el tiempo. Sin embargo, al expresar el tiempo en minutos la representación anterior no es tan amigable como cuando la unidad de medida del tiempo son días. Esta problemática ha llevado a desarrollar una interfaz para visualizar la evolución del potencial durante el horizonte de planificación, que se corresponde con la mostrada en la Figura 5.22. A pesar de los cambios introducidos, la forma inicial de mostrar los resultados se va a mantener, ya que permite obtener una información más detallada. 52 Capítulo 5. Implementación del modelo de programación lineal Figura 5.22 Interfaz de la evolución diaria de los potenciales del posible mantenimiento conjunto. 5.4.3 Estado final de los equipos El enfoque dado al problema en esta última parte hace que se pierda el foco del estado real de los potenciales de mantenimiento de cada equipo, ya que se crea un mantenimiento ficticio para cada equipo con una duración propia y cuyo potencial depende del mantenimiento que esté más próximo a efectuarse en cada equipo. Es por esta razón por la que una vez resuelto el problema es necesario volver a dotarlo de sentido físico. Para ello no hay más que actualizar las condiciones iniciales de los potenciales de cada mantenimiento con el tiempo transcurrido durante el horizonte de planificación considerado y, en el caso de que un equipo entre en mantenimiento, restaurar el potencial de los mantenimientos realizados e indicar el potencial que le queda desde que sale de esos mantenimientos. La realización o no de los mantenimientos de forma conjunta se obtiene directamente del módulo de entrada. Finalmente, los resultados obtenidos en este módulo se sobrescriben en el fichero Excel de salida con el mismo formato que se tenían de las condiciones iniciales. De esta forma, si se sigue de forma estricta la planificación realizada se pueden emplear estas condiciones finales como condiciones iniciales para el siguiente horizonte de planificación. Figura 5.23 Estado del potencial de los equipos en cada uno de los mantenimientos al final del horizonte de planificación. 5.4.4 Fichero de salida El archivo Excel de salida presenta varias hojas para separar los resultados. Aunque algunos de ellos han sido descritos en los apartados anteriores, se va a mostrar el contenido de cada hoja para una definición total de los resultados de salida. El objetivo de este fichero es ayudar al usuario a entender mejor la distribución temporal de las tareas y las paradas de inspección, controlando los tiempos de inactividad de los equipos. • Hoja Planificación: Aquí se detalla el plan de mantenimiento generado al nivel de granularidad de minutos, incluyendo los tiempos de inicio y fin de cada tarea de mantenimiento para cada equipo, así como el tipo de mantenimiento a realizar. Este esquema incluye además las tareas a realizar por a cada equipo, mostrando una planificación total. 5.4 Resultados de salida 53 • Hoja P. diaria: Muestra un resumen consolidado de todos los mantenimientos programados a nivel de días. Incluye tanto el mantenimiento en al que se someten los equipos y como el potencial al final del día del hipotético mantenimiento conjunto. Esta hoja se corresponde con los resultados mostrados en la sección 5.4.2. • Hoja RCT_FINAL : Esta hoja contiene el estado final del potencial de cada equipo según se ha explicado en la sección 5.4.3. • Hoja RCT: Detalla la evolución del potencial conjunto durante todo el horizonte de planificación. •Hoja Tareas: Presenta la programación de la producción, tiempos de inicio y fin de cada tarea, y las máquinas asignadas a cada una. Esta información es crucial para planificar los mantenimientos sin interferir con la producción. • Hoja Figuras: Contiene las imágenes del funcionamiento de la herramienta mientras se resuelve el problema de optimización. 60 Capítulo 6. Validación y análisis del modelo implementado Los resultados obtenidos tras la simulación muestran la solidez de la formulación para horizontes de planificación mayores. Sin embargo, debido al tamaño de los datos de salida, estos no serán incluidos en la memoria. Tras lograr resolver con éxito el problema mediante un enfoque basado en días, se ha definido su equivalente en minutos teniendo en cuenta que cada uno de los periodos anteriores se corresponden con una jornada de trabajo, es decir, 480 minutos. Tras una serie de intentos de resolución del problema, la herramienta no logra encontrar solución en un tiempo razonable ni siquiera ajustando los parámetros del solver. Se ha vuelto a repetir este mismo proceso para el subproblema del apartado anterior, pero se obtiene un resultado análogo. Se pone de manifiesto con esto la necesidad de realizar un estudio paramétrico para determinar el mejor ajuste en términos de eficiencia. La otra conclusión que se extrae de estas simulaciones es la incapacidad de la herramienta para resolver problemas se gran dimensión. Por lo tanto, se está en un punto crítico del proyecto donde es necesario decidir si se adapta la formulación para un enfoque en días del problema o si se mantiene en minutos, pero con un horizonte de planificación acotado. Esta decisión compromete el alcance del proyecto por lo que para reducir el riesgo de la decisión es necesario determinar cuál sería el horizonte de planificación seguro en el enfoque basado en minutos. 6.3.2 Segundo análisis A estas alturas del proyecto solo se cuenta con un ejemplo de los datos de salida del optimizador de tareas. Este ejemplo cuenta con un horizonte de planificación de seis días y un total de 4 equipos. Se decide tomar este ejemplo como punto clave de decisión. Mediante el módulo de preprocesado de datos se realiza una lectura de los datos de entrada del solver y se definen unas condiciones de mantenimientos aleatorias. El resto de parámetros se establecen como sigue: Tabla 6.7 Parámetros del problema piloto. Parámetro Valor Horizonte temporal, T(minutos) 2968 (6 días) Número de equipos, NI4 Capacidad de mantenimiento, Cmax 4 Peso de la FO, ε0.5 Tabla 6.8 Parámetros del problema y condiciones iniciales de los equipos para el problema piloto. Parámetro Mantenimiento 1 Mantenimiento 2 Duración, Mp(minutos) 120 240 Frecuencia del mantenimiento, DM p3360 (7 días) 14400 (30 días) Umbral entrada en mantenimiento, rctmin,p480 (1 día) 1440 (3 días) rctInit 1p2400 (5 días) 9600 (20 días) rctInit 2p960 (2 días) 7200 (15 días) rctInit 3p1440 (3 días) 5760 (12 días) rctInit 4p2880 (6 días) 2400 (5 días) 6.3 Análisis de sensibilidad de tamaño de periodos 61 Tras la resolución del problema se han encontrado un total de 4 soluciones. A continuación se analizarán los resultados extraídos del módulo de salida, entre los que se encuentran las siguientes figuras: Figura 6.9 Evolución de las soluciones encontradas encontradas y del gap relativo correspondiente al problema piloto. En ellas se puede apreciar una primera fase en la que el solver se centra en acotar el espacio de búsqueda mediante la aplicación de una serie de cortes y de heurísticas. A continuación comienza la fase de exploración de las soluciones aunque también aplica cortes durante el proceso (en este ejemplo no se aprecia). Como resultado del proceso se puede ver en la Figura 6.9 como se van encontrando soluciones cada vez mejores y como el límite inferior (LB) va aumentando hasta que converge al óptimo. No se aprecia en la Figura 6.10, pero el límite interior aumenta finalmente hasta los -2332 coincidiendo con el límite superior, de ahí la optimalidad de la solución encontrada Figura 6.10 Evolución detallada de las soluciones encontradas correspondiente al problema piloto. 62 Capítulo 6. Validación y análisis del modelo implementado Por otra parte, se ha calculado y representado en la Tabla 6.9 el porcentaje del tiempo que los equipos se encuentran trabajando o bajo mantenimiento junto con el porcentaje que representa el mantenimiento en el total del horizonte de planificación. Tabla 6.9 Resultados obtenidos para la simulación del problema piloto. Equipo Periodos ocupado Tasa de ocupación Periodos de mantenimiento Tasa de mantenimiento M1929 31.3005% 120 4.0431% M21745 58.7938% 120 4.0431% M31965 66.2062% 120 4.0431% M41934 65.1617% 359 12.0957% Total 6573 55.3656% 719 6.0563% En base a los resultados obtenidos en esta última simulación, se ha tomado la decisión de mantener la formulación en minutos dado que se ha comprobado que funciona. La única acción a tomar en este punto es la limitación del horizonte temporal de planificación, que se fija en 7 días. 6.4 Análisis paramétrico del solver Durante las simulaciones realizadas se ha visto de forma evidente la necesidad de revisar los parámetros configurables del solver y ajustarlos para que se encuentren soluciones y que el tiempo necesario para ello no sea demasiado. Al modificar estos parámetros, habrá veces en las que no se encuentre el óptimo, pero sí soluciones admisibles en un plazo de tiempo mucho menor. Ante esta situación, se ha optado en todo momento por el hecho de encontrar soluciones. Por lo tanto, el objetivo de esta sección es dotar a la herramienta de una mayor solidez en cuanto a la búsqueda de soluciones. Antes de entrar de lleno en los parámetros, se va a hacer una descripción general del proceso seguido por el solver para la búsqueda de soluciones. El solver que se han empleado durante todo el proyecto es el COIN-OR Branch-and-Cut solver (CBC). Como su nombre indica, la estrategia seguida a la hora resolver un MILP es el empleo de un algoritmo de ramificación y poda (Branch and bound), aunque incluyendo cortes. La idea básica detrás de este algoritmo es realizar una partición del espacio solución en pequeñas regiones denominadas ramas, y después explorar estas regiones recursivamente de forma sistemática, empleando límites inferiores y superiores de la solución para acotar el espacio de búsqueda. A continuación se describen los pasos a aplicar: 1. Acotación. Dado un problema MILP a minimizar, donde algunas variables deben tomar valores enteros, el primer paso es relajar los requisitos de variable entera, denominado relajación lineal. Tras esto se resuelve el problema resultante con un solver LP para determinar el límite inferior de la función objetivo del MILP. Si la solución LP óptima contiene valores enteros para las variables enteras del MILP, el algoritmo termina y devuelve esa solución como la óptima del problema MILP. 2. Ramificación. Si existen variables enteras con valores no enteros, entonces se identifican esas variables y se crean dos subproblemas: 6.4 Análisis paramétrico del solver 63 • En el primer subproblema se impone como límite superior que la variable seleccionada sea menor o igual que su parte entera. • En el segundo subproblema se agrega una restricción para forzar que el límite inferior en la variable sea mayor o igual que su parte entera más uno. Mientras que queden nodos por explorar se debe seguir el proceso: 3. Elección nodo. Se elige uno de los nodos del árbol según el criterio establecido y se vuelve a realizar el procedimiento anterior, comenzando por la relajación LP. 4. Acotación. Una vez obtenida la solución del problema LP, si esta solución no es factible se poda el nodo, al igual que si se excede del límite superior actual de la función objetivo. En caso contrario se actualiza tanto la mejor solución encontrada del MILP como el límite superior y se poda el nodo. 5. Ramificación. Si no se puede eliminar ningún nodo, entonces se realiza una ramificación pero esta vez con una variable no entera. Si durante la optimización se emplean cortes para reducir la relajación LP, el algoritmo de Branch and bound se transforma en el de Branch and cut, aunque el empleo de cortes durante el primer paso del Branch and bound no constituye un Branch and cut. Estos cortes empleados en el Branch and cut agregan un conjunto de restricciones adicionales en cada iteración del algoritmo para reducir el espacio de búsqueda aún más. En cada una de las etapas definidas anteriormente se disponen de un conjunto de parámetros para poder ajustar el funcionamiento del solver. Se abordarán estos parámetros en el orden en el que van apareciendo según el algoritmo descrito anteriormente. En primer lugar se tiene lp_method , el cual permite seleccionar el algoritmo empleado a la hora de resolver la relajación LP del problema. Este parámetro puede tomar cuatro valores: •AUTO =0: El propio solver decide qué algoritmo usar •DUAL =1: Hace uso del algoritmo simplex dual •PRIMAL =2: Emplea el algoritmo simplex primal •BARRIER =3: Se emplea el algoritmo de Barrier El siguiente parámetro de importancia es preprocess. La función de este parámetro es activar o desactivar el preprocesamiento del problema MILP, intentando mejorar la formulación. El principal objetivo de este prepocesamiento es simplificar el problema para facilitar los cálculos en el posterior Branch and bound. Para ello, analiza las restricciones dadas por inecuaciones buscando estrechar los límites de la función objetivo y eliminar las restricciones redundantes. Los valores que puede tomar este parámetro son: •AUTO =−1: El propio solver decide si se realiza preprocesamiento o no •OFF =0: No se realiza el preprocesado •ON =1: Fuerza a realizar el preprocesado 64 Capítulo 6. Validación y análisis del modelo implementado Otro de los puntos clave del algoritmo empleado por el solver CBC son los cortes. Los cortes son restricciones adicionales añadidas al modelo para limitar las soluciones no enteras que se podrían obtener como resultado de la relajación lineal, mejorando la eficiencia del algoritmo de resolución. Normalmente el uso de cortes disminuye el número de ramificaciones necesarias en el proceso de Branch and bound ya que elimina las ramas de búsqueda que no contienen soluciones óptimas. Se pueden distinguir dos tipos de cortes, los cortes globales y los locales. Los cortes globales son aquellos que se pueden aplicar en todos los nodos del Branch and bound, mientras que los cortes locales solo son válidos en algunos tipos de nodos y para todos sus descendientes. La ventaja de emplear cortes radica en una mejora significativa del lower bound (LB), aunque un uso en exceso puede hacer que el tiempo de resolución de la relajación LP aumente demasiado debido a que en cada iteración realiza un número de cortes desmesurado. Con la librería MIP se pueden controlar los cortes a través de varios parámetros. El más importante es cuts, que es el encargado de controlar la generación de planos de cortes. A continuación se muestran sus posibles valores: •AUTO =−1: Es el solver el que decide el nivel de generación de planos de cortes •OFF =0: La generación de planos de cortes se encuentra desactivada •MODERADOS =1: Activa la generación de planos de cortes de forma moderada •AGRESIVO =2: Fuerza a una generación de planos de cortes de forma agresiva •M´ AS AGRESIVO =3: Lleva al solver a generar aún más planos de corte Otro de los parámetros a tener en cuenta es cut_passes , el cual controla la profundidad de los cortes a realizar. Este parámetro tomará valores enteros, correspondientes al máximo número de rondas de cortes a realizar, con la excepción del valor −1 , que permitirá al solver elegir la profundidad de los cortes. Adicionalmente, es posible la inclusión de cortes según la conveniencia del autor a partir de la función generate_cuts . Entre los parámetros de entrada a esta función se tiene el tipo de corte y la profundidad. Entre las posibles cortes a elegir destacan: •GOMORY =1: Corte basado en la teoría de descomposición de Gomory. Su forma de proceder es agregar una restricción lineal adicional para eliminar las soluciones fraccionarias del espacio de búsqueda. •GMI =2: Es una variante de los cortes de Gomory, centrándose en cortes numéricamente más seguros. 6.4 Análisis paramétrico del solver 65 •RED_SPLIT =3: Son un tipo de corte que se obtienen reduciendo primero la dimensión del problema y luego dividiendo el problema reducido en un conjunto de problemas más pequeños. Se ha demostrado que este tipo de cortes son de utilidad para resolver problemas de gran tamaño. •RED_SPLIT_G=4: Es otra versión del corte anterior. •FLOW_COVER =5: Este tipo de cortes deriva de la restricción de conservación de flujo en un problema de flujo de red y tiene por objetivo variar el límite inferior del valor de una combinación de variables binarias. •MIR =6: Se generan aplicando el redondeo de enteros a los coeficientes de las variables enteras y al término independiente de las restricciones (A·x=b). •TWO_MIR =7: Es una versión de los cortes MIR aplicada en dos fases. •LATWO_MIR =8: Versión de los cortes anteriores en la que se lleva a cabo una relajación lagrangiana. •LIFT_AND_PROJECT =9: Consiste en elevar las variables del problema en un espacio dimensional superior para posteriormente proyectar en el espacio original, empleando las desigualdades lineales resultantes como nuevas restricciones. •ZERO_HALF =11: Son desigualdades lineales que fuerzan a que las variables binarias solo puedan tomar los valores 0 y 1. •CLIQUE =12: Este tipo de corte se basa en la teoría de grafos y actúa identificando los conjuntos de variables que forman un clique en el grafo asociado al problema. Luego, se agregan restricciones lineales que restringen la solución a un subconjunto específico de valores de las variables correspondientes al clique identificado. •KNAPSACK_COVER =14: Son cortes de covertura para restricciones del tipo knapsack (∑i∈Naixi≤b,x∈ {0,1}). De forma paralela a lo anterior, la librería MIP incluye un generador automático de cortes a partir del método cuts_generator . En cada uno de los nodos inspeccionados por durante el Branch and bound, el solver llama a este método siempre que alguna de las variables enteras tome valores continuos, de forma que se generan nuevas restricciones (cortes). Algo similar ocurre con lazy_constrs_generator , el cual permite añadir restricciones diferidas (lazy constrains) tras la localización de soluciones en las que una variable entera toma un valor entero, pero se quiere forzar a que tome valores distintos de ese. 66 Capítulo 6. Validación y análisis del modelo implementado El último parámetro relacionado con los cortes es clique, el cual controla directamente la generación de cortes de CLIQUE. Los valores posibles para este parámetro son los siguientes: •AUTO =−1: Es el solver el que decide el nivel de generación de cortes de CLIQUE •OFF =0: La generación de cortes de CLIQUE se encuentra desactivada •ON =1: Activa la generación de cortes de CLIQUE •AGRESSIVE =2: Fuerza a una generación de cortes de CLIQUE más agresiva Otro mecanismo empleado a la hora de resolver un problema de optimización es el empleo de heurísticas. Las heurísticas son técnicas para encontrar soluciones factibles dentro de un tiempo razonable, aunque no aseguran la consecución del óptimo. Estas soluciones permitirán reducir el límite inferior de la función objetivo, reduciendo el espacio de búsqueda. Esta opción cobra gran importancia en problemas de gran tamaño, donde el tiempo de cómputo para lograr obtener la solución óptima por métodos exactos, como el método simplex o el Branch and bound, se escapa del alcance. El solver CBC posee una amplia variedad de parámetros en lo que a heurísticas respecta, aunque por defecto solo incluye la heurística Rounding. Esta heurística redondea los valores fraccionarios de las variables continuas a sus enteros más cercanos, verificando posteriormente si esta solución satisface las restricciones del problema. A pesar de las posibilidades de CBC ofrece, desde la librería MIP solo es posible configurar el parámetro pump_passes . Este parámetro puede tomar cualquier valor entero, haciendo referencia al máximo número de pasadas a través de la heurística. Como parámetro final se tiene threads , que se encarga de controlar el número de hilos empleados por el solver durante la resolución del problema. Al igual que ocurría con otros de los parámetros explicados, threads puede tomar valores enteros, reservando el valor −1 para la decisión automática del solver. Cuanto mayor sea este valor se apreciará una mejora en el tiempo de resolución, pero se consumirá una mayor memoria del equipo. Existen otros parámetros para ajustar a priori el tiempo durante el cual el solver se encuentra buscando soluciones ya sea de forma directa mediante max_seconds o de forma indirecta con max_mip_gap (controla el gap relativo a partir del cual se considera una solución factible como óptima) o max_nodes (controla el máximo número de nodos a explorar). Para determinar cuáles son los valores más adecuados de los parámetros anteriores para esta formulación se presentan a continuación algunas de las pruebas realizadas, recogidas en forma de tablas para obtener un mejor enfoque visual. La forma de proceder a la hora de realizar las pruebas ha sido comenzar por aquellos parámetros que afectan a las primeras etapas del algoritmo de Branch and bound y no seguir con el resto hasta que no se haya fijado el parámetro anterior. Para estas pruebas se ha elegido el último problema simulado, es decir, el problema piloto. 6.4 Análisis paramétrico del solver 67 Tabla 6.10 Resultados del análisis realizado con el parámetro lp_method. Subproblema ε lp_method Auto∗ Dual Primal Barrier Nºsoluciones Gap relativo (%) Nºnodos explorados (miles) Tiempo de resolución (s) 1 0.5 ✓7 0 2.155 466.40 (396.96) 2 0.5 ✓5 0 249 477.79 (466.10) 3 0.5 ✓2 0 1.861 520.98 (507.54) 4 0.5 ✓1 0 12 405.74 (386.9) ∗Definido por defecto En vista de los resultados obtenidos, está claro el cuarto subproblema es el que se ha resuelto más rápido. En este subproblema el solver ha tardado más en resolver el problema LP, pero una vez resuelto se ha quedado bastante cerca de la solución óptima, de ahí que haya necesitado explorar tan pocos nodos. A pesar de esta conclusión, en el primer subproblema se ha visto como el solver se desenvuelve mejor en la búsqueda de soluciones con un tiempo similar. Es por ello que no se puede elegir aún una de las configuraciones, siendo necesario su testeo en conjunción con otros parámetros. El siguiente a probar será preprocess. Tabla 6.11 Resultados del análisis de la combinación de los parámetros lp_method y Preprocess. Subproblema ε lp_method Preprocess Auto∗ Dual Primal Barrier Auto∗ OFF ON Nºsoluciones Gap relativo (%) Nºnodos explorados (miles) Tiempo de resolución (s) 1 0.5 ✓ ✓ 7 0 2.155 466.40 (396.96) 2 0.5 ✓ ✓ 7 42.67 815 3765 3 0.5 ✓ ✓ 7 0 2.494 577.07 (442.75) 4 0.5 ✓ ✓ 3 0 292 394.39 (401.97) 5 0.5 ✓ ✓ 0 - - 100.48 6 0.5 ✓ ✓ 3 0 290 409.87 (402.57) ∗Definido por defecto Como resultado de este análisis se extraen dos claras ideas. Por un lado, en el subproblema dos, el que no esté activado el preprocesado MILP complica la exploración de nodos, no permitiendo llegar hasta la solución óptima. Además, el solver no encuentra solución hasta pasados 35 minutos y la velocidad de exploración es lenta comparación con los otros subproblemas. Algo similar ocurre en el subproblema 5, donde el solver es incapaz de resolver el problema. Por otra parte, sigue presente la idea de que el algoritmo de Barrier proporcionar una solución bastante cercana a la óptima. Aún no se seleccionará hasta no ver como interactúa con el resto de parámetros. El único parámetro que quedará definido en esta prueba será Preprocess, que se fijará en ON dado que la opción automática siempre elige esa opción. 68 Capítulo 6. Validación y análisis del modelo implementado Tabla 6.12 Resultados del análisis de la combinación de los parámetros lp_method y Cuts . Subproblema ε lp_method Preprocess Cuts Auto∗ Dual Primal Barrier Auto∗ OFF ON Auto∗ OFF Moderado Agresivo Más agre. Nºsoluciones Gap relativo (%) Nºnodos explorados (miles) Tiempo de resolución (s) 1 0.5 ✓ ✓ ✓ 7 0 2.155 466.40 (396.96) 2 0.5 ✓ ✓ ✓ 3 0 2532 607.05 (600.37) 3 0.5 ✓ ✓ ✓ 3 0 18 550.53 (536.06) 4 0.5 ✓ ✓ ✓ 4 0 16 409.41 (397.17) 5 0.5 ✓ ✓ ✓ 3 0 34 615.47 (601.55) 6 0.5 ✓ ✓ ✓ 3 0 292 394.39 (401.97) 7 0.5 ✓ ✓ ✓ 6 0 426 563.38 (546.26) 8 0.5 ✓ ✓ ✓ 3 0 18 529.76 (521.70) 9 0.5 ✓ ✓ ✓ 3 0 18 381.47 (375.54) 10 0.5 ✓ ✓ ✓ 3 0 24 602.84 (595.02) ∗Definido por defecto Tras los resultados arrojados por las simulaciones se ve que el subproblema 9 es el que mejor configuración tenía. Sin embargo, se ha comprobado que el tiempo que el solver arrojaba correspondía solamente a la fase de resolución del problema MILP, no de la relajación lineal. Fijándose en esa otra parte, el algoritmo de Barrier necesita mucho más tiempo para la resolución. Este aspecto será clave para descartar esta opción y seleccionar la opción automática. Centrando el foco de atención en el parámetro cuts se tienen dos opciones candidatas que son la automática y la de cortes agresivos. Estas opciones dan buenos resultados tanto con la opción automática como con el algoritmo de Barrier en el parámetro lp_method , por lo que se va a probar el siguiente parámetro con ambas configuraciones. Tabla 6.13 Resultados del análisis de la combinación de los parámetros Cuts y Cut_pasess . Subproblema ε lp_method Preprocess Cuts Cut_passes Auto∗ Dual Primal Barrier Auto∗ OFF ON Auto∗ OFF Moderado Agresivo Más agre. Nºsoluciones Gap relativo (%) Nºnodos explorados (miles) Tiempo de resolución (s) 1 0.5 ✓ ✓ ✓ -1∗7 0 2616 640.60 (623.02) 2 0.5 ✓ ✓ ✓ 0 3 0 12 521.61 (507.37) 3 0.5 ✓ ✓ ✓ 1 10 0 875 616.84 (587.06) 4 0.5 ✓ ✓ ✓ 2 5 0 268 403.92 (390.35) 5 0.5 ✓ ✓ ✓ 3 4 0 149 445.89 (433.80) 6 0.5 ✓ ✓ ✓ -1∗4 0 16 560.79 (543.83) 7 0.5 ✓ ✓ ✓ 0 3 0 12 376.27 (366.05) 8 0.5 ✓ ✓ ✓ 1 3 0 12 529.37 (515.40) 9 0.5 ✓ ✓ ✓ 2 3 0 24 444.57 (434.54) 10 0.5 ✓ ✓ ✓ 3 3 0 10 385.71 (375.28) ∗Definido por defecto Para determinar la configuración más adecuada, desde el punto de vista del tiempo de resolución se debe configurar el parámetro cuts como agresivo asumiendo el riesgo de que el número de soluciones encontradas sea menor. En cuanto al parámetro cut_passes se ve que lo ideal es mantenerlo elevado por lo que se va a fijar en 2. 6.4 Análisis paramétrico del solver 69 Tabla 6.14 Resultados del análisis de la combinación de los parámetros Cuts yClique. Subproblema ε lp_method Preprocess Cuts Cut_passes Clique Auto∗ Dual Primal Barrier Auto∗ OFF ON Auto∗ OFF Moderado Agresivo Más agre. Auto∗ OFF ON Agresivo Nºsoluciones Gap relativo (%) Nºnodos explorados (miles) Tiempo de resolución (s) 1 0.5 ✓ ✓ ✓ 2✓5 0 268 385.19 (372.86) 2 0.5 ✓ ✓ ✓ 2✓5 0 268 436.34 (422.07) 3 0.5 ✓ ✓ ✓ 2✓5 0 268 427.96 (414.61) 4 0.5 ✓ ✓ ✓ 2✓5 0 268 442.82 (430.77) 5 0.5 ✓ ✓ ✓ 2✓3 0 24 390.59 (379.42) 6 0.5 ✓ ✓ ✓ 2✓3 0 24 381.87 (371.38) 7 0.5 ✓ ✓ ✓ 2✓3 0 24 500.56 (489.91) 8 0.5 ✓ ✓ ✓ 2✓3 0 24 388.95 (378.28) ∗Definido por defecto Tras las nuevas simulaciones se ve una clara mejora en los tiempos de cálculo con el empleo de los cortes agresivos. Fijándose bien se ve que ya no existe tanta variabilidad en el número de nodos explorados y las soluciones encontradas, lo cual es lógico dado que se tienen acotados muchos de los aspectos que condicionan la operación del solver. En lo que respecta al parámetro Clique , quitando la opción automática se ve que las dos mejores opciones son o no realizar este tipo de cortes o realizarlos de forma agresiva. Se va a mantener estas dos configuraciones para las siguientes simulaciones. Tabla 6.15 Resultados del análisis de la combinación de los parámetros Clique y Pump_passes. Subproblema ε lp_method Preprocess Cuts Cut_passes Clique Pump_passes Auto∗ Dual Primal Barrier Auto∗ OFF ON Auto∗ OFF Moderado Agresivo Más agresivo. Auto∗ OFF ON Agresivo Nºsoluciones Gap relativo ( %) Nºnodos explorados (miles) Tiempo de resolución (s) 1 0.5 ✓ ✓ ✓ 2✓-1 3 0 24 410.46 (399.78) 2 0.5 ✓ ✓ ✓ 2✓0 1 0 10 331.92 (327.32) 3 0.5 ✓ ✓ ✓ 2✓5 3 0 24 409.77 (400.65) 4 0.5 ✓ ✓ ✓ 2✓50 3 0 24 395.31 (385.10) 5 0.5 ✓ ✓ ✓ 2✓500 4 0 24 404.83 (396.64) 6 0.5 ✓ ✓ ✓ 2✓-1 3 0 24 392.87 (383.39) 7 0.5 ✓ ✓ ✓ 2✓0 1 0 10 355.90 (350.58) 8 0.5 ✓ ✓ ✓ 2✓5 3 0 24 418.56 (407.63) 9 0.5 ✓ ✓ ✓ 2✓50 4 0 24 353.76 (343.67) 10 0.5 ✓ ✓ ✓ 2✓500 4 0 24 379.11 (371.71) ∗Definido por defecto Aunque el parámetro Clique puede tomar una infinita variedad de valores, se ve claramente como interesan valores elevados para reducir el tiempo de cálculo, por lo que se fijará este valor en 500. Por otra parte, el parámetro que quedaba por fijar se va a establecer en agressive dado que en general emplea un menor tiempo para la resolución y encuentra más soluciones en el proceso. Por último, se realizará una simulación final con el parámetro Threads . A priori, viendo los resultados interesa establecer un valor de 0 en este parámetro. Tabla 6.16 Resultados del análisis para el parámetro Threads. Subproblema ε lp_method Preprocess Cuts Cut_passes Clique Pump_passes Threads Auto∗ Dual Primal Barrier Auto∗ OFF ON Auto∗ OFF Moderado Agresivo Más agre. Auto∗ OFF ON Agresivo Nºsoluciones Gap relativo ( %) Nºnodos explorados (miles) Tiempo de resolución (s) 1 0.5 ✓ ✓ ✓ 2✓500 0∗3 0 24 414.17 (405.24) 2 0.5 ✓ ✓ ✓ 2✓500 2 4 0 20 466.33 (459.05) 3 0.5 ✓ ✓ ✓ 2✓500 4 3 0 24 567.62 (560.45) 4 0.5 ✓ ✓ ✓ 2✓500 10 4 0 24 536.24 (528.79) ∗Definido por defecto Bibliografía [1] M Alardhi and Ashraf Labib, Preventive maintenance scheduling of multicogeneration plants using integer programming, Journal of the Operational Research Society 59 (2008), 503–509. [2] Maliheh Aramon, Dragan Banjevic, and J. Beck, Integrated maintenance planning and production scheduling with markovian deteriorating machine conditions, International Journal of Production Research 52 (2014), 7377–7400. [3] Asociación Española de Normalización y Certificación, UNE-EN 13306:2018: Mantenimiento, Terminología del mantenimiento, AENOR, 2018. [4] Stuart Bell and David Percy, Modelling uncertainty in preventive maintenance scheduling, Quality and Reliability Engineering International 28 (2012). [5] C.R. Cassady and E. Kutanoglu, Integrating preventive maintenance planning and production scheduling for a single machine, IEEE Transactions on Reliability 54 (2005), no. 2, 304–309. [6] Adolfo Crespo, The maintenance management framework, Springer London, 2007. [7] F.J. Cárcel-Carrasco, Evolución histórica del mantenimiento industrial en relación a la gestión del conocimiento, Dyna vol. 91 (2016), pp. 590–595. [8] V Ebrahimipour, Amirhossein Najjarbashi, and Mohammad Sheikhalishahi, Multiobjective modeling for preventive maintenance scheduling in a multiple production line, Journal of Intelligent Manufacturing 26 (2013), 1–12. [9] Engeman, Historiales de mantenimiento: ¿por qué tu empresa los necesita?, Blog de Engeman Software de Mantenimiento GMAO/CMMS. [10] Emil Gustavsson, Michael Patriksson, Ann-Brith Strömberg, Adam Wojciechowski, and Magnus Önnheim, Preventive maintenance scheduling of multi-component systems with interval costs, Computers Industrial Engineering (2014). [11] Laith Hadidi, U. Al-Turki, and Abdur Rahim, Integrated models in production planning and scheduling, maintenance and quality: A review, International Journal of Industrial and Systems Engineering 10 (2012). 77 78 Bibliografía [12] Time Infraspeak, Maintenance statistics 2024: Trends, challenges and metrics, INFRASPEAK (2023). [13] Taylor Jacoby, Bruce Grawert, and Michael Combs, Facilities management cost trends 2023, CBRE (2023). [14] Ahmet Kolus, Ahmed El-Khalifa, U. Al-Turki, and Salih Duffuaa, An integrated mathematical model for production scheduling and preventive maintenance planning, International Journal of Quality Reliability Management ahead-of-print (2020). [15] Jhon Moubray, Rmc ii: Reliability centered maintenance, Industrial Press Inc., New York, USA, 1991. [16] L.M. Pintelon and L.F Gelders, Maintenance management decision making, European Journal of Operational Research vol. 58 (1992), pp. 301–317. [17] R Pérez García, Herramienta para la gestión de la planificación de la operación y mantenimiento a corto plazo de aeronaves militares, Master’s thesis, 2023. [18] HS Riddell, Manual de Entrenamiento de LCC, 1999. [19] Túlio A. M. Toffolo Haroldo G. Santos, Python mip documentation. [20] Silvia Toyos, Cómo los gemelos digitales están transformando el mantenimiento industrial, 2023.