Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
i
Equation Chapter 1 Section 1
Trabajo Fin de Grado
Grado Ingeniería en Tecnologías Industriales
Estimación de afluencia a eventos multitudinarios
mediante modelo de Winters y programación lineal
Autor: Carlos Uribe Astolfi
Tutor: Luis Onieva Giménez
Dep. Organización Industrial y Gestión de
Empresas II
Escuela Técnica Superior de Ingeniería
Universidad de Sevilla
Sevilla, 2015
iii
Trabajo Fin de Grado
Grado Ingeniería en Tecnologías Industriales
Estimación de afluencia a eventos multitudinarios
mediante modelo de Winters y programación lineal
Autor:
Carlos Uribe Astolfi
Tutor:
Luis Onieva Giménez
Catedrático
Dep. de Organización Industrial y Gestión de Empresas II
Escuela Técnica Superior de Ingeniería
Universidad de Sevilla
Sevilla, 2015
v
Trabajo Fin de Grado: Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y
programación lineal
Autor: Carlos Uribe Astolfi
Tutor: Luis Onieva Giménez
El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros:
Presidente:
Vocales:
Secretario:
Acuerdan otorgarle la calificación de
Sevilla, 2015
El Secretario del Tribunal
vii
Resumen
Este trabajo trata de realizar un modelo de previsión de afluencia a un evento
multitudinario. Para ello se realizará un análisis de los colectivos que pueden acceder
a un evento, así como de las variables indicadoras que permitan cuantificarlo.
Posteriormente se elegirán los métodos para llevar a cabo dicho modelo. Y, por
último, se implementará el modelo mediante un evento real, que ya ha transcurrido y
del cual se conocen los datos necesarios.
ix
Abstract
The present final degree project tries to make a forecast model to a mass influx event.
To do an analysis of the groups that can access an event , as well as indicator variables
that allow us to quantify this will be done . Subsequently methods were chosen to
carry out this model. And finally the model is implemented by a real event which has
already elapsed and that the necessary data are known.
Índice
Resumen vii
Abstract ix
Índice x
Índice de Tablas xii
Índice de Figuras xiii
1 Introducción al problema 1
2 Objeto del estudio 3
3 Modelo de afluencia diaria al evento 5 3.1 Afluencia, salidas y presencia de visitantes 5 3.2 Análisis de los colectivos que acceden al recinto 7
3.2.1 Colectivos que acceden al recinto 7 3.2.2 Análisis 10
3.3 Variables indicadores 11 3.3.1 De población 11 3.3.2 De atracción 12 3.3.3 Temporales 13 3.3.4 Resumen de variables indicadoras 14
4 Previsiones de afluencia diaria al evento 17 4.1 Análisis previo 17 4.2 Variables indicadores 17 4.3 Análisis de los modelos 18
4.3.1 Modelos de extrapolación 19 4.3.2 Modelos explicativos 19
4.4 Validación de los modelos 20 4.5 Funcionamiento operativo 20
5 Marco teórico 23 5.1 Perspectiva de previsión 23 5.2 Pasos básicos para llevar a cabo la previsión 26 5.3 Criterios de evaluación de modelos de previsión 27
5.3.1 Error de previsión 27 5.3.2 Error medio, ME 27 5.3.3 Error absoluto medio, MAE 28 5.3.4 Error cuadrático medio, MSE 28 5.3.5 Raíz del error cuadrático medio, RMSE 28
5.4 Modelos de previsión 28 5.4.1 Método de Winters 29 5.4.2 Modelo de programación lineal 32
6 Implementación 35
xi
6.1 Winters 37 6.2 Modelo de programación lineal 39 6.4 Ponderación de la previsión de entradas 41
7 Resultados 43
8 Conclusiones 45
ANEXO A: Tabla de datos 47
ANEXO B: Código WINTERS 53
ANEXO C: Código GEN-PRLI 75
ANEXO D: Código PROG-LIN 83
ANEXO E: Código PREVISIO 89
ANEXO F: Resultados 97
ANEXO G: Gráficas de resultados 103
Bibliografía 107
ÍNDICE DE TABLAS
Tabla 3-1. Resumen de variables indicadoras 15
Tabla 7-1. Errores de previsión de entradas 43
xiii
ÍNDICE DE FIGURAS
Figura 3-1. Perfil afluencia 5
Figura 3-2. Perfiles de salidas 6
Figura 3-3. Cálculo de presencia 6
Figura 3-4. Población visitante 8
Figura 5-1. Resumen métodos de previsión 24
Figura 5-2. Inicialización del método de Winters 30
Figura 6-1. Observaciones junio 35
Figura 6-2. Total observaciones 36
Figura 6-3. Observación semanal 36
Figura 6-4. Resultado pases por método de Winters 38
Figura 6-5. Resultado entradas por método de Winters 39
Figura 6-6. Solución generada por AMPL 40
Figura 6-7. Resultado entradas modelo de programación lineal 41
Figura 6-8. Solución generada por PREVISIO 42
1
1 INTRODUCCIÓN AL PROBLEMA
Actualmente, debido al impacto económico que generan, se organizan grandes
eventos en cualquier parte del mundo. Eventos deportivos, ferias o exposiciones
universales son algunos ejemplos de ellos.
El principal problema que pueden encontrar los organizadores de eventos, es
cuantificar la cantidad de asistentes que acudirán diariamente, para poder planificar
adecuadamente los recursos humanos y materiales a corto plazo.
Debido a la escasa información y herramientas de las que se dispone, se pretende
abordar esta problemática mediante la aplicación de métodos estadísticos y algún
modelo de programación lineal, los cuales permitirán realizar las estimaciones
convenientes. Siendo este el objeto del trabajo.
3
2 OBJETO DEL ESTUDIO
Se trata de obtener las previsiones diarias de afluencia a un recinto con antelación
suficiente para planificar adecuadamente los recursos humanos y materiales a corto
plazo. El correcto dimensionamiento de los servicios influirá de manera importante en
la calidad de los mismos. El horizonte de tiempo contemplado en las previsiones que
realice el modelo debe ser tal que permita la programación de los recursos variables
necesarios.
El objetivo concreto es la realización de la previsión de la afluencia al recinto con una
antelación de tres días. Dicho recinto será el de la Exposición Universal que tuvo
lugar en Sevilla en 1992. El modelo se adecuará a este horizonte, si bien no se excluye
para previsiones con otros horizontes temporales (mayores y menores).
5
3 MODELO DE AFLUENCIA DIARIA AL EVENTO
3.1 Afluencia, salidas y presencia de visitantes
Se entiende por afluencia el número de personas que accede al interior del recinto.
Dicha afluencia se mide por unidad de tiempo, siendo la variable en función del
mismo. Su representación genérica es la de la figura 3-1.
Figura 3-1. Perfil afluencia
Esta afluencia es perfectamente medible “a posteriori”, dado que dicha información es
capturada rutinariamente por el sistema de control de accesos a través de las diversas
puertas de visitantes que disponga el recinto.
Se entiende por presencia el número de personas que se encuentran en el interior del
recinto en un momento dado. La presencia también es variable en función del tiempo,
pero no se puede medir directamente. Es una variable que se puede obtener por
diferencia entre la afluencia y los abandonos del recinto. Es la variable fundamental a
tener en cuenta para dimensionar los servicios ofertados en el interior del recinto.
El tercer concepto, íntimamente ligado a los dos anteriores es el de las salidas. Se
entiende por salidas la medida del abandono del recinto por los presentes en él. Las
salidas también son variables en función del tiempo y medibles, si bien no de forma
completa. Esto se debe a que las puertas de salidas proporcionan información fiable
cuando son el único medio de abandono del recinto. Sin embargo, existen puertas de
emergencias que pueden ser abiertas de forma esporádicas cuando se produzcan
aglomeraciones y así lo aconsejen. Dichas salidas no serán registradas por el sistema
de control de accesos. La figura 3-2 refleja un perfil genérico de las salidas
controladas.
0
2
4
6
8
10
8 10 12 14 16 18 20 22 24
Perfil de afluencia
afluencia
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
6
Figura 3-2. Perfiles de salidas
Esta curva es una subestimación de las salidas reales puesto que no incluye las salidas
no controladas por las puertas de emergencia. Conceptualmente, si la curva de salidas
refleja todas las qué se producen, controladas y descontroladas, la presencia en el
recinto sería precisamente la diferencia entre las curvas de afluencia y de salidas
acumuladas; tal como se representa en la figura 3-3.
Figura 3-3. Cálculo de presencia
En la figura 3-3 se refleja una hipotética situación en la qué se realizan dos aperturas
de las puertas de emergencia. La imprecisión en el conocimiento exacto de la
presencia aumenta debido a las incertidumbres sobre el número, duración y caudal
que abandona el recinto durante dichas aperturas. Obsérvese que hasta la primera vez
que se abre una puerta de emergencia, las salidas registradas coinciden con las reales,
por lo que las presencias calculadas son exactas hasta dicho momento. Así, si las
puertas de emergencia se abriesen una sola vez al día, el conocimiento de la presencia
0
1
2
3
4
5
6
7
8 10 12 14 16 18 20 22 24
Perfil de salidas
salidas
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
7
hasta dicho instante sería fiable. Con la ventaja adicional de que, con toda
probabilidad, la presencia alcanza sus valores máximos con anterioridad a la
apreciable disminución de la misma que supone la salida masiva con la apertura de las
puertas. En este caso, los niveles máximos de presencia serían perfectamente
conocidos. Si este comportamiento fuera la norma, podrían conocerse los valores
históricos máximos de cada día, y basándose en esta serie temporal realizar la
previsión de la presencia máxima de los siguientes días. Sin embargo, si la apertura de
puertas se realiza a horas más tempranas y con mayor frecuencia, no se puede evaluar
de forma tan simple la presencia máxima. En cualquier caso, es razonable suponer
que las aglomeraciones de salida nocturnas serán, cualitativa y cuantitativamente, más
importantes que las diurnas, por lo que es coherente asumir que la presencia máxima
se producirá en el periodo anterior a la misma. La información sobre las salidas hasta
dicho momento es razonable y fiable y puede tomarse como base de partida para
obtener la estimación de la presencia hasta dicho momento. Estando su máximo
contenido en ese intervalo, también su estimación será razonablemente fiable.
Sin embargo, permanecen las dificultades para estimar con precisión la presencia tras
dicha apertura si no se posee información sobre los visitantes que abandonan el
recinto durante la posible apertura de las puertas de emergencia.
3.2 Análisis de los colectivos que acceden al recinto
3.2.1 Colectivos que acceden al recinto
Distinguimos los diferentes colectivos de visitantes que acceden al recinto empleando
como criterio para diferenciarlos el tipo de factores explicativos que actúan sobre la
influencia de los mismos. La siguiente figura recoge el esquema de la clasificación
considerada.
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
8
Figura 3-4. Población visitante
3.2.1.1 Poseedores de pases de temporada
Un primer colectivo es el de los poseedores de pases de temporada, casi todos ellos de
ámbito geográfico local. La posesión de un pase de temporada permite la afluencia
frecuente al recinto sin limitaciones de calendario ni horarias. A voluntad. La decisión
de asistir al recinto puede ser improvisada, sin estar condicionada por la duración
esperada de la visita. De la misma forma, la libre disponibilidad de acceso durante
todo el periodo de duración del evento hace suponer que este colectivo tendrá un alto
índice de repetición de accesos en el mismo día (en relación a otros colectivos).
Dado el elevado grado de libertad y discrecionalidad de las visitas de los miembros de
este grupo, no parece conveniente pretender identificar un número reducidos de
factores explicativos de su afluencia. En su lugar, un modelo de extrapolación basado
en el comportamiento histórico del mismo considera todas las concausas de forma
implícita a la hora de prever la afluencia futura.
La información que requiere este tipo de modelo será perfectamente accesible debido
a que el colectivo de poseedores de pases de temporada está completamente
Afluencia
Pases de Temporada
Entradas
Residentes No
residentes
Pernoctan No
pernoctan
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
9
identificado como tal, registrándose todos sus accesos al recinto.
3.2.1.2 Accesos con entradas
El otro colectivo complementario es el de los visitantes que adquieren sus entradas.
Dentro de él es conveniente distinguir entre varios subgrupos.
3.2.1.2.1 Residentes en el á reá locál
Se trata de un grupo bastante heterogéneo para el cual es aventurado seleccionar
factores que permitan prever con antelación su afluencia en un día concreto. Además,
es de esperar que este colectivo tenga un peso específico apreciable sobre la afluencia
debido a la concentración de sus visitas en un número reducido de días, tales como
fines de semana, días de fiesta y fechas especiales (días de precios reducidos, etc.). De
hecho, es posible que este colectivo sea el que convierta algunas fechas en días punta.
Los componentes de este grupo, con gran comodidad de acceso por ser residentes en
el área local, no han previsto una asistencia frecuente al recinto (no ha obtenido un
pase de temporada), ya sea por un menor interés en el evento o porque sus recursos
económicos no se lo permiten. Es de suponer que serán proclives a una permanencia
prolongada en el recinto en los días que acudan, y a emplear los días de puertas
abiertas o de precio reducido para sus visitas.
3.2.1.2.2 No residentes en el á reá locál
Los no residentes pueden catalogarse como turistas, tanto nacionales como
extranjeros. A su vez, se darán dos circunstancias distintas:
Pernoctan en la zona.
Pernoctan en zonas más alejadas desde las que se desplazan en ambos sentidos
el mismo día, ya sea mediante transportes colectivos o con vehículos
particular.
Para los turistas que pernoctan existen indicadores que permiten evaluar con cierta
antelación el número de personas que los componen, debido a que la inmensa mayoría
de ellos realizarán reserva de alojamiento. Se puede elegir las reservas realizadas a
través de algunas agencias de reservas de hoteles para las correspondientes fechas.
Esta agencia debe de canalizar un volumen significativo de los visitantes de este
grupo. Estos indicadores tienen una relación explicativa parcial. Así, una persona que
pernocta en el área local puede estar asociada a una visita al recinto ese mismo día o
posiblemente el día siguiente, no existiendo medio práctico de discriminar entre
ambos comportamientos.
Los turistas que no pernoctan han de desplazarse al área local donde se encuentre el
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
10
recinto y abandonarla en el mismo día. En la medida en que utilicen medios
colectivos de transporte, también se puede disponer de indicadores que reflejen estos
comportamientos, permitiendo dimensionar el tamaño de este grupo. Dichos
indicadores están asociados a las reservas de transportes regulares (tren, aéreo, líneas
de autobuses interurbanos) y a los medios fletados por viajes organizados por
agencias y operadores turísticos (autobuses y vuelos “chárter”).
Estos indicadores reflejan tanto los desplazamientos realizados por los turistas que no
pernoctan como los desplazamientos de los que sí lo hacen.
3.2.2 Análisis
Las consideraciones realizadas sobre los colectivos que accederán al recinto son muy
relevantes y se emplearán en los modelos que resulten, pero son meramente
conceptuales, ya que el control de accesos no tiene posibilidad de distinguir entre los
diferentes subgrupos, dentro de las visitas realizadas mediante entradas. Ello hace
imposible validar los modelos que intentarán prever la afluencia de cada uno de los
subgrupos por separado. Así pues, habrán de construirse modelos que prevean la
afluencia global, teniendo simultáneamente en cuenta todos los elementos
considerados. Adicionalmente, intervendrán otros factores que puedan ayudar a
explicar la afluencia al recinto en días concretos.
Para ser incluidos en los modelos, los factores han de poseer las siguientes
características:
Que sean medibles con la antelación que se solicita al modelo de previsión (tres
días).
Que estén correlacionados (positiva o negativamente) con la afluencia al
recinto. Dicha correlación reflejará su influencia sobre alguno de los colectivos
considerados.
Que los datos de estos factores puedan ser obtenidos por la organización en
tiempo y forma. Este aspecto puede exigir la colaboración (no necesariamente
desinteresada) de agentes externos a la organización (Renfe, Iberia, agencias
turísticas, etc.).
En resumen, se requiere identificar todos los factores objetivos que influyan sobre una
parte de la población para su acceso al recinto, que sean medibles y que se pueda
contar con datos sobre ellos de forma económica, fiable y a tiempo. La estrategia que
se propone es incluir todos los factores que reúnan las características señaladas.
Posteriormente, en la validación del modelo, podrán abandonarse aquellos que no se
muestren significativos. De esta forma, se reducirá a un número manejable los
indicadores que intervengan en los modelos explicativos.
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
11
3.3 Variables indicadores
Mediante el término indicador nos referimos a los factores medibles que se escojan
para ser incluidos en los modelos explicativos con la finalidad de poder prever la
afluencia (y sus variaciones) al recinto de los colectivos con los que estén
relacionados.
3.3.1 De población
Son los indicadores relacionados con la población flotante presente en el área local en
las fechas consideradas en las que tendrá lugar el evento. Y con las variaciones en las
mismas.
3.3.1.1 Ocupación hotelera
Un indicador de referencia inmediato es el número de plazas (camas) reservadas para
las dos noches (la anterior y la propia) asociadas al día en cuestión. Aunque no es
posible conocer de forma fiable todas las pernoctaciones, se intentará cuantificar, en la
medida de lo posible, con las agencias que vayan a tramitar el mayor número de
reservas y sean las más representativas.
3.3.1.2 Tren
La variable indicadora está relacionada con el incremento neto de llegadas y salidas
por dicho medio para el día en cuestión. Para ello sería deseable conocer el número de
plazas reservadas en cada uno de los trenes con origen o destino a la ciudad donde se
vaya a llevar a cabo el evento. Dada la dificultad de capturar tanta información,
pueden usarse como representativos algunos trayectos que se seleccionen. En nuestro
caso, como estudiaremos un evento que ocurre en Sevilla, las rutas Málaga-Sevilla y
Madrid-Sevilla parecen razonables. La hora de llegada (salida) a (de) la ciudad en
cuestión, es especialmente relevante en este caso, estableciéndose el balance de las
llegadas menos las salidas para representar el indicador de incremento de población
flotante producido desde las 12:00 AM del día anterior hasta la misma hora del día en
cuestión. Se toma esta hora umbral como referencia dado que permite a las llegadas
acceder al recinto ese día, mientras que las salidas no.
El indicador es incremental, recogiendo las variaciones en la afluencia que puedan
manifestarse como relacionadas con estos desplazamientos.
3.3.1.3 Vuelos regulares
Esta variable indicadora es análoga a la anterior. Como rutas significativas se propone
la consideración de Madrid-Sevilla y Barcelona-Sevilla. Adicionalmente, podría
también añadirse una ruta que comunique con una capital europea.
Este indicador también es incremental, reflejando la variación en la población de
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
12
Sevilla debido al acceso por vuelos regulares.
3.3.1.4 Autobuses regulares
Otro medio de transporte de entidad es el de las líneas regulares de autobuses. Dado el
elevado número de ellas y su pertenencia muy mayoritaria al sector privado, habrá
que seleccionar algunas de ellas como representativas. Las candidatas a considerar
deben cubrir todo el ámbito nacional y mantener una amplia cuota de mercado con
origen (destino) la ciudad donde tenga lugar el evento.
La obtención de llegadas y salidas por este medio requiere establecer una relación de
colaboración con dichas empresas para el suministro fiable de la información
pertinente.
Es un indicador incremental.
3.3.1.5 Vuelos “chárter”
Este tipo de transporte mueve un elevado número de visitantes. Debido a ello es
necesario incluir un indicador que refleje la afluencia relacionada con los
desplazamientos realizados por este medio. Por las mismas razones señaladas en el
apartado anterior, habría que seleccionar algunas empresas con criterios análogos:
amplia cobertura internacional, importancia relativa en el sector y cuota de mercado
apreciable entre los vuelos chárter con origen (destino) la ciudad del evento. También
habrá que establecer relaciones con las empresas a seleccionar para acceder a la
información sobre las llegadas y salidas mediante vuelos “chárter”.
Es un indicador incremental.
3.3.1.6 Autobuses fletados
El movimiento de turistas mediante viajes organizados, procedentes de zonas
turísticas cercanas, será un elemento importante para la afluencia al recinto. Debido a
la multitud de agencias que organizarán este tipo de excursiones, se deben escoger
mayoristas importantes como suministradores de datos. Las relaciones de la
organización con estas entidades para la venta de entradas por grupos pueden servir
de base para esta colaboración. De forma complementaria, podría incorporarse la
información que se derive de las reservas adelantadas por grupos, si esta figura está
contemplada.
Por las mismas razones apuntadas en los apartados anteriores, este indicador también
es incremental.
3.3.2 De atracción
En este apartado se consideran factores medibles que reflejan una mayor intensidad
del interés de la opinión pública por los actos (culturales, lúdicos, deportivos,
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
13
políticos, etc.) que se celebran esas fechas con motivo o coincidentes con el evento en
cuestión. Estas señales indicadoras, aunque casi siempre intuitivas, son en algunos
casos difíciles de incluir de forma directa en los modelos. En todo caso, podría
considerarse que están ya recogidas de forma indirecta a través de los indicadores de
población descritos en el apartado anterior.
3.3.2.1 Medios de prensa
Los periodistas se suelen acreditar ante el evento por amplios períodos de tiempo. La
concentración de su presencia en un momento dado estará correlacionada con la
ocurrencia de eventos singularmente atractivos para el público en general. Dichos
eventos inducirán, a su vez, una mayor afluencia al recinto.
Para medir con suficiente antelación y fiabilidad dicha concentración de medios de
prensa se propone utilizar la reserva de las instalaciones y equipos que un hipotético
“Centro de Prensa” ponga a disposición de los mismos.
3.3.2.2 Audiencia televisiva
Con el mismo objetivo que en el apartado anterior y de forma complementaria al
indicador antes propuesto puede considerarse la cobertura televisiva de eventos
singulares. Una medida simple de este factor es el número de cadenas que tienen
contratada la retransmisión de actos para el día de interés.
3.3.2.3 Eventos colaterales
La celebración de eventos importantes a nivel nacional, en nuestro caso España, en
fechas coincidentes con el periodo del evento influirá en la afluencia de visitantes.
Son influencias difíciles de medir.
3.3.3 Temporales
La dimensión temporal es quizás la más importante en cuanto a la afluencia de
visitantes. Todas las opiniones coinciden sobre que en los meses estivales (donde se
concentran los períodos vacacionales) la afluencia media será mayor. Igualmente, en
los días de fin de semana aumentará la afluencia en relación a la de los días laborales.
Además pueden existir días especiales programados (con el precio de entradas
reducido) en los que la afluencia se disparará. Por último, también deben considerarse
celebraciones locales y nacionales que pueden ser aprovechadas por un número
apreciable de personas para acudir al evento.
Aquellas circunstancias temporales que tienen carácter repetitivo (días festivos, meses
de verano y días especiales) pueden incorporarse directamente en los modelos. En
cambio, las circunstancias que son únicas o singulares (no recurrentes) habrán de
incorporarse mediante analogía con otros indicadores (asociación de puentes a fines
de semana, etc.) o bien directamente a través de los indicadores de población y de
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
14
atracción, comentados en los apartados anteriores.
3.3.4 Resumen de variables indicadoras
Con el fin de situar en perspectiva los heterogéneos indicadores descritos, así como
para realizar una valoración de su relevancia, se incluye una tabla resumen en la que
se clasifican los factores, calificándolos en categorías que presentan la importancia
relativa que se les concede a priori.
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
15
Tabla 3-1. Resumen de variables indicadoras
INDICADOR CARÁCTER REPRESENTATIVIDAD NIVEL DE
IMPORTANCIA
DE
PO
BL
AC
IÓN
Nivel de
ocupación
hotelera
Valor absoluto Alta Muy necesario
Trenes Valor
incremental
Alta Necesario
Vuelos
regulares
Valor
incremental
Alta Necesario
Autobuses
regulares
Valor
incremental
Baja Conveniente
Vuelos chárter Valor
incremental
Baja Conveniente
Autobuses
fletados
Valor
incremental
Baja Conveniente
DE
AT
RA
CC
IÓN
PRENSA Valor absoluto Baja Conveniente
TV Valor absoluto Baja Conveniente
Eventos
colaterales
----- ----- -----
DE
TIE
MP
O
Meses
vacacionales
Valor absoluto Alta Muy necesario
Días no
laborales
Valor absoluto Alta Muy necesario
Puentes Valor absoluto Alta Necesario
Fiestas locales Valor absoluto Alta Necesario
Días precio
reducido
Valor absoluto Alta Muy necesario
17
4 PREVISIONES DE AFLUENCIA DIARIA AL
EVENTO
4.1 Análisis previo
La afluencia al recinto durante el transcurso del evento puede tener un
comportamiento “caótico” (en el sentido científico del término) debido a:
Alta variabilidad (variaciones grandes de la afluencia a lo largo del periodo de
duración del evento).
Alta volatilidad (grandes variaciones de la afluencia de un día para otro).
Baja memoria a corto plazo (el nivel de afluencia de un día puede deberse a
razones muy distintas de las del día siguiente o anterior).
Existencia de memoria a largo plazo (la afluencia diaria depende, en cierta
medida, de la evolución de la misma desde el inicio del evento en estudio).
Compleja dependencia de gran cantidad de factores cualitativos que, en
muchos casos, son incontrolables. Nótese la heterogeneidad del colectivo
visitante: diferentes procedencias, capacidad económica, motivación,
disponibilidad del tiempo, etc.
Las razones anteriores muestran la dificultad del problema planteado. Sin embargo
esas mismas razones refuerzan la necesidad de contar con algún mecanismo que
permita estimar el comportamiento a corto plazo de la serie temporal de afluencia el
evento en estudio.
Las previsiones proporcionadas por cualquier método que se utilice serán
forzosamente arriesgadas debido a:
Inestabilidad inherente de la serie.
No existencia de precedentes.
Limitación sobre la cantidad de información que se puede extraer de la serie
temporal debido a la “corta” (en el sentido estadístico del término) duración de
un evento.
La estrategia más razonable parece ser la de intentar captar la mayor parte de la
variabilidad de la serie sin pretender una estimación ilusoriamente precisa.
4.2 Variables indicadores
Del análisis de los colectivos de visitantes que aparece en el capitulo anterior,
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
18
“modelo de afluencia diaria al evento”, surge la necesidad de separar la previsión de
los visitantes con entrada.
Para los poseedores de pases de temporada no existen elementos fiables que permitan
explicar con antelación su proclividad a visitar el recinto en cada fecha. Debido a ello,
la estimación de su afluencia ha de basarse únicamente en el análisis de la serie
histórica observada de su comportamiento, según transcurre el evento. Esto limita de
forma insoslayable la estimación de la afluencia de los poseedores con pases de
temporada.
Las visitas del colectivo que accede con entradas y reside en el área local donde
transcurre el evento, son aún más difícil de determinar, dado que no se dispondrá de
información sobre sus accesos anteriores al recinto (como sí ocurre con los
poseedores de pases) ni se pueden identificar elementos fiables que permitan predecir
con antelación su comportamiento. Sólo los hábitos temporales asociados al tipo de
día de la semana y las fechas de precio reducido pueden utilizarse en la previsión de
su comportamiento.
Para los visitantes con entradas que no residan en las cercanías existe la posibilidad de
utilizar variables indicadoras que permitan explicar en cierta medida el
comportamiento de la afluencia. Las variables susceptibles de ser consideradas como
indicadores han de cumplir las siguientes características:
Que sean medibles con la antelación que se le solicita al modelo de previsión
(en nuestro caso, tres días).
Que estén relacionadas (positiva o negativamente) con la variable a estimar
(afluencia al recinto del evento)
Que los valores que toman dichas variables puedan ser obtenidos en tiempo y
forma.
4.3 Análisis de los modelos
Como consecuencia del análisis previo, se han descartado, en principio, aquellos
modelos complejos que necesitan gran cantidad de datos históricos para poder hacer
estimaciones con un grado razonable de precisión. Igualmente se han descartado
algunos modelos de tipo experimental prefiriéndose métodos simples, probados y
relativamente estándares, que son los que se comentan a continuación.
Los modelos seleccionados se dividen en dos grupos:
De extrapolación, que utilizan únicamente los valores históricos de la serie a
estimar.
Explicativos, que se basan en la existencia de variables indicadores.
Como ya se ha comentado, la afluencia asociada a los Pases de Temporada no está
relacionada con las variables indicadoras seleccionadas y como es previsible que
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
19
tengan una fuerte componente aleatoria, no es posible estimar dicha afluencia
mediante métodos explicativos. Para dicho colectivo, pues, el método de
extrapolación será el único que se utilice.
4.3.1 Modelos de extrapolación
Se basan en extraer regularidades de la serie temporal. Para ello se descomponen las
observaciones en una componente fija, otra de tendencia y unos factores de
estacionalidad. A partir de estas medidas, los modelos asumen un comportamiento
futuro cualitativamente similar al previamente observado y son capaces de realizar
previsiones para el futuro.
Nótese que este tipo de modelos no son capaces de predecir acontecimientos futuros
que no tengan una relación con el comportamiento anterior a través de las
observaciones históricas, aunque sí son capaces de adaptarse a dichos cambios de
comportamiento, lo hacen con un cierto retraso que es función de los valores de los
parámetros de los modelos.
Igualmente estos modelos incorporan muy difícilmente factores atípicos y aperiódicos
como el calendario de días familiares. Dichos factores deben ser, pues, tenidos en
cuenta a espaldas de estos modelos. Así pues, las previsiones se calculan
exclusivamente a partir de los valores históricos de la variable a estimar (acceso al
recinto del evento), sin tener en cuenta los valores de los indicadores.
Otra limitación común a todos los métodos de extrapolación es que su precisión está
íntimamente ligada a la longitud de la serie histórica de partida. En muchos casos, la
falta de historia al principio del evento, y el reducido número de observaciones en las
que ha de basarse la previsión lo hubieran hecho desaconsejable, sino fuera porque es
la única alternativa existente para estimar la afluencia de los visitantes con pase de
temporada. Teniendo en cuenta que la afluencia de este colectivo supondrá un
porcentaje apreciable del total de entradas, no puede prescindirse de su estimación.
4.3.2 Modelos explicativos
Se basan en relacionar los valores observados de la afluencia con los valores
observados de las variables indicadores. Esto equivale a intentar explicar el
comportamiento de la afluencia en base al comportamiento de los indicadores. La
bondad de las estimaciones depende de la naturaleza de dicha relación y de la
fiabilidad de los indicadores utilizados.
La relación entre los indicadores y la previsión de la afluencia toma la forma de una
función matemática cuya expresión mas sencilla es lineal. Los modelos explicativos
forzosamente asumen que dicha relación es estable, esto es, que se puede utilizar los
coeficientes calculados a partir de los datos históricos para prever el futuro.
Estos modelos no son capaces de captar directamente efectos estacionales sino que lo
hacen de forma indirecta a través de los valores de los indicadores, que ya de por si
recogerán dichas variaciones.
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
20
Hay que recalcar la importancia de que para el buen funcionamiento de estos métodos
tiene la calidad y cantidad de las variables indicadores que estén disponibles. En este
sentido, es deseable que sean lo más representativas posible de las magnitudes que
miden y que el compromiso de suministro de dichos datos sea irreversible. En la
medida en que estas condiciones no se cumplan los métodos pierden fiabilidad,
pudiendo incluso no ser aplicables. En dicho caso se perdería la posibilidad de
completar y contrastar las previsiones de los métodos de extrapolación, los cuales,
como ya se ha indicado anteriormente, están sujetos a importantes limitaciones.
En el capitulo siguiente, se explicaran de un modo teórico los modelos que se van a
usar.
4.4 Validación de los modelos
Se entiende por validación de los modelos la calibración de los mismos (optimización
de los valores de los parámetros) y la determinación de su grado de fiabilidad a la
hora de realizar las previsiones.
Como resulta evidente, hasta el inicio del evento que se vaya a estudiar, no se podrán
tener datos reales de la afluencia, que serán los que se utilizarán para hacer la
validación definitiva. Para solventar dicho inconveniente se podrá utilizar baterías de
datos ficticios que se corresponderán con diferentes escenarios posibles, para poder
probar la eficacia de los métodos que se estén usando.
Para la previsión de la afluencia de entradas se ejecutan los modelos descritos. La
estimación definitiva de dicha afluencia se obtiene mediante la ponderación de las
previsiones de los diferentes métodos. Los pesos de la ponderación de cada uno de los
métodos son proporcionales al grado de acierto de sus estimaciones en los días ya
transcurridos. La estimación de la afluencia con entradas así obtenida se agrega con la
estimación de la afluencia con Pases de Temporada (proporcionada por el método de
extrapolación) para dar lugar a la estimación de la afluencia total.
4.5 Funcionamiento operativo
Diariamente, los responsables del suministro de los datos (afluencia, con pase y con
entrada, del día anterior y valores de los indicadores) remitirán los mismos, a la
persona encargada de la ejecución de los modelos, de acuerdo con el siguiente
procedimiento:
1. La afluencia del día “D” deberá estar disponible a primera hora de la mañana
del día “D+1”, introduciéndolas en el sistema informático. Dicha captura
consta de la fecha “D” y de la afluencia de pases y de entradas medidas en
miles de personas.
2. De igual forma, a primera hora de la mañana del día “D+1” deberá disponerse
de los valores de las variables indicadoras, consistentes en las reservas para el
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
21
día “D+3”. Todo ello deberá ser introducido en el sistema informático en miles
de personas.
3. Si el día “D+3” es “familiar”, debe ser comunicado al sistema informático
como tal. La introducción de la condición de día “familiar” puede realizarse
con antelación, pero nunca después de haber sido realizada la previsión para
dicho día “D+3”.
4. El día “D+1”, una vez capturados todos los datos anteriores, se ejecutará la
opción de calcular la previsión. La duración de este proceso informático es
breve, del orden de pocos minutos.
5. El resultado de la previsión, puede visualizarse e imprimirse en forma de tabla
o gráfica.
NOTAS:
El sistema no calculará la previsión antes de disponer de los datos de los
primeros catorce días. Por tanto, la primera previsión el día nº 15, con los datos
del día 14 y anteriores, para el día nº 17.
El sistema no funcionará el día “D+1” si no están disponibles los valores de las
observaciones del día “D” y todas las reservas para el día “D+3”. La captura
incorrecta de la condición de día familiar no es obstáculo para el cálculo de la
previsión, aunque, evidentemente, ésta será errónea.
El modelo funcionará por última vez tres días antes de la finalización del
evento.
23
5 MARCO TEÓRICO
En este capítulo se explicará con mayor profundidad los métodos y modelos usados
para llevar a cabo la previsión. Para ello, como veremos, se ha usado el método de
Winters, que usa los valores históricos de la serie, y un modelo de programación
lineal, usando variables indicadoras.
5.1 Perspectiva de previsión
Comenzamos presentan una visión global de los distintos métodos que existen para
llevar a cabo una previsión, basándonos en lo que narra Spyros Makridakis en su libro
[1] .
Los métodos de previsión pueden dividirse en dos grandes categorías: cuantitativos y
cualitativos.
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
24
Figura 5-1. Resumen métodos de previsión
Los métodos cuantitativos son aquellos donde la información cuantitativa de la que
se dispone es suficiente, así encontramos:
Series de tiempo: utilizan únicamente los valores históricos de la serie a
estimar.
Explicativo: se basan en existencia de variables indicadoras; así, por ejemplo, la
variable ventas de un determinado producto puede explicarse a través del
precio, la calidad y la publicidad de ese producto.
Distribución de probabilidad.
Cuantitativos
Series de tiempo
Descomposición
AR, MA, ARMA
Medias móviles
Suavización exponencial
Simple
Holt
Winters
Explicativos
Regresión simple
Regresión múltiple
Econometría Distribución de
probabilidad
Cualitativos
Individual
Grupos
Método Delphi
Investigación de mercado
Analogías de productos
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
25
Los métodos cualitativos son aquellos donde la información cuantitativa es escasa o
inexistente, pero del que disponemos un conocimiento cualitativo suficiente.
Individual: opiniones subjetivas de personas muy vinculadas al mercado.
Grupos: comisiones que estudian el problema, aunque suele prevalecer la
jerarquía.
Método Delphi: Su objetivo es la consecución de un consenso basado en la
discusión entre expertos. Es un proceso repetitivo. Su funcionamiento se basa
en la elaboración de un cuestionario que ha de ser contestado por los expertos.
Una vez recibida la información, se vuelve a realizar otro cuestionario basado
en el anterior para ser contestado de nuevo hasta obtener un consenso final.
Investigación de mercado: encuestas.
Analogías de productos: comparación con el comportamiento conocido de
productos análogos.
Para poder aplicar la previsión cuantitativa se deben cumplir las siguientes
condiciones:
I. Disponer de información sobre el pasado.
II. Dicha información se podrá cuantificar en forma de dato numérico.
III. Se puede asumir que algunos aspectos de las pautas del pasado podrán
continuar en el futuro.
Esta última condición se conoce como assumption of continuity (hipótesis de la
continuidad); es la base fundamental tanto para los métodos cuantitativos como para
muchos cualitativos, sin importar lo sofisticados que sean.
Los métodos de previsión cuantitativos varían considerablemente, se pueden
encontrar de distintos tipos con objetivos diversos. Cada uno cuenta con sus propias
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
26
características, precisión y costes que deben ser considerados a la hora de elegir un
método específico. Los procedimientos de previsión cuantitativos están comprendidos
entre dos límites: los métodos intuitivos y los métodos formales basados en principios
estadísticos. Los métodos intuitivos están basados en la experiencia empírica que
varía ampliamente entre distintos negocios, productos e investigadores. Estos son
menos exactos que los métodos formales y, además, dan poca o escasa información
sobre la exactitud de la previsión. Debido a estos factores, su uso se ha ido
extinguiendo dando paso a los métodos formales.
Los métodos formales estadísticos consisten en hacer aproximaciones intentando
minimizar el error de la previsión. Estos métodos recurren a datos históricos, que son
fáciles de usar y pueden aplicarse de forma mecánica. Además, son útiles cuando se
requiere un gran número de elementos y cuando los errores de previsión de un simple
elemento no son extremadamente costosos.
Las personas que no están familiarizadas con los métodos cuantitativos creen que el
pasado no puede predecir con certeza lo que sucederá en el futuro, porque este está
cambiando continuamente. Cuando logran familiarizarse con los datos y métodos de
previsión queda claro que algunos aspectos de la historia se repite aunque no sea
exactamente igual. La aplicación del método correcto puede identificar a menudo la
relación entre la variable que está siendo pronosticada y el tiempo (o alguna otra
variable), haciendo posible una previsión más precisa.
5.2 Pasos básicos para llevar a cabo la previsión
A la hora de realizar cualquier previsión con datos cuantitativos existen varios pasos
que hay que seguir. A continuación se presentan de forma resumida, según [1]:
1. Definición del problema.
Incluye la compresión de cómo se usará la previsión, quien las utilizará y para qué se
usará. Será necesaria la formación de las personas encargadas en la recogida de datos
y el mantenimiento de la base de datos.
2. Recabar información.
Es necesario recoger datos históricos de las variables de interés, de la variable a
prever, así como de las variables explicativas que se encuentren al alcance.
Esta información puedes ser cuantitativa (datos numéricos) o cualitativa (criterios
acumulados por la experiencia de los expertos).
3. Estudio preliminar.
El estudio de algunos datos estadísticos simples (media, desviación típica, varianza,
mínimo, máximo, correlaciones) puede ayudar a la selección del método adecuado.
4. Elección y ajustes de modelos.
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
27
Este paso incluye la elección y la elaboración de algunos modelos de previsión. Un
modelo de previsión consiste en un sistema de ecuaciones que relacionan los valores a
prever de una variable con los valores actuales y pasados de esa variable y de las
variables explicativas. El ajuste del modelo se basa en la adecuación de las
características del modelo, minimizando el error de predicción para el conjunto de
datos con los que se ha elaborado.
5. Empleo del modelo y valoración de la previsión.
Cuando se ha seleccionado el modelo de forma razonada y sus parámetros
correctamente, el modelo podrá ser utilizado para llevar a cabo la previsión.
Se realizará una distinción entre los errores de previsión y los de construcción del
modelo. Se avaluará los errores de previsión, que permitirá la comparación de
resultados entre distintos modelos y la elección de aquel que cometa el menor error de
previsión.
5.3 Criterios de evaluación de modelos de previsión
En este punto abordaremos una preocupación fundamental a la hora de llevar acabo
una previsión: como cuantificar lo adecuado que es un modelo para un conjunto de
datos. Para ello tendremos en cuenta como se ajusta el modelo de previsión a los datos
que ya conocemos.
A continuación se presentan los indicadores estadísticos más importantes a la hora de
evaluar distintos modelos de previsión.
5.3.1 Error de previsión
Es la diferencia entre el valor real y el valor de la previsión.
𝑒𝑡 = 𝑌𝑡 − �̅�𝑡
Donde;
𝑒𝑡: Error de la predicción en el instante t.
𝑌𝑡: Representa el verdadero valor de la variable.
�̅�𝑡: Valor previsto para esa variable en el instante t.
5.3.2 Error medio, ME
Si existen observaciones y previsiones para n periodos, se obtendrán n términos de
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
28
error. Entonces definiremos la medida estándar del error como:
𝑀𝐸 = 1
𝑛∑ 𝑒𝑡
𝑛
𝑡=1
Probablemente, el ME sea muy pequeño debido a que las desviaciones positivas se
irán contrarrestando con las negativas. Para solucionar esto, se utiliza el MAE.
5.3.3 Error absoluto medio, MAE
Es una medida del error global de la previsión para un modelo, esta se calcula
mediante la suma de los valores absolutos de los errores de la previsión y dividiéndolo
entre el número de periodo n.
𝑀𝐴𝐸 = 1
𝑛∑|𝑒𝑡|
𝑛
𝑡=1
5.3.4 Error cuadrático medio, MSE
El MSE es una idea similar a la del MAE, elevando al cuadrado los errores y
sumándolos para luego hacer la media. A diferencia del MAE, que resulta más fácil
de interpretar para los usuarios que no sean especialistas, en el MSE encontramos
mayor facilidad en su manejo matemático, siendo comúnmente usado en problemas
de optimización.
𝑀𝑆𝐸 = 1
𝑛∑ 𝑒𝑡
2
𝑛
𝑡=1
5.3.5 Raíz del error cuadrático medio, RMSE
El RMSE se calcula como la raíz del error medio cuadrático. Cuenta con las mismas
unidades que la serie temporal que predecimos.
𝑅𝑀𝑆𝐸 = √1
𝑛∑ 𝑒𝑡
2
𝑛
𝑡=1
5.4 Modelos de previsión
Como adelantamos, a continuación se presenta la base teórica de los métodos usados
en nuestro trabajo.
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
29
5.4.1 Método de Winters
A continuación abordaremos el método de Winters, que es el que se ha usado para
realizar nuestro modelo de previsión. Para ellos nos basamos en la teoría encontrada
en [2].
5.4.1.1 Demanda estacional
Sea la serie temporal representada por el siguiente modelo:
𝐷𝑡 = (𝐷 + 𝑝 ∗ 𝑡)𝐹𝑡 + 𝜉𝑡 𝐸(𝜉𝑡) = 0 𝑉(𝜉𝑡) = 𝜎2
Donde:
D: Componente permanente
P: Componente de tendencia o pendiente
𝐹𝑡: Componente estacional o factor multiplicativo
𝜉𝑡: Componente aleatoria
La longitud de la estación se supone que es de L periodos. Los factores estacionales están definidos de forma que sumen la longitud de la estación, es decir:
∑ 𝐹𝑡𝐿𝑡=1 = 𝐿 L=longitud de la estación
La estimación requiere un proceso iterativo con tres fases: una para la componente permanente D, otra para la pendiente p y una tercera para el factor estacional de ese periodo 𝐹𝑡.
5.4.1.2 Algoritmo: Método de Winters
Al final del periodo T, una vez conocida la demanda real del periodo 𝐷𝑡:
1) Estimación de la componente permanente:
𝑆𝑇 = 𝛼 ∗𝐷𝑇
𝐹𝑇−𝐿+ (1 − 𝛼) ∗ [𝑆𝑇−1 + 𝑝𝑇−1]
2) Estimación de la tendencia:
𝑝𝑇 = 𝛽 ∗ [𝑆𝑇 + 𝑆𝑇−1] + (1 − 𝛽) ∗ 𝑝𝑇−1
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
30
3) Estimación del factor estacional:
�̅�𝑇 = 𝛾 ∗𝐷𝑇
𝑆𝑇+ (1 − 𝛾) ∗ 𝐹𝑇−𝐿
4) Normalización de los factores estacionales:
𝐹𝑇 = 𝐿 ∗�̅�𝑡
∑ �̅�𝑡𝐿𝑡=1
𝑡 = 𝑛𝐿 + 1, 𝑛𝐿 + 2, … , (𝑛 + 1)𝐿
5) La previsión para el periodo 𝑇 + 𝜏 será:
𝐷 𝑇+ 𝜏(𝑇) = 𝑊 𝑇+ 𝜏 = (𝑆𝑇 + 𝜏 ∗ 𝑝𝑇) ∗ 𝐹 𝑇+ 𝜏−𝐿
5.4.1.3 Selección de valores iniciales
El proceso de inicialización requiere la estimación inicial de los siguientes
parámetros: las tres constantes de alisamiento, la componente permanente y las
tendencias iniciales y los factores estacionales para cada uno de los períodos que
componen la estación:
𝛼, 𝛽, 𝛾, 𝐷0, 𝑝0, 𝐹1−𝐿 , 𝐹2−𝐿, … , 𝐹0
Para lo cual se necesitan 2L observaciones 𝐷1,…, 𝐷2𝐿
Figura 5-2. Inicialización del método de Winters
a) Pendiente:
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
31
𝑝0 =1
𝐿∗ ∑
𝐷𝑡+𝐿 − 𝐷𝑡
𝐿
𝐿
𝑡=1
=𝜇2 − 𝜇1
𝐿
b) Componente permanente:
𝐷0 = 𝜇2 +(𝐿 − 1)
2∗ 𝑝0
c) Componentes estacionales:
�̅�𝑖(1) =𝐷𝑖
𝐷0′ + 𝑝0𝑖
=𝐷𝑖
𝜇1 − (𝐿 + 1
2− 𝑖) ∗ 𝑝0
Para 𝑖 = 1, 2, … , 𝐿. Al disponer de dos ciclos de observaciones se pueden
calcular análogamente los factores de estacionalidad para el segundo ciclo,
L+1, …, 2L, que tomarán la forma:
�̅�𝑖(2) =𝐷𝑖+𝐿
𝜇2 − (𝐿 + 1
2− 𝑖) ∗ 𝑝0
En este caso emplearemos como factor estacional la media de los obtenidos
para los ciclos de los que disponemos de datos. En nuestro caso, al disponer de
dos ciclos:
�̅�𝑖−𝐿 =�̅�𝑖(1) + �̅�𝑖(2)
2 𝑖 = 1, … , 𝐿
Que normalizamos, para que sume la longitud de la estación:
𝐹𝑖−𝑙 = 𝐿 ∗�̅�𝑖−𝐿
∑ �̅�𝑖−𝐿𝐿𝑖=1
𝑖 = 1 , … , 𝐿
d) Constantes de alisamiento: 𝛼, 𝛽 y 𝛾.
Se hará por simulación. Creando una rutina que produzca el error mínimo.
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
32
5.4.2 Modelo de programación lineal
Además del método de Winters, para calcular la previsión se usará un modelo de
programación lineal. Este modelo se presenta a continuación:
Función objetivo:
min 𝑤0 ∗ 𝐻𝑀𝐴𝑋 + ∑ (𝑤𝑝𝑖 ∗ 𝐻𝑃𝑖 + 𝑤𝑛𝑖 ∗ 𝐻𝑁𝑖)
𝑛º 𝑜𝑏𝑠𝑒𝑟𝑣𝑎𝑐𝑖𝑜𝑛𝑒𝑠
𝑖=1
Restricciones:
𝐷𝑖 : ∑ (𝑟𝑒𝑔𝑟𝑒𝑠𝑖𝑗 ∗ 𝑃𝑗)
𝑛º 𝑟𝑒𝑔𝑟𝑒𝑠𝑜𝑟𝑒𝑠
𝑗=1
+ 𝐻𝑃𝑖 − 𝐻𝑁𝑖 = 𝑜𝑏𝑠𝑒𝑟𝑣𝑖 ∀𝑖 = 1 … 𝑛º 𝑜𝑏𝑠𝑒𝑟𝑣𝑎𝑐𝑖𝑜𝑛𝑒𝑠
𝐻𝑖: 𝐻𝑃𝑖 + 𝐻𝑁𝑖 − 𝐻𝑀𝐴𝑋 ≤ 0 ∀𝑖 = 1 … 𝑛º 𝑜𝑏𝑠𝑒𝑟𝑣𝑎𝑐𝑖𝑜𝑛𝑒𝑠
𝑃1,𝐻𝑀𝐴𝑋 ≥ 0
𝐻𝑃𝑖, 𝐻𝑁𝑖 ≥ 0 ∀𝑖 = 1 … 𝑛º 𝑜𝑏𝑠𝑒𝑟𝑣𝑎𝑐𝑖𝑜𝑛𝑒𝑠
𝑃𝑗 𝑙𝑖𝑏𝑟𝑒 ∀𝑗 = 1 … 𝑛º 𝑟𝑒𝑔𝑟𝑒𝑠𝑜𝑟𝑒𝑠
Donde:
𝑜𝑏𝑠𝑒𝑟𝑣𝑖: Valor de la observación del día i.
𝑟𝑒𝑔𝑟𝑒𝑠𝑖𝑗: Valor del regresor j el día i.
𝑤0: Peso del error absoluto máximo.
𝑤𝑝𝑖: Pesos de las desviaciones positivas.
𝑤𝑛𝑖: Pesos de las desviaciones negativas.
Una vez resuelto el modelo, se obtiene el valor de los coeficientes P (uno por
regresor) que hacen mínimas las holguras.
Para calcular el valor de la previsión (para el día nº observaciones + 3) se hará
mediante la siguiente fórmula:
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
33
𝑝𝑟𝑒𝑣𝑖𝑠𝑖ó𝑛 = ∑ 𝑃𝑗 ∗ 𝑟𝑒𝑔𝑟𝑒𝑠𝑛º𝑜𝑏𝑠𝑒𝑟𝑣𝑎𝑐𝑖𝑜𝑛𝑒𝑠+3,𝑗
𝑛º 𝑟𝑒𝑔𝑟𝑒𝑠𝑜𝑟𝑒𝑠
𝑗=1
35
6 IMPLEMENTACIÓN
En este capítulo se procede a la implementación de un modelo para prever la afluencia
de un evento real. Para ello, se elige la Exposición Universal que se celebró en Sevilla
en 1992. Se escoge este caso debido a la accesibilidad de los datos.
Se dispone de un total de 147 observaciones. Desde el 20 de abril de 1992 que se
inaguró la Exposición. De estas observaciones, como se aprecia en el anexo A,
obtendremos el número de personas que accedieron al recinto con pases de temporada
y con entradas cada uno de los días que tubo lugar el evento.
Figura 6-1. Observaciones junio
En la gráfica anterior se observa la afluencia al evento en el mes de junio, donde los
picos de afluencia representan las afluencias correspondientes a los fines de semana.
0,00
50,00
100,00
150,00
200,00
250,00
300,00
350,00
400,00
450,00
43 50 57 64 71
Pases
Entradas
Total
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
36
Figura 6-2. Total observaciones
En la gráfica anterior se muestra el número total de observaciones, pases de
temporada y entradas, que se dio durante la duración de la Exposición. Como es
previsible y se puede observar durante los meses estivales se produjo un aumento de
la afluencia.
Figura 6-3. Observación semanal
En la gráfica anterior se han representado tres semanas de forma aleatoria, queriendo
demostrar lo que se había comentado anteriormente. En la gráfica se observa que en
todas ellas la afluencia aumenta los fines de semana. Con esto se demuestra que
representan los picos que observamos en las gráficas 6-1 y 6-2.
Además de los datos las entradas y pases de temporadas, también se dispone de los
valores de las variables indicadoras. Que las utilizaremos mas adelante en los métodos
0,00
50,00
100,00
150,00
200,00
250,00
300,00
350,00
400,00
450,00
1 31 61 91 121 151
Total de observaciones
Total
0,00
50,00
100,00
150,00
200,00
250,00
300,00
350,00
20 al 26 abril
8 al 14 de junio
3 al 9 de agosto
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
37
elegidos.
Estas variables indicadoras son las reservas de hoteles que se produjeron en Sevilla y
en su extrarradio, los billetes de tren de Renfe con salida/destino Sevilla cada día, los
billetes de Iberia de pasajeros que aterrizaban y despegaban del aeropuerto de Sevilla
y el número de autobuses que salían/entraban en Sevilla por día. Todos ellos, así
como las entradas y pases de temporadas, expresados en miles de personas. Toda esta
información se puede encontrar en el anexo A.
Tras este breve análisis de los datos, se procede a implementar el modelo, el cual se
hará mediante el método de Winters y el modelo de programación lineal previamente
explicado.
Previamente, destacar que el desarrollo de todos los métodos se ha llevado a cabo en
el software Visual BASIC® en su versión 6, y sus códigos se pueden encontrar en los
anexos.
6.1 Winters
“Winters” es el nombre que se le ha proporcionado al código donde se ha
implementado el método de Winters, podemos encontrarlo en el anexo B. Este
método nos proporciona una previsión para las entradas y otra para los pases,
realizando dos pasadas del mismo método, basados en los valores históricos de las
observaciones que se dispongan.
Para su funcionamiento se deben especificar varios parámetros, que se recogerán en
“WINTERS_PAR” y dependiendo del valor de cada uno ellos, el código se ejecutara
de formar distintas. Estos son: “flag_depura”, “long_esta”, “num_per”, “flag_ctes”,
“flag_inic”, “num_inicia” y “porc_dia_fam”.
A continuación se explica la función de cada uno de ellos:
Flag_depura: este parámetro es útil a la hora de programar el método, porque
nos dice donde está fallando el código (si falla). Su valor será 0 si no tenemos
errores de compilación o lo pondremos a 1 si detectamos algún error para
localizar donde está ese error.
Long_esta: se refiere a la longitud de la estación. En nuestro caso será de una
semana (7 días).
Num_per: periodo futuro a prever. Como hemos explicado, haremos una
previsión para tres días después del último día que se conozcan los datos.
Flag_ctes: este parámetro nos permite introducir unas constantes de
alisamiento si su valor es 0 o calcularlas si su valor es 1. En el caso que sea 0
se darán los valores de α, β, y γ. Si el valor es 1, se proporcionará los valores
mínimos y máximos de estos. Así como, el paso para calcularlos.
Flag_inic: es parecido al anterior, ya que si vale 0, se leerán los valores
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
38
iniciales de WINTERS_PAR, o si vale 1 el programa los calculará como
hemos visto en el apartado 5.4.1.3.
Num_inicia: número de observaciones para inicializar el modelo. En nuestro
caso se consideran las dos primeras semanas, por lo tanto 14 días.
Porc_dia_fam: porcentaje que aumenta el número de entradas si el día es
familiar respecto a un día normal.
Además del fichero de parámetros, se proporcionará el fichero “RESERVAS_DAT”
que contiene los valores de las observaciones y las variables indicadoras (datos).
Aunque estas últimas no serán útil en este modelo, si lo serán para los modelos que se
presentarán más adelante. Cabe destacar que el número de observaciones es del cual
se dispone en el momento de realizar la observación y no del total de las
observaciones.
Una vez que se tienen bien definidos los parámetros en WINTERS_PAR y
RESERVAS_DAT, se procede a realizar la previsión. El resultado de esta previsión
será imprimida en los archivos WINTERS_PAS y WINTERS_ENT. En el primero,
se recogen la previsión correspondiente a los pases de temporada. En
WINTERS_ENT, la de las entradas.
Figura 6-4. Resultado pases por método de Winters
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
39
Figura 6-5. Resultado entradas por método de Winters
Las imágenes anteriores muestran como imprime el modelo de Winters las
previsiones de pases y entradas.
6.2 Modelo de programación lineal
Para realizar la previsión mediante este modelo, se han codificado dos códigos. El
primero que generará el modelo, para poder resolverlo mediante el software AMPL.
El segundo, una vez obtenida la solución del modelo, realizará la previsión a partir de
esta solución.
Comenzamos explicando el primero, “GEN-PRLI”, que será el que genera el modelo
y el cual podemos encontrar en el anexo C.
Para hacerlo funcionar, al igual que el método de Winters, necesitamos definir una
serie de parámetros. Estos se recogen en PROG-LIN_PAR y son los siguientes:
Num_reg: que es el número de regresores (1 + nº de variables indicadoras). En
nuestro caso tenemos 9 variables indicadoras, luego serán 10. Indicar que,
aparte de las 8 variables que obtenemos de los datos, añadiremos una más que
será entradas vendidas en día familiar. Este indicador será 0 si el día no es
familiar y 125 si lo es. Esto representa el número mínimo de entradas que se
espera vender en un día familiar y será útil para corregir el modelo en caso de
fallo y proponga una previsión menor a 125.
Flag_depura: mismo funcionamiento que en WINTERS_PAR.
Alfa: representa el peso inicial de las holguras positivas.
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
40
Beta: peso inicial de las holguras negativas.
Gamma: peso del máximo error.
A alfa y beta, les daremos un valor de 0,3 y 0,5 respectivamente para que el modelo
no sea extremadamente lento ni rápido, ante variaciones de las observaciones. El
criterio de selección del valor de gamma ha sido que, al estar relacionado con el peso
del error absoluto máximo (𝑤0), se le quería proporcionar menor importancia respecto
a HP y HN en la función objetivo. Luego se elige un valor que cumpla que 𝑤0 ≤0,3, este ha sido de 1,7.
Una vez definido PROG-LIN_PAR y teniendo el archivo RESERVAS_DAT bien
dimensionado, se procede a generar el modelo. Este quedará recogido en PROG-
LIN.mod, donde estará el modelo a resolver por AMPL.
Una vez generado el modelo, se ejecutará AMPL para proceder a la resolución del
mismo. Para evitar confusiones, el programa proporcionará una ventana donde nos
muestra el comando que hay que ejecutar en AMPL para generar la solución. Dicha
solución quedará recogida en PROG-LIN_SOL. De la siguiente forma:
Figura 6-6. Solución generada por AMPL
Una vez obtenida la solución, se ejecutará el código PROG-LIN (anexo D). Este
calcula las previsiones a partir de los coeficientes calculados por el AMPL, en PROG-
LIN_SOL y las reservas de dentro de tres días, en RESERVAS_DAT.
La solución se imprime en el archivo PRO-LIN_ENT, como vemos en la siguiente
figura:
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
41
Figura 6-7. Resultado entradas modelo de programación lineal
Hasta ahora hemos obtenido tres ficheros: la previsión de pases y entradas por
Winters y la de entradas por el modelo de programación lineal. A continuación se
realizará la previsión de entrada ponderando la de los diferentes métodos.
6.4 Ponderación de la previsión de entradas
Por último, se ha programado “PREVISIO” (anexo E). Este es un programa para
calcular las previsiones ponderando las de los diferentes métodos. Todas ellas están
guardadas en PREVISIO_DAT. La ponderación se realiza en base a las desviaciones
históricas de los diferentes métodos, y utilizando como peso el definido en
PREVISIO_PAR.
En el archivo PREVISIO_DAT, como se ha indicado, se encuentran los resultados de
pases y entradas obtenidos por Winters y los de entradas obtenidos por programación
lineal. Este archivo será generado por la persona encargada de realizar la previsión,
una vez que esta se haya completado por los dos métodos anteriores.
El programa PREVISIO imprimirá la solución en el archivo PREVISIO_RES, y este
será el resultado total de nuestro modelo. En la siguiente figura se puede observar
como se proporciona esta solución.
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
42
Figura 6-8. Solución generada por PREVISIO
43
7 RESULTADOS
En este capítulo se presentan los resultados obtenidos por los distintos métodos y
modelos usados.
En el anexo F se muestran los resultados obtenidos, para el conjunto de datos (en
anexo A). Obsérvese que los primeros días de la Exposición no se calcula la
previsión, ya que los modelos no pueden actuar hasta que no se disponga de un
número mínimo de observaciones, por lo que se proporcionan previsiones a partir del
día 17. En él aparecen:
A que día corresponde la previsión.
Los pases y entradas, respectivamente, calculados por Winters.
Las entradas calculadas por el modelo de regresión lineal.
La previsión de entradas ponderando los diferentes métodos. Comentar que la
previsión total que aparece, es la suma de la previsión de pases de Winters más
la de entradas ponderada.
En el anexo G se puede observar gráficamente los resultados obtenidos. En la primera
gráfica, se observa la previsión de entradas obtenida por el método de Winters, el de
programación lineal y la previsión ponderada por PREVISIO.
En la segunda, se representan las observaciones de entradas frente a la previsión de
entradas (ponderada). El error cometido por estos métodos para estas previsiones (de
entradas) se presenta en la siguiente tabla:
WINTERS PROG-LIN PREVISIO
MAE 32,27 57,43 34,30
Tabla 7-1. Errores de previsión de entradas
Se observa que el modelo de Winters proporciona resultados considerablemente
mejores el modelo de programación. El error cometido es mucho menor que el de este
último. Cabe destacar que el error del modelo de programación lineal se puede deber
tanto al error propio del método como a la falta de precisión de los valores de las
variables indicadoras.
Por último, en la tercera gráfica, se presentan la previsión total obtenida, pases de
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
44
temporada más entradas, frente a las observaciones totales. Obteniendo un MAE de
38,11. Gráficamente, se observa en la tercera gráfica del anexo G, que la previsión se
ajusta bastante bien a las observaciones, por lo tanto se consideran válidos los
métodos usados para llevar a cabo dicha previsión.
45
8 CONCLUSIONES
A pesar de la dificultad del modelo planteado, los métodos escogidos pueden
proporcionar estimaciones aproximadas de la afluencia total diaria. Esta afirmación
está condicionada a la disponibilidad y registro fidedigno de los datos sobre las
reservas de todos y cada uno de los días de la Exposición.
Del análisis de los experimentos realizados se puede extraer las siguientes
conclusiones:
1. Los modelos son robustos
2. Los resultados obtenidos dan lugar a aproximaciones razonables de la afluencia
total.
Por último, debido a que los primeros 14 días de la Exposición se utilizan para
calibrar inicialmente los parámetros de los modelos, las primeras previsiones que
calculen los modelos podrán tener un mayor grado de desviación.
47
ANEXO A: TABLA DE DATOS
Día Día
familiar
Pases Entradas Total Hotel
Sevilla
Hotel
Extrarradio
Renfe
entradas
Renfe
salidas
Iberia
entradas
Iberia
salidas
Bus
entradas
Bus
salidas
1 0 50,00 42,00 92,00 16,38 0,80 2,05 1,53 5,05 5,35 70,12 65,98
2 0 40,00 119,00 159,00 17,56 1,00 2,12 4,65 5,25 6,64 75,62 67,89
3 0 41,00 104,00 145,00 20,00 0,70 2,10 2,70 5,75 5,03 71,46 70,45
4 0 36,00 100,00 136,00 20,96 1,20 2,00 1,84 6,50 4,86 68,95 78,25
5 0 53,00 72,00 125,00 16,16 0,20 2,26 4,16 5,59 4,61 69,65 65,50
6 0 106,00 170,00 276,00 16,51 0,80 1,70 3,40 5,78 5,78 73,27 63,25
7 0 118,00 174,00 292,00 14,92 3,70 2,78 5,13 5,05 7,14 65,85 74,21
8 0 43,00 97,00 140,00 13,84 3,80 4,53 3,13 5,25 5,35 70,12 65,98
9 1 49,00 181,00 230,00 15,47 3,80 5,01 2,88 5,75 5,36 75,62 67,89
10 0 52,00 66,00 118,00 16,38 3,80 7,23 3,78 6,50 5,03 71,46 70,45
11 0 31,00 75,00 106,00 26,61 3,40 14,57 3,39 5,59 4,86 68,95 78,25
12 0 136,00 143,00 279,00 44,76 6,80 8,35 3,37 5,78 4,61 69,65 65,50
13 0 132,00 168,00 300,00 47,85 11,80 2,84 4,60 6,95 5,78 73,27 63,25
14 0 111,00 166,00 277,00 45,96 11,90 2,74 14,20 5,25 4,88 65,85 74,21
15 0 47,00 59,00 106,00 29,62 0,40 3,12 9,27 7,35 5,35 70,12 65,98
16 0 59,00 117,00 176,00 21,29 0,30 1,66 2,15 6,50 6,64 75,62 67,89
17 0 32,00 42,00 74,00 21,45 0,10 2,15 1,91 8,01 5,03 71,46 70,45
18 0 47,00 62,00 109,00 23,54 0,80 3,67 2,45 5,78 4,86 68,95 78,25
19 0 69,00 113,00 182,00 39,23 8,90 7,36 1,66 5,25 4,61 69,65 65,50
20 1 100,00 170,00 270,00 34,73 9,20 3,05 3,03 5,25 5,78 73,27 63,25
21 0 125,00 165,00 290,00 28,13 9,40 4,66 8,57 5,75 7,14 65,85 74,21
22 0 37,00 201,00 238,00 22,10 0,80 4,13 2,26 7,39 5,35 70,12 65,98
23 0 43,00 47,00 90,00 22,07 0,20 1,90 1,62 5,59 6,64 75,62 67,89
24 0 35,00 70,00 105,00 22,79 0,20 4,49 1,88 5,78 5,03 65,41 70,45
25 0 36,00 46,00 82,00 27,18 4,50 12,97 2,16 5,05 4,86 68,95 78,25
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
48
26 0 79,00 96,00 175,00 31,76 4,50 7,15 3,94 6,85 4,61 69,65 65,50
27 0 114,00 169,00 283,00 25,10 0,40 6,65 4,53 5,75 5,78 73,27 63,25
28 0 137,00 180,00 317,00 23,30 0,60 12,42 11,04 6,50 4,14 65,85 74,21
29 0 58,00 112,00 170,00 14,95 0,60 11,05 10,03 5,59 5,35 70,12 65,98
30 0 49,00 82,00 131,00 15,03 0,10 4,76 4,21 5,78 6,64 75,62 67,89
31 0 42,00 55,00 97,00 16,86 9,40 3,10 3,88 6,14 5,03 71,46 70,45
32 0 51,00 95,00 146,00 18,74 9,40 7,00 5,40 5,25 4,86 68,95 78,25
33 0 73,00 79,00 152,00 28,39 9,60 5,68 6,00 5,75 4,61 69,65 65,50
34 0 109,00 174,00 283,00 27,40 9,60 6,98 2,36 7,11 5,78 73,27 63,25
35 0 129,00 170,00 299,00 21,67 9,80 8,99 5,70 5,59 4,46 65,85 74,21
36 0 53,00 100,00 153,00 23,43 0,10 3,38 3,73 5,78 5,35 70,12 65,98
37 0 35,00 116,00 151,00 26,33 0,10 2,14 1,78 5,05 6,64 75,62 67,89
38 0 46,00 82,00 128,00 27,02 18,00 3,20 2,40 6,64 5,03 71,46 56,89
39 0 32,00 99,00 131,00 34,61 18,00 3,96 3,20 5,75 4,86 68,95 78,25
40 0 70,00 117,00 187,00 40,11 0,20 3,04 6,08 6,50 4,61 69,65 65,50
41 0 116,00 155,00 271,00 38,70 0,20 3,79 2,43 5,59 5,78 73,27 63,25
42 0 137,00 145,00 282,00 31,45 0,20 6,24 6,23 5,78 7,14 65,85 74,21
43 0 43,00 66,00 109,00 24,18 0,20 21,38 21,14 7,11 5,35 70,12 65,98
44 0 49,00 103,00 152,00 19,87 0,20 17,87 15,07 5,25 6,64 75,62 58,74
45 0 35,00 65,00 100,00 20,08 4,30 17,29 14,53 5,75 5,03 71,46 70,45
46 0 52,00 92,00 144,00 25,89 6,10 18,79 13,46 6,50 4,86 68,95 78,25
47 0 59,00 60,00 119,00 31,89 6,10 19,84 14,62 7,20 4,61 69,65 65,50
48 0 110,00 162,00 272,00 41,21 6,10 15,80 11,93 5,78 5,78 73,27 59,88
49 0 101,00 158,00 259,00 11,70 0,30 14,33 14,05 7,16 5,36 65,85 74,21
50 0 56,00 43,00 99,00 27,06 1,20 15,09 12,16 5,25 5,35 70,12 65,98
51 0 43,00 94,00 137,00 23,19 0,90 14,71 11,38 8,14 6,64 75,62 67,89
52 0 55,00 104,00 159,00 15,80 0,30 11,45 9,57 6,50 5,03 71,46 70,45
53 0 59,00 109,00 168,00 19,45 0,40 21,14 17,20 8,39 4,86 68,95 78,25
54 0 55,00 53,00 108,00 26,02 0,70 21,36 17,59 5,78 4,61 69,65 59,87
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
49
55 0 107,00 163,00 270,00 25,62 0,70 17,69 13,50 7,97 5,78 73,27 63,25
56 0 139,00 150,00 289,00 24,76 0,70 13,59 19,47 5,25 7,14 65,85 68,75
57 0 71,00 129,00 200,00 12,40 0,30 16,55 13,92 7,47 5,35 70,12 65,98
58 0 43,00 63,00 106,00 9,90 0,30 10,97 7,75 6,50 6,64 75,62 67,89
59 0 39,00 152,00 191,00 17,77 0,30 11,60 10,12 5,59 5,03 71,46 70,45
60 0 40,00 145,00 185,00 19,70 0,30 13,47 11,04 7,47 4,86 68,95 78,25
61 0 97,00 137,00 234,00 27,05 0,30 14,45 12,69 8,39 4,61 69,65 65,50
62 0 133,00 214,00 347,00 27,27 0,30 14,03 10,20 8,22 5,78 73,27 63,25
63 0 133,00 240,00 373,00 39,40 0,30 12,27 17,27 5,75 7,14 65,85 74,21
64 0 63,00 106,00 169,00 28,65 0,30 10,28 9,29 6,50 5,35 70,12 59,87
65 0 45,00 52,00 97,00 28,10 0,30 7,96 7,34 5,59 6,64 75,62 67,89
66 0 77,00 88,00 165,00 31,33 0,30 11,00 8,90 8,50 5,03 71,46 70,45
67 0 62,00 131,00 193,00 31,88 0,30 11,55 9,63 8,78 4,86 68,95 78,25
68 0 69,00 104,00 173,00 30,25 0,30 21,67 19,78 6,75 4,61 69,65 65,50
69 0 146,00 220,00 366,00 27,65 0,30 19,71 19,13 5,75 5,78 73,27 63,25
70 0 173,00 241,00 414,00 25,80 0,30 17,82 25,12 6,50 7,14 65,85 74,21
71 0 59,00 85,00 144,00 13,42 0,30 16,98 24,11 5,59 5,35 70,12 65,98
72 0 45,00 72,00 117,00 10,25 0,30 15,40 16,42 5,78 4,86 75,62 67,89
73 0 67,00 69,00 136,00 14,43 0,30 11,98 9,30 5,88 5,03 71,46 70,45
74 0 41,00 59,00 100,00 12,73 0,30 12,42 8,54 5,25 4,86 68,95 64,59
75 0 100,00 154,00 254,00 13,91 0,30 12,05 9,10 5,75 4,61 69,65 65,50
76 0 140,00 197,00 337,00 14,78 0,30 13,39 15,02 6,50 5,78 73,27 63,25
77 0 139,00 208,00 347,00 15,72 0,30 12,59 17,48 5,59 7,14 65,85 74,21
78 0 45,00 142,00 187,00 11,70 0,30 14,33 14,05 5,78 5,35 70,12 65,98
79 0 56,00 154,00 210,00 15,90 0,30 7,85 7,88 8,14 6,64 75,62 67,89
80 1 47,00 175,00 222,00 14,48 0,30 6,08 7,90 5,25 5,03 71,46 70,45
81 0 54,00 104,00 158,00 20,01 0,50 9,32 8,54 7,11 4,86 68,95 58,75
82 0 71,00 143,00 214,00 22,65 0,50 11,21 8,55 6,50 4,61 69,65 65,50
83 0 178,00 228,00 406,00 21,71 0,70 6,33 8,10 5,59 5,78 73,27 63,25
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
50
84 0 164,00 218,00 382,00 21,80 0,90 11,58 21,04 8,31 7,14 65,85 74,21
85 0 57,00 124,00 181,00 15,40 0,70 16,47 16,54 7,97 5,35 70,12 65,98
86 0 39,00 88,00 127,00 12,61 0,70 12,55 11,15 5,25 6,64 75,62 67,89
87 0 73,00 112,00 185,00 11,85 0,70 9,39 10,62 5,75 5,03 71,46 70,45
88 0 48,00 131,00 179,00 11,04 0,70 16,73 14,73 6,50 4,86 68,95 78,25
89 0 80,00 113,00 193,00 13,85 1,20 19,72 14,19 5,59 4,61 69,65 65,50
90 0 146,00 220,00 366,00 14,27 1,50 11,29 11,20 5,78 5,78 73,27 63,25
91 0 176,00 238,00 414,00 14,61 1,50 11,70 20,51 7,39 7,14 65,85 58,75
92 0 43,00 64,00 107,00 13,62 1,00 17,38 15,01 7,70 5,35 70,12 65,98
93 0 58,00 93,00 151,00 16,07 1,00 9,85 10,43 7,64 6,64 75,62 67,89
94 0 61,00 133,00 194,00 21,52 1,00 9,41 9,89 6,50 5,03 71,46 70,45
95 0 47,00 61,00 108,00 22,12 1,20 8,78 9,78 5,59 4,86 68,95 78,25
96 0 66,00 152,00 218,00 21,35 1,50 11,36 8,68 5,78 4,61 69,65 65,50
97 0 102,00 141,00 243,00 22,02 1,50 10,50 9,32 8,87 5,78 73,27 63,25
98 0 175,00 236,00 411,00 17,43 1,00 10,25 17,88 7,86 7,14 65,85 74,21
99 0 49,00 111,00 160,00 13,11 0,30 15,43 16,13 5,75 5,35 70,12 65,98
100 0 57,00 60,00 117,00 13,22 0,30 10,78 10,32 6,50 6,64 75,62 67,89
101 1 45,00 213,00 258,00 17,53 0,50 7,86 8,99 7,56 5,03 71,46 70,45
102 0 50,00 138,00 188,00 14,74 0,50 8,29 12,40 5,78 4,86 68,95 78,25
103 0 66,00 131,00 197,00 17,01 0,80 14,03 12,01 7,46 4,61 69,65 65,50
104 0 142,00 249,00 391,00 14,74 0,30 14,05 9,80 7,64 5,78 73,27 63,25
105 0 135,00 245,00 380,00 36,14 0,58 9,58 6,52 5,75 7,14 65,85 74,21
106 0 54,00 101,00 155,00 42,65 0,58 4,49 13,35 6,50 5,35 70,12 65,98
107 0 68,00 99,00 167,00 30,66 0,43 2,39 3,10 5,59 6,64 75,62 67,89
108 0 71,00 57,00 128,00 30,89 0,14 3,10 2,75 5,78 5,03 71,46 70,45
109 0 41,00 145,00 186,00 33,90 1,15 5,28 3,53 8,14 4,86 68,95 56,90
110 0 97,00 103,00 200,00 56,49 12,82 10,60 2,39 8,50 4,61 69,65 65,50
111 0 139,00 252,00 391,00 50,01 13,25 4,39 4,36 5,75 5,78 73,27 63,25
112 0 135,00 234,00 369,00 40,51 13,54 6,71 12,34 6,50 7,14 65,85 74,21
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
51
113 0 55,00 124,00 179,00 21,53 0,86 15,91 14,44 5,59 5,35 70,12 65,98
114 0 65,00 138,00 203,00 21,64 0,14 6,85 6,06 5,78 6,64 75,62 67,89
115 0 52,00 114,00 166,00 24,28 13,54 4,46 5,59 7,54 5,03 71,46 70,45
116 0 62,00 145,00 207,00 26,99 13,54 10,08 7,78 7,14 4,86 68,95 78,25
117 0 81,00 82,00 163,00 40,88 13,82 8,18 8,64 5,75 4,61 69,65 65,50
118 0 105,00 177,00 282,00 39,46 13,82 10,05 3,40 6,50 5,78 73,27 63,25
119 0 170,00 203,00 373,00 31,20 14,11 12,95 8,21 5,59 7,14 65,85 74,21
120 0 45,00 84,00 129,00 33,74 0,14 4,87 5,37 5,78 5,35 70,12 65,98
121 0 45,00 122,00 167,00 37,92 0,14 3,08 2,56 8,56 6,64 75,62 67,89
122 0 71,00 127,00 198,00 38,91 25,92 4,61 3,46 8,10 5,03 71,46 70,45
123 0 48,00 86,00 134,00 49,84 25,92 5,70 4,61 8,75 4,86 68,95 68,75
124 0 80,00 134,00 214,00 57,76 0,29 4,38 8,76 6,50 4,61 69,65 65,50
125 0 137,00 198,00 335,00 55,73 0,29 5,46 3,50 5,59 5,78 73,27 63,25
126 0 152,00 197,00 349,00 45,29 0,29 8,99 8,97 5,78 5,36 65,85 74,21
127 0 44,00 155,00 199,00 42,65 0,58 4,49 13,35 8,14 5,35 70,12 65,98
128 0 45,00 59,00 104,00 30,66 0,43 2,39 3,10 5,25 6,64 75,62 67,89
129 0 68,00 124,00 192,00 30,89 0,14 3,10 2,75 5,75 5,03 71,46 70,45
130 0 44,00 72,00 116,00 33,90 1,15 5,28 3,53 6,50 4,86 68,95 78,25
131 0 102,00 84,00 186,00 56,49 12,82 10,60 2,39 8,00 4,61 69,65 65,50
132 0 134,00 255,00 389,00 50,01 13,25 4,39 4,36 5,78 5,78 73,27 63,25
133 0 169,00 232,00 401,00 40,51 13,54 6,71 12,34 5,05 7,14 65,85 74,21
134 0 44,00 106,00 150,00 57,46 0,78 6,05 17,98 5,25 5,35 70,12 65,98
135 0 56,00 49,00 105,00 41,30 0,58 3,22 4,17 5,75 6,64 75,62 67,89
136 0 32,00 47,00 79,00 41,61 0,19 4,17 3,71 6,50 5,03 71,46 70,45
137 0 55,00 102,00 157,00 45,67 1,55 7,12 4,75 5,59 4,86 68,95 78,25
138 0 54,00 89,00 143,00 76,11 17,27 14,28 3,22 5,78 4,61 69,65 65,50
139 0 107,00 158,00 265,00 67,38 17,85 5,92 5,88 8,85 5,78 73,27 63,25
140 0 132,00 144,00 276,00 54,57 18,24 9,04 16,63 5,25 4,46 65,85 74,21
141 0 31,00 42,00 73,00 29,00 1,16 21,44 19,46 5,75 5,35 70,12 65,98
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
52
142 0 58,00 86,00 144,00 29,16 0,19 9,23 8,17 6,50 6,64 75,62 67,89
143 1 46,00 149,00 195,00 32,71 18,24 6,01 7,53 7,76 5,03 71,46 70,45
144 0 36,00 87,00 123,00 36,36 18,24 13,58 10,48 5,78 4,86 68,95 78,25
145 0 60,00 59,00 119,00 55,08 18,62 11,02 11,64 5,05 4,61 69,65 65,50
146 0 129,00 167,00 296,00 53,16 18,62 13,54 4,58 5,25 5,78 73,27 63,25
147 0 136,00 149,00 285,00 42,04 19,01 17,44 11,06 5,75 4,14 65,85 74,21
53
ANEXO B: CÓDIGO WINTERS
'************************************************************************************
' WINTERS.BAS
'
'Ficheros de parametros: WINTERS_PAR
'Ficheros de datos historicos: RESERVAS_DAT
'ficherso de previsiones: WINTERS_PAS (para pases)
' WINTERS_ENT (para entradas)
'
'*************************************************************************************
Option Explicit
Option Base 1
DefInt I-N
DefSng A-H, O-Z
'definicion de variables
'-----------------------
Dim observ(200) As Single 'observaciones
Dim perman(200) As Single 'estimacion de la componente permanente
Dim tenden(200) As Single 'estimacion de la tendencia
Dim estaci(200) As Single 'estimacion del factor estacional
Dim previs(200) As Single 'prevision
Dim previs_aux(200) As Single 'previvion auxliar
Dim err_pr(200) As Single 'error de prevision
Dim ts_acum As Single 'tracking signal del error acumulado
Dim ts_alis As Single 'tracking signal del error alisado
Dim dia_fam(200) As Single 'dias familiares
Dim n_obs As Integer 'nº de observaciones de la serie
Dim num_inicia As Integer 'nº de obervac. para inicializar el modelo
Dim flag_ctes As Integer 'para calcular las ctes. alisamiento (si=1)
Dim flag_inic As Integer 'para los valores iniciales (si=1)
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
54
Dim long_esta As Integer 'longitud de la estacion
Dim num_per As Integer 'periodo futuro a prever
Dim alfa As Single '1º cte de alisamiento
Dim beta As Single '2º cte de alisamiento
Dim gamma As Single '3º cte de alisamiento
Dim alfa_min As Single 'Alfa min, max y paso(para optimizar)
Dim alfa_pas As Single
Dim alfa_max As Single
Dim beta_min As Single 'beta min, max y paso(para optimizar)
Dim beta_pas As Single
Dim beta_max As Single
Dim gamma_min As Single 'gamma min, max y paso(para optimizar)
Dim gamma_pas As Single
Dim gamma_max As Single
Dim perm_ini As Single 'valor inicial de la componente permanente
Dim tend_ini As Single 'idem de la tendencia
Dim estaci_ini(24) As Single 'idem de los factores estacionales
Dim estaci_aux(24) As Single 'factores estacionales auxiliares
Dim flag_depura As Integer 'flag de depuracion (1=>imprime)
'registro del fichero de observaciones y reservas
Dim dia(180) As Integer 'nº de dia
Dim fec(180) As Single 'fecha(dd.mm)
Dim fam(180) As Integer 'dia familiar (0/1)
Dim obpas(180) As Single 'observacion pase
Dim obent(180) As Single ' entradas
Dim obtot(180) As Single ' total
Dim corsev(180) As Single 'hotele Sevilla
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
55
Dim corext(180) As Single 'hoteles extraradio
Dim renent(180) As Single 'Renfe entradas
Dim rensal(180) As Single ' salidas
Dim ibeent(180) As Single 'Iberia entradas
Dim ibesal(180) As Single ' salidas
Dim busent(180) As Single 'buses entradas
Dim bussal(180) As Single ' salidas
Dim entfam(180) As Single 'entradas vendidas en dia familiar
Dim wpas As Single 'Winters pases
Dim wdpas As Single ' desviacion
Dim went As Single 'WInters entradas
Dim wdent As Single ' desviacion
Dim rent As Single 'Regresion entradas
Dim rdent As Single ' desviacion
Dim plent As Single 'Prog lineal entradas
Dim pment As Single 'Prog matematica entradas
Dim prevent As Single 'prevision que se hizo de entradas
Dim prevtot As Single 'prevision de que se hizo de la Afluencia total
Sub main()
'defino variables que no estaban definidas, y me las pide el programa
'--------------------------------------------------------------------
Dim num_pasada As Integer
Dim i As Integer
Dim porc_dia_fam As Single
Dim e_min As Single
Dim suma_res As Single
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
56
Dim suma_res_c As Single
Dim x_mad As Single
Dim il As Integer
Dim ils As Integer
Dim suma_err As Single
Dim suma_err_c As Single
Dim Err_med As Single
Dim varianz As Single
Dim desviac As Single
Dim I_exc As Integer
Dim Err_acum As Single
Dim Err_alis As Single
Dim N_dat As Integer
Dim flag_n_obs As Integer 'permite que se lean todos los regresores almacenando correctamente n_obs
Dim j As Integer
num_pasada = 0
MsgBox ("Asegurese que RESERVAS_DAT los decimales aparecen con puntos(.) ")
'hacemos 2 pasadas: 1)para pases y 2)para el total
empezar:
num_pasada = num_pasada + 1
'Lectura del fichero de observaciones
'------------------------------------
Open "\\Vboxsvr\tfg\PRUEBAS\WINTERS_prueba\RESERVAS_DAT.txt" For Input As #1
For i = 1 To 176
Input #1, dia(i), fec(i), fam(i), obpas(i), obent(i), obtot(i), corsev(i), corext(i), renent(i), rensal(i), ibeent(i),
ibesal(i), busent(i), bussal(i), entfam(i)
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
57
'observ(I) = obpas 'pases
'observ(I) = obent 'entradas
'observ(I) = obtot 'total
If num_pasada = 1 Then
'pasada para pases de temporada
observ(i) = obpas(i) 'pases
dia_fam(i) = 0
Else
'pasada para las entradas
observ(i) = obent(i) 'entradas
dia_fam(i) = entfam(i)
End If
'paramos cuando encontremos el primer 0 en las observaciones
If observ(i) = 0 And flag_n_obs = 0 Then
n_obs = i - 1
flag_n_obs = 1
End If
Next i
If n_obs > 173 Or n_obs = 0 Then
MsgBox "Se ha terminado la EXPO"
Close
End
End If
If n_obs < 14 Then
MsgBox "Nº insuficientes de observaciones"
Close
End
End If
'Leemos el dia familiar de "n_obs+3"
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
58
dia_fam(n_obs + 3) = entfam(n_obs + 3)
Close #1
MsgBox "Calculando..."
'Lectura del fichero de parametros
'---------------------------------
Open "\\Vboxsvr\tfg\PRUEBAS\WINTERS_prueba\WINTERS_PAR.txt" For Input As #1
Input #1, flag_depura, long_esta, num_per, flag_ctes, flag_inic, num_inicia, porc_dia_fam
If flag_ctes = 0 Then
'las ctes de alisamiento se leen
Input #1, alfa, beta, gamma
Else
'las ctes de alisamiento se calculan
Input #1, alfa_min, alfa_pas, alfa_max
Input #1, beta_min, beta_pas, beta_max
Input #1, gamma_min, gamma_pas, gamma_max
End If
'en el fichero de resultados metemos los calculos intermedios
If flag_depura = 1 Then
Open "\\Vboxsvr\tfg\PRUEBAS\WINTERS_prueba\WINTERS_cac.txt" For Append As #2
Print #2, "OBSERVACIONES:"
Print #2,
For i = 1 To n_obs
Print #2, observ(i)
If i Mod 10 = 0 Then Print #2,
Next i
Print #2,
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
59
End If
'decrementamos las observaciones de los dias familiares
For i = 1 To n_obs
If observ(i) > porc_dia_fam * dia_fam(i) Then
observ(i) = observ(i) - porc_dia_fam * dia_fam(i)
End If
Next i
If flag_inic = 0 Then
'Los valores iniciales
Input #1, perm_ini, tend_ini
For i = 1 To long_esta
Input #1, estaci_ini(i)
estaci_aux(i) = estaci_ini(i)
Next i
Close #1
Else
Close #1
'los valores iniciales se calculan
calcular_valores_iniciales perm_ini, tend_ini, estaci_ini()
End If
If flag_depura = 1 Then
Print #2,: Print #2,
Print #2, "Valores iniciales:"
Print #2,
Print #2, " Permanente="; perm_ini
Print #2, " Tendencia ="; tend_ini
Print #2,
For j = 1 To long_esta
Print #2, Tab(5); j, estaci_ini(j)
Next j
End If
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
60
MsgBox "Valores iniciales:"
If flag_inic = 0 Then
MsgBox "LEIDOS"
Else
MsgBox "CALCULADOS"
End If
If flag_ctes = 1 Then
MsgBox "Calculando ctes. de alisamiento..."
optimizar_ctes_alisa alfa, beta, gamma, e_min
End If
If flag_depura = 1 Then
Print #2,
Print #2, Tab(10); "alfa, beta, gamma, e2=";
Print #2, alfa; beta; gamma;
If flag_ctes = 0 Then
Print #2, " LEIDAS";
Else
Print #2, e_min;
Print #2, " OPTIMAS";
End If
End If
MsgBox "Ctes de alisamiento:"
If flag_ctes = 0 Then
'Print "leidas "
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
61
MsgBox "LEIDAS"
Else
'Print "calculadas";
MsgBox "CALCULADAS"
End If
'Calculo de las componentes permanente, tendencia y estacionalidad
'con el numero de datos para inicializar el modelo (num_inicia)
'-----------------------------------------------------------------
For i = 1 To long_esta
estaci_ini(i) = estaci_aux(i)
Next i
'estimaciones iniciales de perm, tend y estacionalidad
perman(1) = fnper(alfa, observ(1), estaci_ini(1), perm_ini, tend_ini)
tenden(1) = fnten(beta, perman(1), perm_ini, tend_ini)
estaci_ini(1) = fnest(gamma, observ(1), perman(1), estaci_ini(1))
'prevision y error
previs_aux(1) = fnpre(perman(1), num_per, tenden(1), estaci_ini(num_per + 1))
estaci(1) = estaci_ini(1)
previs(1 + num_per) = previs_aux(1)
err_pr(1 + num_per) = observ(1 + num_per) - previs_aux(1)
suma_res = err_pr(1)
suma_res_c = err_pr(1) ^ 2
x_mad = Abs(err_pr(1))
'Siguientes estimaciones
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
62
For i = 2 To num_inicia
il = i Mod long_esta
If il = 0 Then il = long_esta
perman(i) = fnper(alfa, observ(i), estaci_ini(il), perman(i - 1), tenden(i - 1))
tenden(i) = fnten(beta, perman(i), perman(i - 1), tenden(i - 1))
estaci_ini(il) = fnest(gamma, observ(i), perman(i), estaci_ini(il))
estaci(i) = estaci_ini(il)
ils = il + num_per
If ils > long_esta Then ils = ils - long_esta
previs_aux(i) = fnpre(perman(i), num_per, tenden(i), estaci_ini(ils))
previs(i + num_per) = previs_aux(i)
err_pr(i + num_per) = observ(i + num_per) - previs_aux(i)
suma_res = suma_res + err_pr(i)
suma_res_c = suma_res_c + err_pr(i) ^ 2
x_mad = x_mad + Abs(err_pr(i))
Next i
'Comienzo de la fase de prevision
'--------------------------------
suma_err = 0
suma_err_c = 0
For i = 1 To num_per
err_pr(i) = 0
previs(i) = 0
Next i
For i = num_inicia + 1 To n_obs
il = i Mod long_esta
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
63
If il <= 0 Then il = long_esta
previs(i) = fnpre(perman(i - num_per), num_per, tenden(i - num_per), estaci_ini(il))
perman(i) = fnper(alfa, observ(i), estaci_ini(il), perman(i - 1), tenden(i - 1))
tenden(i) = fnten(beta, perman(i), perman(i - 1), tenden(i - 1))
estaci_ini(il) = fnest(gamma, observ(i), perman(i), estaci_ini(il))
estaci(i) = estaci_ini(il)
err_pr(i) = observ(i) - previs(i)
suma_err = suma_err + err_pr(i)
suma_err_c = suma_err_c + err_pr(i) ^ 2
Next i
'IMPRESION DE RESULTADOS
'------------------------
MsgBox "Previsión calcuada"
If flag_depura = 1 Then
Print #2, Chr$(12);
Print #2, Tab(15); "SALIDA DE LA FASE DE INICIALIZACION"
Print #2, " Per Observ Perman Tendenc F.Estac Previs Residuo"
For i = 1 To num_inicia
Print #2, i;
Print #2, observ(i);
Print #2, perman(i);
Print #2, tenden(i); estaci(i);
Print #2, previs(i); err_pr(i)
If i Mod 60 = 0 Then
Print #2, Chr$(12);
Print #2, Tab(15); "SALIDA DE LA FASE DE INICIALIZACION (Cont)"
Print #2, " Per Observ Perman Tendenc F.Estac Previs Residuo"
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
64
End If
Next i
End If
'Error medio, varianza y desviacion tipica
'de la fase de inicializacion(residuos)
Err_med = suma_res / num_inicia
varianz = (suma_res_c - num_inicia * Err_med ^ 2) / (num_inicia - 1)
desviac = Sqr(varianz)
x_mad = x_mad / num_inicia
I_exc = 0
For i = 1 To num_inicia
If err_pr(i) < desviac * (-2) Or err_pr(i) > desviac * 2 Then I_exc = I_exc + 1
Next i
If flag_depura = 1 Then
Print #2,
Print #2, "sumatorio residuos= "; suma_res; " Error medio= "; Err_med; " MAD= "; x_mad
Print #2, "Varianza= "; varianz; "Desv. Tipica= "; desviac
Print #2, "Nº de residuos que exceden 2*(sigma)= "; I_exc
Print #2, Chr$(12);
Print #2, Tab(20); "SALIDA DE LA FASE DE PREVISION"
Print #2, Tab(10); "Long de la estacion:"; long_esta, "Periodo a prever:"; num_per
Print #2, " Per Observ Perman Tendenc F.Estac Previs Residuo Tracking Signals"
Print #2, " Err Acum Err Alis"
End If
'
'Calculo de tracking signals
Err_acum = 0
Err_alis = 0
For i = num_inicia + 1 To n_obs
Err_acum = Err_acum + err_pr(i)
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
65
Err_alis = 0.1 * err_pr(i) + 0.9 * Err_alis
x_mad = 0.1 * Abs(err_pr(i)) + 0.9 * x_mad
ts_acum = Err_acum / x_mad
ts_alis = Err_alis / x_mad
If flag_depura = 1 Then
Print #2, i;
Print #2, observ(i);
Print #2, perman(i);
Print #2, tenden(i); estaci(i);
Print #2, previs(i); err_pr(i);
Print #2, ts_acum; ts_alis
If i Mod 60 = 0 Then
Print #2, Chr$(12);
Print #2, Tab(20); "SALIDA DE LA FASE DE PREVISION(Cont)"
Print #2, Tab(10); "Long de la estacion:"; long_esta, "Periodo a prever:"; num_per
Print #2, " Per Observ Perman Tendenc F.Estac Previs Residuo Tracking Signals"
Print #2, " Err Acum Err Alis"
End If
End If
Next i
'
'Error medio, varianza y desviacion tipica
N_dat = n_obs - num_inicia
If N_dat > 1 Then
Err_med = suma_err / N_dat
varianz = (suma_err_c - N_dat * Err_med ^ 2) / (N_dat - 1)
desviac = Sqr(varianz)
Else
Err_med = 0
varianz = 0
desviac = 0
End If
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
66
If flag_depura = 1 Then
Print #2,
Print #2, "Sumatorio errores de prev="; suma_err; " Error de prev medio= "; Err_med
Print #2, " Varianza= "; varianz; " Desv. tipica= "; desviac
End If
'
'
'PREVISIONES PARA EL FUTURO
'---------------------------
previs(n_obs + 3) = (perman(n_obs) + 3 * tenden(n_obs)) * estaci(n_obs + 3 - long_esta)
previs(n_obs + 3) = previs(n_obs + 3) + porc_dia_fam * dia_fam(n_obs + 3)
If flag_depura = 1 Then
Print #2,
Print #2, Tab(15); "Prevision para el dia"; n_obs + 3; ":"; previs(n_obs + 3)
Print #2,
Close #2
End If
'
'Impresion de datos estadisticos
'-------------------------------
If num_pasada = 1 Then
'
'abrimos ficheros de pases
'
Open "\\Vboxsvr\tfg\PRUEBAS\WINTERS_prueba\WINTERS_PAS.txt" For Append As #1
Else
'
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
67
'abrimos ficheros de entradas
'
Open "\\Vboxsvr\tfg\PRUEBAS\WINTERS_prueba\WINTERS_ENT.txt" For Append As #1
End If
Print #1, "numero de observaciones:"; n_obs
Print #1, "prevision: "; previs(n_obs + 3), "desviacion: "; desviac
Print #1, "alfa: "; alfa, "beta: "; beta, "gamma: "; gamma
Print #1, perm_ini, tend_ini
For i = 1 To long_esta
Print #1, estaci_ini(i)
Next i
Print #1,
Close #1
'
'siguiente pasada(si ha lugar)
'-----------------------------
If num_pasada = 1 Then
GoTo empezar
End If
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
68
End Sub
'Definicion de FUNCIONES y RUTINAS
'---------------------------------
'RUTINA para optimizar las ctes de alisamiento
Sub optimizar_ctes_alisa(ByRef alfa As Single, ByRef beta As Single, ByRef gamma As Single, ByRef
error_pre As Single)
'***************************************************
'Rutina para calcular las ctes de alisamiento
'que produzcan el error minimo
'***************************************************
'variables que no estaban definidas
'----------------------------------
Dim i_alfa As Single
Dim i_beta As Single
Dim i_gamma As Single
Dim v_alfa As Single
Dim ii As Integer
Dim v_beta As Single
Dim ij As Integer
Dim v_gamma As Single
Dim ik As Integer
Dim i As Integer
Dim prev As Single
Dim e_prev As Single
Dim il As Integer
Dim ils As Integer
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
69
'
'Nº de iteraciones que hacen falta para cada cte
'
i_alfa = ((alfa_max - alfa_min) / alfa_pas) + 1
i_beta = ((beta_max - beta_min) / beta_pas) + 1
i_gamma = ((gamma_max - gamma_min) / gamma_pas) + 1
'El error minimo lo hacemos lo mayor posible
error_pre = 1E+30
v_alfa = alfa_min
For ii = 1 To i_alfa
v_beta = beta_min
For ij = 1 To i_beta
v_gamma = gamma_min
For ik = 1 To i_gamma
For i = 1 To long_esta
estaci_ini(i) = estaci_aux(i)
Next i
'
'Estimaciones iniciales de perm, tend, y estacionalidad
'
perman(1) = fnper(v_alfa, observ(1), estaci_ini(1), perm_ini, tend_ini)
tenden(1) = fnten(v_beta, perman(1), perm_ini, tend_ini)
estaci_ini(1) = fnest(v_gamma, observ(1), perman(1), estaci_ini(1))
'
'prevision y error
'
prev = fnpre(perman(1), num_per, tenden(1), estaci_ini(1 + num_per))
e_prev = (observ(1 + num_per) - prev) ^ 2
'
'siguiente estimaciones
'
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
70
For i = 2 To num_inicia
il = i Mod long_esta
If il = 0 Then il = long_esta
perman(i) = fnper(v_alfa, observ(i), estaci_ini(il), perman(i - 1), tenden(i - 1))
tenden(i) = fnten(v_beta, perman(i), perman(i - 1), tenden(i - 1))
estaci_ini(il) = fnest(v_gamma, observ(i), perman(i), estaci_ini(il))
ils = il + num_per
If ils > long_esta Then ils = ils - long_esta
prev = fnpre(perman(i), num_per, tenden(i), estaci_ini(ils))
e_prev = e_prev + (observ(i + num_per) - prev) ^ 2
Next i
'
'Comprobacion del error
'
If e_prev < error_pre Then
alfa = v_alfa
beta = v_beta
gamma = v_gamma
error_pre = e_prev
End If
'
'incrementar gamma
v_gamma = v_gamma + gamma_pas
Next ik
'
'incrementar beta
v_beta = v_beta + beta_pas
Next ij
'
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
71
'incrementar alfa
v_alfa = v_alfa + alfa_pas
Next ii
End Sub
'RUTINA para calcular los valores iniciales de la serie
Sub calcular_valores_iniciales(ByRef perm_ini As Single, ByRef tend_ini As Single, ByRef estaci_ini() As
Single)
'
'*******************************************
'Rutina para calcular los valores iniciales
'*******************************************
'variables que no estaban definidas
Dim numero_ini As Integer
Dim n_esta As Single
Dim j_1 As Integer
Dim j_2 As Integer
Dim i As Integer
Dim j As Integer
Dim v As Single
Dim x As Single
numero_ini = num_inicia
'
'utilizamos el mayor numero de observaciones posibles para inicializar
num_inicia = n_obs
'
'nº de estaciones (n_esta) a usar
n_esta = num_inicia / long_esta
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
72
If n_esta = 1 Then n_esta = 2 'como minimo 2 estaciones
If n_esta = 0 Then
If flag_depura = 1 Then
Print #2,: Print #2,
Print #2, Tab(10); "No existe suficientes datos para calcular los valores iniciales."
Print #2, Tab(10); "Introduzcalos como datos si quiere realizar operaciones"
Close #2
Else
MsgBox "nº de datos insuficientes(winters)"
End If
'
'se acabo
End
End If
If n_esta * long_esta <> num_inicia Then
num_inicia = n_esta * long_esta
End If
'Media de las observaciones en cada estacion de datos disponibles
Dim media_esta(176) As Single
j_1 = 1
j_2 = long_esta
For i = 1 To n_esta
For j = j_1 To j_2
media_esta(i) = media_esta(i) + observ(j)
Next j
media_esta(i) = media_esta(i) / long_esta
'
'siguiente estacion
j_1 = j_2 + 1
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
73
j_2 = j_1 + long_esta - 1
Next i
j_1 = num_inicia - long_esta
tend_ini = (media_esta(n_esta) - media_esta(1)) / j_1
perm_ini = media_esta(1) - (long_esta / 2!) * tend_ini
Dim ff(176, 24) As Single
j_1 = 0
For i = 1 To n_esta
For j = 1 To long_esta
j_2 = j + j_1 * long_esta
v = (((long_esta + 1!) / 2!) - j) * tend_ini
ff(i, j) = observ(j_2) / (media_esta(i) - v)
Next j
j_1 = j_1 + 1
Next i
'
'normalizacion de los factores estacionales
'
v = 0
For j = 1 To long_esta
x = 0
For i = 1 To n_esta
x = x + ff(i, j)
Next i
estaci_ini(j) = x / n_esta
v = v + estaci_ini(j)
Next j
For j = 1 To long_esta
estaci_ini(j) = estaci_ini(j) * (long_esta / v)
estaci_aux(j) = estaci_ini(j)
Next j
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
74
'
'restauramos el nº de periodos para inicializar la serie
'para utilizarlo para calcular las ctes de alisamiento
'
num_inicia = numero_ini
End Sub
'Estimacion de la componente permanente
' al=alfa x=observ e=fact est p=comp perm t=tenden
Function fnper(al As Single, x As Single, e As Single, p As Single, t As Single)
fnper = al * (x / e) + (1 - al) * (p + t)
End Function
'Estimacion de la tendencia
' be=beta p1=nue comp perm p0=ant comp per t=tenden
Function fnten(be As Single, p1 As Single, p0 As Single, t As Single)
fnten = be * (p1 - p0) + (1 - be) * t
End Function
'estimacion de la estacionalidad
' ga=gamma x=observ p=comp per e=factor estac
Function fnest(ga As Single, x As Single, p As Single, e As Single)
fnest = ga * (x / p) + (1 - ga) * e
End Function
'Calculo de la prevision
' p=comp perm t=tenden e=fact est n=Nº de per futuro a prever
Function fnpre(p As Single, N As Integer, t As Single, e As Single)
fnpre = (p + N * t) * e
End Function
75
ANEXO C: CÓDIGO GEN-PRLI
'**************************************************
' GEN-PRLI
'Fichero de parametros: PROG-LIN_PAR
'Fichero de datos historicos: RESERVAS_DAT
'Fichero del modelo: PROG-LIN_DAT
'Genera el modelo (en el fichero PROG-LIN_DAT)
'que resolvera AMPL
'
'**************************************************
Option Base 1
DefInt I-N
DefSng A-H, O-Z
'
'Definicion de funciones y rutinas
'---------------------------------
'
'Registro del fichero observaciones y reservas
'---------------------------------------------
Dim dia(180) As Integer 'nº de dia
Dim fec(180) As Single 'fecha(dd.mm)
Dim fam(180) As Integer 'dia familiar (0/1)
Dim obpas(180) As Single 'observacion pase
Dim obent(180) As Single ' entradas
Dim obtot(180) As Single ' total
Dim corsev(180) As Single 'hoteles Sevilla
Dim corext(180) As Single 'hoteles extraradio
Dim renent(180) As Single 'Renfe entradas
Dim rensal(180) As Single ' salidas
Dim ibeent(180) As Single 'Iberia entradas
Dim ibesal(180) As Single ' salidas
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
76
Dim busent(180) As Single 'buses entradas
Dim bussal(180) As Single ' salidas
Dim entfam(180) As Single 'entradas vendidas en dia familiar
'Declaracion de parametros
'-------------------------
Dim n_obs As Integer 'nº de observaciones
Dim num_reg As Integer 'nº de regresores(1+nº de variables indicadoras)
Dim flag_depura As Integer 'flag de depuracion(1=>imprime)
Dim alfa As Single 'peso inicial de las holguras positivas
Dim beta As Single 'peso inicial de las holguras negativas
'beta debe ser > que alfa
Dim gamma As Single 'peso del maximo error
Sub main()
'
'Lectura de los parametros
'-------------------------
Open "\\Vboxsvr\tfg\PRUEBAS\GEN_PRLI_prueba\PROG-LIN_PAR.txt" For Input As #1
Input #1, num_reg, flag_depura, alfa, beta, gamma
Close #1
'Definicion de matrices
'----------------------
Dim observ(200, 1) As Single 'observaciones
Dim regres(200, 10) As Single 'regresores
Dim wp(200) As Single 'pesos de las desviaciones positivas
Dim wn(200) As Single 'pesos de las desviaciones negativas
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
77
Dim w0 As Single 'peso del error absoluto maximo
'
'Lectura del fichero de observaciones
'------------------------------------
Open "\\Vboxsvr\tfg\PRUEBAS\WINTERS_prueba\RESERVAS_DAT.txt" For Input As #1 'Len = 56
For i = 1 To 176
Input #1, dia(i), fec(i), fam(i), obpas(i), obent(i), obtot(i), corsev(i), corext(i), renent(i), rensal(i), ibeent(i),
ibesal(i), busent(i), bussal(i), entfam(i)
'observ(i, 1) = rr.obtot 'total
observ(i, 1) = obent(i) 'solo entradas
regres(i, 1) = 1
regres(i, 2) = corsev(i)
regres(i, 3) = corext(i)
regres(i, 4) = renent(i)
regres(i, 5) = rensal(i)
regres(i, 6) = ibeent(i)
regres(i, 7) = ibesal(i)
regres(i, 8) = busent(i)
regres(i, 9) = bussal(i)
regres(i, 10) = entfam(i)
Next i
Close #1
'Paramos cuando encontremos el primer 0 en las observaciones
For i = 1 To 176
If observ(i, 1) = 0 Then
n_obs = i - 1
Exit For
End If
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
78
Next i
MsgBox ("Preparando...")
If n_obs <= num_reg Then
MsgBox ("Nº insuficiente de observaciones")
End
End If
'Si algunos de los regresores para "n_obs+3" es 0 => parar
'---------------------------------------------------------
For i = 2 To 9
If regres(n_obs + 3, i) = 0 Then
MsgBox ("No existen los regresores del dia")
MsgBox (n_obs + 3)
End
End If
Next i
'
'Vectores de pesos de las desviaciones de las observaciones pasadas
'------------------------------------------------------------------
uno_m_alfa = 1 - alfa
If uno_m_alfa < 0 Then uno_m_alfa = alfa - 1
uno_m_beta = 1 - beta
If uno_m_beta < 0 Then uno_m_beta = beta - 1
wp(n_obs) = alfa
wn(n_obs) = beta
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
79
For i = n_obs - 1 To 1 Step -1
wp(i) = wp(i + 1) * alfa
wn(i) = wn(i + 1) * beta
Next i
'
'peso asignado al maximo error absoluto
'
w0 = (alfa / (1 - alfa)) / gamma
'
'Fichero del modelo
'------------------
Open "\\Vboxsvr\tfg\PRUEBAS\GEN_PRLI_prueba\PROG-LIN.mod" For Output As #1
Print #1, "#Modelo de programacion lineal"
'
'Cotas: las P's son libres
'-------------------------
Print #1, "#Variables"
'
'La cte(P1) la obligamos a que sea >=0
'
Print #1, "var HMAX >= 0;"
For i = 1 To n_obs
Print #1, "var HP"; LTrim$(Str$(i)); " >= 0;"
Print #1, "var HN"; LTrim$(Str$(i)); " >= 0;"
Next i
Print #1, "var P1"; " >= "; "0 ;"
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
80
For j = 2 To num_reg
Print #1, "var P"; LTrim$(Str$(j)); " ; "
Next j
'Funcion objetivo
'----------------
Print #1, "#Funcion objetivo"
Print #1, "minimize z : + "; w0; "* HMAX";
For i = 1 To n_obs
Print #1, " + "; wp(i);
Print #1, "* HP"; LTrim$(Str$(i));
Print #1, " + "; wn(i);
Print #1, "* HN"; LTrim$(Str$(i));
If i Mod 2 = 0 Then Print #1,
Next i
'
'las que no estan en la funcion objetivo
'
If n_obs Mod 2 <> 0 Then Print #1,
Print #1, "+ 0*(";
For i = 1 To num_reg
Print #1, " + P"; LTrim$(Str$(i));
Next i
Print #1, ");"
'
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
81
'Restricciones
'-------------
Print #1, "#Restricciones"
For i = 1 To n_obs
'
'nombre de la restriccion
'
Print #1, "subject to D"; LTrim$(Str$(i)); " : ";
For j = 1 To num_reg
Print #1, " +";
Print #1, regres(i, j);
Print #1, "* P"; LTrim(Str$(j));
Next j
If num_reg Mod 5 <> 0 Then
Print #1,
Print #1, Spc(5);
End If
Print #1, " + HP"; LTrim$(Str$(i));
Print #1, " - HN"; LTrim$(Str$(i));
Print #1, " = ";
Print #1, observ(i, 1); " ; "
Next i
'Restricciones de maximo error absoluto
'--------------------------------------
For i = 1 To n_obs
'
'nombre de la restriccion
'
Print #1, "subject to H"; LTrim$(Str$(i)); " : ";
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
82
Print #1, " + HP"; LTrim$(Str$(i));
Print #1, " + HN"; LTrim$(Str$(i));
Print #1, " - HMAX <=0 ;"
Next i
Close #1
MsgBox ("Cambiar comas por puntos (en nº decimales) en el fichero: PROG-LIN.mod ")
Shell ("\\Vboxsvr\tfg\OPT\AMPL\PFE32.exe")
MsgBox ("¿Ha realizado el cambio?")
'Ejecutamos ampl
MsgBox ("Asegurese que PROG-LIN_SOL está vacio")
MsgBox ("escriba en ampl: include \\Vboxsvr\tfg\PRUEBAS\GEN_PRLI_prueba\PROG-LIN.run ;")
MsgBox ("solución en: PROG-LIN_SOL")
End Sub
83
ANEXO D: CÓDIGO PROG-LIN
'**************************************************
' PROG-LIN
'Fichero de parametros: PROG-LIN_PAR
'Fichero de datos historicos: RESERVAS_DAT
'Fichero de salida del AMPL: PROG-LIN_SOL
'Fichero de previsiones: PROG-LIN_ENT
'
'
'Calcula las previsiones a partir de los coeficientes calculados
'por el AMPL y las reservas de dentro de tres dias
'
'**************************************************
Option Base 1
DefInt I-N
DefSng A-H, O-Z
'
'Declaracion de parametros
'-------------------------
Dim n_obs As Integer 'nº de observaciones
Dim num_reg As Integer 'nº de regresores(1+nº de variables indicadoras)
Dim flag_depura As Integer 'flag de depuracion(1=>imprime)
Dim alfa As Single 'peso inicial de las holguras positivas
Dim beta As Single 'peso inicial de las holguras negativas
'beta debe ser > que alfa
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
84
'Registro del fichero observaciones y reservas
'---------------------------------------------
Dim dia(180) As Integer 'nº de dia
Dim fec(180) As Single 'fecha(dd.mm)
Dim fam(180) As Integer 'dia familiar (0/1)
Dim obpas(180) As Single 'observacion pase
Dim obent(180) As Single ' entradas
Dim obtot(180) As Single ' total
Dim corsev(180) As Single 'hoteles Sevilla
Dim corext(180) As Single 'hoteles extraradio
Dim renent(180) As Single 'Renfe entradas
Dim rensal(180) As Single ' salidas
Dim ibeent(180) As Single 'Iberia entradas
Dim ibesal(180) As Single ' salidas
Dim busent(180) As Single 'buses entradas
Dim bussal(180) As Single ' salidas
Dim entfam(180) As Single 'entradas vendidas en dia familiar
Dim linea As String
Sub main()
'Lectura de parametros
'---------------------
Open "\\Vboxsvr\tfg\PRUEBAS\GEN_PRLI_prueba\PROG-LIN_PAR.txt" For Input As #1
Input #1, num_reg, flag_depura, alfa, beta
Close #1
'
'Definicion de matrices
'------------------------
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
85
Dim observ(200, 1) As Single 'observaciones
Dim regres(200, 10) As Single 'regresores
Dim coef(200) As Single 'coeficientes (P) calculados por AMPL
'lectura del fichero de observaciones
'------------------------------------
Open "\\Vboxsvr\tfg\PRUEBAS\WINTERS_prueba\RESERVAS_DAT.txt" For Input As #1
For i = 1 To 176
Input #1, dia(i), fec(i), fam(i), obpas(i), obent(i), obtot(i), corsev(i), corext(i), renent(i), rensal(i), ibeent(i),
ibesal(i), busent(i), bussal(i), entfam(i)
'observ(i, 1) = rr.obtot 'total
observ(i, 1) = obent(i) 'solo entradas
regres(i, 1) = 1
regres(i, 2) = corsev(i)
regres(i, 3) = corext(i)
regres(i, 4) = renent(i)
regres(i, 5) = rensal(i)
regres(i, 6) = ibeent(i)
regres(i, 7) = ibesal(i)
regres(i, 8) = busent(i)
regres(i, 9) = bussal(i)
regres(i, 10) = entfam(i)
Next i
Close #1
'Paramos cuando encontremos el primer 0 en las observaciones
For i = 1 To 176
If observ(i, 1) = 0 Then
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
86
n_obs = i - 1
Exit For
End If
Next i
MsgBox ("Calculando...")
If n_obs <= num_reg Then
MsgBox ("Nº insuficiente de observaciones")
End
End If
'Fichero solucion del AMPL
'------------------------
Open "\\Vboxsvr\tfg\PRUEBAS\PROG-LIN_prueba\PROG-LIN_SOL.txt" For Input As #1
'Buscamos las P's
'-----------------
While Not EOF(1)
Line Input #1, linea
If InStr(linea, "P") > 0 Then
posi = InStr(linea, "P")
i = Val(Mid(linea, posi + 1, 2))
coef(i) = Val(Mid(linea, posi + 5, 14))
End If
Wend
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
87
Close #1
'Calculamos la prevision
'------------------------
previs = 0
For i = 1 To num_reg
previs = previs + coef(i) * regres(n_obs + 3, i)
Next i
'Fichero de estadisticas
'-----------------------
Open "\\Vboxsvr\tfg\PRUEBAS\PROG-LIN_prueba\PROG-LIN_ENT.txt" For Append As #1
Print #1, "Nº de observaciones: "; n_obs;
Print #1, "Previsión: "; previs
Print #1, "Coeficientes P's: "
For i = 1 To num_reg
Print #1, coef(i);
Next i
Print #1,
Print #1,
Close #1
End Sub
89
ANEXO E: CÓDIGO PREVISIO
'*******************************************************************
'
' PREVISIO
'
' Programa para calcular las previsiones ponderando las de
' los diferentes metodos. Todas ellas estan guardadas en
' PREVISIO_DAT. La ponderación se realiza en base a las
' desviaciones historicas de lo diferentes métodos, y utilizando
' como peso el definido en PREVISIO_PAR.
'*******************************************************************
Option Base 1
DefInt A-Z
'registro del fichero de observaciones y reservas
Dim dia(200) As Integer 'nº de dia
Dim fec(200) As Single 'fecha(dd.mm)
Dim fam(200) As Integer 'dia familiar (0/1)
Dim obpas(200) As Single 'observacion pase
Dim obent(200) As Single ' entradas
Dim obtot(200) As Single ' total
Dim corsev(200) As Single 'Hoteles Sevilla
Dim corext(200) As Single ‘ extraradio
Dim renent(200) As Single 'Renfe entradas
Dim rensal(200) As Single ' salidas
Dim ibeent(200) As Single 'Iberia entradas
Dim ibesal(200) As Single ' salidas
Dim busent(200) As Single 'buses entradas
Dim bussal(200) As Single ' salidas
Dim entfam(200) As Single 'entradas vendidas en dia familiar
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
90
Dim wpas(200) As Single 'Winters pases
Dim went(200) As Single 'WInters entradas
Dim plent(200) As Single 'Prog lineal entradas
Dim prevent(200) As Single 'prevision que se hizo de entradas
Dim prevtot(200) As Single 'prevision de que se hizo de la Afluencia total
'
'Declaracion de parametros
'-------------------------
Dim n_obs As Integer 'nº de observaciones
Dim alfa As Single 'peso inicial de las desviaciones mas cercanas
Dim pesos(200) As Single 'pesos de las observaciones
Dim pri_int_ent As Integer 'primer umbral de nº de entradas previstas
Sub main()
'
'Lectura de parametros
'---------------------
Open "\\Vboxsvr\tfg\PRUEBAS\PREVISIO_prueba\PREVISIO_PAR.txt" For Input As #1
Input #1, alfa, pri_int_ent
Close #1
'Definicion del vector de desviaciones
'-------------------------------------
' desv(,1)=winters desv_ac(1)= suma pesos()*desv(,1)
' desv(,2)=prog lin desv_ac(2)
Dim desv(200, 2) As Single
Dim desv_ac(2) As Single
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
91
Dim desv_tot As Single
'sacamos el numero de observaciones del fichero reserva
'------------------------------------------------------
Open "\\Vboxsvr\tfg\PRUEBAS\WINTERS_prueba\RESERVAS_DAT.txt" For Input As #1
For i = 1 To 176
Input #1, dia(i), fec(i), fam(i), obpas(i), obent(i), obtot(i), corsev(i), corext(i), renent(i), rensal(i), ibeent(i),
ibesal(i), busent(i), bussal(i), entfam(i)
'detectar nº de observaciones en n_obs
'-------------------------------------
If obtot(i) = 0 Then
n_obs = i - 1
Exit For
End If
Next i
Close #1
'OJO con el nº de observaciones
'------------------------------
If n_obs = 0 Or n_obs > 173 Then
MsgBox ("Se ha terminado la EXPO")
End
End If
'Veamos si hay 14 dias
'---------------------
If n_obs < 14 Then
MsgBox ("Nº insuficientes de observaciones")
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
92
End
End If
'Leemos el contenido del fichero
'-------------------------------
Open "\\Vboxsvr\tfg\PRUEBAS\PREVISIO_prueba\PREVISIO_DAT.txt" For Input As #1
For i = 14 To n_obs
Input #1, wpas(i), went(i), plent(i)
'Calculamos la desviacion de cada prevision de entradas con
'respecto a la observacion del dia 17 en adelante
'----------------------------------------------------------
desv(i, 1) = Abs(went(i) - obent(i))
desv(i, 2) = Abs(plent(i) - obent(i))
Next i
'formacion del vector peso
'-------------------------
For j = 1 To 2
desv_ac(j) = desv(n_obs, j)
Next j
pesos(n_obs) = alfa
For i = n_obs - 1 To 1 Step -1
pesos(i) = pesos(i + 1) * alfa 'alfa al cuadrado, cubo....
For j = 1 To 2
desv_ac(j) = desv_ac(j) + pesos(i) * desv(i, j)
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
93
Next j
Next i
Close #1
'Leemos las previsiones para n_obs+3
'-----------------------------------
Open "\\Vboxsvr\tfg\PRUEBAS\PREVISIO_prueba\PREVISIO_DAT.txt" For Input As #1
For i = 14 To n_obs + 3
Input #1, wpas(i), went(i), plent(i)
Next i
'Acumulamos las desv_ac() de los metodos que tengan prevision <> 0
'para el dia n_obs+3
'------------------------------------------------------------------
desv_tot = 0
If desv_ac(1) <> 0 Then desv_tot = desv_tot + (1 / desv_ac(1))
If desv_ac(2) <> 0 Then desv_tot = desv_tot + (1 / desv_ac(2))
'Formamos la prevision de entradas
'---------------------------------
If desv_tot = 0 Then
'todos lo metodos coinciden(por la razon que sea) y cogemos
'como prevision la que dé (por ejemplo) Winters
prevent(n_obs + 3) = went(n_obs + 3)
Else
prevent(n_obs + 3) = 0
If desv_ac(1) <> 0 Then
If went(n_obs + 3) > pri_int_ent Then
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
94
prevent(n_obs + 3) = prevent(n_obs + 3) + ((1 / desv_ac(1)) / desv_tot) * went(n_obs + 3)
Else
prevent(n_obs + 3) = prevent(n_obs + 3) + ((1 / desv_ac(1)) / desv_tot) * pri_int_ent
End If
End If
If desv_ac(2) <> 0 Then
If plent(n_obs + 3) > pri_int_ent Then
prevent(n_obs + 3) = prevent(n_obs + 3) + ((1 / desv_ac(2)) / desv_tot) * plent(n_obs + 3)
Else
prevent(n_obs + 3) = prevent(n_obs + 3) + ((1 / desv_ac(2)) / desv_tot) * pri_int_ent
End If
End If
End If
'Calculamos la prevision total
'-----------------------------
prevtot(n_obs + 3) = prevent(n_obs + 3) + wpas(n_obs + 3)
'Las grabamos en el registro
'---------------------------
MsgBox "Pases: " & wpas(n_obs + 3)
MsgBox "Entradas: " & prevent(n_obs + 3)
MsgBox "TOTAL: " & prevtot(n_obs + 3)
Close #1
Open "\\Vboxsvr\tfg\PRUEBAS\PREVISIO_prueba\PREVISIO_RES.txt" For Append As #1
Print #1, "Prevision dia: "; n_obs + 3
Print #1, "Pases: "; wpas(n_obs + 3)
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
95
Print #1, "Entradas: "; prevent(n_obs + 3)
Print #1, "TOTAL: "; prevtot(n_obs + 3)
Print #1,
Close #1
End Sub
97
ANEXO F: RESULTADOS
DIA WINTERS PROG.
LINEAL
PREVISIO
PASES ENTRADAS ENTRADAS ENTRADAS TOTAL
17 59,34 83,92 179,21 92,82 152,16
18 41,79 69,52 43,68 75,00 116,79
19 117,51 67,98 119,88 99,07 216,58
20 163,09 205,82 224,63 210,64 373,73
21 112,29 96,58 255,44 142,43 254,72
22 36,25 43,43 73,73 75,00 111,25
23 41,02 98,91 120,14 107,72 148,73
24 42,92 62,66 42,24 75,00 117,92
25 33,25 92,70 -36,19 83,03 116,28
26 72,13 116,19 145,44 129,02 201,14
27 95,42 173,93 80,82 145,56 240,98
28 109,31 174,08 110,98 151,14 260,45
29 34,85 82,99 -0,26 80,57 115,42
30 40,77 88,08 189,68 96,24 137,01
31 44,00 72,32 148,27 81,25 125,26
32 47,28 72,82 64,84 75,00 122,28
33 89,44 108,57 104,82 108,31 197,75
34 120,10 168,38 123,90 161,74 281,84
35 148,85 202,39 108,13 168,28 317,13
36 45,06 85,37 125,66 105,48 150,54
37 48,15 89,56 122,89 94,32 142,48
38 42,26 64,70 239,93 130,08 172,34
39 44,33 73,98 91,35 80,77 125,11
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
98
40 68,33 98,15 72,49 81,57 149,90
41 116,91 164,77 101,14 157,58 274,48
42 112,80 137,50 234,26 190,76 303,56
43 42,78 109,12 140,81 118,80 161,58
44 42,37 108,46 222,35 128,08 170,45
45 44,37 71,40 151,08 81,64 126,01
46 36,64 81,92 78,96 80,91 117,54
47 81,38 105,66 77,39 103,68 185,06
48 101,06 168,23 119,12 164,52 265,58
49 151,80 142,95 106,23 131,56 283,36
50 43,05 73,62 76,60 76,09 119,13
51 43,49 93,74 38,39 90,19 133,68
52 35,09 64,97 93,95 79,37 114,46
53 43,77 75,83 83,61 79,33 123,11
54 74,21 88,65 27,72 87,88 162,08
55 137,90 156,13 114,86 126,91 264,81
56 133,40 112,50 130,92 122,94 256,35
57 59,67 74,22 87,78 82,45 142,13
58 44,99 91,65 62,03 88,64 133,63
59 45,05 69,03 71,06 75,00 120,05
60 56,29 80,60 113,00 99,03 155,31
61 79,71 85,12 142,98 134,86 214,58
62 111,04 156,78 80,31 117,43 228,47
63 114,44 137,65 132,44 134,28 248,72
64 62,08 89,18 115,81 111,65 173,72
65 52,01 99,86 164,21 120,57 172,58
66 47,15 101,97 155,13 127,32 174,48
67 51,21 113,14 166,24 142,23 193,44
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
99
68 80,92 114,10 67,36 101,95 182,87
69 173,84 203,16 50,22 177,45 351,29
70 158,53 163,95 215,77 180,43 338,96
71 71,31 101,50 103,37 101,93 173,24
72 55,54 80,74 220,19 94,08 149,62
73 59,18 98,30 101,73 100,53 159,72
74 54,04 114,60 92,34 103,84 157,88
75 81,10 105,57 89,91 104,39 185,48
76 153,86 197,15 97,80 157,61 311,48
77 137,99 163,87 132,93 145,57 283,56
78 72,58 94,57 74,88 85,96 158,55
79 54,49 84,35 235,39 92,78 147,27
80 71,76 109,13 134,79 118,06 189,82
81 42,50 101,92 138,06 116,46 158,96
82 86,76 113,98 106,33 110,51 197,27
83 124,78 197,25 132,06 158,46 283,24
84 139,03 192,21 209,08 195,64 334,67
85 51,29 134,36 132,71 133,65 184,94
86 57,42 105,36 153,79 117,62 175,04
87 59,73 113,15 116,88 115,42 175,15
88 52,66 114,07 76,63 94,44 147,09
89 74,20 130,70 101,70 124,26 198,46
90 163,55 221,79 119,67 198,83 362,38
91 147,43 194,13 122,65 177,16 324,59
92 57,07 117,92 109,16 113,23 170,30
93 52,15 98,47 216,41 102,78 154,92
94 61,32 114,33 111,90 113,69 175,01
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
100
95 44,37 116,15 95,74 105,98 150,35
96 89,12 126,78 104,16 124,95 214,07
97 152,39 220,23 87,41 170,09 322,48
98 168,10 192,96 144,54 164,60 332,71
99 41,29 98,53 115,15 104,67 145,96
100 42,12 92,87 105,34 100,15 142,26
101 75,10 135,11 179,05 150,22 225,32
102 45,90 101,74 72,36 86,56 132,46
103 87,67 129,82 116,40 124,13 211,80
104 122,03 199,17 108,90 138,08 260,11
105 188,82 303,33 130,25 236,26 425,07
106 43,64 118,89 167,70 130,58 174,22
107 50,30 89,22 147,36 104,60 154,90
108 49,90 145,77 100,22 130,72 180,62
109 47,33 116,39 192,35 134,09 181,42
110 97,62 139,67 98,21 131,95 229,57
111 173,83 221,13 115,32 153,23 327,07
112 162,88 238,10 184,25 216,01 378,89
113 61,37 97,97 142,19 133,05 194,42
114 56,31 90,78 142,38 101,33 157,64
115 52,91 122,01 124,77 122,33 175,24
116 48,06 123,63 122,50 123,06 171,11
117 94,68 130,10 131,44 131,24 225,92
118 138,82 230,54 164,79 196,77 335,59
119 174,18 272,41 218,34 245,57 419,75
120 61,20 109,14 134,93 121,88 183,08
121 49,04 104,06 219,82 193,34 242,38
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
101
122 56,87 121,11 131,32 129,36 186,23
123 44,60 129,91 164,23 143,14 187,74
124 71,31 118,03 56,22 110,28 181,58
125 152,70 217,83 131,39 185,17 337,87
126 157,80 213,07 79,10 165,26 323,05
127 53,65 106,46 165,41 117,75 171,40
128 53,34 108,34 158,89 119,92 173,26
129 56,23 122,89 111,63 121,44 177,68
130 43,55 119,67 95,74 103,35 146,90
131 70,93 122,79 172,22 139,67 210,60
132 146,84 213,58 130,92 194,05 340,89
133 134,83 191,73 133,71 154,66 289,48
134 60,97 98,29 158,35 117,66 178,63
135 54,95 94,25 200,49 121,71 176,66
136 61,69 124,36 80,42 111,68 173,37
137 44,65 106,18 52,82 101,04 145,69
138 84,64 111,44 132,95 116,36 201,00
139 95,60 224,29 147,50 176,43 272,03
140 143,13 180,01 205,01 184,53 327,66
141 34,22 91,86 157,73 113,79 148,01
142 41,88 75,60 141,17 128,55 170,43
143 64,72 113,51 221,27 156,82 221,54
144 32,96 98,67 86,06 94,74 127,71
145 77,84 98,55 108,43 100,49 178,33
146 116,59 196,50 62,72 157,50 274,09
147 125,03 194,19 109,30 142,42 267,45
103
ANEXO G: GRÁFICAS DE RESULTADOS
-100
-50
0
50
100
150
200
250
300
350
17 24 31 38 45 52 59 66 73 80 87 94 101 108 115 122 129 136 143
went
plent
ent_prev
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
104
0
50
100
150
200
250
300
17 24 31 38 45 52 59 66 73 80 87 94 101 108 115 122 129 136 143
ent_prev
obent
Estimación de afluencia a eventos multitudinarios mediante modelo de Winters y programación lineal
105
0
50
100
150
200
250
300
350
400
450
17 24 31 38 45 52 59 66 73 80 87 94 101 108 115 122 129 136 143
prevtot
obtot
107
BIBLIOGRAFÍA
[1] S. C. W. y. R. J. H. Spyros Makridakis, Forecasting: Methods and applications, vol. 2, Wiley.
[2] J. G. L. Luis Onieva, Metodos modernos de gestión de la producción, Alianza Universidad Textos, 1988.
[3] F. J. Ceballos, Enciclopedia de Visual Basic, Ra-Ma.
[4] J. E. M. d. Cervalho, Visual Basic, McGraw-Hill.
[5] D. M. G. a. B. W. K. Robert Fourer, AMPL: A Modeling Language.