optimizacion de modelos de simulacion en simpy. aplicacion de la

Anuncio
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 A̃ M
P     U  L A    
    I  S
T:
P. S́ 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
Descargar