UNIVERSIDAD DE LOS ANDES FACULTAD DE INGENIERIA ESCUELA DE SISTEMAS DEPARTAMENTO DE INVESTIGACION DE OPERACIONES OPTIMIZACION DE MODELOS DE SIMULACION EN SIMPY. APLICACION DE LA METODOLOGIA DE SUPERFICIES DE RESPUESTA P: J́ A Ã M P U L A I S T: P. Ś M M 2007 ”No creas en lo que has oı́do. No creas en la tradición porque provenga de muchas generaciones. No creas en nada de lo que se ha hablado muchas veces. No creas en algo porque haya sido escrito por algún viejo sabio. No creas en las conjeturas. No creas en la autoridad, en los maestros o en los ancianos. Cuando hayas observado y analizado detenidamente una cosa, Que esté de acuerdo con la razón y beneficie a uno y a otros, Entonces acéptala y vive conforme a ella” BUDA (563 a.C.-483 a.C.) Dedicatoria Yo, Jesús Alejandro Avendaño Moya dedico este modesto, pero significativo paso que he alcanzado en el camino de la vida con mucho esfuerzo: A mi madre, por su constante apoyo, ternura y afecto a lo largo de toda mi vida, la cual me ha servido para subsanar la gran mayora de los conflictos que se me ha presentado. A mi padre, por su esfuerzo y ayuda que me ha encaminado a lo que soy, una persona de valores y principios. Siempre puedes confiar en mı́ A mi hermana, espero y aspiro que este logro que alcanzo hoy te motive a cumplir sus metas. A mi novia por tu amor, consejo y compañia que han hecho que superara momentos tan dificiles en los que pretendia seguir otros caminos. Y a todos mis amigos que me han acompañado en esta lucha ardua y a la final placentera. Agradecimientos A Dios todo poderoso, por ayudarme en el transcurso de mi vida, dándome fuerza de voluntad para continuar en momentos difciles y por colocarme a personas que han influido en el rumbo adecuado para alcanzar mis metas. A la Ilustre Universidad de Los Andes, por brindarme la oportunidad de abrirme las puertas para desarrollarme y crecer entre un alto nivel profesorado y además dándome la posibilidad de compartir con un sin número de personas momentos alegres. A el Prof. Sebastin Medina, por apoyarme y guiarme como amigo y tutor con su serenidad y capacidad profesional que lo caracteriza, sin desviarse de los objetivos propuestos para obtener este primer paso en mi desarrollo profesional. A todas las personas que de manera directa o indirecta influyeron en mi formación personal y cultural. Resumen Este trabajo describe el desarrollo de una metodologı́a para la optimización de modelos de simulación, empleando los Métodos de Superficies de Respuesta (MSR). La aplicación de los MSR permite seleccionar la combinación de niveles óptimos en la obtención de la mejor respuesta del modelo, cuando se carece de una estructura matemática tratable, mediante planteamientos factoriales, cuyos resultados son ajustados usando modelos matemáticos. Con esta finalidad se explora la superficie de respuesta obteniendo la dirección de la región donde está el punto óptimo. Este último determina las condiciones bajo las cuales debe operar el modelo de simulación para obtener el mejor rendimiento. Los modelos de simulación se desarrollan en SimPy que es un paquete de simulación por eventos discretos, orientado a objetos y basado en procesos. Este paquete está escrito en el lenguaje de programación Python y se encuentra dentro de la lı́nea de desarrollo de software libre. La metodologı́a se expresa mediante una herramienta computacional desarrollada en el lenguaje Python y usando los modelos proporcionados por SimPy. Se aplica la herramienta a un problema de inventarios estocásticos, obteniendo muy buenos resultados; por lo cual se hace muy prometedora la metodologı́a para su uso en problemas más generales. Se provee el código completo de la herramienta como aporte a la comunidad de desarrolladores en esta área. Palabras Clave: Simulación, Optimización,Superficies de Respuesta, Python, SimPy Indice General 1. Introducción 1 1.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2. Planteamiento del problema . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.3.1. Objetivo general . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.3.2. Objetivos especı́ficos . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.4. Justificación e importancia de la investigación . . . . . . . . . . . . . . . . 4 1.5. Delimitación del estudio . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2. Marco Teórico 6 2.1. Antecedentes de la investigación . . . . . . . . . . . . . . . . . . . . . . . 6 2.2. Optimización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.3. Simulación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.3.1. Simulación de sistemas orientados a eventos discretos . . . . . . . 10 2.3.2. Elementos de un modelo de simulación . . . . . . . . . . . . . . . 10 2.3.3. Estrategias de simulación . . . . . . . . . . . . . . . . . . . . . . . 11 2.4. Optimización de modelos de simulación . . . . . . . . . . . . . . . . . . . 13 2.5. Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.6. SimPy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.6.1. Clases de SimPy . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.7. Métodos de superficies de respuesta . . . . . . . . . . . . . . . . . . . . . 17 INDICE GENERAL 3. Métodos de Superficies de Respuesta 19 3.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.2. Terminologı́a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.2.1. Variables predictoras . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.2.2. Codificación de las variables predictoras . . . . . . . . . . . . . . . 21 3.2.3. Variable respuesta . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.2.4. Función de respuesta . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.2.5. Predicción función de respuesta . . . . . . . . . . . . . . . . . . . 22 3.2.6. Superficie de respuesta . . . . . . . . . . . . . . . . . . . . . . . . 23 3.2.7. Región experimental . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.3. Modelo de primer orden . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.4. Estimación por mı́nimos cuadrados . . . . . . . . . . . . . . . . . . . . . . 25 3.5. Prueba de significancia del modelo . . . . . . . . . . . . . . . . . . . . . . 26 3.6. Prueba de falta de ajuste . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.7. Método de máxima pendiente en ascenso . . . . . . . . . . . . . . . . . . 29 3.7.1. Algoritmo para determinar las coordenadas de un punto en la trayectoria de máxima pendiente en ascenso . . . . . . . . . . . . . . 30 3.7.2. Método de máxima pendiente en ascenso sujeto a una restricción lineal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.8. Modelo de segundo orden . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.9. Localización del punto estacionario . . . . . . . . . . . . . . . . . . . . . 32 3.10. Caracterización de la superficie de respuesta . . . . . . . . . . . . . . . . . 34 3.11. Diseños experimentales para ajustar superficies de respuesta . . . . . . . . 35 3.11.1. Diseños para ajustar modelos de primer orden . . . . . . . . . . . . 35 3.11.2. Diseños para ajustar modelos de segundo orden . . . . . . . . . . . 35 3.12. Ejemplo de aplicacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 4. Desarrollo e implementación 44 4.1. Desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 INDICE GENERAL 4.2. Ejemplo de Aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 4.2.1. Descripción del Problema . . . . . . . . . . . . . . . . . . . . . . 51 5. Conclusiones y Recomendaciones 58 5.1. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 5.2. Recomendaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 Bibliografı́a A. 61 65 A.1. OptimSimpyMSR.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 A.2. AdcMod.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 A.3. AnaCan.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 A.4. DesMod.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 A.5. DisExp.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 A.6. MetAsc.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 A.7. ResMod.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 A.8. ModSimPy.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Indice de Tablas 3.1. Analisis de Varianza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.2. Datos del proceso para ajustar a un modelo de primer orden . . . . . . . . . 37 3.3. Analisis de Varianza para el modelo de primer orden . . . . . . . . . . . . 37 3.4. Experimento de máximo ascenso . . . . . . . . . . . . . . . . . . . . . . . 38 3.5. Datos del proceso para ajustar a un modelo de primer orden . . . . . . . . . 39 3.6. Analisis de Varianza para el modelo de primer orden . . . . . . . . . . . . 39 3.7. Experimento de máximo ascenso . . . . . . . . . . . . . . . . . . . . . . . 40 3.8. Datos del proceso para ajustar a un modelo de primer orden . . . . . . . . . 41 3.9. Analisis de Varianza para el modelo de primer orden . . . . . . . . . . . . 41 3.10. Datos del proceso para ajustar a un modelo de segundo orden . . . . . . . . 42 3.11. Analisis de Varianza para el modelo de segundo orden . . . . . . . . . . . 42 Indice de Figuras 2.1. Enfoque Optimización de Modelos de Simulación . . . . . . . . . . . . . . 14 2.2. Métodos de optimización . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.3. Mecanismo de simulación de SimPy . . . . . . . . . . . . . . . . . . . . . 16 3.1. Algoritmo MSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.2. Superficie de respuesta en dos dimensiones . . . . . . . . . . . . . . . . . 23 3.3. Superficie de respuesta en tres dimensiones . . . . . . . . . . . . . . . . . 24 3.4. Comportamiento MPA sujeto a una restricción . . . . . . . . . . . . . . . . 31 4.1. Algoritmo MSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Capı́tulo 1 Introducción En el presente trabajo se desarrollará una metodologı́a para optimizar cualquier modelo de simulación escritos en SimPy, aplicando Métodos de Superficie de Respuesta. 1.1. Introducción La simulación es una técnica de análisis basada en la experimentación sobre un modelo de un sistema real, para evaluar su comportamiento bajo ciertas condiciones. El propósito es probar hipótesis para obtener respuestas útiles de la simulación de estos modelos, por ello se deben utilizar parámetros de entrada seleccionados cuidadosamente, de forma tal que el resultado sea el mejor posible. La elección adecuada de estos parámetros de entrada a la simulación implica un proceso de optimización; sin embargo, determinar los valores óptimos de los mismos puede requerir un tiempo computacional excesivo por dos razones: el número de combinaciones puede ser muy alto y por otra parte, no se puede obtener la función de los parámetros de entrada de forma explı́cita, lo que obliga a ejecutar la simulación para obtener este valor. 1 CAPÍTULO 1. INTRODUCCIÓN 2 En base a este aspecto, con este trabajo de investigación, se pretende desarrollar una metodologı́a, basada en los métodos de superficies de respuesta (de ahora en adelante MSR), para la optimización de modelos de simulación por eventos discretos programados con el paquete de simulación SimPy. Este documento consta de cinco capı́tulos y un apéndice: En el capı́tulo 1 se identifica el problema, los objetivos , la importancia y las delimitaciones de la investigación. En el capı́tulo 2, se muestra los conceptos de Optimización, Simulación, ası́ como una descripción del paquete de simulación SimPy y una pequeña introducción de los Métodos de Superficies de Respuesta. En el capı́tulo 3, se desarrollán detalladamente los conceptos fundamentales de los Métodos de Superficies de Respuesta. En el capı́tulo 4 se muestra el desarrollo e implementación de este enfoque metodológico. En el capı́tulo 5 se presentan las Conclusiones y Recomendaciones El Apéndice A contiene el código completo en Python de la metodologı́a desarrollada. 1.2. Planteamiento del problema Los problemas de optimización tradicionales han sido diseñados para encontrar soluciones óptimas cuando el sistema está adecuadamente estructurado en términos de una función objetivo, un conjunto de restricciones y limites. Los modelos de simulación, a menudo pre- CAPÍTULO 1. INTRODUCCIÓN 3 sentan un comportamiento no lineal, relaciones combinatorias y aspectos estocásticos entre otros, que no pueden ser formalizados fácilmente como un conjunto de restricciones y una función objetivo, es decir, que carecen de una estructura matemática tratable, debido a que no es posible determinar una relación clara entre la entrada del modelo y su respuesta. Por tanto se debe aplicar un procedimiento de optimización donde el modelo de simulación sea considerado como un modelo de caja negra, es decir, la salida del modelo puede fijarse como una función desconocida que depende de los parámetros de entrada. El presente trabajo de investigación pretende contribuir al campo de la optimización de modelos de simulación mediante la aplicación de los métodos de superficie de respuesta enlazada con la simulación de eventos discretos de modelos previamente escritos en SimPy. 1.3. Objetivos Con la finalidad de solventar la problemática planteada se propone: 1.3.1. Objetivo general Aplicar Métodos de Superficies de Respuesta para la optimización de modelos de simulación en el programa de simulación SimPy. 1.3.2. Objetivos especı́ficos Estudiar los conceptos de optimización de modelos de simulación. Estudiar la Metodologı́a de Superficies de Respuesta. Estudiar el lenguaje de programación Python. CAPÍTULO 1. INTRODUCCIÓN 4 Estudiar el funcionamiento del programa de simulación SimPy. Desarrollar una metodologı́a, que permita aplicar los Métodos de Superficies de Respuesta para la optimización de modelos de simulación en el programa de simulación SimPy. Desarrollar una herramienta que aplique la metodologı́a. Probar el funcionamiento de la herramienta. 1.4. Justificación e importancia de la investigación La optimización de modelos de simulación es un enfoque que está siendo considerado por muchos de los investigadores en el área de simulación con el objeto de obtener el mejor desempeño de los sistemas bajo estudio y no simplemente manejar resultados empı́ricos. En la actualidad la simulación es utilizada para modelar sistemas de gran complejidad, por lo que encontrar una estructura matemática tratable que explique la relación de los parámetros del modelo resulta imposible. Debido a esto, determinar los niveles de los factores que influyen en su comportamiento, requiere establecer metodologı́as de optimización. Esto es de importancia para la comunidad cientı́fica, ya que estimar estos niveles se facilita mediante la implementación de métodos claros. 1.5. Delimitación del estudio Se establecieron algunas limitaciones y simplificaciones para la creación de la metodologı́a: Se asume que el experimentador elije los parámetros de entrada, que determinan el CAPÍTULO 1. INTRODUCCIÓN 5 comportamiento de la salida del modelo de simulación, para ello se realizan pruebas sobre el modelo y se determina entre todos los parámetros cuales de ellos son significantes para el análisis, esto se consigue realizando diseño de experimentos iterativos y luego realizando una análisis de varianza a los mismos. La metodologı́a es desarrollada utilizando MSR solo hasta realizar el análisis canónico sobre el modelo ajustado de segundo orden. No se realiza el análisis de cordillera debido a limitaciones de tiempo impuestas para el desarrollo de la tesis. La implementación que se realizo para demostrar el funcionamiento y aplicabilidad de la metodologı́a desarrollada, está limitada para un número de parámetros no mayor a cinco. Capı́tulo 2 Marco Teórico En el presente capı́tulo se explican detalladamente los antecedentes y aspectos teóricos en los que se fundamenta el desarrollo de este trabajo, en lo que se refiere a optimización, simulación, optimización de modelos de simulación y el funcionamiento del paquete de simulación por eventos discretos SimPy. 2.1. Antecedentes de la investigación La optimización de modelos de simulación no es un concepto nuevo. Cuando la computación empezó a tener un impacto en la investigación cientı́fica, numerosos ingenieros y cientı́ficos han querido perfercionar los modelos de simulación que desarrollaron para diferentes tipos de aplicaciones. Sin embargo, su éxito es reciente debido al crecimiento acelerado de las herramientas computacionales y la aparición de nuevas metodologı́as para la optimización. Existe una extensa literatura de la que puede conocerse que está en crecimiento el interés en el área de optimización de modelos de simulación y la necesidad existente de 6 CAPÍTULO 2. MARCO TEÓRICO 7 aplicar métodos de búsqueda más directos. Muchos investigadores en los últimos años han desarrollado diferentes métodos para optimizar simulaciones. Algunas recientes recopilaciones de estos métodos se pueden encontrar en Azadivar [Azadivar F., 1999], Andradóttir [Andrabóttir S., 1998], Carson y Maria [Yolanda Carson y Anu Marı́a, 1997] o Fu y Healy [Fu M. y Healy K., 1997]. En los últimos años la tendencia es aplicar las técnicas de búsqueda metaheurı́stica. Se han desarrollado varias metodologı́as en diversos campos con este fin: Azadivar [Azadivar F. y Ahmad M., 1996] aplicó un algoritmo de optimización de caja negra para perfeccionar los niveles de inventario de productos terminados. Lutz [M, 1995] desarrolló un procedimiento que combinó la simulación con búsqueda Tabú para interactuar con problemas de manejo de inventario. Tompkins [Tompkins G y Azadivar F., 1995] propuso un acercamiento para vincular algoritmos genéticos y modelos de simulación para encontrar cercanı́as a la respuesta óptima. Morito [Morito S. y Awane H., 1993] combinó el algoritmo de recocido simulado y la simulación para minimizar la tardanza total de un sistema de manufactura. Brennan [Brennan R. y Rogers P., 1995] empleo los métodos de análisis de perturbación para resolver el problemas de perfeccionar la ejecución de una lı́nea de ensamble de un componente de electrónica industrial. Manz [Manz E. y Haddock J., 1989] uso el algoritmo de recocido simulado en conjunto con un modelo de simulación para encontrar los niveles de parámetros óptimos para hacer funcionar un sistema industrial automatizado. Las primeras aplicaciones de los Métodos de Superficies de Respuesta para la optimización de modelos de simulación se describen en Biles [Biles, W. E., 1974] en “A gradient—regression search procedure for simulation experimentation Daugherty 2 [Daugherty A. y Turnquist M. , 1980] en “Simulation Optimization Using Responses Surfaces Based on Spline Approximations”, donde proponen mejoras a los diseños experimentales para mejorar el ajuste del modelo de segundo orden. Se han presentado varios CAPÍTULO 2. MARCO TEÓRICO 8 enfoques prometedores como los descritos por Yucesan [Yucesan E. y Jacobson S., 1995], que propone mejoras al procedimiento de busqueda hacia el óptimo, y Schruben [Schruben L. y Cogliano V., 1987] quien propone implementar técnicas para identificar los factores que en una simulación tengan una influencia significativa en la salida. Usar un criterio que considera la predisposición ası́ como la variación de la variable de respuesta de simulación, al de et de Donohue. (1990) los diseños desarrollados óptimos en común segunda orden diseñan las clases incluyendo el compuesto central, Box-Behnken, y factorial completo. Por lo general, el RSM requiere un número más pequeño de experimentos de simulación relativo a muchos gradiente los métodos basados en. Se puede observar en la literatura consultada que la mayorı́a de los modelos de simulación no están desarrollados en paquetes de simulación de propósito general, sino que son aplicaciones especı́ficas. También se observa que los métodos de optimización se desarrollan para la aplicación a resolver y no para propósitos generales. El enfoque de este trabajo es novedoso en este sentido pues, por un lado, los modelos de simulación se escriben en un paquete de propósito general y, por otro lado, la metodologı́a de optimización se desarrolla para cualquier modelo de simulación. 2.2. Optimización Por optimización nos referimos al proceso de alcanzar la mejor solución de un determinado problema. La teorı́a de la optimización es matemática por naturaleza. Tı́picamente involucra la maximización o minimización de una función (a veces desconocida) que representa el desempeño de algún sistema. Esto se resuelve encontrando los valores de las variables (cuantificables y controlables) que hacen que la función alcance su mejor valor. CAPÍTULO 2. MARCO TEÓRICO 9 El problema es: Maximizar : f (x) su jeto a : hi (x) 6 0 x>0 x = {x1 , x2 , ..., xn }T Este es un problema tı́pico en la teorı́a de optimización: la maximización (o minimización) de una función real de variables reales (a veces una sola variable) sujeta a un número de restricciones (a veces este número es cero). La función f se llama función objetivo, x1 y x2 se llaman variables independientes o variables decisionales. El problema es encontrar valores reales para x1 y x2 , que satisfagan las restricciones hi , los cuales introducidos en f hagan que esta tome un valor no menor que para cualquier otro par x1 , x2 . Algunos de los problemas se pueden resolver por métodos clásicos del cálculo avanzado. Sin embargo, la mayorı́a de los problemas de optimización no satisfacen las condiciones necesarias para ser resueltos de esta manera. Muchos de los otros problemas, pese a poder ser tratados con los métodos clásicos, se resuelven eficazmente con métodos metaheurı́sticos como los algoritmos evolutivos, recocido simulado y las búsquedas heurı́sticas como Búsqueda Tabú y la Metodologı́a de Superficies de Respuesta. 2.3. Simulación Actualmente, la simulación es una poderosa técnica para la resolución de problemas. Sus orı́genes están en la teorı́a de muestreo estadı́stico y análisis de sistemas fı́sicos probabilı́sticos complejos. El aspecto común de ambos es el uso de números y muestras aleatorias para aproximar soluciones. Entre diversas definiciones simulación es “di- CAPÍTULO 2. MARCO TEÓRICO 10 señar un modelo lógico o matemático partiendo de un sistema real y experimentar sobre dicho modelo para describir, explicar y predecir el comportamiento del sistema real” [Ignacio Salinas y Jesús Moreno, 2003]. 2.3.1. Simulación de sistemas orientados a eventos discretos Hoy dı́a los campos en los que se aplica la técnica de la simulación van desde situaciones cotidianas como por ejemplo un semáforo peatonal, hasta situaciones de altos niveles cientı́ficos tales como investigaciones en bio-ingenierı́a. En el caso partı́cular del enfoque orientado a eventos discretos, la simulación se utiliza para representar acciones instantáneas en tiempos no periódicos, que pueden cambiar el estado actual del sistema en estudio. La simulación se refiere a la realización de pruebas experimentales sobre el modelo del sistema bajo estudio con el objeto de obtener resultados que permitan prever con cierta exactitud los resultados que se obtendrı́an directamente sobre el sistema real. 2.3.2. Elementos de un modelo de simulación Según Guasch (2005), los principales elementos que conforman un modelo de simulación son: Entidades: representan el conjunto de elementos que conforman el sistema tales como: personas, piezas, máquinas, transportes, entre otros. Pueden ser clasificadas en dos grupos: • Entidades permanentes: son elementos estáticos del sistema, en cuanto a que su número no se modifica a lo largo de la simulación, suelen representar los medios CAPÍTULO 2. MARCO TEÓRICO 11 utilizados para ejecutar actividades y las principales propiedades observadas en ellos son capacidad, estado, velocidades, entre otros. • Entidades temporales: son elementos que se generan y destruyen a lo largo del tiempo en que se lleva a cabo la simulación, su dinámica se resume en llegar, procesar y salir del sistema. Actividades: son las distintas acciones que tienen lugar en el sistema e involucran a las entidades tanto temporales como permanentes, por tanto están condicionados a la existencia de las mismas. Un aspecto importante en las actividades es su duración, la cual puede ser constante o un proceso estocástico y debe ser un parámetro conocido para que el simulador pueda determinar su inicio y finalización. Eventos: puede definirse como una acción instantánea que se origina en el sistema y que conlleva a un cambio en las variables de estado. Normalmente, las actividades se inician o finalizan con la aparición de un evento que ası́ lo indique. Existe clasificación para los eventos como se muestra a continuación: • Eventos condicionados: para que se activen es necesario que se cumpla una o más condiciones. • Eventos no condicionados: son los que están planificados para su ejecución y que no dependen de condiciones para su activación. • Eventos internos: ocurren por condiciones que impone el mismo sistema. • Eventos externos: ocurren por condiciones externas al modelo. 2.3.3. Estrategias de simulación Las estrategias de simulación, son las diferentes formas para seleccionar el siguiente evento que se va a llevar a cabo en atención al tiempo que marca el reloj del simulador. CAPÍTULO 2. MARCO TEÓRICO 12 Las más conocidas son: Programación de eventos Exploración de actividades Orientación a procesos Programación de eventos. Su principal caracterı́stica es que sólo se programan las ruti- nas para manejar los eventos no condicionados. la programación de ésta estrategia se basa en la creación de una lista de eventos futuros (LEF), que contiene una entrada para todos los eventos no condicionados que se deben ejecutar en el futuro. Existe un código ejecutivo que se encarga de explorar en la lista el campo del evento que posea el valor del tiempo de activación más cercano y mueve el reloj de simulación hasta el mismo. La longitud de la LEF varı́a a medida que transcurre la simulación. Interación de procesos. Esta estrategia se basa en los procesos que sufre la entidad a medida que se desplaza por el sistema. Considera como elemento fundamental a la entidad y por tanto, permite diferenciar claramente a las temporales de las permanentes. El código ejecutivo mantiene un registro de cada una de las entidades temporales, indicando en que estado se encuentra dentro del proceso. Un proceso es una secuencia de eventos, actividades y retardos. La ventaja que muestra esta estrategia es que permite la construcción de módulos de alto nivel en los cuales la interacción de procesos se maneja de forma automática por el simulador. Los estados en los cuales se puede encontrar una entidad temporal en algún instante de tiempo son: activa, demorada, detenida. Esta estrategia es la utilizada por el paquete de simulación SimPy. CAPÍTULO 2. MARCO TEÓRICO Exploración de actividades. 13 En esta estrategia se emplea un manejo de tiempo mediante incrementos fijos. Los modelos se desarrollan tomando como punto de vista las actividades que se deben ejecutar y sus respectivas condiciones. Es importante encontrar una longitud en los incrementos de tiempo adecauda para que no se pasen por alto algunas de las actividades. 2.4. Optimización de modelos de simulación La optimización de modelos de simulación según Carson [Yolanda Carson y Anu Marı́a, 1997], puede ser definida como “el proceso de encontrar los mejores valores de las variables de entrada entre todas las posibilidades sin evaluar explı́citamente cada posibilidad”. En este procedimiento el modelo de simulación es considerado como un modelo de caja negra donde la salida puede fijarse como una función ocasionada por la configuración a que se somete. Para un modelo de simulación, un algoritmo de optimización trabaja como sigue: 1. Un conjunto inicial de los valores de parámetros de entrada es escogido y una o más replicas de experimentos se llevan a cabo con estos valores 2. Los resultados son analizados mediante el algoritmo de optimización. 3. Son establecidos nuevos valores de los parámetros y un conjunto de experimentos son llevados a cabo. 4. Los pasos 2) y 3) se repiten hasta que el algoritmo es cerrado manualmente o se cumplen un conjunto de condiciones. Por lo general este enfoque es usado en aquellos problemas donde no es posible encontrar estructuras matemáticas tratables, como podemos apreciar en la Figura 2.1 es usar CAPÍTULO 2. MARCO TEÓRICO 14 MODELO SALIDA ENTRADA ESTRATEGIA DE DE OPTIMIZACION SIMULACION Figura 2.1: Enfoque Optimización de Modelos de Simulación METODOS DE OPTIMIZACION PARA SIMULACION METODOS DE BUSQUEDA BASADOS EN GRADIENTE ESTIMACION POR DIFERENCIAS ANALISIS DE PERTURBACION FINITAS OPTIMIZACION ESTOCASTICA EXPERIMENTOS DE FRECUENCIAS DE DOMINIO METODOLOGIA DE METODOS METODOS SUPERFICIES DE RESPUESTA HEURISTICOS ESTADISTICOS ALGORITMOS ESTRATEGIAS BUSQUEDA GENETICOS EVOLUTIVAS TABU CLASIFICACION Y COMPARACION MULTIPLE SELECCION Figura 2.2: Métodos de optimización una estrategia de optimización para organizar una secuencia de configuraciones del modelo de simulación a fin de que eventualmente pueda obtenerse una configuración del sistema óptimo o cercano al óptimo. La optimización de modelos de simulación es un área que ha atraı́do la atención de muchos investigadores. Las cinco principales categorı́as de métodos de optimización de simulación son mostradas en la Figura 2.2. 2.5. Python Python es un lenguaje de programación multiparadigma. Esto significa que más que forzar a los programadores a adoptar un estilo particular de programación, permite varios estilos: Programación orientada a objetos, programación estructurada, programación funcional y programación orientada a aspectos. Otros muchos paradigmas más están soportados mediante el uso de extensiones. CAPÍTULO 2. MARCO TEÓRICO 15 2.6. SimPy SimPy es un entorno de simulación creado por Klaus G. Müller [Müller, 2005],quien lo define como “un paquete de simulación por eventos discretos, orientado a objetos, basado en procesos, escrito y llamado desde el lenguaje de programación Python que se encuentra dentro de la lı́nea de desarrollo de software libre”. SimPy hace uso de los generadores de funciones de Python. Es por ello que es importante que la persona interesada en manejar este entorno debe previamente, chequear el funcionamiento de éste lenguaje. En este sentido SimPy aprovecha la capacidad de estos generadores, lo que permite al usuario especificar que una función haga enlace con la lista de eventos, ejecute el evento, actualice el reloj de simulación y finalmente esta misma función es nuevamente reinsertada en el último punto de salida, esto dicho de otra manera, permite alternar con la ejecución de otras funciones que conforman el mismo sistema modelado. El mecanismo de simulación de SimPy se resume en la figura 2.3. 2.6.1. Clases de SimPy SimPy maneja fundamentalmente tres tipos de objetos: procesos, recursos y monitores, mediante la creación de clases con las cuales representa el flujo de entidades, y registra y analiza la historia de variables a medida que lasimulación avanza. Clase Proceso (Process()): permite modelar una entidad ligada a una actividad y que a su vez evoluciona a través del tiempo, dando lugar a diferentes cambios en el sistema. Para que un modelo de SimPy pueda ser simulado, se requiere un mı́nimo de un objeto Process y éste a su vez requiere al menos un método de ejecución que describa la acción del mismo. Por ejemplo: class Customer(Process): # ‘‘objeto de la clase proceso’’ def visit(self,timeInBank): CAPÍTULO 2. MARCO TEÓRICO 16 COMIENZO DE LA SIMULACION FIJAR EL TIEMPO DE LA SIMULACION A CERO initialize() (1) DETERMINE EL PROXIMO SEGMENTO EJECUTABLE DEL MODELO simulate(until=endtime) (2) ACTUALIZAR EL RELOJ (3) PASA EL CONTROL AL SEGMENTO ESCOJIDO SEGMENTO DE CODIGO (1) SEGMENTO DE CODIGO (2) .... SEGMENTO DE CODIGO (N) def drive(self) speed=50 yiled hold, self, 25 def drive(self) speed=50 yiled hold, self, 25 Figura 2.3: Mecanismo de simulación de SimPy #‘‘Metodo de ejecucion’’ print "%7.4f %s: Here I am"%(now(),self.name) yield hold,self,timeInBank #‘‘uso de geneador de python’’ print "%7.4f %s: I must leave"%(now(),self.name) Clase Recurso (Resource()): permite modelar un conjunto de entidades fijas que se utilizan para los procesos, por ejemplo: cajeros, máquinas, entre otros. Poseen la capacidad de modelar colas, e indicar a las entidades si su estado es ocupado o no. Le son modificados atributos para el manejo de capacidad y la forma de selección de las entidades (FIFO, prioridad, etc.). Por ejemplo: R=Resource(capacity=1,name="xxxx") Clase Monitor (Monitor()): permite controlar la historia de las variables de estado y permite recopilar estadı́sitcas tales como media, varianza, totales, entre otros. Ademas proporciona herramientas para costruir histogramas. Ejemplo: X=Monitor() CAPÍTULO 2. MARCO TEÓRICO 17 X.observe() X.mean() X.var() 2.7. Métodos de superficies de respuesta Los Métodos de Superficie de Respuesta tal como lo refiere Box y Hunter (1957), Myers (1971) son un conjunto de técnicas utilizadas en el estudio de la relación entre una o más respuestas y un conjunto de factores o variables independientes y donde el objetivo es optimizar ésta(s) respuesta(s). Dicha metodologı́a se realiza mediante una experimentación secuencial, esto es, la aproximación a la región de interés se realiza de forma iterativa utilizando diseños cada vez más complejos que dependen de la información que se obtiene en cada etapa. Esta metodologı́a esta basada en la aproximación de la función objetivo por un polinomio de bajo orden en una sub región pequeña. Los coeficientes son estimados por regresión lineal aplicado a un número de observaciones de la función objetivo estocástica. Para lograrlo la función objetivo se evalúa en un arreglo de puntos y de acuerdo con el polinomio ajustado, se deriva el mejor punto local, el cual es usado como el estimador actual del polinomio y como el punto central de la nueva región de interés, donde de nuevo la función objetivo estocástica es aproximada por un polinomio de bajo orden. En Box y Wilson (1951), se discuten las ideas originales de la MSR, y ha ido extendiéndose principalmente a través de Box, Wilson, Hunter, Draper y otros, y que han sido muy bien resumidas en Myers (1971). Estos autores también discuten los diseños experimentales, con el fin de encontrar, usando el menor número posible de tratamientos, el punto en el cual se obtiene la máxima respuesta. Se refieren también en el uso del Método del Ascenso más pronunciado en la búsqueda de la región estacionaria alrededor del CAPÍTULO 2. MARCO TEÓRICO 18 óptimo. En el próximo capı́tulo se hablará en detalle de las bases teoricas de los Métodos de Superficie de Respuesta. Capı́tulo 3 Métodos de Superficies de Respuesta En este capı́tulo hablaremos de los Métodos de Superficies de Respuesta, su representación gráfica, el procedimiento a seguir hasta encontrar un óptimo y los diseños experimentales que pueden utilizar. Para el desarrollo del capı́tulo fueron de gran utilidad Khuri [Andre Khuri y John Cornell, 1996] y Montgomery [Montgomery, 2005], de los cuales se tomó la teorı́a y fórmulas que se presentan a continuación. 3.1. Introducción Los Métodos de Superficies de Respuesta, son un conjunto de procesos estadı́sticos y matemáticos, útiles en el modelado y el análisis de problemas en los que una respuesta de interés recibe la influencia de diversas variables predictoras y donde el objetivo es optimizar esta respuesta. Los MSR, se utilizan cuando las relaciones entre las variables, no son completamente entendidas como para representarlas a través de un modelo matemático exacto, si no 19 CAPÍTULO 3. MÉTODOS DE SUPERFICIES DE RESPUESTA 20 que es necesario construir un modelo empı́rico para aproximar su comportamiento. Para aproximar este comportamiento, los MSR utiliza diseños experimentales para modelar una superficie sobre una subregión de las variables predictoras para la cual la variable respuesta presenta un óptimo. Esta subregión es alcanzada a través del ajuste de un modelo polinomial de primer orden, ajustado por Mı́nimos Cuadrados y la aplicación iterativa del método del ascenso más pronunciado, hasta el hecho de que se presente falta de ajuste del modelo de primer orden en esa subregión, lo que es determinado cuando los efectos cuadráticos puros son significantes, al presentarse este hecho ajustamos un modelo polinomial completo de segundo orden al cual se procede a la localización del punto estacionario que luego de su análisis se determina si éste representa un punto de respuesta máxima, mı́nima o punto de silla. Esto lo podemos observar en la Figura 3.1 1. INICIO 2. AJUSTE A UN MODELO DE PRIMER ORDEN 5. APLICAR EL METODO DE ASCENSO ACELERADO 3. DETERMINAR LA ADECUACION DEL MODELO 4. RESOLVER INADECUACION 6. AJUSTE A UN MODELO DE SEGUNDO ORDEN 7. DETERMINAR LA ADECUACION DEL MODELO 8. RESOLVER INADECUACION 9. REALIZAR EL ANALISIS CANONICO 10. ACEPTAR PUNTO Figura 3.1: Algoritmo MSR CAPÍTULO 3. MÉTODOS DE SUPERFICIES DE RESPUESTA 21 3.2. Terminologı́a A continuación se presenta la terminologı́a que se utilizará a lo largo del trabajo. 3.2.1. Variables predictoras Son las condiciones del proceso o las variables de entrada ξ1 , ξ2 , ..., ξn , las cuales producen posibles efectos sobre la variable de respuesta y está sujeta al control del investigador. 3.2.2. Codificación de las variables predictoras Dado que las variables predictoras ξ1 , ξ2 , ..., ξn , tienen diferentes unidades y/o rangos en el conjunto de datos experimental, un modelo aproximado no se deberı́a realizar en crudo. En lugar de esto, se debe normalizar las variables antes de realizar la aproximación. A las variables normalizadas se les llama variables codificadas. Una variable codificada debe ser definida para cada una de las variables actuales, es decir, x1 se define para la variable ξ1 , x2 se define para ξ2 , y asi con cada una de las variables, cada una se fuerza a un rango de -1 hasta 1, de modo que todos afecten la respuesta de forma uniforme, y a su vez las unidades de los parámetros sean irrelevantes. Para convertir la variable natural ξi a su variable codificada xi , se aplica la siguiente formula: xi = ξi − [max(ξi ) + min(ξi )]/2 [max(ξi ) + min(ξi )]/2 (3.1) CAPÍTULO 3. MÉTODOS DE SUPERFICIES DE RESPUESTA 22 y de igual forma pasar de variable codificada xi a la variable natural ξi , se aplica: ξi = xi ∗ [max(ξi ) + min(ξi )]/2 + ξ̄io (3.2) 3.2.3. Variable respuesta Es una cantidad medible normalmente en una escala contı́nua, cuyo valor se ve afectado al cambiar los niveles de las variables predictoras. El interés principal es optimizar dicho valor. 3.2.4. Función de respuesta Al decir que un valor de respuesta Y depende de los niveles x1 , x2 , ..., xn de n variables predictoras, ξ1 , ξ2 , ..., ξn , estamos diciendo que existe una función matemática de x1 , x2 , ..., xn cuyo valor para una combinación dada de los niveles de las variables predictoras corresponde a Y, esto es Y = f (x1 , x2 , ..., xn ). 3.2.5. Predicción función de respuesta La función de respuesta se puede representar con una ecuación polinomial. El éxito en una investigación de una superficie de respuesta depende de que la respuesta se pueda ajustar a un polinomio de primer o segundo grado. Supongamos que la función de respuesta para los niveles de dos factores se puede expresar utilizando un polinomio de primer grado: Y = β0 + β1 x1 + β2 x2 + ... + βn xn donde β0 , β1 , β2 son los coeficientes de regresión a estimar, x1 , x2 representan los niveles de ξ1 y ξ2 respectivamente. Suponiendo que se recolectan N > 3 valores de respuesta Y, CAPÍTULO 3. MÉTODOS DE SUPERFICIES DE RESPUESTA 23 con los estimadores b0 , b1 y b2 se obtienen β0 , β1 y β2 respectivamente. Al remplazar los coeficientes de regresión por sus estimadores obtenemos: Ŷ = b0 + b1 x1 + b2 x2 + ... + bn xn donde Ŷ denota el valor estimado de Y dado por x1 , x2 , . . .,xn . 3.2.6. Superficie de respuesta La relación Y = f (x1 , x2 , ..., xn ) entre Y y los niveles de las n variables regresoras ξ1 , ξ2 , ..., ξn representa una superficie. Con n variables regresoras la superficie está en n + 1 dimensiones. Por ejemplo cuando se tiene Y = f (x1 ) la superficie está en dos dimensiones como se muestra en la figura 3.2 mientras que si tenemos Y = f (x1 , x2 ) la superficie está en tres dimensiones, esto se observa en la figura 3.3. Figura 3.2: Superficie de respuesta en dos dimensiones 3.2.7. Región experimental La región experimental especifica la región de valores para los niveles de los factores. Esto se puede hacer empleando los niveles actuales de operación para cada factor; si se CAPÍTULO 3. MÉTODOS DE SUPERFICIES DE RESPUESTA 24 Figura 3.3: Superficie de respuesta en tres dimensiones desea explorar el vecindario se incrementa y decrementa el valor del nivel en una cantidad determinada. 3.3. Modelo de primer orden Debido a que se desconoce la relación entre la respuesta y las variables predictoras, se requeriere un modelo que aproxime la relación funcional Y = f (x1 , x2 , ..., xn ). Este modelo provee las bases para un nuevo experimento que nos lleva hacia un nuevo modelo y el ciclo se repite. Si la respuesta se describe adecuadamente por una función lineal de las variables independientes se utiliza el modelo de primer orden: Y = β0 + n X βi xi + (3.3) i=1 Los parámetros del modelo se estiman mediante el método de mı́nimos cuadrados. Una vez que se tienen los estimadores se sustituyen en la ecuación y obtenemos el modelo ajustado: Ŷ = b0 + n X i=1 bi xi (3.4) CAPÍTULO 3. MÉTODOS DE SUPERFICIES DE RESPUESTA 25 3.4. Estimación por mı́nimos cuadrados Un procedimiento para estimar los párametros de cualquier modelo lineal es el método de los mı́nimos cuadrados, que se ilustra sencillamente aplicándolo para ajustar una lı́nea recta a través de un conjunto de puntos que representan los datos. Una manera conveniente de lograr esto, es minimizando la suma de los cuadrados de las desviaciones verticales de la recta ajustada. Por tanto sı́ ŷi = β̂0 + β̂0 xi es el valor que se predice del i-ésimo valor de y (cuando x = xi ), entonces la desviación del valor observado de y a partir de la recta ŷ (llamada el error) es yi − ŷi y la suma de los cuadrados de las desviaciones (tambien llamada suma de los cuadrados de los errores) que deben minimizarse es S CE = n X (yi − ŷi )2 i=1 Una manera conveniente de manejar las ecuaciones lineales es mediante matrices. Supóngase que el valor predicho de la función de respuesta yi es: ŷi = b0 + b1 x1i + b2 x2i + ... + bn x1n Por tanto las k ecuaciones que representan las yi como función de las x y las b se pueden escribir simultáneamente como Y = Xb Se puede demostrar que: b = (X T X)−1 X T Y donde X es una matriz i × n + 1, Y es un vector i × 1, y b es un vector n + 1 × 1. (3.5) CAPÍTULO 3. MÉTODOS DE SUPERFICIES DE RESPUESTA 26 3.5. Prueba de significancia del modelo El análisis de los datos de las corridas se presenta en una tabla de análisis de varianza. La tabla presenta las diferentes fuentes de variación que contribuyen a la variación total de los datos. La variación total recibe el nombre de suma de cuadrados total SCT, se calcula de la siguiente manera: S CT = N X (Yu − Ȳ)2 u=1 donde Yu es el valor observado en la u-ésima corrida. La suma de cuadrados se compone por la suma de cuadrados debido a la regresión y la suma de cuadrados no tomada en cuenta por el modelo ajustado. La fórmula de la suma de cuadrados debido a la regresión es: S CR = N X (ŶXu − Ȳ)2 u=1 La suma de cuadrados residual, que corresponde a la no tomada en cuenta, se calcula de la siguiente forma: S CE = N X (Yu − ȲXu )2 u=1 Estas formulas SCT, SCR y SCE se pueden resolver en notacion matricial como: (1T Y)2 N (1T Y)2 S CR = bT X T Y − N T T T S CE = Y Y − b X Y S CT = Y T Y − (3.6) (3.7) (3.8) La prueba de significancia de la ecuación de regresión ajustada tiene la siguiente hipótesis nula H0 : Todas las β s (excluyendo β0 ) son cero contra la alternativa Ha : Al menos una CAPÍTULO 3. MÉTODOS DE SUPERFICIES DE RESPUESTA 27 Tabla 3.1: Analisis de Varianza Fuente Grados de libertad Regresión n Residuo N-n-1 Total N-1 Suma de Cuadrados SCR SCE SCT Fo (SCR/n)/(SCE/N-n-1) de las β s (excluyendo β0 ) es diferente de cero. La prueba de hipotesis supone que el error se comporta normalmente, en ésta se utiliza el estadı́stico de prueba F, el cuál se calcula: F= S CR/(p − 1) S CE/(N − p) (3.9) Este se compara con una F p−1,N−p , si F calculada excede este valor la hipótesis nula se rechaza con un nivel de confianza de α. Esto significa que la variación explicada por el modelo es significativamente mayor que la variación inexplicable. Además de esta prueba se hace un análisis del ajuste del modelo con el coeficiente de determinación R2 , que es la proporción total de la variación de las Yu con respecto a la media que se puede explicar con la ecuación de regresión ajustada. Esta se calcula de la siguiente manera: R2 = R2a = 1 − S CR S CT (n − 1)S CE (n − p)S CT (3.10) (3.11) 3.6. Prueba de falta de ajuste La falta de ajuste se presenta por la no planaridad o la curvatura de la superficie de respuesta, ésta no se detecta debido a la exclusión de los términos cuadráticos o de los términos de producto cruzado que se refieren al efecto de la interacción entre los factores. CAPÍTULO 3. MÉTODOS DE SUPERFICIES DE RESPUESTA 28 La prueba de falta de ajuste requiere que el diseño del experimento satisfaga: 1. El número de los distintos puntos del diseño k, debe exceder el número de términos en el modelo ajustado, es decir k > n + 1 2. Al menos dos réplicas deben recolectarse en uno o más puntos del diseño para estimar la varianza del error. Al cumplirse las estas condiciones la suma de cuadrados residual se compone de dos fuentes de variación. La primera es la falta de ajuste del modelo (debido a la exclusión de términos de mayor orden) y la segunda es la variación del error puro. Para calcularlas se necesita la suma de los cuadrados, obtenida de las réplicas que recibe el nombre de error puro de la suma de cuadrados y sustraer de la suma de cuadrados residual éste para obtener la suma de cuadrados de la falta de ajuste. Es decir: S CErrorPuro = n X rl X (Ylu − Ȳl )2 l=1 u=1 donde Ylu es la u-ésima observación del l-ésimo punto del diseño. u = 1, 2, ..., r1 l = 1, 2, ..., n Yl es el promedio de las rl observaciones del l-ésimo punto del diseño. S CFaltadeA juste = S CE − S CErrorPuro La prueba de adecuación del modelo ajustado es: F= S S FaltadeA juste/(n − p) S S ErrorPuro/(N − n) La hipótesis de suficiencia de ajuste con un nivel α de significancia se rechaza cuando el valor calculado del estadı́stico es mayor a F(n−p,N−n,α) . Cuando la hipótesis de suficiencia CAPÍTULO 3. MÉTODOS DE SUPERFICIES DE RESPUESTA 29 de ajuste se rechaza, se debe de elevar el grado del modelo. Si no se rechaza la hipótesis podemos inferir que la superficie es plana. Una vez que se tiene la ecuación y se ha probado el ajuste se buscan niveles que mejoren los valores de respuesta. 3.7. Método de máxima pendiente en ascenso Frecuentemente la estimación inicial de las condiciones de operación óptimas están alejadas del óptimo real, en este caso se desea mover rápidamente a la vecindad del óptimo. El método de máxima pendiente en ascenso es un procedimiento para recorrer secuencialmente la trayectoria de la máxima pendiente, que nos lleva en dirección del máximo aumento de la respuesta. De acuerdo a Montgomery [Montgomery, 2005], la dirección de ascenso máximo es en la que ŷ aumenta más rápido. Esta dirección es paralela a la normal de la superficie de respuesta ajustada. Por lo general se toma como trayectoria a la recta que pasa por el centro de la región de interés. Por lo tanto, los incrementos a lo largo de la trayectoria son proporcionales a los coeficientes de regresión β0 , β1 , β2 , ... Se conducen experimentos sobre la trayectoria hasta que deje de observarse un incremento en la respuesta, entonces se ajusta un nuevo modelo de primer orden con el que se determina una nueva trayectoria y se continua con el procedimiento. Finalmente, se consigue llegar a la cercanı́a del óptimo. CAPÍTULO 3. MÉTODOS DE SUPERFICIES DE RESPUESTA 30 3.7.1. Algoritmo para determinar las coordenadas de un punto en la trayectoria de máxima pendiente en ascenso Un algoritmo propuesto por [Montgomery, 2005] es el siguiente: Supóngase que el punto x1 = x2 = ... = xn = 0 1. Se elige un tamaño de incremento o “escalón” en una de las variables del proceso, digamos ∆x j , usualmente se elige la variable de la que más se sabe, o la que tiene el mayor coeficiente de regresión absoluto |b j | 2. El tamaño de incremento en las otras variables es ∆x j = bi b j /∆x j donde i = 1, 2, 3...n i , j 3. Se convierte ∆xi de variables codificadas a variables naturales. 3.7.2. Método de máxima pendiente en ascenso sujeto a una restricción lineal Como se describe en Myers [Myers Raymond y Douglas Montgomery, 1995] durante la búsqueda de mejores resultados existe la probabilidad de que el punto obtenido esté en un área del espacio donde una o más de las variables no estén en el rango permitido por el problema. Entonces se hace necesario cambiar la dirección de máxima pendiente en ascenso (de ahora en adelante MPA) con una restricción impuesta a las variables de diseño. Suponga que la restrición es vista como una forma de lı́mite. Entonces se habla de un problema limitado por: c0 + c1 x1 + c2 x2 + ... + cn xn CAPÍTULO 3. MÉTODOS DE SUPERFICIES DE RESPUESTA 31 Este lı́mite no necesariamente involucra a todas las variables. Se debe tener en cuenta que, en la práctica las restricciones deben ser formuladas en términos de las variables naturales y luego escritas en forma de variables codificadas para su manipulación. x2 c0+c1x1+c2x2=0 O Trayectoria MPA modificada Trayectoria MPA x1 Figura 3.4: Comportamiento MPA sujeto a una restricción La figura 3.4 muestra el procedimiento de MPA necesario cuando se va aplicar una restricción lineal para un problema con dos variables. El procedimiento es el siguiente: 1. Se realiza el movimiento a través de la dirección usual de MPA hasta que se hace contacto con la restricción (o plano en el caso de n > 2). Se llama a este punto O. 2. Comenzando en el punto O, se debe mover a través de la trayectoria ajustada o modificada. 3. Se toman experimentos a lo largo de la trayectoria modificada, con los criterios de parada usuales. CAPÍTULO 3. MÉTODOS DE SUPERFICIES DE RESPUESTA 32 3.8. Modelo de segundo orden El modelo de segundo orden es el siguiente: Y = β0 + n X βi xi + i=1 n X βii xi2 + n X n X i i=1 βi j xi x j + j Los parámetros del modelo se estiman mediante el método de mı́nimos cuadrados. Una vez que se tienen los estimadores se sustituyen en la ecuación y obtenemos el modelo ajustado en el vecindario del valor óptimo de la respuesta: Y = b0 + k X i=1 bi xi + k X i=1 bii xi2 + n X n X i bi j xi x j + j La significancia de los coeficientes estimados se prueban con el estadı́stico F y el ajuste del modelo a través del coeficiente de determinación Ra . Una vez que se ha verificado que el modelo tiene suficiencia de ajuste y que los coeficientes son significativos, se procede a localizar las coordenadas del “punto estacionario” y se lleva a cabo un análisis más detallado del sistema de respuesta. 3.9. Localización del punto estacionario Suponiendo que se desea maximizar la respuesta, el máximo (si es que existe), de acuerdo a Montgomery [Montgomery, 2005], será el conjunto x1 , x2 , ..., xn tal que las derivadas parciales ∂ŷ ∂ŷ ∂ŷ = = ... = =0 ∂x1 ∂x2 ∂xn Dicho punto (x1,0 , x2,0 , ..., xk,0 ) se denomina punto estacionario. El punto estacionario puede ser: CAPÍTULO 3. MÉTODOS DE SUPERFICIES DE RESPUESTA 33 1. Un punto de respuesta máxima 2. Un punto de respuesta mı́nima 3. Un punto silla. Podemos obtener el punto estacionario usando la notación matricial para el modelo de segundo orden: Y = β0 + xT b + xt Bx (3.12) donde x = x1 x2 .. . xn b = β̂1 β̂2 .. . β̂n y β̂11 β̂12 /2 β̂21 /2 β̂22 B = . .. ··· β̂n1 /2 β̂n2 /2 · · · β̂1n /2 · · · β̂2n /2 .. ... . · · · β̂nn En otras palabras, b es el vector (n x 1) de coeficientes de regresión de primer orden, y B es una matriz simétrica (n x n) cuya diagonal principal está formada por los coeficientes de los términos cuadráticos puros β̂i j , mientras que los elementos fuera de ésta corresponden a 1/2 del valor de los coeficientes cuadráticos mixtos β̂i j , i , j. La derivada de Y con respecto al vector x igualada a cero es: ∂Ŷ = b + 2Bx = 0 ∂x El punto estacionario es la solución de la ecuación es decir: 1 x s = − B−1 b 2 (3.13) Sustituyendo ésta en la ecuación en la (3.12) , la respuesta predicha en el punto estacionario puede encontrarse como: 1 Yˆs = βˆ0 + x s b 2 (3.14) CAPÍTULO 3. MÉTODOS DE SUPERFICIES DE RESPUESTA 34 3.10. Caracterización de la superficie de respuesta Habiendo encontrado el punto estacionario es necesario caracterizar la superficie de respuesta, es decir determinar si se trata de un punto de respuesta máximo, mı́nimo o silla. La forma directa de hacer esto es mediante la gráfica de contornos del modelo ajustado, sin embargo es útil un análisis más formal. Como una alternativa se puede expresar la forma de la superficie de respuesta usando un nuevo conjunto de variables: W1, W2,..., Wk cuyos ejes representan los ejes principales de la superficie de respuesta, los cuales se interceptan en el punto estacionario. Esto da por resultado el modelo ajustado: Ŷ = Yˆ0 + λ1 W12 + λ2 W22 + ... + λn Wn2 donde las Wi son variables independientes transformadas y las λi son constantes. Esta ecuación es llamada forma canónica. Las λi son los valores propios (también conocidos como raı́ces caracterı́sticas, autovalores o eigenvalores) y se toman de la matriz B. La naturaleza de la superficie de respuesta puede determinarse a partir del punto estacionario y de el signo y magnitud de las λi . Si todas las λi son positivas, entonces es un punto de respuesta mı́nima, si todas las λi son negativas, entonces es un punto de respuesta máxima; y si las λi tienen signos distintos entonces es un punto de respuesta silla. CAPÍTULO 3. MÉTODOS DE SUPERFICIES DE RESPUESTA 35 3.11. Diseños experimentales para ajustar superficies de respuesta El ajuste y análisis de una superficie de respuesta se facilita con la elección apropiada de un diseño experimental. Un diseño es el conjunto especı́fico de combinaciones de los niveles de las n variables que se utilizará al llevar a cabo el experimento. 3.11.1. Diseños para ajustar modelos de primer orden Una clase única de diseños que minimizan la varianza de los coeficientes de regresión βi son los diseños ortogonales de primer orden. Por ortogonal se entiende que los elementos fuera de la diagonal de la matriz (X T X) son iguales a cero, lo cual implica que los productos cruzados de las columnas de la matriz X son iguales a cero. En esta clase de diseños ortogonales de primer orden se incluyen: 1. Diseños factoriales 2k 2. Fracciones de la serie 2k 3. Diseños simplex 4. Diseños Placket-Burman 3.11.2. Diseños para ajustar modelos de segundo orden Un diseño experimental para ajustar un modelo de segundo orden debe tener al menos tres niveles de cada factor (-1, 0, +1). Ası́ como en el diseño de primer orden se desea la CAPÍTULO 3. MÉTODOS DE SUPERFICIES DE RESPUESTA 36 ortogonalidad, en éste se desea que sea un diseño rotable. Se dice que un diseño es rotable cuando la varianza de la respuesta predicha en algún punto es función sólo de la distancia del punto al centro y no es una función de la dirección. La rotabilidad es una propiedad importante, dado que la finalidad de la Metodologı́a de Superficies de Respuesta es optimizar y desconocemos la localización del óptimo, tiene sentido utilizar un diseño que proporcione estimaciones precisas en todas direcciones. Dentro de los diseños rotables de segundo orden se incluyen: 1. Diseño central compuesto 2. Diseño equirradial 3. Diseños Box-Behnken 3.12. Ejemplo de aplicacion Ilustraremos la MSR mediante un ejemplo. La la función y = −x14 − x22 la cual se desea maximizar. La condición inicial de operación en variables naturales x1 = 5 y x2 = 5. Se selecciona una región de exploración ±0,5 unidades. Para simplificar los cálculos las variables independientes se codifican en un intervalo (-1,1). Las variables codificadas son: x1 = ξ1 −5/0,5 y x2 = ξ2 − 5/0,5 donde ξ1 , ξ2 son las variables naturales. En la Tabla 3.2 se muestran los datos, se utiliza un diseño factorial 22 aumentado en cinco puntos centrales. Las observaciones centrales sirven para estimar el error experimental y permiten probar la adecuación del modelo de primer orden. CAPÍTULO 3. MÉTODOS DE SUPERFICIES DE RESPUESTA 37 Tabla 3.2: Datos del proceso para ajustar a un modelo de primer orden Variables naturales Variables Codificadas Respuesta ξ1 ξ2 x1 x2 Y 5 5 0 0 -650 5 5 0 0 -650 5 5 0 0 -650 5 5 0 0 -650 5 5 0 0 -650 5.5 5.5 1 1 945,3125 5.5 4.5 1 -1 935,3125 4.5 5.5 -1 1 440,3125 4.5 4.5 -1 -1 430,3125 Tabla 3.3: Analisis de Varianza para el modelo de primer orden Fuente Grados de libertad Suma de Cuadrados Media de Cuadrados Regresión 2 255125 127562.5 Residuo 6 3177.300 529.550 Total 8 258302.300 Ra 0.9853 F 244.888 Con el método de mı́nimos cuadrados se obtiene: Y = −666,80 − 252,5x1 − 5x2 En la Tabla 3.3 se muestra el análisis de varianza, donde se observa que la F de regresión global es significativa al 1 % y el coeficiente de determinación Ra indica que el modelo explica gran proporción de los datos. El modelo indica que hay que desplazarse 252.5 unidades en dirección de x1 por cada 5 unidades en dirección de x2 . Sabemos que la trayectoria pasa por el punto (x1 = 0, x2 = 0) y tiene pendiente 5/252.5. En el ejemplo se decide usar 0.5 unidades como incremento lo que es equivalente a la variable codificada M x1 = 1. Los incrementos a lo largo de la trayectoria son: M x1 = −1 y M x2 = −5/252,5 = −0, 0198 CAPÍTULO 3. MÉTODOS DE SUPERFICIES DE RESPUESTA Tabla 3.4: Experimento de máximo ascenso Variables naturales Variables Codificadas ξ1 ξ2 x1 x2 Origen 5.0 5.0 0 0 Origen+ M 4.5 4.99009 -1.00 -0.0198 Origen + 2 M 4.0 4.98019 -2.00 -0,0396 Origen + 3 M 3.5 4.97029 -3.00 -0,0594 Origen + 4 M 3.0 4.96039 -4.00 -0,0792 Origen + 5 M 2.5 4.95049 -5.00 -0,0990 Origen + 6 M 2.0 4.94059 -6.00 -0,1188 Origen + 7 M 1.5 4.93069 -7.00 -0,1386 Origen + 8 M 1.0 4.92079 -8.00 -0,1584 Origen + 9 M 0.5 4.91089 -9.00 -0,1782 Origen + 10 M 0.0 4.90099 -10.00 -0,1980 Origen + 11 M -0.5 4.89108 -11.00 -0,2178 Origen + 12 M -1.0 4.88118 -12.00 -0,2376 Origen + 13 M -1.5 4.87128 -13.00 -0,2574 Origen + 14 M -2.0 4.86138 -14.00 -0,2772 Incrementos 38 Respuesta Y -650.0 -434.9635 -280.8023 -174.7663 -105.6055 -63.5699 -40.4094 -29.3742 -25.2141 -24.1793 -24.0197 -23.9852 -24.8259 -28.7919 -39.6330 Se calculan puntos a lo largo de esta trayectoria y se observa el rendimiento en cada punto hasta notar un decremento en la respuesta. Los resultados aparecen en la Tabla 3.4 Los incrementos se muestran tanto para las variables codificadas como para las naturales, esto es porque las codificadas son más fáciles de manejar matemáticamente y las naturales son las que utilizamos para llevar a cabo la experimentación. Se observa un aumento en la respuesta hasta el undécimo incremento, a partir del duodécimo se produce un decremento en el rendimiento. Por lo tanto se debe ajustar otro modelo de primer orden en la cercanı́a del punto (ξ1 = −0,5, ξ2 = 4,8911). Se ajusta un nuevo modelo de primer orden alrededor del punto (ξ1 = −0,5, ξ2 = 4,8911). Se mantiene la región de exploración ±0,5 unidades. Por lo tanto las el variables codificadas son: x1 = (ξ1 − 0,5)/0,5 y x2 = (ξ2 − 4,8910)/0,5 Nuevamente se utiliza un diseño 22 con cinco puntos centrales. Los datos se muestran CAPÍTULO 3. MÉTODOS DE SUPERFICIES DE RESPUESTA 39 Tabla 3.5: Datos del proceso para ajustar a un modelo de primer orden Variables naturales Variables Codificadas Respuesta ξ1 ξ2 x1 x2 Y -0,5 4,8910 0 0 -23,9843 -0,5 4,8910 0 0 -23,9843 -0,5 4,8910 0 0 -23,9843 -0,5 4,8910 0 0 -23,9843 -0,5 4,8910 0 0 -23,9843 0,0 5.3910 1 1 -29,0628 0,0 4.3910 1 -1 -19,2808 -1,0 5.3910 -1 1 -30,0628 -1,0 4.3910 -1 -1 -20,2808 Tabla 3.6: Analisis de Varianza para el modelo de primer orden Fuente Grados de libertad Suma de Cuadrados Media de Cuadrados Regresión 2 96,69101 48.3455 Residuo 6 1,0503 0,1750 Total 8 97,7413 Ra 0.9725 F 276,168 en la tabla 3.5 Con el método de mı́nimos cuadrados se obtiene: Y = −24, 2908 + 0,5x1 − 4, 8910x2 En la Tabla 3.6 se muestra el análisis de varianza, donde se observa que la F de regresión global es significativa al 1 % y el coeficiente de determinación Ra indica que el modelo explica gran proporción de los datos. El modelo indica que hay que desplazarse 0.5 unidades en dirección de x1 por cada 4.8910 unidades en dirección de x2 . Por tanto el incremento es equivalente a la variable codificada M x1 = 0,5/4,8910 = −0,1022. y M x2 = −1,0. Se calculan puntos a lo largo de esta trayectoria y observa el rendimiento en cada punto hasta notar un decremento en la CAPÍTULO 3. MÉTODOS DE SUPERFICIES DE RESPUESTA Tabla 3.7: Experimento de máximo ascenso Variables naturales Variables Codificadas ξ1 ξ2 x1 x2 Origen -0.5 4.8910 0 0 Origen+ M -0.4488 4.3910 -0.1022 -1.0 Origen + 2 M -0.3977 3.8910 -0.2044 -2.0 Origen + 3 M -0.3466 3.3910 -0.3066 -3.0 Origen + 4 M -0.2955 2.8910 -0.4088 -4.0 Origen + 5 M -0.2444 2.3910 -0.5110 -5.0 Origen + 6 M -0.1933 1.8910 -0.6132 -6.0 Origen + 7 M -0.1422 1.3910 -0.7154 -7.0 Origen + 8 M -0.0910 0.8910 -0.8176 -8.0 Origen + 9 M -0.0399 0.3910 -0.9198 -9.0 Origen + 10 M -0.0113 -0.1090 -1.0220 -10.0 Origen + 11 M -0.0622 -0.6090 -1.1242 -11.0 Origen + 12 M -0.1133 -1.1090 -1.2264 -12.0 Origen + 13 M -0.1644 -1.6090 -1.3286 -13.0 Incrementos 40 Respuesta Y -23,9843 -19.3222 -15.1656 -11.5139 -8.3660 -5.72087 -3.5776 -1.9355 -0.7941 -0.1529 -0.0118 -0.3707 -1.2298 -2.5893 respuesta. Los resultados aparecen en la Tabla 3.7. Se observa un aumento en la respuesta hasta el décimo incremento, a partir del unodécimo se produce un decremento en el rendimiento. Por lo tanto se debe ajustar otro modelo de primer orden en la cercanı́a del punto (ξ1 = −0,0113, ξ2 = −0,1090). Nuevamente se utiliza un diseño 22 con cinco puntos centrales. Lo podemos observar en la tabla 3.8 El modelo de primer orden ajustado es: Y = −0, 0413 + −0,00069x1 − 0, 05445x2 En la Tabla 3.9 se muestra el análisis de varianza El resultado de la prueba de falta de ajuste implica que el modelo de primer orden no es una aproximación adecuada, por lo que se trata de una superficie con curvatura y CAPÍTULO 3. MÉTODOS DE SUPERFICIES DE RESPUESTA 41 Tabla 3.8: Datos del proceso para ajustar a un modelo de primer orden Variables naturales Variables Codificadas Respuesta ξ1 ξ2 x1 x2 Y -0,0113 -0,1090 0 0 -0,0118 -0,0113 -0,1090 0 0 -0,0118 -0,0113 -0,1090 0 0 -0,0118 -0,0113 -0,1090 0 0 -0,0118 -0,0113 -0,1090 0 0 -0,0118 0,4997 0,3910 1 1 -0,2152 0,4997 -0,6090 1 -1 -0,4332 -0.5113 0.3910 -1 1 -0,2212 -0.5113 -0.6090 -1 -1 -0,4392 Tabla 3.9: Analisis de Varianza para el modelo de primer orden Fuente Grados de libertad Suma de Cuadrados Media de Cuadrados Regresión 2 0.04757 0.02378 Residuo 6 0.21727 0.0362 Total 8 0.2648 Ra 0.2583 F 0.6568 CAPÍTULO 3. MÉTODOS DE SUPERFICIES DE RESPUESTA 42 Tabla 3.10: Datos del proceso para ajustar a un modelo de segundo orden Variables naturales Variables Codificadas Respuesta ξ1 ξ2 x1 x2 Y -0,0113 -0,1090 0 0 -0,0118 -0,0113 -0,1090 0 0 -0,0118 -0,0113 -0,1090 0 0 -0,0118 -0,0113 -0,1090 0 0 -0,0118 -0,0113 -0,1090 0 0 -0,0118 0,4997 0,3910 1 1 -0,2152 0,4997 -0,6090 1 -1 -0,4332 -0.5113 0.3910 -1 1 -0,2212 -0.5113 -0.6090 -1 -1 -0,4392 0,6957 -0,1090 1.414 0 -0,4392 -0,7183 -0,1090 -1.414 0 -0,4392 -0,0113 0,598 0 1.414 -0,4392 -0,0113 -0,816 -1.414 -0,4392 Tabla 3.11: Analisis de Varianza para el modelo de segundo orden Fuente Grados de libertad Regresión 2 Residuo 10 Total 12 Suma de Cuadrados 0.000239 1,271 10−12 0.002399 Media de Cuadrados 0.00011998 1,2714 10−13 F 9,4361 1008 logramos llegar a la cercanı́a del óptimo. Debido a esto es necesario ajustar a un modelo de segundo orden, una vez que se ha verificado que el modelo tiene suficiencia de ajuste y que los coeficientes son significativos, se procede a localizar las coordenadas del punto estacionario y se lleva a cabo un análisis del sistema de respuesta. En la Tabla 3.10 se muestran los datos, se utiliza un diseño central compuesto aumentado en cinco puntos centrales. Los parámetros del modelo se estiman mediante el método de mı́nimos cuadrados: Y = −6,35 10−06 x1 + 3,40 10−05 x2 + 6,02 10−15 x1 x2 − 1,83 10−03 x12 − 9,99 10−01 x22 CAPÍTULO 3. MÉTODOS DE SUPERFICIES DE RESPUESTA 43 En la Tabla 3.11 se muestra el análisis de varianza, donde se observa que la F de regresión global es significativa al 1 %. Una vez que se ha verificado que el modelo tiene suficiencia de ajuste, se procede a localizar las coordenadas del punto estacionario. x s = [−1,7291 10−03 ; 1,7001 10−05 ] donde se obtine una respueta de Y = 0, 0063. Habiendo encontrado el punto estacionario es necesario caracterizar la superficie de respuesta, es decir determinar si se trata de un punto de respuesta máximo, mı́nimo o silla. Para ello calculamos los valores propios (también conocidos como raı́ces caracterı́sticas, autovalores o eigenvalores) y se toman de la matriz B. Las cuales arrojan: λi = [−1,83712470 10−03 ; −9,99843759 10−01 ] Debido a que las λi son negativas concluimos que es un punto de respuesta máxima. Capı́tulo 4 Desarrollo e implementación de una metodologı́a de optimización para modelos de simulación Los MSR son frecuentemente aplicados en la optimización de modelos de simulación en forma no automatizada. A continuación se muestra como se desarrolla e implementa la metodologı́a para la optimización automatizada de modelos de simulación escritos en SimPy mediante los MSR. Para fines del desarrollo de la metodologı́a se asume que el conjunto de variables de entrada consideradas para realizar la optimización son los factores significantes que determinan el comportamiento de la variable de respuesta, es decir, previamente se debe analizar el sistema para determinar por medio de diseños de experimentos cuales explican mejor la respuesta. 4.1. Desarrollo El desarrollo de la metodologı́a se basa en el enfoque presentado en la Figura 4.1. En la cual se prentende unir dos areas: simulación y optimización. La primera es representada 44 CAPÍTULO 4. DESARROLLO E IMPLEMENTACIÓN 45 a través de un modelo de simulación el cual se desea mejorar, este debe ser desarrollado en SimPy y debe cumplir con las condiciones de que pueda ser llamado como una función Python que reciba un vector donde se definen las variables predictoras que describen el modelo, y que retorne únicamente la respuesta de interés a ser optimizada. La segunda área, que es el centro de la metodologı́a en desarrollo, se encarga de dirigir el proceso de optimización, mediante una interfaz de intercambio de datos que reconfigura los parámetros del modelo de simulación y genera una serie de experimentos que son utilizados para análisis, y ası́ mejorar el comportamiento del sistema. Para demostrar la aplicación de la metodologı́a se desarrollarán scripts en Python debido a que este lenguaje facilita la interacción con SimPy. INICIO MODULO DE OPTIMIZACION MODULO DE SIMULACION DISENO EXPERIMENTAL MODELO DE SEGUNDO ORDEN ADECUACION DEL MODELO ANALISIS CANONICO FIN Figura 4.1: Algoritmo MSR SimPy METODO DE ASCENSO ACELERADO SALIDA DEL MODELO ADECUACION DEL MODELO INTERFAZ DE DATOS MODELO DE PRIMER ORDEN RECONFIGURAR PARAMETROS DEL DEL MODELO DISENO EXPERIMENTAL CAPÍTULO 4. DESARROLLO E IMPLEMENTACIÓN 46 A continuación se describe el (comportamiento del) módulo de optimización que se muestra en la Figura 4.1. 1. Inicio: Para iniciar es necesario determinar: a) El número de variables predictoras n. b) El punto de operación de arranque en variables naturales. c) Se define el rango dentro del cual el diseño experimental es realizado. d) El área de operatividad. Se debe establecer los lı́mites de operación de las variables y las restricciones lineales dentro de las cuales se quiere observar el comportamiento del sistema. e) La función Python que representa el modelo de simulación escrito en SimPy. 2. Diseño Experimental para el Modelo de Primer Orden: Para ajustar el modelo de primer orden en k variables se utiliza un diseño 2k aumentado con cinco puntos centrales (éstos se utilizan para medir el error experimental y permitir la verificación de la adecuación del modelo). El diseño experimental representa un arreglo especı́fico de puntos en la región actual de interés. Este se representa por medio de una matriz que contine todas las interacciones de las variables predictoras pero al nivel de variables codificadas, esto último facilita la creación de la matriz de variables naturales aplicando la ecuación (3.2). Una vez obtenida la matriz de variables naturales se procede a realizar las corridas experimentales sobre el modelo de simulación, para ello se configuran los parámetros del modelo escrito en SimPy para cada una de las combinaciones de las variables descritas en la matriz y cuyas respuestas deben almacenarse en un vector para facilitar su manipulación. La automatización de cada escenario se implementa a partir de tres funciones. La primera recibe como parámetros el número de factores y el orden del modelo que se desea ajustar, y retorna una matriz prediseñada a nivel de variables codificadas que representa el diseño experimental como se muestra a continuación: CAPÍTULO 4. DESARROLLO E IMPLEMENTACIÓN 47 def MAT_DIS(NF,ORDEN): if NF==1: if ORDEN==1: return matrix([[1.0,0.0],[1.0,0.0],[1.0,0.0], [1.0,0.0],[1.0,0.0],[1.0,1.0],[1.0, -1.0]]) if ORDEN==2: return matrix([[1.0,0.0],[1.0,0.0],[1.0,0.0], [1.0,0.0],[1.0,0.0],[1.0, 1.414],[1.0,-1.414], [1.0,1.0],[1.0,-1.0]]) if NF==2: if ORDEN==1: return matrix([[1.0,0.0,0.0], [1.0,0.0,0.0],[1.0,0.0,0.0], ... La segunda función recibe como parámetros el número de factores, el orden del modelo que se desea ajustar, el margen de operación y el punto de actual de operación, generando la matriz a nivel de variables naturales en función de la ecuación (3.2). def MAT_DIS_NAT(NF,ORDEN,MRG,PO): MatDisNat=MAT_DIS(NF,ORDEN) l=0 if ORDEN==2: l=NF*2 for i in range(2**NF+5+l): for j in range(NF): ff=MatDisNat[i,j+1]*MRG[j]+PO[j] MatDisNat[i,j+1]=ff return MatDisNat Por último la función que realiza los llamados a SimPy y ası́ realizar las corridas experimentales sobre el modelo de simulación, recibe una a matriz de variables naturales y retorna un vector con los resultados de la experimentación. def ResModel(MatDis): Y=[] for i in range(MatDis.shape[0]): Y.append([Model(MatDis[i])]) return asmatrix(Y) CAPÍTULO 4. DESARROLLO E IMPLEMENTACIÓN 48 3. Modelo de Primer Orden: Utilizando la matriz de diseño con variables codificadas y el vector respuesta, se procede a estimar los coeficientes del modelo mediante el método de mı́nimos cuadrados implementado mediante cálculo matricial por medio de la ecuación (3.2) como se muestra a continuación: Betas=((MatDisCod.getT()*MatDisCod).getI())*(MatDisCod.getT()*ResMod) 4. Adecuación del Modelo de Primer Orden: Antes de utilizar el modelo ajustado para moverse dentro de la región de operatividad hacia el óptimo, es necesario determinar su adecuación a través del análisis de varianza, para determinar si el comportamiento de la respuesta en la región actual presenta falta de ajuste debido a iteracción y/o curvatura, esto se implementa por cálculo matricial aplicando las ecuaciones de la (3.6) a la (3.10). Al analizarlar los resultados se presenta uno de los siguientes escenarios: a) Si el modelo no muestra falta de ajuste, es decir, pasa la prueba F de significancia, se procede con el Método de Ascenso Acelerado. b) Si la inadecuación está dada porque los términos cuadráticos puros son singnificantes se ajusta a un modelo de segundo orden. c) Si el modelo no es significativo y no presenta términos cuadráticos significantes, entonces se reduce la varianza de las variables naturales (S ), es decir, se disminuye la región de exploración, luego se procede con un nuevo diseño experimental. 5. Método de Ascenso Acelerado: Si el modelo es aceptado para representar la superficie en la región actual de experimentación, se aplica el proceso iterativo del método de ascenso acelerado al modelo de primer orden ajustado para acceder a las cercanı́as del óptimo. Esto se logra realizando un conjunto de experimentos que requieren llamar al modelo de simulación con puntos de operación definidos en la dirección dada CAPÍTULO 4. DESARROLLO E IMPLEMENTACIÓN 49 por el signo de los coeficientes del modelo ajustado, con incrementos en las variables proporcionales a la magnitud de los coeficientes. Lo anterior se realiza mientras exista mejoramiento de la respuesta o hasta encontrarse con una restricción, debido a que, si se encuentra una restricción, los experimentos deben realizarse a través de la dirección impuesta por el vector director de la misma. El mejor punto encontrado en la trayectoria de búsqueda se toma como el punto central para un nuevo diseño experimental. Este método se implementa en una función que emula el funcionamiento del mismo tal como se describe en las secciones 3.7.1 y 3.7.2, para ello recibe como parámetros los coeficienes del modelo ajustado, el margen de operación y el punto actual de operación, retornando un nuevo punto de operación. La implementación es mostrada en el Apendice A debido a su extención. 6. Diseño Experimental para el Modelo de Segundo Orden:Para ajustar el modelo de segundo orden en k variables se utiliza un diseño central compuesto expandido con cinco puntos centrales, es construido de la misma forma que se realizó el diseño experimental para el modelo de primer orden, con la salvedad que es expandido para obtener los términos cuadráticos y los cruzados. 7. Modelo de Segundo Orden: De la misma forma que para el modelo de primer orden los coeficientes se calculan mediante el método de mı́nimos cuadrados. 8. Adecuación del Modelo de Segundo Orden: Como en el caso del modelo de primer orden, la inadecuación del modelo, es determinada a través del análisis de varianza. 9. Análisis Canónico de la Superficie: Si el modelo de Segundo Orden es aceptado, se determina el polinomio canónico implementando la ecuación (3.11) para localizar el punto estacionario, luego calcular los autovalores de la matriz de los coeficientes cruzados del modelo de segundo orden para asi determinar su naturaleza, es decir, si se trata de un punto de respuesta maxima, minima o si se trata de un punto de CAPÍTULO 4. DESARROLLO E IMPLEMENTACIÓN 50 silla. Lo que se implementa mediante la función que recibe como parametros los coeficientes del modelo de segundo orden y el numero de factores, retornando el punto estacionario, su naturaleza y el valor de la respuesta en ese punto: def ANACAN(Betas,NF): b=[] B=[] for i in range(NF): a=[0.0]*NF B.append(a) for i in range(len(Betas)): if i==0: b0=Betas[i].item() if i>0 and i<=NF: b.append(Betas[i].item()) l=NF+1 for i in range(NF): for j in range(NF): if j>=i: if i==j: B[i][j]=B[j][i]=Betas[l].item() if i!=j: B[i][j]=B[j][i]=(Betas[l].item())/2 l=l+1 B=asmatrix(B) b=asmatrix(b) Xs=-0.5*B.getI()*b.getT() . . . . . . La implementación final de la metodologı́a se expresa en siete scripts escritos en código Python mediante los cuales se llevan a cabo todos los pasos necesarios para dar funcionalidad a la misma. Los cuales son: 1. AdcMod.py Contiene la función encargada de realizar el analisis de varianza. 2. AnaCan.py Este script contiene la función encargada de realizar el analisis canonico del modelo de segundo orden. CAPÍTULO 4. DESARROLLO E IMPLEMENTACIÓN 51 3. DesMod.py En este script se crea una plantilla donde el usuario debe introducir toda la información del modelo que desea optimizar. 4. DisExp.py Contiene de manera preestablecida los diseños experimentales a nivel de variables codificadas para k variables, tambien se encuentran las subrutinas para construir el diseño experimental a nivel de variables naturales. 5. MetAsc.py Contiene el procedimiento para aplicar el metodo de ascenso acelerado al modelo de primer orden. 6. ResMod.py Este script contiene la subrutina que realiza los llamados a SimPy. 7. OptimSimpyMSR.py En este script se desarrolla todo el proceso de llamadas y calculos para completar el funcionamiento de MSR. 4.2. Ejemplo de Aplicación En esta sección se muestra la aplicación de la metodologı́a desarrollada a un modelo de simulación escrito en SimPy, para lo cual se hace uso de la implementación descrita anterioemente. 4.2.1. Descripción del Problema Se presenta el escenario de un problema de inventario estocastico del tipo < Q, r > con la modalidad pérdida por venta, éste se desarrolla bajo los siguientes supuestos: El costo de ordenar es de 50 Bs/orden El costo de mantener inventario es de 0,2 Bs/unidad/dia CAPÍTULO 4. DESARROLLO E IMPLEMENTACIÓN 52 El costo de escasez es de 5 Bs/unidad La demanda muestra una distribución Normal(1;0,2) El tiempo de entrega muestra una distribución Uniforme[5;10] dı́as. Este modelo tiene una polı́tica de revisión continua de inventario en la que se pide una cantidad Q de articulos cuando el inventario alcanza el punto de reorden r. Y donde se desea minimizar las perdidas ocacionadas por la escasez y por el nivel del inventario. La politica actual es de Q=20 y r=1. Una vez realizada la implementación en SimPy y probado el modelo en estudio, el mismo se ajusta a los requerimientos para ser utilizado por la herramienta que implementa la metodologı́a, es decir, se expresa como una función Python que reciba un vector donde se definen las variables Q y r, la cual retorna -como respuesta de interés a ser optimizadael costo relacionado con el mantenimiento de existencias y el no cumplir con la demanda del consumidor. Esto se puede apreciar en el script ModSimpy.py que se muestra en el Apéndice A el cual contiene la función Inventario(). Luego se procede a editar el script DesMod.py que es una plantilla donde el experimentador debe definir, respetando el formato preestablecido, el punto de operación de arranque, el area de operatividad escrita en formas de restricciones lineales y definir la función Python que contiene el modelo SimPy. Para este caso se definen: Numero de variables = 2 Punto de Operación Q, r = [20,0;1,0] Rango para el diseño experimental = [0,5;0,5] Numero de restriciones = 4 CAPÍTULO 4. DESARROLLO E IMPLEMENTACIÓN Restricciones: • La cantidad de orden es mayor a quince y menor a cincuenta: 15 ≤ Q ≤ 50 • La cantidad del punto de reorden es mayor a cero: 0 ≤ r ≤ 15 La función Python que define el modelo en Simpy. Esto se puede apreciar en el siguinente script. from numpy import * from random import random from ModSimpy import Inventario #********DEFINIR PUNTO DE OPERACION ************ #Se define el numero de factores que describen el modelo Numero_Factores=2 #Definir el punto de operacion de arranque en forma vectorial PuntoActual=[20.0,1.0,0.0,0.0,0.0] #********DEFINIR RANGO DE LOS FACTORES ******* #El valor define a partir del punto de operacion cual es el rango #que define el area donde se va a realizar el diseno experimental Rango=[0.5,0.5,0.0,0.0,0.0] del 05/03/2007 al 09/03/2007 #*********DEFINIR RESTRICCIONES DEL MODELO #Definir el Numero de Restricciones Lineales Si las hay Numero_de_restriciones=4 #para definir las restricciones deben estar expresadas de la forma #A<=X1+X2+X3+X4+X5 y escritas en la siguiente matriz Restriccion=[[15.0, -1.0, 0.0, 0.0, 0.0, 0.0], [ 0.0, 0.0,-1.0, 0.0, 0.0, 0.0], [50.0, 1.0, 0.0, 0.0, 0.0, 0.0], [15.0, 0.0, 1.0, 0.0, 0.0, 0.0]] #*******AJUSTAR AL MODELO DE SIMPY ************* #En esta secccion se define el nombre de la funcion de Python que #representa el modelo de simulacion escrito en SimPy que tiene 53 CAPÍTULO 4. DESARROLLO E IMPLEMENTACIÓN 54 #que ser ajustado para recibir un vector ’x’ que contiene el punto #al cual se debe realizar un experimento. def Model(x): X=[x[0,1],x[0,2]] return Inventario(X) . . . . . . Una vez realizado este procedimiento se ejecuta el sript OptimSimpyMSR.py desde un terminal de la siguiente forma: >> python OptimSimpyMSR.py lo que pone en marcha el proceso de optimización del modelo de simulación. Cuyo procedimiento y resultados se muestran al usuario asi: Punto de Operacion Actual [20.0, 1.0] Donde la respuesta es: [[-49998.8240]] Realizando Diseno Experimental... Calulando coeficientes del modelo... Comprobando Adecuacion del modelo... *************************************** ANOVA ************************************** Fuente de Variacion Regresion Residual Grados de Suma de libertad Cuadrado cuadrados 2 [[ 28977707.77317]] 6 Total [[ 8 F Medio [[ 14488853.88651]] 2430919.98179]] [[ [[ 35.76140884]] 405153.33023]] [[ 31408627.75448]] *************************************************************************************** La Prueba F del modelo es significativa para 5 % Sˆ2 [[ 347274.28310322]] Valor de Raˆ2 [[ 0.92260343]]Por esta razón, una de las mejoras que se proponen a este trabajo es la i Valor de F para efectos cuadraticos [[ 0.]] La Prueba F NO es significativa para 5 % CAPÍTULO 4. DESARROLLO E IMPLEMENTACIÓN 55 Aplicando Maxima Pendiente de Ascenso... El Nuevo Punto de Operacion es [1.0, 22.2058, 10.0] donde la respuesta fue -7977.6871 Realizando Diseno Experimental... Calulando coeficientes del modelo... Comprobando Adecuacion del modelo... *************************************** ANOVA ************************************ Fuente de Grados de Suma de Variacion libertad Regresion 2 Residual [[ 6 Total Cuadrado cuadrados 77599.849744]] [[ 8 F Medio [[ 38799.924872]] 33441.233206]] [[ [[ 6.96145228]] 5573.538867]] [[ 111041.082951]] *********************************************************************************** La Prueba F del modelo es significativa para 5 % Sˆ2 [[ 4777.31902948]] Valor de Raˆ2 [[ 0.69883909]] Valor de F para efectos cuadraticos [[ 0.]] La Prueba F NO es significativa para 5 % Aplicando Maxima Pendiente de Ascenso... El Nuevo Punto de Operacion es [1.0, 19.8179, 11.3722] donde la respuesta fue -7528.5330 Realizando Diseno Experimental... Calulando coeficientes del modelo... Comprobando Adecuacion del modelo... *************************************** ANOVA ************************************ Fuente de Grados de Suma de Variacion libertad Regresion 2 Residual Total cuadrados [[ 109949.355747]] 6 [[ 8 Cuadrado 14211.018933]] F Medio [[ 54974.67787]] [[ [[ 23.21072604]] 2368.50315]] [[ 124160.374681]] *********************************************************************************** La Prueba F del modelo es significativa para 5 % Sˆ2 [[ 2030.14556194]] Valor de Raˆ2 [[ 0.88554304]] CAPÍTULO 4. DESARROLLO E IMPLEMENTACIÓN Valor de F para efectos cuadraticos [[ 56 3.62176816e-27]] La Prueba F NO es significativa para 5 % Aplicando Maxima Pendiente de Ascenso... El Nuevo Punto de Operacion es [1.0, 18.8873, 10.3722] donde la respuesta fue -7177.98745 Realizando Diseno Experimental... Calulando coeficientes del modelo... Comprobando Adecuacion del modelo... *************************************** ANOVA ************************************ Fuente de Grados de Variacion libertad Regresion 2 Residual Suma de Cuadrado cuadrados Medio [[ 19413.148421]] 6 Total [[ 9706.574213]] [[ 23299.067321]] 8 F [[ 2.49964707]] [[ 3883.177886]] [[ 42712.215749]] *********************************************************************************** La Prueba F del modelo NO es significativa para 5 % Sˆ2 [[ 3328.43818876]] Valor de Raˆ2 [[ 0.45451045]] Valor de F para efectos cuadraticos [[ 2.20905907e-27]] La Prueba F NO es significativa para 5 % Realizando Diseno Experimental... Calulando coeficientes del modelo de segundo orden... Comprobando Adecuacion del modelo... *************************************** ANOVA ************************************ Fuente de Variacion Grados de Suma de libertad Regresion 2 Residual 10 Total Cuadrado cuadrados [[ 60077.806699]] [[ 30038.903349]] [[ 29700.351403]] 12 F Medio [[ [[ 10.11398921]] 2970.035140]] [[ 89778.158102]] *********************************************************************************** La Prueba F del modelo es significativa para 5 % Sˆ2 [[ 4856.51397823]] Valor de Raˆ2 [[ 0.66918066]] Valor de F para efectos cuadraticos [[ 2.86585456e-05]] CAPÍTULO 4. DESARROLLO E IMPLEMENTACIÓN 57 La Prueba F NO es significativa para 5 % Punto Estacionario [[ 18.93436517] [ 10.34110683]] Donde la respuesta es [[-7181.7285]] [ -2.32993169e+04+0.j -1.62085635e+04+0.j] Los autovalores indica que este es un punto de de respuesta macima Al analizar la salida se observa el comportamiento de la implementación, tal como se presentó en la figura 4.1. Al usuario se le indica qué pasos se están realizando y los resultados intermedios que estos arrojan. Tal como se puede observar, la metodologı́a es capaz de generar una solución “óptima” para el problema planteado. En realidad la solución, en algunos casos, pudiera no ser un óptimo global sino sólamente uno local. La razón de ésto es que la metodologı́a, tal como se desarrolló en este trabajo no puede salirse de los entornos de los óptimos locales y la misma es propensa a quedarse estancada en ellos. Por esta razón, una de las mejoras que se proponen a este trabajo es la implementación de métodos de perturbación que permitan “sacar” a la metodologı́a de los óptimos locales en caso de quedar en uno de ellos. Capı́tulo 5 Conclusiones y Recomendaciones En este capı́tulo se presentan las conclusiones obtenidas con el desarrollo de este proyecto. Además se muestran varias recomendaciones respecto a este trabajo que permitirán profundizar el estudio que se ha realizado y una posible extensión para abarcar otros métodos. 5.1. Conclusiones La optimización de modelos de simulación es un enfoque que está siendo considerado por muchos de los investigadores en el área de simulación con el objeto de obtener el mejor desempeño de los sistemas bajo estudio y no simplemente la evaluación de escenarios. Existen varios métodos de optimización que han sido utilizados con este fin, tales como búsqueda tabú, recocido simulado, algoritmos genéticos, superficies de respuesta, entre otros. En este trabajo se propuso la optimización de modelos de simulación usando los métodos de superficie de respuesta, su aplicación permite seleccionar la combinación de niveles 58 CAPÍTULO 5. CONCLUSIONES Y RECOMENDACIONES 59 óptimos en la obtención de la mejor respuesta cuando se carece de una estructura matemática tratable. En el método son realizados planteamientos factoriales, cuyos resultados son ajustados usando modelos matemáticos, explorándo la superficie de respuesta obtenida en la dirección de la región del punto óptimo deseado. Su aplicación en este trabajo permitió optimizar modelos de simulación escritos en SimPy. El optimizar modelos de simulación implementados en paquetes comerciales, resulta una tarea difı́cil, ya que automatizar este proceso requiere desarrollar una interfaz que permita modificar los parámetros de entrada asi como obtener la respuesta, que permita guiar un conjunto de experimentos necesarios durante la optimización. Lo cual requiere de un conocimiento avanzado del lenguaje en que fue desarrollado el paquete ya que éstos por lo general presentan estructura muy compleja. Desafortunadamente, en los paquetes comerciales es imposible (en la mayorı́a de los casos) acceder al código fuente del programa y por lo tanto imposible desarrollar la interfaz requerida. Sin embargo, el uso de simuladores desarrollados bajo la filosofı́a de software libre permite dichos desarrollos. SimPy es un paquete de simulación por eventos discretos, orientado a objetos, basado en procesos, escrito y ejecutado desde un lenguaje de programación interpretado llamado Python y se encuentra dentro de la lı́nea de desarrollo de software libre, Lo que facilita su estudio y modificación para lograr otros fines, como el planteado en este trabajo. Por tanto conseguir la interacción de datos necesarias entre el proceso de optimización y el modelo desarrollado en SimPy se simplifica. La metodologı́a para la optimización de modelos de simulación implantados en SimPy usando MSR, se desarrolló e implementó con éxito. La metodologı́a es capaz de generar una solución ”óptima” para los problemas planteados. En algunos casos el óptimo pudiera no ser un óptimo global sino sólamente local. La razón de ésto es que los métodos de superficie de respuesta tal como se utilizaron en este trabajo, no pueden salirse de los entornos de los óptimos locales y son propensos a quedarse estancados en ellos. Sin embargo, de CAPÍTULO 5. CONCLUSIONES Y RECOMENDACIONES 60 acuerdo a los resultados obtenidos, se puede ver que el uso de los MSR permite obtener buenas soluciones en la optimización de modelos de simulación. 5.2. Recomendaciones Con el objeto de mejorar y complementar este trabajo para futuras investigaciones, se sugiere: Profundizar el estudio de los métodos de superficies de respuesta, para mejorar aspectos como los diseños experimentales, los métodos para ajustar los modelos polinomiales, ası́ como el estudio completo del modelo de segundo orden a través del análisis de cordillera. Implementar métodos de perturbación, tales como “Búsqueda Tabú”, que permitan “sacar” a la metodologı́a de los óptimos locales en caso de quedar en uno de ellos. Mejorar la interfaz al usuario mediante la implementación de entornos gráficos compatibles con Python como lo es Gtk. Desarrollar otros métodos de optimización de modelos de simulación para el paquete SimPy. Implementar una función que permita usar puntos de partidas multiples, esto permitirı́a explorar con más detalle la zona de operatividad del modelo. Bibliografı́a [Andrabóttir S., 1998] Andrabóttir S. (1998). Simulation optimization. Handbook of Simulation. [Andre Khuri y John Cornell, 1996] Andre Khuri y John Cornell (1996). Response Surfaces: Desing and Analyses. D.B Owen, Founding Editor. Marcel Dekker, Inc., Department of Statistics Southern Methodist University Dallas, Texas. [Andrés Marzal y Isabel Gracia, 2003] Andrés Marzal y Isabel Gracia (2003). Introducción a la programación con Python. Departamento de Lenguajes y Sistemas Informáticos, Universitat Jaumel I. [Antoni Guasch y Jaume Figueras, 2005] Antoni Guasch, Miquel Ángel Piera, J. y Jaume Figueras (2005). Modelado y Simulación. Aplicación a procesos logı́sticos de fabricación y servicios. EDICIONS UPC. Alfaomega Grupo Editor, S.A. de C.V., Universitat Politécnica de Catalunya, Barcelona, España. [Averill Law y Michael McComas, 2000] Averill Law y Michael McComas (2000). Simulation-based optimization. Winter Simulation Conference. [Azadivar F., 1999] Azadivar F. (1999). Simulation optimization methodologies. Winter Simulation Conference. 61 BIBLIOGRAFÍA 62 [Azadivar F. y Ahmad M., 1996] Azadivar F., S. y Ahmad M. (1996). Optimization in strategic location of semi-finished products in a pull-type production system simulation. Winter Simulation Conference. [Biles, W. E., 1974] Biles, W. E. (1974). A gradient regression search procedure for simulation experimentation. Winter Simulation Conference. [Brennan R. y Rogers P., 1995] Brennan R. y Rogers P. (1995). Optimization applied to a manufacturing system operation problem. Winter Simulation Conference. [Daugherty A. y Turnquist M. , 1980] Daugherty A. y Turnquist M. (1980). Simulation optimization using responses surfaces based on spline approximations. Winter Simulation Conference. [Fu M. y Healy K., 1997] Fu M. y Healy K. (1997). Techniques for optimizacion via simulation: an experimental study on an inventory system. IIE Transaction. [Heidelberger P., 1988] Heidelberger P. (1988). Discrete event simulation and parallel process: Statistical properties. Journal of Statistical Computing. [Ignacio Salinas y Jesús Moreno, 2003] Ignacio Salinas y Jesús Moreno (2003). Simulación de eventos discretos, [en lı́nea]. Disponible en: http://esi.us.es/simuldiscre.htm, Consultado en mayo de 2006. [M, 1995] M, L. C. (1995). Determination of Buffer Size and Location in Scheduling Systems Buffer Management, Inventory Profiles. PhD thesis, University of Georgia. [Manz E. y Haddock J., 1989] Manz E. y Haddock J. (1989). Optimization of an automated manufacturing system simulation model using simulated annealing. Winter Simulation Conference. [Mendenhall William et al., 1990] Mendenhall William, Wackerly Dennis, y Sheaffer Richard (1990). Estadı́stica Matemática con Aplicaciones. Grupo Editorial Iberoamérica. BIBLIOGRAFÍA 63 [Mendoza, 2005] Mendoza, A. E. B. (2005). Desarrollo de una Herramienta de Optimización Basada en Analisis de Superficies de Respuesta para Modelos de Simulación. PhD thesis, Departamendo de Investigación de Operaciónes. [Montgomery, 2005] Montgomery, D. (2005). Diseño y análisis de experimentos. Limusa Wiley. Universidad Estatal de Arizona. [Morito S. y Awane H., 1993] Morito S., Lee H., M. y Awane H. (1993). Exploration of a minimum tardiness dispatching priority for a flexible manufacturing system - a combined simulation/optimization approach. Winter Simulation Conference. [Müller, 2005] Müller, K. G. (2005). Simpy: System simulation in python, [en lı́nea]. Disponible en: http://simpy.sourceforge.net/simpyoverview.htm, Consultado en junio de 2006. [Myers Raymond y Douglas Montgomery, 1995] Myers Raymond y Douglas Montgomery (1995). Response Surface Methodology. Wiley Series in Probability and Statistics. 605 3ra Av., New York. [Schruben L. y Cogliano V., 1987] Schruben L. y Cogliano V. (1987). An experimental procedure for simulation response surface model identification. Communications of the Association for Computing Machinery. [Sigurdur Ólafsson y Jumi Kim, 2002] Sigurdur Ólafsson y Jumi Kim (2002). Simulation optimization. Winter Simulation Conference. [Tompkins G y Azadivar F., 1995] Tompkins G y Azadivar F. (1995). Genetic algorithms in optimizing simulated systems. Winter Simulation Conference. [Tony Vignaux y Klaus Muller, 2006] Tony Vignaux y Klaus Muller (2006). Simpy manual [en linea]. Disponible en: http://simpy.sourceforge.net/, Consultdo en mayo de 2006. BIBLIOGRAFÍA 64 [Yolanda Carson y Anu Marı́a, 1997] Yolanda Carson y Anu Marı́a (1997). Simulation optimization: Methods and applications. Winter Simulation Conference. [Yucesan E. y Jacobson S., 1995] Yucesan E. y Jacobson S. (1995). On the simultaneous construction of sample paths. Winter Simulation Conference. Apéndice A La implementación final de la metodologı́a se expresa en siete scripts escritos en código Python mediante los cuales se llevan a cabo todos los pasos necesarios para dar funcionalidad a la misma. Los cuales son: 1. AdcMod.py Contiene la función encargada de realizar el analisis de varianza. 2. AnaCan.py Este script contiene la función encargada de realizar el analisis canonico del modelo de segundo orden. 3. DesMod.py En este script se crea una plantilla donde el usuario debe introducir toda la información del modelo que desea optimizar. 4. DisExp.py Contiene de manera preestablecida los diseños experimentales a nivel de variables codificadas para k variables, tambien se encuentran las subrutinas para construir el diseño experimental a nivel de variables naturales. 5. MetAsc.py Contiene el procedimiento para aplicar el metodo de ascenso acelerado al modelo de primer orden. 6. ResMod.py Este script contiene la subrutina que realiza los llamados a SimPy. 7. OptimSimpyMSR.py En este script se desarrolla todo el proceso de llamadas y calculos para completar el funcionamiento de MSR. 65 APÉNDICE A. 66 Para su uso es necesario la instalación previa de lsa librerias python-numpy ypythonscipy quienes contienen las funciones necesarias para el manejo de matricez y leyes estadisticas. A.1. OptimSimpyMSR.py from numpy import * from DesMod import * from DisExp import * from ResMod import * from AdcMod import * from MetAsc import * from AnaCan import * opcion_print=True #************* LECTURA DE MODELO **************** PO=P_Operacion() NL=Nivel() R=1 parar=5 d=2 ORD=1 #****** SE REPITE MIENTRAS SEA POSIBLE UN AJUSTE DE PRIMER ORDEN print ’\nPunto de Operacion Actual’,PO,’Donde la respuesta es:’,ResModel(asmatrix([1.0,20.0,1.0])) while parar>=1: #********** CALCULO MARGEN DE OPERACION ********* MRG=matrix([[NL[0]/R],[NL[1]/R],[NL[2]/R],[NL[3]/R],[NL[4]/R]]) ###SUBMODULO DISENO EXPERIMENTAL print ’\nRealizando Diseno Experimental...’ #********** LLAMADA A LA MATRIZ DE DISENO CORRESPONDIENTE CODIFICADA Y NATURAL MatDisCod=MAT_DIS(NF(),ORD) MatDisNat=MAT_DIS_NAT(NF(),ORD,MRG,PO) #********** LLAMADA A REALIZAR LOS EXPERIMENTOS EN SYMPY ResMod=ResModel(MatDisNat) ###SUBMODULO MODELO DE PRIMER ORDEN APÉNDICE A. #**** METODO DE LOS MINIMOS CUADRADOS *********** print ’\nCalulando coeficientes del modelo...’ Betas=((MatDisCod.getT()*MatDisCod).getI())*(MatDisCod.getT()*ResMod) ###SUBMODULO ADECUACION DEL MODELO #ADECUACION DEL MODELO DE PRIMER ORDEN print ’\nComprobando Adecuacion del modelo...’ valid=APO(MatDisCod,ResMod,Betas,NF(),True) #RESOLVER INADECUACION DEL MODELO DE PRIMER ORDEN if valid[0]==False or valid[2]==False: if d==0: ORD=2 else: R=R*2.0 d=d-1 if valid[3]==False: R=R*2.0 ###SUBMODULO METODO DEL ASCENSO if valid[3]==True and valid[0]==True: print ’\nAplicando Maxima Pendiente de Ascenso...’ if (valid[0]==True)and(valid[1]==True): P=MAP(Betas,MRG,PO,False) for m in range(NF()): PO[m]=P[m+1] if valid[0]==False: parar=parar-1 #PASO 6 #AJUSTE DEL POLINOMIO DE SEGUNDO ORDEN print ’*******************************MODELO DE SGUNDO ORDEN************************************’ print ’*****************************************************************************************’ ###SUBMODULO DISENO EXPERIMENTAL #********** LLAMADA A LA MATRIZ DE DISENO CORRESPONDIENTE CODIFICADA Y NATURAL MRG=matrix([[NL[0]/R],[NL[1]/R],[NL[2]/R],[NL[3]/R],[NL[4]/R]]) MatDisNat=MAT_DIS_NAT(NF(),2,MRG,PO) MatDisNatSeg=MAT_DIS_SEG_ORD(MatDisNat,NF()) #********** LLAMADA A REALIZAR LOS EXPERIMENTOS EN SYMPY 67 APÉNDICE A. 68 ResMod=ResModel(MatDisNat) ###SUBMODULO MODELO DE SEGUNDO ORDEN #**** METODO DE LOS MINIMOS CUADRADOS *********** Betas=((MatDisNatSeg.getT()*MatDisNatSeg).getI())*(MatDisNatSeg.getT()*ResMod) ###SUBMODULO ADECUACION DEL MODELO DE SEGUNDO ORDEN valid=APO(MatDisNatSeg,ResMod,Betas,NF(),True) ###SUBMODULO ANALISIS CANONICO if valid[3]==True: ANACAN(Betas,NF()) A.2. AdcMod.py from numpy import * from stats import lfprob def APO(x,y,b,NF,opcion_print): valido=[True,True,True,True,False] N=y.shape[0] l=asmatrix([1.0]*(N)) #****Tabla Analisis de Varianza SST=y.getT()*y-((l*y)**2)/(N) SSR=b.getT()*x.getT()*y-((l*y)**2)/(N) SSE=y.getT()*y-b.getT()*x.getT()*y F=(SSR/(NF))/(SSE/(N-NF-1)) #***************** IMPRIMIR ANOVA ***************** if opcion_print==True: print ’*************************************** ANOVA ************************************’ print ’Fuente de Grados print ’Variacion de\t Suma de libertad \t\tCuadrado \t\t F ’ \tcuadrados \t\t Medio’ print ’Regresion\t’,NF,’\t’,SSR,’\t’,(SSR/NF),’\t’,F print ’Residual \t’,N-NF-1,’ print ’Total \t’,SSE,’\t’,SSE/(N-NF-1) \t’,N-1,’\t’,SST print ’***********************************************************************************\n’ if F<=0.0 or F==inf: valido[3]=False if F==inf: valido[4]=True APÉNDICE A. if (lfprob(NF,N-NF-1,abs(F))<0.1)and(valido[3]==True): if opcion_print==True: print ’La Prueba F del modelo es significativa para 5 %’ else: if opcion_print==True: print ’La Prueba F del modelo NO es significativa para 5 %’ valido[0]=False #****Prediccion de la respuesta YP=x*b #****Residuos r=y-x*b #****Estimacion del error S2=((y-x*b).getT()*(y-x*b))/(N-NF) #****Verificar los efectos cuadraticos l=asmatrix([1.0]*(N)) SSC=(((2**NF)*5.0)*((y.mean()-YP.mean())**2))/(2**NF+5.0) Fec=SSC/S2 R=SSR/SST Ra=(1-(1-R)*((N-1)/(N-NF))) if Ra<=0.65: valido[2]=False if opcion_print==True: print ’Sˆ2’,S2 print ’Valor de Raˆ2’,Ra print ’Valor de F para efectos cuadraticos ’, Fec if lfprob(1,1,Fec)<0.05: if opcion_print==True: print ’La Prueba F es significativa para 5 %’ valido[1]=False else: if opcion_print==True: print ’La Prueba F NO es significativa para 5 %’ return valido A.3. AnaCan.py from numpy import * from scipy.linalg import eigvals from ResMod import * 69 APÉNDICE A. def ANACAN(Betas,NF): b=[] B=[] for i in range(NF): a=[0.0]*NF B.append(a) for i in range(len(Betas)): if i==0: b0=Betas[i].item() if i>0 and i<=NF: b.append(Betas[i].item()) l=NF+1 for i in range(NF): for j in range(NF): if j>=i: if i==j: B[i][j]=B[j][i]=Betas[l].item() if i!=j: B[i][j]=B[j][i]=(Betas[l].item())/2 l=l+1 B=asmatrix(B) b=asmatrix(b) Xs=-0.5*B.getI()*b.getT() ys=b0+0.5*Xs.getT()*b.getT() Ys=asmatrix([1,Xs[0,0].item(),Xs[1,0].item()]) print ’Punto Estacionario’,Xs print ’Respuesta en el punto estacionario’,ResModel(Ys) eig=eigvals(B) print eig if eig[0]>0 and eig[1]>0: print ’Es un punto de respueta minima’ if (eig[0]<0 and eig[1]>0) or (eig[1]<0 and eig[0]>0): print ’Es un punto de ensilladura’ if eig[0]<0 and eig[1]<0: print ’Es un punto de respueta maxima’ 70 APÉNDICE A. A.4. DesMod.py from numpy import * from random import random from ModSimpy import modelo #********DEFINIR PUNTO DE OPERACION ************ #Se define el numero de factores que describen el modelo Numero_Factores=2 #Definir el punto de operacion de arranque en forma vectorial PuntoActual=[20.0,1.0,0.0,0.0,0.0] #********DEFINIR NIVELES DE LOS FACTORES ******* #El valor define a partir del punto de operacion cual es el nivel #alto y bajo al realizar el diseno experimental Niveles=[0.5,0.5,0.0,0.0,0.0] #*********DEFINIR RESTRICCIONES DEL MODELO #Definir el Numero de Restricciones Lineales Si las hay Numero_de_restriciones=4 #para definir las restricciones deben estar expresadas de la forma #A<=X1+X2+X3+X4+X5 y escritas en la siguiente matriz Restriccion=[[15.0, -1.0, 0.0, 0.0, 0.0, 0.0], [ 6.0, 0.0,-1.0, 0.0, 0.0, 0.0], [50.0, 1.0, 0.0, 0.0, 0.0, 0.0], [15.0, 0.0, 1.0, 0.0, 0.0, 0.0], [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]] #*******AJUSTAR AL MODELO DE SIMPY ************* #En esta secccion se define el nombre de la funcion de Python que #representa el modelo de simulacion escrito en SimPy el cual tiene #que ser ajustado para recibir un vector ’x’ que contiene el punto #al cual se debe realizar un experimento. def Model(x): X=[x[0,1],x[0,2]] return modelo(X) 71 APÉNDICE A. #*******FUNCIONES DE RETORNO ******************* #En esta seccion se definen un conjunto de funciones que retornan #valores definidos en este modulo def NF(): return Numero_Factores def NR(): return Numero_de_restriciones def P_Operacion(): return PuntoActual def Nivel(): return Niveles def Rest(): return Restriccion A.5. DisExp.py from numpy import * def MAT_DIS_NAT(NF,ORDEN,MRG,PO): MatDisNat=MAT_DIS(NF,ORDEN) l=0 if ORDEN==2: l=NF*2 for i in range(2**NF+5+l): for j in range(NF): ff=MatDisNat[i,j+1]*MRG[j]+PO[j] MatDisNat[i,j+1]=ff return MatDisNat 72 APÉNDICE A. 73 def MAT_DIS_SEG_ORD(M,NF): x=[] l=NF*2 if NF==2: for i in range(2**NF+5+l): temp=[1.0,M[i,1].item(),M[i,2].item(),M[i,1].item()**2,M[i,1].item()* M[i,2].item(),M[i,2].item()**2] x.append(temp) if NF==3: for i in range(2**NF+5+l): temp=[1.0, M[i,1].item(),M[i,2].item(),M[i,3].item(),M[i,1].item()**2,M[i,1].item()*M[i,2].item(), M[i,1].item()*M[i,3].item(),M[i,2].item()**2,M[i,2].item()*M[i,3].item(),M[i,3].item()**2] x.append(temp) if NF==4: for i in range(2**NF+5+l): temp=[1.0, M[i,1].item(),M[i,2].item(),M[i,3].item(),M[i,4].item(),M[i,1].item()**2,M[i,1].item()* M[i,2].item(),M[i,1].item()*M[i,3].item(),M[i,1].item()*M[i,4].item(),M[i,2].item()**2,M[i,2].item()* M[i,3].item(),M[i,2].item()*M[i,4].item(),M[i,3].item()**2,M[i,3].item()*M[i,4].item(),M[i,4].item()**2] x.append(temp) return asmatrix(x) A.6. MetAsc.py from DesMod import * def MAP(bb,MRG,PuOr,option_print): es_maximo=False #Betas Betas=bb.copy() #factores de direccion fd=bb.copy() fd[0]=0.0 fd=fd/abs(fd).max() #Punto operacion actual P_MAX=[0.0,0.0,0.0,0.0,0.0] APÉNDICE A. for i in range (NF()): P_MAX[i]=PuOr[i] #Trayectoria Modificada #Restriciones Naturales Res_Nat=asmatrix(Rest()) #Restricciones Codificadas Res_Cod=asmatrix(Rest()) for h in range(NR()): ss=0.0 for g in range(NF()): ss=ss+(PuOr[g]*Res_Cod[h,g+1].item()) Res_Cod[h,0]=Res_Cod[h,0].item()-ss for w in range(NF()): if Res_Cod[h,w+1]==0.0: continue else : Res_Cod[h,w+1]=(Res_Cod[h,w+1].item()*MRG[w]) #Calculo de po para cada restriccion po=cpo(Res_Cod,Betas) #Calculo de d d=cd(po,Res_Cod,Betas) #Xn,m Xnm=cXmn(Res_Cod,d) #Busqueda del Maximo u=0 viola=[] sig=[] for i in range(NR()): viola.append(False) sig.append(False) x=[] y=[] y_max=0.0 l=0 seg=1 while es_maximo==False: tem=[] tem.append(1.0) for j in range(NF()): if u!=0: 74 APÉNDICE A. P_MAX[j]=P_MAX[j]+fd[j+1].item()*MRG[j].item() tem.append(P_MAX[j]) for j in range (NR()): suma=0.0 for i in range (NF()): suma=suma+Res_Nat[j,i+1].item()*tem[i+1] if Res_Nat[j,0].item()>=(suma): viola[j]=False else: viola[j]=True for j in range(NR()): if (viola[j]==True)and(sig[j]==False): for i in range (NF()): if Res_Nat[j,i]!=0.0: P_MAX[i]=po[j]*Betas[i+1].item()*MRG[i].item()+PuOr[i] tem[i+1]=P_MAX[i] PuOr[i]=P_MAX[i] for i in range (NF()+1): Betas[i]=Betas[i].item()-Xnm[j,i].item() fd=Betas.copy() sig[j]=True fd[0]=0.0 fd=fd/abs(fd).max() #Restricciones Codificadas Res_Cod=asmatrix(Rest()) for h in range(NR()): ss=0.0 for g in range(NF()): ss=ss+(PuOr[g]*Res_Cod[h,g+1].item()) Res_Cod[h,0]=Res_Cod[h,0].item()-ss for w in range(NF()): if Res_Cod[h,w+1]==0.0: continue else : Res_Cod[h,w+1]=(Res_Cod[h,w+1].item()*MRG[w]) #Calculo de po para cada restriccion po=cpo(Res_Cod,Betas) 75 APÉNDICE A. #Calculo de d d=cd(po,Res_Cod,Betas) x.append(tem) y.append(Model(asmatrix(tem))) validar=True for j in range (NR()): suma=-0.001 for i in range (NF()): suma=suma+Res_Nat[j,i+1].item()*tem[i+1] if Res_Nat[j,0].item()>=(suma): validar=True else: validar=False if validar==True: if seg==1: y_max=y[u] l=u seg=-1 if y[u]>=y_max: y_max=y[u] l=u if u>4: if (y[u]<y[l])and(y[u-1]<y[l])and(y[u-2]<y[l])or(u==999)or(validar==False): print ’\nEl Nuevo Punto de Operacion es’,x[l],’\t donde la respuesta fue’,y[l] return x[l] if (y[u]==y[u-1]==y[u-2]==y[u-3])or(u==999)or(validar==False): print ’\nEl Nuevo Punto de Operacion es’,x[u-3],’\t donde la respuesta fue’,y[u-3] return x[u-3] u=u+1 def cpo(Res_Co,Beta): po=[] for i in range(NR()): ss=0.0 for j in range(NF()): ss=ss+Res_Co[i,j+1].item()*Beta[j+1].item() if ss==0.0: ss=0.000000001 76 APÉNDICE A. po.append(Res_Co[i,0].item()/ss) return po def cd(cpo,Res_Co,Beta): po_min=10000000000000000.0 res_g=0.0 for j in range (NR()): if cpo[j]>0.0: if cpo[j]<po_min: po_min=cpo[j] res_g=j d=0.0 sum1=0.0 sum2=0.0 for p in range(NF()): sum1=sum1+Res_Co[res_g,p+1].item()*Beta[p+1].item() for p in range(NF()): sum2=sum2+Res_Co[res_g,p+1].item()**2 d=sum1/sum2 return d def cXmn(Res_Co,cd): Xnm=asmatrix(Rest()) for p in range(NR()): for j in range(NF()): if Xnm[p,j+1]==0.0: continue else: Xnm[p,j+1]=cd*Res_Co[p,j+1].item() return Xnm A.7. ResMod.py from numpy import * from DesMod import * def ResModel(MatDis): Y=[] 77 APÉNDICE A. for i in range(MatDis.shape[0]): Y.append([Model(MatDis[i])]) return asmatrix(Y) A.8. ModSimPy.py from SimPy.Simulation import * from random import * def modelo(x): DS= 200 RUNS = 200 Q=x[0].item() r=x[1].item() class Entrega(Process): tot=0.0 pedidos=0.0 def entrega(self): dia=1.0 cantidadentrega=Q yield put,self,Reservas,cantidadentrega while True: if Reservas.amount > r: yield hold,self,dia else : tiempoentrega=5.0+random()*5.0 self.pedidos+=1.0 #print ’tiempo entrega’,tiempoentrega yield hold,self,tiempoentrega yield put,self,Reservas,cantidadentrega class Venta(Process): NoVendidas=0.0 Vendidas=0.0 def Venta(self): 78 APÉNDICE A. day=1.0 while True: yield hold,self,day dd=abs(normalvariate(1.0,0.5)) ds= dd-Reservas.amount if dd>Reservas.amount: yield get,self,Reservas,Reservas.amount self.NoVendidas+=ds else: yield get,self,Reservas,dd self.Vendidas+=dd result=[] for run in range(RUNS): Reservas=Level(monitored=True) initialize( ) d = Entrega( ) activate(d,d.entrega( )) dem = Venta( ) activate(dem,dem.Venta( )) simulate(until=DS) result.append([now( ),Reservas.bufferMon.mean( ),dem.NoVendidas,dem.Vendidas,d.pedidos]) Ca=0.5 Cs=5 Co=50 Cu=7 Cv=5 mediaalmacen=0.0 novendidas=0.0 vendidas=0.0 pedid=0.0 for i in range (RUNS): mediaalmacen+=result[i][1] novendidas+=result[i][2] vendidas+=result[i][3] pedid+=result[i][4] Costo_Total=-((pedid*Q)/RUNS)*Cu-(100*mediaalmacen/RUNS)*Ca-(100*novendidas/RUNS) *Cs-(pedid/RUNS)*Co#+(100*vendidas/RUNS)*Cv return Costo_Total 79