Heurística para la asignación de llamadas en ascensores con

Anuncio
Trabajo Fin de Grado
Grado en Ingeniería de Tecnologías Industriales
Heurística para la asignación
de llamadas en ascensores
con arquitectura DoubleDeck
Autor: José María Adalid Fedriani
Tutor: Pablo Fabio Cortés Achedad
+1
Departamento de Organización Industrial y
Gestión de Empresas II
Sevilla, 2014
Trabajo fin de grado
Grado en Ingeniería de Tecnologías Industriales
Heurística para la asignación de llamadas en
ascensores con arquitectura Double-Deck
Autor:
José María Adalid Fedriani
Tutor:
Pablo Fabio Cortés Achedad
Catedrático de Universidad
Escuela Técnica Superior de Ingeniería
Universidad de Sevilla
Sevilla, 2014
Trabajo Fin de Grado: Heurística para la asignación de llamadas en ascensores con arquitectura
Double-Deck
Autor:
José María Adalid Fedriani
Tutor:
Pablo Fabio Cortés Achedad
El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes
miembros:
Presidente:
Vocales:
Secretario:
Acuerdan otorgarle la calificación de:
Sevilla, 2014
El Secretario del Tribunal
Índice
Índice de tablas
10
Índice de figuras
11
1. Objeto del proyecto
13
2. Introducción
15
3. Sistemas de ascensores
20
3.1 Antecedentes de los ascensores
20
3.2 Ascensores en la actualidad
21
3.3 Otros tipos de ascensores
22
3.3.1 Lanzaderas
22
3.3.2 Ascensores panorámicos
23
3.3.3 Ascensores Double-Deck
23
4. Aspectos técnicos asociados a los sistemas de transporte
vertical mediante ascensores
4.1 Patrones de tráfico
25
26
7
4.2 Evaluación de la calidad de servicio
5. Sistemas para la asignación de las llamadas
28
30
5.1 Restricciones en el diseño
30
5.2 Sistemas de control
31
5.3 Algoritmo Nearest Call
35
5.3.1 Reasignación de llamadas
37
5.3.2 Medir distancias
38
5.3.3 Asignar llamadas
40
5.3.4 Desasignar llamadas por sobrepeso
42
5.4 Algoritmo Nearest Call con paradas simultáneas para
ascensores Double-Deck
6. Implementación del Software
6.1 Software de simulación Elevate
44
48
48
6.1.1 Proceso para la instalación del software de simulación
Elevate
48
6.1.2 Características del uso del software de simulación
Elevate
49
6.1.3 Informes y datos de salida del software de simulación
Elevate
54
6.2 Aplicación desarrollada en Microsoft Visual C++
7. Experimentación y resultados
8
56
58
7.1 Caracterización de los edificios empleados para la
simulación
58
7.2 Tratamiento de los resultados
59
7.3 Simulación
61
7.4 Edificio 1
62
7.4.1 Interfloor
62
7.4.2 Barney DownPeak
70
7.4.3 Barney UpPeak
74
7.5 Edificio 2
76
7.5.1 Interfloor
76
7.5.2 Barney DownPeak
84
7.5.3 Barney UpPeak
88
8. Conclusión
90
9. Bibliografía
92
10. Anexo A, Resultados intermedios
93
Edificio 1
93
Edificio 2
124
154
11. Anexo B, Código C++
Objeto ascensor
154
Objeto dispatch
163
9
Índice de tablas
Tabla 1: Edificios más altos del mundo
17
Tabla 2: Grados de servicio según porcentaje de llamadas respondidas
28
Tabla 3: Grado de servicio en función del tiempo empleado en responder las llamadas
29
Tabla 4: Diferencias entre los dos edificios
58
Tabla 5: Características ascensores y pasajeros
59
Tabla 6: Tabla de distribución t-Student
61
Tabla 7: Intervalos de confianza con un tráfico Interfloor 15% POP, Edificio 1
62
Tabla 8: Intervalos de confianza con un tráfico Interfloor 11% POP, Edificio 1
63
Tabla 9: Intervalos de confianza con un tráfico Interfloor 8% POP, Edificio 1
64
Tabla 10: Intervalos de confianza con un tráfico Interfloor 5% POP, Edificio 1
65
Tabla 11: Intervalos de confianza con un tráfico Barney DownPeak 15% POP, Edificio 1
70
Tabla 12: Intervalos de confianza con un tráfico Barney DownPeak 12% POP, Edificio 1
71
Tabla 13: Intervalos de confianza con un tráfico Barney DownPeak 8% POP, Edificio 1
72
Tabla 14: Intervalos de confianza con un tráfico Barney UpPeak 7% POP, Edificio 1
74
Tabla 15: Intervalos de confianza con un tráfico Interfloor 15% POP, Edificio 2
76
Tabla 16: Intervalos de confianza con un tráfico Interfloor 11% POP, Edificio 2
77
Tabla 17: Intervalos de confianza con un tráfico Interfloor 8% POP, Edificio 2
78
Tabla 18: Intervalos de confianza con un tráfico Interfloor 5% POP, Edificio 2
79
Tabla 19: Intervalos de confianza con un tráfico Barney DownPeak 15% POP, Edificio 2
84
Tabla 20: Intervalos de confianza con un tráfico Barney DownPeak 12% POP, Edificio 2
85
Tabla 21: Intervalos de confianza con un tráfico Barney DownPeak 8% POP, Edificio 2
86
Tabla 22: Intervalos de confianza con un tráfico Barney UpPeak 7% POP, Edificio 2
88
10
Índice de figuras
Figura 1: Edificio Burj Khalifa
18
Figura 2: Edificio Taipei 101
19
Figura 3: Lanzaderas y sky-lobbies
22
Figura 4: Ascensores panorámicos
23
Figura 5: Ascensores Double-Deck
24
Figura 6: Patrones de tráfico
26
Figura 7: Controlador de grupo de ascensores
32
Figura 8: Botonera típica de selección de sentido
34
Figura 9: Botonera Destination Control
34
Figura 10: Diagrama de flujo del algoritmo Nearest Call
36
Figura 11: Diagrama de flujo del bloque Reasignación de llamadas
38
Figura 12: Diagrama de flujo del bloque Medir distancias
40
Figura 13: Diagrama de flujo del bloque Asignar llamadas Nearest Call
41
Figura 14: Diagrama de flujo del bloque desasignar llamadas por sobrepeso
43
Figura 15: Asignación de llamadas del algoritmo Nearest Call con paradas simultáneas
para ascensores Double-Deck
45
Figura 16: Asignación de llamadas de plantas consecutivas con el algoritmo Nearest Call
47
Figura 17: Asignación de llamadas de plantas consecutivas con el algoritmo Nearest Call
con paradas simultáneas para ascensores Double-Deck
47
Figura 18: Pantalla de inicio de Elevate
49
Figura 19: Ventana de selección de datos de análisis
50
Figura 20: Ventana de datos del edificio
50
Figura 21: Selección de datos del ascensor estándar
51
Figura 22: Selección de datos del ascensor avanzada
51
Figura 23: Selección de datos de los pasajeros estándar
52
11
Figura 24: Selección de datos de los pasajeros avanzada, periodo Interfllor
52
Figura 25: Ventana de selección de las opciones del informe
53
Figura 26: Ventana de simulación de Elevate
54
Figura 27: Gráfica con los tiempos de trayecto de los pasajeros
55
Figura 28: Hoja Excel con los datos de simulación
55
Figura 29: Aspecto Microsoft Visual C++
56
Figura 30: Gráfica de tiempos de espera ante tráfico Interfloor 15% POP, edificio 1
66
Figura 31: Gráfica de tiempos de espera ante tráfico Interfloor 11% POP, edificio 1
66
Figura 32: Gráfica de tiempos de espera ante tráfico Interfloor 8% POP, edificio 1
66
Figura 33: Gráfica de tiempos de espera ante tráfico Interfloor 5% POP, edificio 1
67
Figura 34: Gráfica de tiempos de trayecto ante tráfico Interfloor 15% POP, edificio 1
67
Figura 35: Gráfica de tiempos de trayecto ante tráfico Interfloor 11% POP, edificio 1
68
Figura 36: Gráfica de tiempos de trayecto ante tráfico Interfloor 8% POP, edificio 1
68
Figura 37: Gráfica de tiempos de trayecto ante tráfico Interfloor 5% POP, edificio 1
68
Figura 38: Gráfica de tiempos de espera ante tráfico Interfloor 15% POP, edificio 2
80
Figura 39: Gráfica de tiempos de espera ante tráfico Interfloor 11% POP, edificio 2
80
Figura 40: Gráfica de tiempos de espera ante tráfico Interfloor 8% POP, edificio 2
80
Figura 41: Gráfica de tiempos de espera ante tráfico Interfloor 5% POP, edificio 2
81
Figura 42: Gráfica de tiempos de trayecto ante tráfico Interfloor 15% POP, edificio 2
81
Figura 43: Gráfica de tiempos de trayecto ante tráfico Interfloor 11% POP, edificio 2
82
Figura 44: Gráfica de tiempos de trayecto ante tráfico Interfloor 8% POP, edificio 2
82
Figura 45: Gráfica de tiempos de trayecto ante tráfico Interfloor 5% POP, edificio 2
82
12
1. Objeto del proyecto
Este trabajo de fin de grado tiene el objetivo de profundizar en el tema del despacho de llamadas en
sistemas de transporte vertical gestionados por grupos de ascensores. Tiene por objeto conseguir
proporcionar un servicio aceptable a los usuarios del edificio y que estos no tengan que soportar
tiempos de espera muy elevados para llegar a su destino. Para ello, el trabajo se centra en el empleo
de una arquitectura particular dentro de los sistemas de ascensores los ascensores con tipología
Double-Deck.
El enfoque que se sigue es intentar proponer una solución que se pueda implementar y mejore la
calidad del servicio. Para ello en el proyecto se ha desarrollado un código C++, que implementa un
algoritmo que aproveche las propiedades de estos ascensores ante un tipo concreto de tráfico, el
Interfloor.
Aparte de la elaboración del software correspondiente a este algoritmo, se ha comprobado su
correcto funcionamiento con distintas simulaciones, para así poder extraer conclusiones fiables.
El documento que aquí se presenta está dividido en ocho secciones, que están acompañadas de dos
anexos y la bibliografía usada.
La primera sección detalla la disposición del distinto contenido y fija el objeto del trabajo.
La segunda sección introduce el tema del trabajo, explica los motivos de la elaboración del trabajo y
da una idea de partida para los temas tratados en este.
La tercera sección detalla la evolución de los sistemas de ascensores en el tiempo y explica algunos
de los sistemas que se pueden encontrar actualmente, para fijar unas bases del trabajo.
La cuarta sección trata de los aspectos técnicos que van ligados a los distintos sistemas de transporte
13
vertical llevados a cabo por ascensores, que serán muy importantes para el desarrollo del proyecto.
La quinta sección versa sobre los sistemas para la asignación de las llamadas. Describiendo los
distintos sistemas de control del grupo de ascensores y explicando algunos de los algoritmos para el
despacho de ascensores. En este apartado viene descrito el funcionamiento del algoritmo Nearest
Call con paradas simultáneas para ascensores Double-Deck, que es el que se ha diseñado en este
trabajo.
En la sexta sección se presenta el software utilizado y se explica su uso.
La séptima sección trata sobre las simulaciones llevadas a cabo, fijando los distintos escenarios y
explicando el uso de los datos extraídos. En ella se incluyen los resultados obtenidos en estos
experimentos.
La octava sección concluye con las conclusiones que se han podido extraer durante la realización del
trabajo.
Finalmente se muestra la bibliografía utilizada, seguida de dos anexos. El primero de ellos muestra
todos los resultados obtenidos de cada una de las simulaciones realizadas. A su vez el segundo
incluye los principales objetos que se han utilizado durante la elaboración del programa.
De los resultados obtenidos se debe destacar como el algoritmo Nearest Call con paradas
simultáneas para ascensores Double-Deck, consigue mejorar en gran medida los tiempos de los otros
algoritmos con los que se lo ha comparado, en situaciones de tráfico Interfloor. Sin embargo este no
se ha mostrado eficiente ante otros tráficos, especialmente frente al DownPeak. Aunque se puede
concluir que el algoritmo cumple sus especificaciones, ya que este estaba diseñado para periodos de
tráfico Interfloor.
14
2. Introducción
Este trabajo viene motivado por el creciente número de grandes edificios y rascacielos. En estos
edificios, debido a sus dimensiones el servicio de ascensores es una variable crítica y fundamental.
Ya que estos edificios suelen tener un elevado número de usuarios a parte del gran número de plantas
a las que se les debe prestar servicio.
Los costes asociados a un sistema de ascensores son demasiado altos para tolerar una instalación
poco eficiente. Ya que no solo hay que tener en cuenta los costes directos, tanto los
correspondientes a su instalación como los relativos a su mantenimiento. También estos
producen unos costes que se pueden considerar que son indirectos, como son el espacio que estos
ocupan en el edificio. Esto unido a la complejidad del tráfico a lo largo del día, provocan que este
sea un tema sobre el que se ha estudiado mucho. Debido a que una instalación ineficiente de los
ascensores puede provocar grandes pérdidas de tiempo productivo a los usuarios.
Dado que la problemática y el estudio se centra en edificios con fines laborales o del ámbito de los
servicios, tales como edificios comerciales, de oficinas, hospitales, hoteles o complejos industriales.
Ya que es en estos en los que el tiempo es una variable más crítica y en los que es más importante la
calidad del servicio prestado. Se puede generalizar y dividir la jornada en función del uso de las
instalaciones, dividiéndola en cuatro patrones distintos de tráfico. Centrándose este trabajo en un tipo
concreto de tráfico que es el denominado Interfloor.
Se conoce como Interfloor a aquel patrón de tráfico en el que partiendo de una población
previamente situada dentro del edificio, la planta baja nunca es origen ni destino de llamadas a las
cabinas. Este tráfico es el que se da tanto a media mañana como a media tarde, cuando todos los
empleados están en sus puestos de trabajo. El motivo de que este trabajo se haya centrado en este
tipo de tráfico se debe a que este es menos estudiado, a pesar de ser el que se mantiene más tiempo a
lo largo de la jornada. Esto se debe a que en este tráfico los ascensores están en grado de satisfacer la
demanda mejor que en el resto y a que la diversidad de la demanda es mayor . Por ello será muy
importante la evaluación de la calidad de la llamada.
La calidad del servicio hace referencia a los tiempos que el sistema de ascensores requiere para
prestar el servicio solicitado a los usuarios. Esto se evalúa midiendo tanto los tiempos de espera
como los tiempos de trayecto. Los tiempos de espera son el tiempo que cada usuario tiene que
esperar desde que realiza la llamada al ascensor hasta que este llega a su planta. De igual forma los
tiempos de trayecto son el tiempo que transcurre desde que cada usuario realiza la llamada al
ascensor hasta que el usuario llega a su destino.
15
Por otro lado una de las características más distintivas del algoritmo diseñado y de este trabajo en
general es que este no se ha realizado para ascensores convencionales. Centrándose en un tipo
concreto de ascensor, como son los llamados Double-Deck o ascensores de doble cabina.
Los ascensores de doble cabina en los que como ya se ha comentado se centra este trabajo, suelen
estar situados en grandes rascacielos. Estos ascensores consisten básicamente en dos cabinas de
ascensor enganchadas una encima de la otra.
Este tipo de ascensor tiene la gran ventaja de que aumenta en gran medida la capacidad de servicio
del sistema de ascensores. Sin necesitar además para ello aumentar el área dedicada a los ascensores
en el edificio. Siendo además esto un factor importante en los grandes rascacielos. Ya que hay que
tener en cuenta que estos edificios cuentan con una superficie limitada y sin embargo requieren un
nivel de servicio muy alto de los ascensores. Esto se debe a que estos normalmente tienen una
cantidad muy elevada de personas en ellos y sin embargo pocos metros de base.
Otra gran ventaja que ofrecen estos ascensores es la capacidad de dar servicio a dos llamadas de
plantas adyacentes en la misma parada. Esta ventaja hace que se reduzcan en gran medida el número
de paradas necesarias, reduciendo de esta forma los tiempos de espera y de trayecto. El algoritmo
que se ha diseñado en este proyecto ha sido diseñado intentando aprovechar esta ventaja todo lo
posible.
Para proporcionar una idea de las dimensiones de este problema, es muy ilustrativo observar la lista
de mayores edificios del mundo y sus datos en la Tabla 1. En esta tabla se pueden observar los
edificios más grandes del mundo, además de sus distintas alturas y número de plantas. Estas
dimensiones han motivado este trabajo. Ya que al tener un número de plantas tan elevado los
ascensores del tipo Double-Deck es cuando pueden ser más eficaces y se notan más las ventajas que
aportan.
16
Rascacielos más altos del mundo
Foto
Puesto
1
Edificio
Ciudad
Burj
Khalifa
1
Dubái
País
Emiratos
Alt.
Alt.
Alt.
Arquitectónica
Máxima
Azotea
Pisos
Año
828 m
828 m
739 m
163
2010
632 m
632 m
632 m
121
2014
601 m
601 m
559 m
120
2012
541 m
541 m
417 m
104
2014
China
530 m
530 m
530 m
111
2014
República
509 m
509 m
448 m
101
2004
Árabes
Unidos
2
3
Shanghai
Tower 2
Torres Abraj
Al Bait
3
One World
4
Trade
Center
4
Shanghái
La Meca
Nueva
York
China
Arabia
Saudita
Estados
Unidos
Chow Tai
5
Fook
Centre
6
Guangzhou
5
Taipei 101 6
Taipéi
de China
Tabla 1: Edificios más altos del mundo
17
Desde el año 2010 el rascacielos más alto del mundo es el Burj Khalifa, este edificio situado en
Dubai tiene una altura de 828 metros y 163 plantas. Estas dimensiones provocan que el servicio de
ascensores conste de 58 ascensores, con algunos de ellos del tipo Double-Deck. La inversión
necesaria para su realización fue de 1500 millones de dólares, lo que equivale aproximadamente a
1140 millones de euros. En la figura 3 se puede observar una imagen del edificio.
Figura 1: Edificio Burj Khalifa
Este edificio desbancó al edificio Taipei 101, construido en Taipéi (Taiwán) en el año 2004, de
509.2 metros y 101 plantas por encima del suelo más otras 5 subterráneas. Este edificio tiene 61
ascensores entre los que también hay ascensores del tipo Double-Deck. Los que como se puede
observar sobre todo en grandes edificios se usan ya que aportan una buena solución al problema del
tráfico sin requerir mayor espacio que otros convencionales. La inversión para la construcción de
este edificio fue de 1700 millones de dólares. La figura 2 muestra una imagen de este edificio.
18
Figura 2: Edificio Taipei 101
Como se puede ver en estos edificios, recientemente ha aumentado el uso de los ascensores con
arquitectura del tipo Double-Deck. Ya que como se ha mencionado anteriormente ofrecen grandes
mejoras tanto arquitectónicas como en la capacidad y calidad de servicio.
19
3. Sistemas de ascensores
Los ascensores son un invento cuyo comienzo se puede remontar hasta la época de los romanos y
que ha ido evolucionando hasta los distintos mecanismos que existen hoy día.
En este capítulo se expondrá como han ido evolucionando los ascensores hasta los ascensores
modernos. También se explicará el funcionamiento de estos y algunas de sus propiedades.
Finalmente se verán algunos tipos de ascensores de pasajeros distintos a los convencionales.
3.1 Antecedentes de los ascensores
El primer ascensor del que se tiene constancia es un invento de Arquímedes, que había construido
un primer elevador en torno al año 236 a.C. con un mecanismo que usaba cuerdas y poleas. Y ya más
adelante en el siglo XVII, hay constancia del uso de ascensores en edificios palaciegos de Inglaterra
y Francia.
Pero no fue hasta el siglo XIX cuando se abrió un nuevo mundo en cuanto al transporte vertical se
refiere, con la revolución industrial. En el año 1835 se empiezan a utilizar máquinas de vapor para
mover ascensores y levantar cargas en una fábrica. Once años después, William Armstrong crea el
primer ascensor hidráulico empleando la presión del agua corriente, basándose en una idea de
William Thompson. En 1851, Waterman inventó el primer prototipo de montacargas. Este prototipo
consistía en una plataforma que unida a un cable permitía subir y bajar tanto mercancías como
personas.
Inspirado en el montacargas Elisha G. Otis, diseñó y construyó el primer sistema elevador que
incluía un mecanismo automático de seguridad. Este mecanismo estaba basado en un sistema
dentado que permitía amortiguar la caída del mismo en el supuesto de que se cercenara el cable de
sustento. La aparición de un mecanismo elevador seguro junto a las nuevas técnicas de construcción
posibilitaron la construcción de rascacielos. En 1857 Otis instaló el primer ascensor para pasajeros
del mundo en una tienda de cinco pisos en la esquina de la calle Broome de Broadway, en Nueva
York. Este ascensor era movido por una máquina a vapor a una velocidad de 0.2 m/seg.
20
El ascensor moderno es en gran parte un producto de este siglo. En el año 1889 se instaló el primer
ascensor eléctrico. Este ascensor era una modificación del de vapor con arrollamiento, sustituyendo
el motor de vapor por uno eléctrico. En 1894 se instala el primer ascensor eléctrico con pulsadores
automáticos. Las ventajas del ascensor eléctrico (rendimiento, costos de instalación relativamente
bajos y velocidad casi constante sin reparar en la carga) animaron a los ingenieros a buscar una
manera de usar la fuerza motriz eléctrica en estos edificios: los contrapesos que creaban tracción
sobre las poleas dirigidas eléctricamente solucionaron el problema.
3.2 Ascensores en la Actualidad
Los ascensores modernos consisten en una cabina, el elemento portante del sistema de ascensores,
que se alza mediante cables de acero por dos rieles guía y ostentan un mecanismo de seguridad que
impide el desplome. Una polea accionada por un motor es la encargada del desplazamiento del
ascensor, mediante unos cables unidos a la cabina y un contrapeso. En los extremos inferior o
superior de la cabina se encuentra el sistema de paracaídas. Este puede ser instantáneo o progresivo,
y funciona liberando unas cuñas contra las guías que frenan la cabina en caso de que descienda a una
velocidad mayor que la permitida por el limitador de velocidad. Impidiendo de esta forma que la
cabina pueda caer libremente, incluso si se diera el caso de que se rompieran todos los cables que la
sujetan.
Los costes asociados a un ascensor, incluidos los costes directos de su instalación y mantenimiento y
los indirectos por el espacio que ocupan, son demasiado altos como para tolerar una instalación poco
eficiente. Los ascensores deben ser dispuestos y diseñados para prestar el servicio necesario con una
mínima inversión. Debido a que ascensores ineficientes pueden causar ingentes pérdidas del tiempo
productivo de sus usuarios. En este sentido el área de la cabina en la que los usuarios viajan ha de ser
lo suficientemente amplia como para acomodar a los pasajeros sin causar molestias por aglomeración
y permitir a cada usuario un acceso fácil desde y hacia las puertas. A menudo se habla de espacio
medio por pasajero, lo que implica que la capacidad del ascensor se disponga con dimensiones
óptimas para el acomodo de los usuarios. Una disposición adecuada permite que los pasajeros
formen filas y columnas de forma que se optimicen las dimensiones de las cabinas.
En 1979 es la Otis Elevator Company la que diseña el primer controlador con microprocesadores
electrónicos. Actualmente estos ejecutan avanzados algoritmos de inteligencia artificial que
determinan la forma de administrar la respuesta a los pedidos de llamadas, coordinando los distintos
dispositivos de transporte para aumentar la capacidad y la calidad del servicio.
La investigación en este tema se encuentra en auge. Debido sobre todo a que la continua
revalorización del suelo urbano unida a la necesidad de maximizar su aprovechamiento, tienen como
consecuencia la construcción de edificios cada vez más altos. Junto a esto también se aprecia una
21
tendencia a mejorar la calidad del servicio ofrecido para conseguir una mayor competitividad de cara
al mercado.
3.3 Otros Tipos de Ascensores
A parte de los ascensores convencionales hay muchos más tipos, con distintas características en
función de sus usos, aunque aquí solo se mencionan los que son de pasajeros:
3.3.1 Lanzaderas
Estos ascensores se usan en los grandes rascacielos para conectar la planta baja, rápidamente y sin
paradas, con los sky-lobbies. Estos son unas plantas intermedias de intercambio de ascensores, en las
que los pasajeros pueden cambiar de las lanzaderas a otros ascensores en función del segmento del
edificio al que se quiera ir. Esta idea da mucha fluidez al tráfico en el edificio y disminuye en gran
medida los tiempos de espera y de tránsito, aunque obliga a hacer una parada intermedia. Un ejemplo
de esto son las torres gemelas, que tenían dos sky-lobbies con sus correspondientes lanzaderas en las
plantas 44 y 78 como se puede ver en la figura 3.
Figura 3: Lanzaderas y sky-lobbies
22
3.3.2 Ascensores panorámicos
Estos ascensores exteriores con cristalera suelen estar pensados para turistas, ya que así pueden
disfrutar de las vistas mientras suben o en edificios comerciales y residenciales combinando
funcionalidad y estética. Se puede apreciar en la figura 4.
Figura 4: Ascensores panorámicos
3.3.3 Ascensores Double-Deck
Estos son los ascensores en los que se centra este trabajo, que consisten en dos cabinas unidas una
encima de la otra. Aunque no son muy populares, arquitectónicamente aportan muchas ventajas al
ocupar el mismo espacio que un ascensor convencional y soportar un mayor nivel de tráfico. Estos
ascensores se pueden ver en el Burj Khalifa (el edificio más alto del mundo, Dubai) o en la torre
Eiffel, en España se pueden encontrar en la Torre Picasso en Madrid. Se pueden apreciar en la figura
5.
23
Figura 5: Ascensores Double-Deck
24
4. Aspectos técnicos asociados a los sistemas
de transporte vertical mediante ascensores
En un edificio un factor muy importante para su buen funcionamiento es la capacidad de transporte
de su grupo de ascensores. Estos deben ser de fácil acceso y proporcionar un servicio fiable y de
calidad. Lo que es claramente visible en edificios comerciales y de oficinas, donde todo el tiempo
que los trabajadores están esperando llegar a su destino es tiempo productivo que se pierde. En los
edificios residenciales esto no es un problema como tal, por lo que normalmente basta con ofrecer un
servicio razonable considerando algunas reglas para garantizar un servicio mínimo.
La gestión del tráfico vertical se puede evaluar de dos formas:
Comprobando si es capaz de satisfacer la capacidad de transporte necesaria, en función a la
cantidad y a la solvencia del sistema.
O en función de la calidad del servicio, atendiendo a los tiempos de espera de los pasajeros
(AWT, average waiting time) y al tiempo de llegada al destino (ATD, average time to destine).
En este trabajo se ha evaluado la calidad del servicio y el algoritmo que se ha diseñado se ha
centrado en mejorarla, intentando disminuir tanto los tiempos de espera como los de llegada al
destino. Estos tiempos están muy ligados de forma que es difícil mejorarlos todos, como ya se verá
en los resultados que se han obtenido.
El problema de la gestión del tráfico vertical se ha ido convirtiendo en una mayor dificultad
conforme ha ido creciendo la altura de los edificios. Ya que la creación de grandes rascacielos con su
elevada altura complican mucho la gestión y el correcto servicio del grupo de ascensores. Todo esto
unido a la elevada inversión que requiere la creación de uno de estos edificios, provoca que no se
pueda permitir un servicio de los ascensores ineficiente, tanto del punto de vista energético como
desde el punto de vista del servicio ofrecido a los usuarios.
25
4.1 Patrones de Tráfico
Dado que la problemática y el estudio se centra en edificios con fines laborales o del ámbito de los
servicios, tales como edificios comerciales, de oficinas, hospitales, hoteles o complejos industriales.
Se puede generalizar y dividir la jornada en función del uso de las instalaciones dividiéndola en
cuatro patrones distintos de tráfico.
En la figura 6 se puede apreciar como varía el tráfico a lo largo del día.
Figura 6: Patrones de tráfico
Por orden de aparición a lo largo del día son:
UpPeak: máximo tráfico ascendente, este tráfico se da al inicio de la jornada laboral en los
edificios de oficinas cuando todos los empleados llegan a la oficina y acuden a sus puestos de
trabajo. Se caracteriza por una gran demanda desde la planta principal o planta de entrada en
sentido ascendente.
Interfloor: Suele agrupar el tráfico entre plantas de media mañana y media tarde que se
caracteriza en que la planta de entrada no suele ser ni destino ni planta de llamada de los
ascensores. Es para el que se ha diseñado el algoritmo de este trabajo, por lo que más
adelante se verá con mayor detalle. En este tráfico se puede distinguir dos distintos aunque
normalmente se agrupan en el Interfloor que son:
Balanced Interfloor Traffic: tráfico equilibrado entre plantas, es el tráfico normal de
media mañana o media tarde cuando los empleados ya están en sus puestos.
26
Unbalanced Interfloor Traffic: tráfico no habitual de media mañana o media tarde que
está provocado por una demanda en alguna de las plantas del edificio que no es
habitual, puede ser debido a una reunión de personal.
LunchPeak Traffic: tráfico de mediodía, este patrón se da durante el descanso entre los
turnos de mañana y tarde, cuando los empleados abandonan sus puestos para almorzar y
después regresan a la oficina. Este tráfico se caracteriza por ser muy intenso con muchas
llamadas descendentes hacia la planta principal, a la salida de los empleados, y muchas
llamadas ascendentes desde esta, a su vuelta.
DownPeak: máximo tráfico descendente, este tráfico se da al final de la jornada laboral
cuando los empleados abandonan sus puestos de trabajo acabando el día. Se caracteriza por
una elevada demanda desde todos los pisos descendente hacia la planta principal.
En la teoría clásica se considera el periodo UpPeak como el patrón de tráfico más severo y afirma
que pudiendo satisfacer el periodo UpPeak cualquier escenario de trabajo es capaz de satisfacer el
servicio durante el resto de periodos. Aunque esta afirmación es discutible respecto a la calidad del
servicio. Ya que aunque funcione bien en términos de satisfacción de demanda, no lo hace de igual
manera respecto a los tiempos medios de espera. Se puede comprobar que en periodos como el
DownPeak y el LunchPeak los tiempos de espera pueden llegar a ser incluso el doble de los tiempos
de espera medios del periodo UpPeak.
Actualmente las líneas de investigación se van encaminando a considerar todos los periodos de
tráfico como Interfloor y al resto de patrones como casos particulares de este. Esto es debido a lo
anteriormente referido junto a la flexibilización de los horarios de trabajo y a la prohibición de fumar
dentro de los edificios hacen que la división del tiempo no se pueda basar en grupos de demanda
exclusivos.
Este tráfico aún siendo el patrón de tráfico con una duración mayor es el menos estudiado, esto es
debido a que una instalación con capacidad suficiente para satisfacer la demanda máxima durante el
patrón UpPeak presentará una solvencia aún mejor durante periodos Interfloor, aun a pesar de
utilizar un controlador específicamente diseñado para periodos UpPeak. Por lo que durante los
periodos Interfloor la calidad de servicio es mucho más importante que la cantidad de servicio, y la
mejor manera de medirla es con los tiempos de espera y de trayecto de los pasajeros. Esto también se
debe a que aunque la capacidad requerida es menor, la diversidad de esta demanda es mucho mayor.
27
Strakosch define tres posibles tipos de tráfico entre plantas equilibrado:
Ligero: cuando el número de pasajeros que requieren servicio no es mayor que dos a tres
veces el número de ascensores en servicio.
Mediano: si la carga media de los ascensores es menor del 50% de la carga
máxima de una cabina.
Pesado: cuando la carga media de los ascensores es mayor del 50% de la carga máxima de
una cabina (aunque esto es muy raro que se produzca de manera equilibrada).
4.2 Evaluación de la Calidad de Servicio
Aunque los estudios actuales lo cuestionen, como se ha explicado anteriormente. Se suele admitir
que una instalación que ofrezca un grado de servicio determinado durante el periodo UpPeak,
proporcionará uno de un nivel mejor en DownPeak y de dos niveles mejor en Balanced Interfloor
Traffic. Tomando las tablas 2 y 3 como regla general.
Grado de servicio
Porcentaje de llamadas respondidas en
30 seg.
60 seg.
Excelente
>75%
>98%
Bueno
>70%
>95%
Regular
>65%
>92%
Pobre/inaceptable
<65%
<92%
Tabla 2: Grados de servicio según porcentaje de llamadas respondidas
28
Grado de servicio
Porcentaje de llamadas respondidas en
50%
90%
20 seg.
45 seg.
22.5 seg.
50 seg.
Regular
25 seg.
55seg.
Pobre/inaceptable
>25 seg.
>55seg.
Excelente
Bueno
Tabla 3: Grado de servicio en función del tiempo empleado en responder las llamadas
En este trabajo para evaluar la calidad del servicio se tendrán en cuenta tres tiempos de espera que
son:
Average Waiting Time (AWT): Representa el tiempo de espera medio por pasajero, es decir
el tiempo medio que pasa desde que el pasajero llama al ascensor hasta que llega el ascensor
y comienzan a abrirse sus puertas. En situaciones reales existen dos formas de calcular su
valor para comprobar la calidad del sistema, aunque cada una tiene algunos problemas. Una
es mediante observadores humanos, que tiene el problema de que es tedioso y a veces
imposible. La otra es, relacionándolo con el tiempo medio de respuesta del sistema, es el
tiempo que tarda un grupo de ascensores en atender la primera llamada desde una planta
cualquiera. El problema de este método es que comienza a contar a partir del instante en que
el primer pasajero realiza la llamada por lo que el tiempo de espera de posibles futuros
pasajeros en esa planta no se tiene en cuenta. En las simulaciones de este trabajo esto no será
un problema, ya que las simulaciones son por ordenador y este es uno de los datos que
proporciona el software ELEVATE, con el que se han realizado las simulaciones en este
trabajo.
Average Trip Time (ATT): Representa el tiempo medio que emplea un ascensor desde que
recoge a un pasajero hasta que este llega a su destino. Debido a la naturaleza humana se
puede admitir que para un individuo que viaja solo no debe ser superior a 100 segundos,
mientras que para alguien acompañado un tiempo aceptable puede ser de hasta 150 segundos.
Average Journey Time (AJT): Representa el tiempo medio que dura el viaje por pasajero, es
decir el tiempo que pasa desde que el viajero llama al ascensor hasta que este llega a su
destino. Esto es igual a la suma de los dos tiempos anteriormente calculados.
AJT=AWT+ATT
29
5. Sistemas para la asignación de las
llamadas
Con lo que se ha visto hasta ahora ya se puede saber cómo funciona a grandes rasgos el sistema. Pero
para gestionar el movimiento de los ascensores tanto de forma individual como de conjunto hace
falta un sistema de control. Este sistema de control se encargará de asignar las llamadas realizadas al
ascensor más conveniente.
5.1 Restricciones en el diseño
El diseño del controlador y de la instalación de los ascensores debe tener en cuenta tres aspectos
fundamentales, que son:
Las restricciones impuestas por el edificio. Como son sus dimensiones, el núcleo donde se
aloja el grupo de cabinas y donde están situadas las entradas principales al edificio. Todas
estas características suelen haber sido definidas de forma previa por el arquitecto. Esto limita
en gran medida la libertad del diseñador de la instalación del conjunto de ascensores a la hora
de trabajar.
Las restricciones impuestas por la fisiología humana. Ya que los ascensores deben garantizar
el máximo confort a sus ocupantes, de tal forma que deben tener en cuenta el efecto de
incomodidad. Especialmente el producido por el movimiento de la cabina en los pasajeros si
este es tal que provoca un movimiento brusco de los órganos dentro del cuerpo. Gracias a la
inercia, una velocidad constante, sin importar su magnitud, nunca producirá una sensación de
incomodidad. Sin embargo la aceleración y el impulso pueden producir sensación de
malestar si superan ciertos valores críticos, que aunque estos sean dependientes de la
constitución de cada cuerpo, suelen ser parecidos. Así se toma como convenio un límite
máximo para la aceleración/deceleración de 1/8 de la gravedad terrestre o 1.225 m/s2 y para
el impulso 2.0 m/s2.
Las restricciones impuestas por aspectos psicológicos humanos. La principal forma de
evaluar el funcionamiento del sistema para los usuarios son los tiempo de espera y llegada al
30
destino. Constituyen la principal forma de evaluar el funcionamiento del sistema para los
usuarios, aunque el grado de servicio esperado varía en función el pasajero y sobre todo
según el lugar en el que se encuentre y el momento del día . Por ejemplo, al inicio de la
jornada no le importará a un trabajador que el ascensor que lo transporta a su planta se retrase
pero esto si le molestará al final de la jornada cuando pretende abandonar el edificio.
Normalmente se toman como límites máximos del tiempo de espera unos 30 segundos para
edificios de oficinas y 60 segundos para edificios residenciales. El tiempo de tránsito o de
duración del viaje del pasajero dentro de la cabina (Trip Time) también constituye un factor
importante a tener en cuenta aunque en menor medida que el tiempo de espera. En este caso
al igual que en el anterior la apreciación del paso del tiempo dentro de la cabina viene
condicionada por factores externos, como por ejemplo que el individuo vaya acompañado de
amigos o no.
5.2 Sistemas de control
En sus inicios los sistemas de control se dividían en dos tipos claramente diferenciados:
El control del tráfico programado, con este modelo los ascensores se van desplazando a lo
largo del edificio de una forma ya preestablecida según unas pautas que intentan prever los
movimientos de los pasajeros. Estos se van distribuyendo de manera uniforme a lo largo del
edificio y sus movimientos responden a unos patrones de tráfico predichos anteriormente, de
tal manera que las cabinas se pueden desplazar aun en el caso de que no hubiera ninguna
llamada registrada.
El control de tráfico basado en la demanda o llamada, en este modelo los ascensores van
atendiendo a las llamadas registradas de los usuarios siguiendo un modelo de control y
supervisión en lugar de una programación predefinida.
En la actualidad se utiliza el sistema de control de tráfico basado en la demanda real de transporte.
Debido a que el control del tráfico programado tenía algunos defectos como el gasto de tener
ascensores moviéndose sin necesidad y una menor capacidad de solvencia.
La labor del sistema de control consiste en almacenar las llamadas de planta, y atenderlas de la forma
más eficaz posible, ya sea con el objetivo de disminuir el consumo energético o los tiempos de
espera y trayecto. Es habitual que los sistemas clásicos de control puedan implementar diferentes
algoritmos de despacho en función de los tipos de patrones de tráfico y las demandas o tengan uno
sólo que se adapte a cada uno de ellos.
31
En el sistema de control se pueden distinguir distintos controladores, como se ve en la figura 7, en la
que se aprecia como cada ascensor tiene un controlador que a su vez es controlado por el controlador
de grupo.
.
Figura 7: Controlador de grupo de ascensores
El controlador de grupo es el encargado de decidir a cual cabina asignar las llamadas realizadas
desde las distintas plantas. Controlando hacia dónde deben dirigirse y en qué planta se detienen las
distintas cabinas, haciendo la función de cerebro del sistema de control. En un mismo sistema puede
haber más de un controlador de grupo, aunque en caso de haber más de uno, habrá uno que será el
controlador principal y el resto serán como copias de seguridad.
El controlador de ascensor se encarga de las funciones relativas al control de la cabina, tales como el
control de las puertas o medir las cargas.
En sistemas modernos, el control de ascensor puede traer incorporados dispositivos de
monitorización de ascensores o sistemas de monitorización remota de edificios para seguir el tráfico
en los ascensores.
32
Los sistemas de control han ido evolucionando y se desarrolló una generación de controladores que
intentan optimizar el servicio no solo durante el periodo UpPeak sino durante todos los periodos. Ya
que por ejemplo, está empíricamente comprobado que el periodo LunchPeak es más complicado de
gestionar que el UpPeak. Siendo sin embargo este el que se toma como base en el diseño de la
instalación, estos nuevos sistemas siguen un conjunto de reglas que garantizan su correcto
funcionamiento que son:
Regla 1: las llamadas de cabina siempre tienen preferencia sobre las llamadas
de planta.
Regla 2: un ascensor nunca debe cambiar la dirección de viaje con pasajeros a
bordo.
Regla 3: una cabina debe parar siempre en la planta destino de un pasajero que
lleva, es decir, no puede atravesar la planta sin detenerse.
Regla 4: los pasajeros que deseen viajar en una dirección determinada nunca
deben entrar en la cabina si esta lleva un dirección obligada contraria a la suya.
Regla 5: un ascensor nunca debe detenerse en una planta si no existe ningún
pasajero de la cabina que quiera bajarse en ella o algún pasajero en la planta
que quiera montarse en el ascensor.
Todos los sistemas control de los que se ha hablado en este apartado se basan en la existencia de
llamadores exteriores (situados en las plantas) de dos botones, en los que se indica el sentido del
desplazamiento deseado. En la figura 8 se puede observar una de estas botoneras.
33
Figura 8: Botonera típica de selección de sentido
Aunque no se vean en profundidad en este trabajo ya que está ha centrado en los sistemas
convencionales, es importante citar a los sistemas Destination Control. Ya que recientemente casi
todas las empresas del sector han trabajado y desarrollado modelos de control por destino, un método
que requiere una botonera especial como la que se muestra en la figura 9. En ella cada usuario
selecciona la planta a la que desea ir y esta le asigna una cabina en función de su destino, de forma
que agrupa las llamadas si tienen destinos similares. Esta forma de despacho evita las
aglomeraciones de gente intentando subirse al mismo ascensor y disminuye los tiempos de trayecto,
al no tener el ascensor que ir parando en cada planta, aunque empeora los tiempos de espera de los
pasajeros.
Figura 9: Botonera Destination Control
34
5.3 Algoritmo Nearest Call
Uno de los algoritmos de despacho más habituales es el conocido como Nearest Call, es el algoritmo
de tipo industrial más implementado por las compañías del sector del transporte vertical. Sus
principales características son su sencillez, fiabilidad y un tiempo de proceso pequeño.
Este sistema de despacho el procedimiento que sigue es asignar las llamadas de planta al ascensor
que esté más cerca de la planta en la que se produce la llamada y viaje en el sentido de esta. Ya que
como se vio en la regla 2, un ascensor no debe cambiar su marcha con algún pasajero a bordo.
Para su correcto funcionamiento este método va actualizando en todo momento el estado de sus
ascensores. De esta forma si uno de ellos sobrepasa al que tenía asignada una cierta llamada, por lo
que pasa a estar este ascensor más cerca se le asignaría la a él, en lugar de al que la tenía asignada
con anterioridad.
En la figura 10 se puede observar el diagrama de flujo correspondiente a este método de despacho de
llamadas. Destacando los bloques de funciones auxiliares en verde.
Primeramente en el bloque reasignación de llamadas, se devuelven al controlador las llamadas
asignadas que no son planta de destino. De esta forma se pueden reasignar las llamadas en caso de
que otro ascensor pase a estar más cercano.
Tras esto con un bucle se recorre todo el edificio buscando llamadas por asignar. En caso de que
haya una llamada desde esta planta se evalúa la distancia desde cada ascensor a esta planta, teniendo
en cuenta la dirección del movimiento, como ya se explico anteriormente. Finalmente se asigna cada
llamada al ascensor que resulte estar más cercano a esa planta.
Una vez que ya se han asignado todas las llamadas se desasignarán las que produzcan un exceso de
peso en cada cabina. De forma que vuelvan a estar activas para signarlas a otro en la próxima
iteración.
35
Figura 10: Diagrama de flujo del algoritmo Nearest Call
36
5.3.1 Reasignación de llamadas
El bloque Reasignación de llamadas es el primer bloque del algoritmo. Este bloque se ejecuta ante
cada actualización del sistema, con el objeto de evaluar de nuevo las distancias de los ascensores a
las llamadas. En la figura 11 se observa el diagrama de flujo de este bloque.
Una vez que se produzca una actualización comienza a ejecutarse. Una vez que se ejecuta devuelve
al controlador todas las llamadas asignadas previamente excepto las que son planta de destino actual
del ascensor. Para ello con un bucle recorre todas las plantas del edificio. Dentro de este con otro
bucle recorre los distintos ascensores. Una vez dentro de los dos bucles el algoritmo comprueba si
hay alguna llamada de esa planta que haya sido asignada a una de las cabinas del ascensor que se esté
evaluando y si es esa planta el destino del ascensor. En caso de que haya alguna llamada sin ser esta
la planta de destino esta se devolverá al controlador y se quitará del ascensor. En la figura 11 este
proceso de devolver las llamadas al controlador se ha marcado en amarillo .
37
Figura 11: Diagrama de flujo del bloque Reasignación de llamadas
5.3.2 Medir distancias
El siguiente bloque auxiliar que aparece en el diagrama de flujo del algoritmo Nearest Call es el
encargado de medir la distancia de cada cabina a la planta que se esté evaluando.
En este bloque se mide la distancia a la que está la planta a la que se quiere atender del ascensor que
se esté evaluando teniendo en cuenta el sentido de la llamada. Este bloque se puede apreciar en la
figura 12.
38
En caso de que el ascensor esté parado la distancia es igual a la distancia entre el piso en el que se
encuentre la cabina y la planta de la llamada. En el diagrama de flujo correspondiente a este bloque
esto se calcula con el valor absoluto, ya que una distancia no puede ser negativa.
Si el ascensor se mueve en el mismo sentido de la llamada lo primero es evaluar si puede parar antes
de llegar a esa planta. Si puede detenerse a tiempo la distancia se calcula igual que en el caso
anterior. Hay otro caso cuando el ascensor se mueve en este sentido que es si este no pudiera
detenerse a tiempo o ha pasado la planta de la llamada. En este caso deberá atender las llamadas de
cabina que tenga, una vez termine debe ir en sentido contrario atendiendo las llamadas que tenga
asignadas y ya cuando acabe podrá ir a la planta que se está evaluando. Por lo que en este caso se
supone que la distancia que recorrerá el ascensor el ascensor antes de poder atender la llamada es el
doble de la altura del edificio menos la diferencia entre su posición y la de la planta. Ya que se
supone que en los dos sentidos llega hasta el final del edificio.
El último caso que resta por explicarse es este viaja en sentido contrario. En este caso el ascensor
debe terminar su con las llamadas que tenga asignadas en ese sentido antes de poder dar la vuelta y
atender la llamada de la que se está evaluando. Al igual que antes se supone que el ascensor llegará
hasta el final del edificio antes de poder cambiar de sentido. Por lo tanto la distancia si el ascensor
está bajando es la altura de la planta más la posición del ascensor y si está subiendo dos veces la
altura del edificio menos la altura de la planta y la posición del ascensor.
De igual forma a como se calcula la distancia para la cabina inferior se calcula para la superior. Lo
único que cambia es que la posición de la cabina superior es igual a la posición del ascensor más
uno. Ya que en Elevate la inferior es la que se toma como referencia.
39
Figura 12: Diagrama de flujo del bloque Medir distancias
5.3.3 Asignar llamadas
Una vez ha evaluado la distancia de todos los ascensores el algoritmo Nearest Call, asigna la llamada
a la cabina más cercana. Esto lo hace con la ayuda de la función auxiliar Asignar llamadas. Con el
diagrama de flujo que se muestra en la figura 13.
Esta función primeramente establece un mínimo inicial como el doble de la altura del edificio. De
esta forma se asegura que uno de los ascensores este a menor distancia para poder asignarle la
llamada. Tras esto comienza a recorrer con un bucle todos los ascensores del sistema. En cada
ascensor comprueba si la distancia a la llamada de la cabina inferior primero y la superior después es
menor que el mínimo. En caso de que lo fuera establece el nuevo valor del mínimo como la distancia
de esta cabina a la llamada y guarda el número del ascensor en la variable ”ascensor”. Al mismo
tiempo en una variable auxiliar llamada “banderaUC” se guarda si la cabina más cercana es la
superior o la inferior, siendo 1 su valor cuando es la superior y 0 cuando la inferior.
40
Una vez finalizado el bucle el programa ya sabe cuál es la cabina más cercana a la llamada. Siendo
esta cabina a la que se le asignará esa llamada. En la figura 13 se han marcado en amarillo las
asignaciones de cabina, ya que son procesos con implicaciones mecánicas.
Figura 13: Diagrama de flujo del bloque Asignar llamadas Nearest Call
41
5.3.4 Desasignar llamadas por sobrepeso
Finalmente una vez ya estén todas las llamadas asignadas se ejecuta la última función auxiliar, el
bloque Desasignar llamadas por sobrepeso. Este bloque se encarga de devolver al controlador las
llamadas que hayan sido asignadas a una cabina y vayan a causar un sobrepeso en esta. De forma que
se vuelvan a asignar a otra cabina en la siguiente iteración. Su diagrama de flujo se puede observar
en la figura 14. Destacándose en amarillo los procesos de devolución de las llamadas al controlador
desde la cabina a las que estaban asignadas.
Lo primero que hace esta función es por medio de un bucle recorrer todos los distintos ascensores.
En este bucle evalúa la carga actual de cada cabina y comprueba si superaría su capacidad si entrara
dentro otra persona. En caso de que esto fuera cierto esa cabina no está en grado de atender ninguna
llamada. Por lo que todas las llamadas asignadas previamente a ella deben ser devueltas al
controlador.
Debido a esto en caso de ser cierto se ejecuta otro bucle que recorra todas las plantas del edificio
desasignando en el caso de que las hubiera las llamadas asignadas a esta cabina y devolviéndolas al
controlador. Esto se realizará para las dos cabinas por separado, ya que son independientes.
42
Figura 14: Diagrama de flujo del bloque desasignar llamadas por sobrepeso
43
5.4 Algoritmo Nearest Call con paradas simultáneas para
ascensores Double-Deck
En el trabajo como ya se había dicho previamente se ha trabajado para mejorar la calidad de servicio
en grupos de ascensores del tipo Double-Deck. Para ello se ha diseñado un algoritmo a partir del
Nearest Call. Este algoritmo se ha comparado con otro convencional para ascensores del tipo
Double-Deck, que ofrecía el software ELEVATE. Este seguía el procedimiento de asignar las
llamadas desde los pisos pares a la cabina superior y las de los impares a la cabina inferior. El
problema de este sistema es que no responde bien cuando los usuarios quieren ir de plantas pares a
impares o viceversa. También se ha comparado con el algoritmo Nearest Call convencional.
Primero se diseñó un algoritmo Nearest Call que se actualizara constantemente y asignara las
llamadas además de en función de la posición de los ascensores teniendo en cuenta la capacidad de
estos. Esto ha comprobado que es de gran utilidad sobre todo ante tráficos pesados cuando se
saturaba alguna cabina. Este algoritmo es el que se muestra en el apartado anterior.
Una de las mayores ventajas que aportan los ascensores del tipo Double-Deck es que ofrecen la
oportunidad de servir a dos plantas en la misma parada. Ya que si en dos plantas contiguas se
realizan llamadas de planta con el mismo sentido estos ascensores permiten la posibilidad de asignar
ambas llamadas al mismo ascensor y servirlas en una sola parada. Esto permite un ahorro en el
tiempo de espera al pasajero. Ya que el ascensor tiene que realizar menos paradas antes de recogerlo
y también disminuye los tiempos de trayecto por el mismo motivo. Debido a que tardará menos en
llegar a su destino si no tiene que parar tantas veces.
Por este motivo aprovechando esta gran ventaja, a la hora de diseñar un nuevo algoritmo de
despacho para este tipo de ascensores se ha premiado que se atiendan las llamadas de pisos
inmediatos en una misma parada.
El diagrama de flujo de este método es idéntico al que sigue el método Nearest Call, que se aprecia
en la figura 10. Siendo además iguales todas sus funciones auxiliares excepto el bloque
correspondiente a la asignación de las llamadas. En el que se encuentra la única diferencia entre estos
dos métodos, ya que en el algoritmo Nearest Call esta se asigna directamente a la cabina más
cercana. Sin embargo en el algoritmo Nearest Call con paradas simultáneas para ascensores DoubleDeck aquí desarrollado, se debe evaluar la posibilidad de atender dos llamadas de forma simultánea.
De forma que en el caso de que haya dos llamadas sin atenderse en plantas consecutivas y de
idéntico sentido estas se asignen al mismo ascensor. Asignándose la de la planta superior a la cabina
superior y la otra llamada a la cabina inferior. En la figura 15 se puede apreciar cómo funciona la
asignación de las llamadas en el algoritmo Nearest Call con paradas simultáneas para ascensores
Double-Deck.
44
Figura 15: Asignación de llamadas Algoritmo Nearest Call con paradas simultáneas para ascensores Double-Deck
45
Lo primero que se evalúa es la cabina que se encuentra más cercana al piso desde el que se realiza la
llamada. Con un bucle se van recorriendo los ascensores, comparando en cada uno de ellos la
distancia de cada una de sus cabinas con el mínimo. Este mínimo se establece al principio en el doble
de la altura del edificio, garantizando de esta manera que la distancia de los ascensores sea menor.
Cuando el ascensor que se está evaluando está a una distancia menor que el mínimo, se guarda su
número para asignarle a él la llamada. Al mismo tiempo en una variable auxiliar llamada
“banderaUC” se guarda si la cabina más cercana es la superior o la inferior, siendo 1 su valor cuando
es la superior y 0 cuando la inferior.
Una vez que se ha evaluado cual es el ascensor más cercano se comprueba si existe alguna llamada
realizada desde el piso superior con el mismo sentido. En caso de que sea cierto se le asigna al
ascensor más cercano la llamada del piso superior a su cabina superior y a la inferior la llamada del
piso que se estaba evaluando.
En el caso de que no la hubiera se asignaría la llamada a la cabina más cercana del ascensor que
estaba más cercano, al igual que en el algoritmo Nearest Call. En la figura 15 se han marcado en
amarillo las asignaciones de cabina, ya que son procesos con implicaciones mecánicas.
El resto de bloques del diagrama de flujo de este método se pueden apreciar en las figuras 11, 12 y
14. Ya que los del algoritmo Nearest Call con paradas simultáneas para ascensores Double-Deck
son totalmente idénticos a los del algoritmo Nearest Call descrito en el apartado anterior.
En las figuras 16 y 17 se puede apreciar cómo actuaría cada algoritmo ante dos llamadas de plantas
consecutivas. Apreciándose las diferencias entre ellos y la ventaja que ofrece el algoritmo aquí
diseñado. Ya que este reducirá a una las dos paradas que realiza el ascensor cuando sigue el método
de despacho Nearest Call.
La figura 16 muestra como las asignaría el método Nearest Call. En este método se asigna cada
llamada a la cabina que esté más cercana, por esto en este caso le asigna las dos llamadas a la cabina
superior. Esto provoca que esta cabina deba pararse en ambas plantas para que los usuarios se suban
en la cabina correspondiente, en este caso todos en la superior.
La figura 17 muestra como las asignaría el algoritmo Nearest Call con paradas simultáneas para
ascensores Double-Deck. En este método como se puede ver en la figura 15, en caso de que haya dos
llamadas de pisos consecutivos en el mismo sentido, estas se asignarán una a cada cabina. De esta
forma la llamada de la planta superior será atendida por la cabina superior, mientras la otra será
atendida por la cabina inferior.
46
Figura 16: Asignación de llamadas de plantas consecutivas con el algoritmo Nearest Call
Figura 17: Asignación de llamadas de plantas consecutivas con el algoritmo Nearest Call con paradas simultáneas para
ascensores Double-Deck
47
6. Implementación del software
El software necesario tanto para la elaboración del código como para su posterior simulación son
básicamente dos programas. Elevate, en el que se ha llevado a cabo toda la fase de experimentación,
que permite comprobar el correcto funcionamiento de los sistemas de control desarrollados.
Introduciendo un código escrito en C++, implementándolo en el otro programa básico para este
trabajo Microsoft Visual C++. Este programa es un entorno de desarrollo integrado (IDE) para
lenguajes de programación C, C++ y C++/CLI que engloba el desarrollo de aplicaciones hechas en
C, C++ y C++/CLI en el entorno Windows.
6.1 Software de simulación Elevate
ELEVATE es un software desarrollado por Peters Research Ltd. para el análisis y simulación de
tráfico de ascensores. Este programa permite simular el comportamiento de los ascensores en
distintos escenarios que pueden ser creados con el programa. Estos se crean definiendo todas sus
características, desde el número de plantas y su altura, al número de personas en cada una o el
número de ascensores y sus propiedades. Además permite seleccionar distintos patrones de tráfico.
Con lo que se podrá poner a prueba a los distintos algoritmos diseñados con varias condiciones de
trabajo y evaluar su funcionamiento.
6.1.1 Proceso para la instalación del software de simulación Elevate
Para la instalación de este programa es necesario estar en posesión de una licencia, una vez con ella
se puede encontrar en la página web https://www.peters-research.com/index.php/8-elevate/58elevate-8 los enlaces desde los que se puede descargar unos instaladores, tanto del programa como
del interfaz necesario para diseñar sus códigos en C++. En este trabajo se ha usado la versión 8.15
de Elevate, ya que era la recomendada para el sistema operativo Windows 7, con el que se ha
trabajado.
Ya con estos instaladores es posible instalar en el ordenador los programas, hay que tener en cuenta
que para poder diseñar los códigos hay que tener también instalado el programa Microsoft Visual
C++ 8.0, que es el recomendado por el fabricante para esta versión de Elevate. Es también
recomendable instalarlos directamente en el disco local C del ordenador para evitar problemas de
48
funcionamiento luego al enlazar con los distintos ficheros del programa.
Una vez estén todos los programas instalados hay que enlazar el programa con los códigos que se
quieran diseñar. Esto se hace abriendo el proyecto de Microsoft Visual “Dispatch W” disponible en
la carpeta que se habrá creado con el nombre “Dispatch Test”. En esta carpeta se encuentran algunas
explicaciones sobre cosas que se deben editar antes de empezar a funcionar, una vez seguidas las
indicaciones ya se podrá ejecutar a través del botón Debug.
6.1.2 Características de uso del software de simulación Elevate
Una vez ejecutado el programa Elevate se abrirá la ventana que se observa en la figura 18, de forma
que pueda comenzarse con el diseño del caso que se va a simular.
Figura 18: Pantalla de inicio de Elevate
Una vez que se empieza con el diseño del caso se irán estableciendo todas las características del
sistema que irán apareciendo en sucesivas ventanas, que por orden serán:
49
Datos de análisis: Aquí se selecciona el tipo de análisis, el número de simulaciones, la
semilla aleatoria con la que realizar la simulación y el sistema de control elegido. Los
algoritmos diseñados con C++ aparecerán eligiendo la opción Dispatcher Algorithm custom.
En la figura 19 se puede observar un ejemplo de esta ventana.
Figura 19: Ventana de selección de datos de análisis
Datos del edificio: En esta ventana se seleccionan los datos del edificio en el que se va llevar
a cabo la simulación. Eligiendo el número de plantas, seleccionando entre ellas la principal o
de entrada, la altura de cada una de ellas, los trabajadores que están en ellas y su porcentaje
de absentismo. La figura 20 muestra esta ventana.
Figura 20: Ventana de datos del edificio
50
Datos de los ascensores: En esta ventana se seleccionan los datos de los ascensores del
sistema, desde su número, a todas sus características como: el tipo de ascensor, velocidad,
aceleración, tiempo de apertura de puertas, etcétera. La selección de estos datos se puede de
la forma estándar con una ventana como la de la figura 21 o de forma avanzada como se ha
realizado en la figura 22.
Figura 21: Selección de datos del ascensor estándar
Figura 22: Selección de datos del ascensor avanzada
51
Datos de los pasajeros: Aquí se pueden seleccionar los distintos patrones de tráfico, además
de los distintos datos de los pasajeros como su masa, el porcentaje de ellos que usa las
escaleras o el tiempo que tardan en subirse y bajarse del ascensor. La selección de estos datos
se puede de la forma estándar con una ventana como la de la figura 23 o de forma avanzada
como se realiza en la figura 24, esta forma permite editar los datos para simular patrones más
complejos.
Figura 23: Selección de datos de los pasajeros estándar
Figura 24: Selección de datos de los pasajeros avanzada, periodo Interfllor
52
Opciones del informe: Esta última ventana de opciones permite elegir los datos de salida de
la simulación, los datos que extraerá el programa después de ejecutarlo y las gráficas que se
obtendrán. Se puede ver esta ventana en la figura 25.
Figura 25: Ventana de selección de las opciones del informe
Una vez que se hayan seleccionado todos los datos se puede empezar con la simulación a través del
botón de play que se encuentra en la parte superior de la ventana principal del programa.
Cuando se haya hecho esto de forma automática Elevate ejecutará el algoritmo de despacho
seleccionado y comenzará la simulación del experimento. Se puede controlar la velocidad de
simulación y su ejecución con los distintos botones, aumentando la velocidad de experimentación
mediante el botón de rebobinar, pausándola con el de pausa o terminarla con el stop. En la figura 26
se puede apreciar como es la ventana del programa una vez está funcionando. Las flechas
representan las llamadas de planta ascendentes (color verde) y descendentes (color rojo) y los puntos
azules indican una llamada de cabina (un pasajero selecciona un destino dentro del ascensor). En esta
figura además se puede observar como el ascensor 1 está atendiendo a dos plantas distintas de forma
simultánea. Apreciándose la ventaja de atender a dos llamadas en una misma parada de la que ya se
había hablado con anterioridad.
53
Figura 26: Ventana de simulación de Elevate
6.1.3 Informes y datos de salida del software de simulación Elevate
Una vez se han acabado las simulaciones Elevate ofrece todos los datos que se hayan seleccionado
en la ventana de opciones, desde los tiempos de espera y tiempos de trayecto, hasta los datos sobre
los ascensores y la simulación.
Los datos los muestra de forma gráfica con tablas, como en la figura 27. Aunque ofrece un amplio
abanico de posibilidades para verlos y evaluarlos. Por comodidad para la recopilación de datos de
tiempos de espera es aconsejable coger la opción de la hoja Excel, como en la figura 28.
54
Figura 27: Gráfica con los tiempos de trayecto de los pasajeros
Figura 28: Hoja Excel con los datos de simulación
55
6.2 Aplicación desarrollada en Microsoft Visual C++
Para la elaboración del código del algoritmo en C++ como se ha comentado anteriormente se hace
uso del programa Microsoft Visual C++ 8.0, es la versión de este programa recomendada para
trabajar con Elevate 8.15 que es el usado en este proyecto.
Este programa consta de un editor de texto para la escritura del código, la posibilidad de trabajar con
las librerías de Elevate y herramientas que permiten la depuración y compilación del código. Pero sin
duda su mayor ventaja y lo más importante en este trabajo es su sincronización con Elevate. De
forma que el programa desarrollado con Visual C++ quede incluido automáticamente en la carpeta
correspondiente. Con el objetivo de que Elevate a la hora de hacer simulaciones contemple el código
ofreciendo la posibilidad de elegirlo como algoritmo de despacho de ascensores. En la figura 29 se
aprecia una muestra del aspecto que presenta Microsoft Visual C++ y parte del código del algoritmo
diseñado.
Figura 29: Aspecto Microsoft Visual C++
Cabe destacar de este programa el archivo “Dispatch.cpp”, ya que en este archivo ha sido donde se
ha elaborado el código del algoritmo diseñado en C++. Este código ha hecho uso de las distintas
variables objetos ya definidas por Elevate, siendo los más importantes “lift.h” y “dispatch.h”.
56
El objeto “lift.h” introduce los ascensores como objetos. Este objeto permite la posibilidad de usar
como variables las distintas propiedades del ascensor, su estado y distintas funciones asociadas a él.
Por ejemplo, para asignarle una llamada ascendente al ascensor ”j” de la planta “i”, se cambia el
valor de la variable l[j].m_UpLandingCalls[i] a uno.
Por otro lado el objeto “dispatch.h” es el encargado del despacho de ascensores. Este objeto detecta
las actualizaciones del sistema respecto al tema de las llamadas. Siendo el encargado de detectar las
nuevas llamadas a los ascensores.
57
7. Experimentación y resultados
Con el objetivo de comprobar la validez del algoritmo diseñado y si este consigue mejorar la calidad
del servicio y cumple los resultados esperados, se han propuesto dos edificios. De forma que sirvan
de distintos escenarios, para simular el despacho de ascensores con los distintos algoritmos.
Sometiéndolos a distintos patrones de tráfico y a un número suficiente de simulaciones para poder
sacar conclusiones fiables sobre el algoritmo.
7.1 Caracterización de los edificios empleados para la
simulación
Para la realización de las pruebas se han diseñado dos edificios, de distinto tamaño y con distinto
número de ascensores de forma que pueda observarse como varían los resultados en función de la
congestión y el tamaño del edificio. Las principales características distintivas de ambos edificios se
pueden observar en la tabla 4 que vienen a continuación.
EDIFICIO 1
EDIFICIO 2
Número de plantas
20
30
Altura del edificio
72.2 m
104.4 m
Separación entre plantas
3.8 m
3.6 m
Población del edificio
950
1450
Personas por planta
50
50
Número de ascensores
4
8
Tabla 4: Diferencias entre los dos edificios
A ambos edificios se les ha añadido dos plantas auxiliares que se pueden considerar de servicio
técnico, que no influirán en el tráfico por lo que no se han incluido en la tabla 4. Estas plantas tienen
el objetivo de facilitar y mejorar el servicio de los ascensores Double-Deck. Estando una por encima
58
de la planta superior y otra por debajo de la planta inferior provocando de esta forma que ambas
cabinas puedan servir todas las plantas.
Los parámetros de los ascensores, todas las cabinas se han considerado iguales, y las características
de los pasajeros de ambos edificios han sido seleccionadosiguales pudiendo verse en la tabla 5.
Capacidad de los ascensores
1000 kg
Velocidad de los ascensores
2.5 m/s
Aceleración de los ascensores
0.8 m/s
Retraso de inicio de marcha
0.5 s
Tiempo de apertura de puertas
1.8 s
Tiempo de cierre de puertas
2.9 s
Tiempo de carga y descarga
1.2 s
Factor de capacidad
80%
Factor de uso de escaleras
0%
Tabla 5: Características ascensores y pasajeros
Estos dos escenarios se someterán a distintas simulaciones de distintos patrones de tráfico, siendo
todos ellos tráficos constantes.
Realizando distintas simulaciones de estos escenarios se alcanzan unos resultados que se almacenan
y procesan de forma que se puedan extraer resultados generales de la combinación de todos los
resultados individuales.
7.2 Tratamiento de los resultados
Para que los datos de la simulación sean lo más fiable posible se ha supuesto un número de
experimentos a realizar de 10 simulaciones con distintas semillas aleatorias, por cada patrón de
59
tráfico con el que se ha experimentado. De esta forma se establecerán unos intervalos de confianza
para cada tráfico y método de despacho.
Para hallar los intervalos de confianza entre los que se moverán los tiempos, se usará una
distribución t-Student, que da unos valores para el cálculo de los intervalos en función de la
confianza deseada para el intervalo y del número de experimentos realizados. Para esto se
necesitarán los estimadores de la media y la varianza que se calculan de la siguiente forma:
i
S2 =
I-
≈μ
)2 ≈ σ
Una vez que ya se han calculados estos estimadores, se puede recurrir a la distribución t-Student
fijando previamente el intervalo de confianza. En este caso se ha seleccionado del 95%, de forma que
el 95% de las veces estos tiempos se deben encontrar dentro del intervalo calculado. Ya con estos
datos se calculan los límites del intervalo con la siguiente fórmula:
- tα/2,n-1
+ tα/2,n-1
Dado que el intervalo de confianza seleccionado es del 95% el valor de α=0.05, y el número de
experimentos realizados para calcular cada intervalo es de 10, en la tabla 6 se puede comprobar que
el valor del coeficiente tα/2,n-1 es igual a 2.262. Conocidos ya todos los datos se pueden construir los
intervalos de confianza.
60
Tabla 6: Tabla de distribución t-Student
7.3 Simulación
En este apartado se mostrarán todos los distintos tipos de tráfico con los que se ha experimentado que
son:
Constant Traffic Interfloor: 5%, 8%, 11% y 15% POP (Porcentaje de población del
edificio)(Percentage of building population)
Barney DownPeak: 8%, 12% y 15% POP
Barney UpPeak: 7% POP
Y las diez semillas aleatorias seleccionadas: 1, 11, 87, 165, 258, 333, 369, 456, 741 y 987. Estas
semillas se han elegido aleatoriamente entre 1000 semillas.
Cada uno de los tres algoritmos de los que se ha hablado en el proyecto: convencional para DoubleDeck (Conv. en las tablas), Nearest Call con ajuste de peso (NC 1 en las tablas) y Algoritmo Nearest
Call con paradas simultáneas para ascensores Double-Deck (NC 2) en las tablas. Ha sido testado con
los ocho tráficos distintos y estos a su vez con las diez semillas aleatorias. De forma que cada
algoritmo ha sido sometido a 80 simulaciones en cada edificio, por lo que el total de simulaciones
realizadas ha sido de 240 por edificio, siendo el número final de simulaciones realizadas de 480.
Como esta gran cantidad de pruebas ha dado un número muy elevado de datos a evaluar se ha creado
una hoja en Excel, de forma que introduciendo los distintos resultados obtenidos tras cada simulación
calcule los parámetros necesarios y los límites del intervalo de confianza.
61
7.4 Edificio 1
En este apartado se muestran los resultados obtenidos de las simulaciones en el edificio 1.
7.4.1 INTERFLOOR
En las tablas 7, 8, 9 y 10 se muestran los intervalos de confianza que se obtienen al someter los tres
algoritmos a las distintas simulaciones, con los tráficos Interfloor, usando las fórmulas anteriormente
descritas.
Interfloor 15% POP
AWT
Límite inferior
Media
Límite Superior
Conv.
126.4
135
143.6
NC 1
128.6
143.95
159.3
NC 2
92.6
106.7
120.8
Límite inferior
Media
Límite Superior
Conv.
82.8
84.5
86.2
NC 1
94.3
96.15
98
NC 2
85.1
86.8
88.5
Límite inferior
Media
Límite Superior
Conv.
211.9
219.5
227.1
NC 1
224.1
240.1
256.1
NC 2
178.5
193.5
208.5
ATT
AJT
Tabla 7: Intervalos de confianza con un tráfico Interfloor 15% POP, Edificio 1
62
La tabla 7 muestra los intervalos de confianza obtenidos para un tráfico Interfloor del 15% POP. En
los resultados obtenidos, se ve como el algoritmo Nearest Call editado para los ascensores DoubleDeck consigue los menores tiempos de tanto de espera como de trayecto. Esto además lo consigue
con una diferencia bastante amplia respecto a los otros dos, confirmando los resultados esperados.
Ya que este método aprovecha la posibilidad de servir dos plantas consecutivas disminuyendo en
gran medida el número de paradas. Sin embargo el otro algoritmo Nearest Call usado no funciona
con la misma eficacia que este y empeora en todos los tiempos, debido a que produce un número de
paradas demasiado elevado ante una situación de tráfico más intenso.
Interfloor 11% POP
AWT
Límite inferior
Media
Límite Superior
Conv.
101.5
105.4
109.2
NC 1
79
86.4
93.8
NC 2
71
78.2
85.4
Límite inferior
Media
Límite Superior
Conv.
70
72.4
74.8
NC 1
84.2
86.7
89.2
NC 2
71
72.8
74.6
Límite inferior
Media
Límite Superior
Conv.
172.8
177.8
182.7
NC 1
164.3
173.1
181.8
NC 2
142.6
151
159.3
ATT
AJT
Tabla 8: Intervalos de confianza con un tráfico Interfloor 11% POP, Edificio 1
En la tabla 8 se puede observar ya como ante un tráfico menos intenso que el anterior el algoritmo
Nearest Call más simple ya consigue responder mejor que el algoritmo convencional, tanto en los
tiempos de espera como en los tiempos de trayecto. Aunque sigue teniendo unos tiempos de tránsito
63
muy elevados debido al alto número de paradas que realiza. El algoritmo editado para Double-Deck
sin embargo sigue demostrando de forma holgada ser el más efectivo para el tráfico Interfloor, con
los menores tiempos de trayecto y de espera por un gran margen.
Interfloor 8% POP
AWT
Límite inferior
Media
Límite Superior
Conv.
83.6
89
94.5
NC 1
59
66
73.1
NC 2
54.2
57.8
61.5
Límite inferior
Media
Límite Superior
Conv.
57.8
60.9
63.9
NC 1
69.7
71.5
73.3
NC 2
56.3
58.4
60.5
Límite inferior
Media
Límite Superior
Conv.
143.9
149.9
155.9
NC 1
130.2
137.5
144.8
NC 2
112.2
116.3
120.3
ATT
AJT
Tabla 9: Intervalos de confianza con un tráfico Interfloor 8% POP, Edificio 1
En la tabla 9 se aprecia como ante un tráfico Interfloor bastante más ligero ya el algoritmo
convencional es el que pero responde por una diferencia ya considerable. Debido a que aunque su
tiempo de tránsito sea mucho menor que para el Nearest Call básico empeora sus tiempos de espera
y de trayecto, siendo además estos más importantes a la hora de evaluar un algoritmo. Por el otro
lado el Nearest Call editado para Double-Deck se reivindica en su puesto, consiguiendo los menores
tiempos en todas las categorías, demostrando ser muy fiable con este tipo de tráfico.
64
Interfloor 5% POP
AWT
Límite inferior
Media
Límite Superior
Conv.
62.7
66
69.3
NC 1
39
41.8
44.6
NC 2
36
41.2
46.4
Límite inferior
Media
Límite Superior
Conv.
42.6
44.5
46.3
NC 1
45.2
47.3
49.3
NC 2
38.5
40.2
41.9
Límite inferior
Media
Límite Superior
Conv.
106.4
110.4
114.4
NC 1
85.2
89.1
93
NC 2
76
81.4
86.8
ATT
AJT
Tabla 10: Intervalos de confianza con un tráfico Interfloor 5% POP
La tabla 10 ya muestra unos resultados mucho más parejos entre los dos algoritmos Nearest Call.
Porque aunque sigue demostrando ser mejor el algoritmo para Double-Deck, al reducir tanto el
tráfico se da menos el caso de llamadas de pisos consecutivos. Siendo esta la principal ventaja que
tiene el editado sobre el más simple. Se sigue demostrando que al intentar parar en plantas
consecutivas se reduce el número de paradas. Esto disminuye especialmente los tiempos de tránsito,
aunque también se mejoran en menor medida los tiempos de espera, produciendo que
consecuentemente los tiempos de trayecto disminuyan en mayor medida. Por otro lado ante este
tráfico el algoritmo convencional se ve muy limitado con tiempos bastante peores.
En las figuras 30, 31,32 y 33 se muestran los tiempos de espera conseguidos por cada algoritmo para
que se pueda valorar de forma gráfica como varían estos. Se ha marcado de azul los tiempos
inferiores al intervalo de confianza y de rojo el intervalo.
65
AWT INTERFLOOR 15% POP
180
160
140
120
100
80
60
40
20
0
Límite Superior
Límite Inferior
Conv.
NC 1
NC 2
Figura 30: Gráfica de tiempos de espera ante tráfico Interfloor 15% POP, edificio 1
AWT INTERFLOOR 11% POP
120
100
80
60
Límite Superior
40
Límite Inferior
20
0
Conv.
NC 1
NC 2
Figura 31: Gráfica de tiempos de espera ante tráfico Interfloor 11% POP, edificio 1
AWT INTERFLOOR 8% POP
100
90
80
70
60
50
40
30
20
10
0
Límite Superior
Límite Inferior
Conv.
NC 1
NC 2
Figura 32: Gráfica de tiempos de espera ante tráfico Interfloor 8% POP, edificio 1
66
AWT INTERFLOOR 5% POP
80
70
60
50
40
Límite Superior
30
Límite Inferior
20
10
0
Conv.
NC 1
NC 2
Figura 33: Gráfica de tiempos de espera ante tráfico Interfloor 5% POP, edificio 1
En estas gráficas se observa claramente como el algoritmo diseñado en este trabajo reduce de forma
considerable los tiempos de espera respecto al algoritmo convencional y al Nearest Call básico.
Aunque frente a tráficos más ligeros el algoritmo Nearest Call se aproxima mucho y ofrece una
menor cota superior del intervalo de confianza.
De igual forma en las figuras 34, 35, 36 y 37 se muestran los tiempos de trayecto conseguidos por
cada algoritmo para que se pueda valorar de forma gráfica como varían estos. Se ha marcado de azul
los tiempos inferiores al intervalo de confianza y de verde el intervalo de confianza.
AJT INTERFLOOR 15% POP
300
250
200
150
Límite Superior
100
Límite Inferior
50
0
Conv.
NC 1
NC 2
Figura 34: Gráfica de tiempos de trayecto ante tráfico Interfloor 15% POP, edificio 1
67
AJT INTERFLOOR 11% POP
200
150
Límite Superior
100
Límite Inferior
50
0
Conv.
NC 1
NC 2
Figura 35: Gráfica de tiempos de trayecto ante tráfico Interfloor 11% POP, edificio 1
AJT INTERFLOOR 8% POP
180
160
140
120
100
80
60
40
20
0
Límite Superior
Límite Inferior
Conv.
NC 1
NC 2
Figura 36: Gráfica de tiempos de trayecto ante tráfico Interfloor 8% POP, edificio 1
AJT INTERFLOOR 5% POP
140
120
100
80
Límite Superior
60
Límite Inferior
40
20
0
Conv.
NC 1
NC 2
Figura 37: Gráfica de tiempos de trayecto ante tráfico Interfloor 5% POP, edificio 1
En las gráficas anteriores se puede observar como los tiempos de trayecto son reducidos en gran
medida con la implementación del algoritmo del trabajo. Aunque el algoritmo Nearest Call básico
68
consigue aproximar sus tiempos de trayecto a los del trabajo ante tráficos ligeros, aunque sin
conseguir superarlo.
Con estos datos se puede llegar a la conclusión de que el algoritmo que se ha diseñado en este trabajo
para mejorar la calidad del servicio con ascensores Double-Deck consigue cumplir sus
especificaciones. Mejorando de manera considerable los tiempos, siendo más significativo esto
respecto al convencional ante tráficos más ligeros. Ya que las diferencias entre estos dos se
mantienen parecidas pero disminuyen los tiempos aumentando por tanto la diferencia relativa. Sin
embargo esto es lo contario a lo que ocurre al compararlo con el otro algoritmo. Este mejora su
calidad de forma significativa conforme va disminuyendo la intensidad de tráfico, aunque de todas
formas este no consigue llegar a la calidad de servicio que ofrece el algoritmo Nearest Call editado
ante este tipo de tráfico.
69
7.4.2 BARNEY DOWNPEAK
En las tablas 11, 12 y 13 se pueden observar los intervalos de confianza que se obtienen al someter
los tres algoritmos a las distintas simulaciones, con los tráficos Barney DownPeak y sus distintas
intensidades, usando las fórmulas anteriormente descritas.
Barney DownPeak 15% POP
AWT
Límite inferior
Media
Límite Superior
Conv.
176
187.2
198.4
NC 1
290.8
324.1
357.4
NC 2
282.9
315.4
347.9
Límite inferior
Media
Límite Superior
Conv.
76.8
78.6
80.4
NC 1
117.3
120.3
123.3
NC 2
51
52.3
53.6
Límite inferior
Media
Límite Superior
Conv.
253.9
265.8
277.7
NC 1
408.8
444.4
480.1
NC 2
335.9
367.6
399.4
ATT
AJT
Tabla 11: Intervalos de confianza con un tráfico Barney DownPeak 15% POP, Edificio 1
En la tabla 11, se observa como el algoritmo convencional es el que mejor responde a este tipo de
tráfico. Ya que los otros dos algoritmos producen unos tiempos de espera muchísimo más altos al no
seguir el método de recogida recomendable para periodos DownPeak.
70
Barney DownPeak 12% POP
AWT
Límite inferior
Media
Límite Superior
Conv.
111.1
124
136.8
NC 1
163.6
191.4
219.11
NC 2
208.4
233.6
258.9
Límite inferior
Media
Límite Superior
Conv.
72.7
75
77.2
NC 1
105.5
109.7
113.8
NC 2
50.5
51.8
53.1
Límite inferior
Media
Límite Superior
Conv.
184.1
198.9
213.7
NC 1
271.5
301.1
330.6
NC 2
260.9
285.4
309.8
ATT
AJT
Tabla 12: Intervalos de confianza con un tráfico Barney DownPeak 12% POP, Edificio 1
En esta tabla se observa como aunque han disminuido los tiempos de cada algoritmo, ya que también
se ha visto reducida la intensidad del tráfico, la relación entre ellos sigue siendo igual. Excepto para
el Nearest Call básico que ha mejorado al editado para Double-Deck en los tiempos de espera. Pero
al igual que ante el resto de tráficos ante los que han sido probados su elevado tiempo de tránsito
provoca que siga siendo el que presenta los mayores tiempos de trayecto.
71
Barney DownPeak 8% POP
AWT
Límite inferior
Media
Límite Superior
Conv.
61.7
73.2
84.6
NC 1
59.1
68.7
78.3
NC 2
153.9
173.9
193.9
Límite inferior
Media
Límite Superior
Conv.
62.2
64.7
67.2
NC 1
79.2
85.2
91.1
NC 2
45.6
47.5
49.3
Límite inferior
Media
Límite Superior
Conv.
124.4
137.9
151.4
NC 1
139.2
153.9
168.6
NC 2
202.4
221.4
240.4
ATT
AJT
Tabla 13: Intervalos de confianza con un tráfico Barney DownPeak 8% POP, Edificio 1
En la tabla número 13 ya se puede observar un cambio considerable respecto a la tabla 12, en lo que
respecta a la calidad del servicio de los distintos algoritmos. Por un lado el algoritmo convencional
continúa demostrando ser el más recomendable para este tipo de tráfico con el menor tiempo de
trayecto y el segundo mejor tiempo de espera siguiendo de cerca al algoritmo Nearest Call. Este
algoritmo demuestra funcionar de forma más eficaz ante tráficos más ligeros, consiguiendo ante este
tráfico los menores tiempos de espera y unos tiempos de trayecto más similares a los del
convencional. Aunque sigue estando lastrado por los elevados tiempos de tránsito que produce. Por
otro lado el algoritmo editado para Double-Deck no consigue acercarse a los tiempos de los otros
dos.
72
En estas tablas se observa como ninguno de los algoritmos consigue buenos tiempos de espera ante
un tráfico DownPeak. Siendo especialmente mala la respuesta del algoritmo Nearest Call básico,
comparada con la del convencional ante tráficos más pesados. Y la del algoritmo editado para
Double-Deck ante tráficos más ligeros, viendo como ante estos ya ha mejorado de forma
considerable el otro algoritmo.
Usando estos datos como base se puede llegar a la conclusión de que el algoritmo convencional es el
que mejor responde ante tráficos del tipo DownPeak. Sin embargo esto se podría mejorar con
sistemas de despacho que infieran o prevean a través de la experiencia cuando se va a producir un
periodo con este tráfico. Esto puede ser sabiendo a la hora a la que se van los empleados, en ese caso
hay un procedimiento sencillo pero que mejora los tiempos de forma considerable, que consiste en
enviar los ascensores lo más arriba posible, teniendo en cuenta las llamadas ya asignadas a otros
ascensores. De forma que conforme vayan descendiendo vayan recogiendo pasajeros y llevándolos a
la planta baja. Una vez hecho esto y considerando que se trabaja con ascensores del tipo DoubleDeck, se podría premiar como en el algoritmo diseñado en este trabajo, el servir a plantas
consecutivas lo que ha probado reducir los tiempos tanto de tránsito como de espera.
73
7.4.3 BARNEY UPPEAK
En la tabla 14, se muestran los intervalos de confianza que se obtienen al someter los tres algoritmos
a las distintas simulaciones, ante un tráfico del tipo Barney UpPeak y una intensidad del 7% POP,
usando las fórmulas anteriormente descritas.
Barney UpPeak 7% POP
AWT
Límite inferior
Media
Límite Superior
Conv.
434.6
524
613.4
NC 1
19.5
29
38.5
NC 2
25
38.1
51.2
Límite inferior
Media
Límite Superior
Conv.
78.9
80
81.1
NC 1
87.7
91.1
94.5
NC 2
91.9
95.2
98.4
Límite inferior
Media
Límite Superior
Conv.
514
604
694
NC 1
111.6
120.1
128.6
NC 2
120.2
133.2
146.2
ATT
AJT
Tabla 14: Intervalos de confianza con un tráfico Barney UpPeak 7% POP, Edificio 1
En la tabla 14 se observa como los algoritmos diseñados en este trabajo responden de forma parecida
a un tipo de tráfico UpPeak. Siendo un poco mejores los tiempos del primero de ellos respecto a los
del segundo en todas las categorías y como estos a su vez son mucho mejores respecto a los del
algoritmo convencional. Ya que no responde bien a este tipo de tráfico y provoca unos tiempos de
espera altísimos y en consecuencia unos tiempos de trayecto también muy elevados.
74
Pudiéndose concluir en base a estos datos que el algoritmo convencional es el que peor responde ante
tráficos del tipo UpPeak. Sin embargo esto se podría mejorar con sistemas de despacho que infieran
o prevean a través de la experiencia cuando se va a producir un periodo de este tipo. Como puede ser
sabiendo a la hora a la que entran los empleados. Los sistemas de control cuando detectan tasas de
tráfico nítidamente UpPeak ponen en marcha un procedimiento sencillo que mejora profundamente
los resultados ofrecidos en este apartado. Dicho procedimiento consiste en que cuando un ascensor
atiende todas sus llamadas de cabina vuelva automáticamente a la planta baja para seguir cargando
pasajeros que se encuentran a la espera. Esta forma de actuar mejora enormemente los resultados
ofrecidos. Esto se debe a que los métodos de despacho en su modo de funcionamiento normal bajo
condiciones UpPeak solo registran una llamada de planta en la planta baja cada vez. Aunque haya
decenas de personas esperando ascensores, esto provoca que esta única llamada sea asociada a una
única cabina. No siendo hasta que esta cabina atiende la llamada y carga pasajeros hasta completar su
capacidad cuando de nuevo se registra una nueva llamada. Esta llamada ya hará que otro ascensor
baje para transportar nuevos pasajeros. El alto tiempo de procesado entre que se asigna la llamada de
la planta baja a un ascensor, este llega y carga y se vuelve a procesar una nueva llamada de planta
baja provoca que haya ascensores que se encuentren ociosos. Ya que cuando les llega el turno hay
otro que acaba de quedar libre o está a punto de hacerlo.
Los algoritmos diseñados en este trabajo aunque no trabajen de esta forma producen unos resultados
buenos. Debido a que permiten cargar las dos cabinas antes de empezar el ascenso, de forma que se
llena la cabina superior y luego la cabina inferior también realiza una parada en la planta principal
permitiendo que se suban más pasajeros. Esta forma de trabajo reduce en gran medida los tiempos de
espera ya que aunque haya muchas personas esperando los cuatro ascensores actuarán casi como si
fueran ocho en cuestión de capacidad. Mejorando mucho los resultados generales aún a costa de
aumentar los tiempos de tránsito.
75
7.5 Edificio 2
En este apartado se muestran los resultados obtenidos de las simulaciones en el edificio 2.
7.5.1 INTERFLOOR
En las tablas 15, 16, 17 y 18 se muestran los intervalos de confianza que se obtienen al someter los
tres algoritmos a las distintas simulaciones, con los tráficos Interfloor, usando las fórmulas
anteriormente descritas.
Interfloor 15% POP
AWT
Límite inferior
Media
Límite Superior
Conv.
122.8
129.7
136.7
NC 1
115
124.1
133.3
NC 2
73.5
81.8
90.1
Límite inferior
Media
Límite Superior
Conv.
92.6
94.9
97.1
NC 1
115.6
118
120.5
NC 2
100.2
103.9
107.7
Límite inferior
Media
Límite Superior
Conv.
216.7
224.6
232.5
NC 1
231.8
242.2
252.5
NC 2
176
185.7
195.5
ATT
AJT
Tabla 15: Intervalos de confianza con un tráfico Interfloor 15% POP, Edificio 2
76
La tabla 15 muestra los intervalos de confianza obtenidos para un tráfico Interfloor del 15% POP. En
los resultados obtenidos se ve como el algoritmo Nearest Call editado para los ascensores DoubleDeck consigue los menores tiempos de tanto de espera como de trayecto. Consiguiéndolo además
con una diferencia bastante amplia respecto a los otros dos. Esto confirma los resultados esperados y
ya observados en el otro edificio, ya que este método aprovecha la posibilidad de servir dos plantas
consecutivas disminuyendo en gran medida el número de paradas. Sin embargo el otro algoritmo
Nearest Call usado no funciona con la misma eficacia que este y empeora en todos los tiempos
debido a que produce un número de paradas demasiado elevado ante una situación de tráfico más
intenso.
Interfloor 11% POP
AWT
Límite inferior
Media
Límite Superior
Conv.
88.5
94.4
100.4
NC 1
68.3
74.7
81
NC 2
53.4
59
64.6
Límite inferior
Media
Límite Superior
Conv.
77.9
80
82
NC 1
96.2
100
103.8
NC 2
85
86.8
88.5
Límite inferior
Media
Límite Superior
Conv.
167.4
174.4
181.4
NC 1
168.1
174.7
181.2
NC 2
140.2
145.7
151.2
ATT
AJT
Tabla 16: Intervalos de confianza con un tráfico Interfloor 11% POP, Edificio 2
77
En la tabla 16 se puede observar ya como ante un tráfico menos intenso el algoritmo Nearest Call
más simple mejora los tiempos de espera del algoritmo convencional y con tiempos de trayecto muy
similares. Aunque sigue teniendo unos tiempos de tránsito muy elevados debido al alto número de
paradas que realiza, número de paradas que se ha incrementado al incrementar la altura del edificio.
El algoritmo editado para Double-Deck sin embargo sigue demostrando de forma holgada ser el más
efectivo para el tráfico Interfloor, con los menores tiempos de trayecto y de espera por un gran
margen.
Interfloor 8% POP
AWT
Límite inferior
Media
Límite Superior
Conv.
76.6
82.5
88.5
NC 1
47.3
50.4
53.5
NC 2
39.3
41.9
44.5
Límite inferior
Media
Límite Superior
Conv.
62.3
64.7
67.2
NC 1
76.9
79.7
82.6
NC 2
63.7
65.5
67.3
Límite inferior
Media
Límite Superior
Conv.
140
147.2
154.5
NC 1
125
130.1
135.3
NC 2
103.5
107.4
111.3
ATT
AJT
Tabla 17: Intervalos de confianza con un tráfico Interfloor 8% POP, Edificio 2
En la tabla 17 se aprecia al igual que se apreciaba en la tabla 9, correspondiente al edificio anterior.
Como ante un tráfico Interfloor bastante más ligero ya el algoritmo convencional es el que peor
responde por una diferencia considerable. Ya que aunque su tiempo de tránsito sea mucho menor que
para el Nearest Call básico empeora sus tiempos de espera y de trayecto, siendo además estos más
importantes a la hora de evaluar un algoritmo. Por el otro lado el Nearest Call editado para Double78
Deck se reivindica en su puesto consiguiendo los menores tiempos tanto de espera como de trayecto.
Demostrando ser muy fiable con este tipo de tráfico, tal y como se había supuesto.
Interfloor 5% POP
AWT
Límite inferior
Media
Límite Superior
Conv.
60.8
63.3
65.7
NC 1
28.8
31.5
34.3
NC 2
27
31.1
35.1
Límite inferior
Media
Límite Superior
Conv.
43.2
45
46.8
NC 1
47.1
51.5
55.9
NC 2
42.7
44.8
46.9
Límite inferior
Media
Límite Superior
Conv.
104.5
108.2
112
NC 1
77.3
83
88.8
NC 2
70.7
75.8
81
ATT
AJT
Tabla 18: Intervalos de confianza con un tráfico Interfloor 5% POP, Edificio 2
La tabla 18 ya muestra unos resultados mucho más parejos entre los dos algoritmos Nearest Call.
Porque aunque sigue demostrando ser mejor el algoritmo diseñado para Double-Deck, al reducir
tanto el tráfico se da menos el caso de llamadas de pisos consecutivos que es la principal ventaja que
tiene el editado sobre el más simple. Aunque esto sigue siendo un factor sobre todo a la hora de
reducir los tiempos de tránsito, también se mejoran en menor medida los tiempos de espera,
produciendo que consecuentemente los tiempos de trayecto disminuyan. Por otro lado ante este
tráfico el algoritmo convencional se ve muy limitado con tiempos bastante peores.
79
En las figuras 38, 39, 40 y 41 se muestran los tiempos de espera conseguidos por cada algoritmo en
el segundo edificio para que se pueda valorar de forma gráfica como varían estos. Se ha marcado de
azul los tiempos inferiores al intervalo de confianza y de rojo el intervalo.
AWT INTERFLOOR 15% POP
160
140
120
100
80
Límite Superior
60
Límite Inferior
40
20
0
Conv.
NC 1
NC 2
Figura 38: Gráfica de tiempos de espera ante tráfico Interfloor 15% POP, edificio 2
AWT INTERFLOOR 11% POP
120
100
80
60
Límite Superior
40
Límite Inferior
20
0
Conv.
NC 1
NC 2
Figura 39: Gráfica de tiempos de espera ante tráfico Interfloor 11% POP, edificio 2
AWT INTERFLOOR 8% POP
100
90
80
70
60
50
40
30
20
10
0
Límite Superior
Límite Inferior
Conv.
NC 1
NC 2
80
Figura 40: Gráfica de tiempos de espera ante tráfico Interfloor 8% POP, edificio 2
AWT INTERFLOOR 5% POP
70
60
50
40
Límite Superior
30
Límite Inferior
20
10
0
Conv.
NC 1
NC 2
Figura 41: Gráfica de tiempos de espera ante tráfico Interfloor 5% POP, edificio 2
En estas gráficas se observa claramente como también en este nuevo edificio el algoritmo diseñado
reduce de forma considerable los tiempos de espera respecto al algoritmo convencional y al Nearest
Call básico. Aunque al igual que ya le ocurrió en el primer edificio frente a tráficos más ligeros el
algoritmo Nearest Call se aproxima mucho y ofrece una menor cota superior del intervalo de
confianza.
De igual forma en las figuras 42, 43, 44 y 45 se muestran los tiempos de trayecto conseguidos por
cada algoritmo para que se pueda valorar de forma gráfica como varían estos. Se ha marcado de azul
los tiempos inferiores al intervalo de confianza y de verde el intervalo de confianza.
AJT INTERFLOOR 15% POP
300
250
200
150
Límite Superior
100
Límite Inferior
50
0
Conv.
NC 1
NC 2
Figura 42: Gráfica de tiempos de trayecto ante tráfico Interfloor 15% POP, edificio 2
81
AJT INTERFLOOR 11% POP
200
150
Límite Superior
100
Límite Inferior
50
0
Conv.
NC 1
NC 2
Figura 43: Gráfica de tiempos de trayecto ante tráfico Interfloor 11% POP, edificio 2
AJT INTERFLOOR 8% POP
180
160
140
120
100
80
60
40
20
0
Límite Superior
Límite Inferior
Conv.
NC 1
NC 2
Figura 44: Gráfica de tiempos de trayecto ante tráfico Interfloor 8% POP, edificio 2
AJT INTERFLOOR 5% POP
120
100
80
60
Límite Superior
40
Límite Inferior
20
0
Conv.
NC 1
NC 2
Figura 45: Gráfica de tiempos de trayecto ante tráfico Interfloor 5% POP, edificio 2
82
En las gráficas anteriores se puede observar como los tiempos de trayecto son reducidos en gran
medida con la implementación del algoritmo del trabajo. Aunque el algoritmo Nearest Call básico
consigue aproximar sus tiempos de trayecto a los del trabajo ante tráficos ligeros, pero
manteniéndose por encima.
Con estos datos se puede llegar a la conclusión de que el algoritmo que se ha diseñado en este trabajo
para mejorar la calidad del servicio con ascensores Double-Deck consigue cumplir sus
especificaciones. Mejorando de manera considerable los tiempos tanto de espera como de trayecto
ante los tráficos del tipo Interfloor que eran en los que se centraba este. Estas diferencias se han
podido apreciar comparándolo con otros algoritmos de despacho y sometiéndolo a distintos tipos de
tráfico.
83
7.5.2 BARNEY DOWNPEAK
En las tablas 19, 20 y 21 se pueden observar los intervalos de confianza que se obtienen al someter
los tres algoritmos a las distintas simulaciones, con los tráficos Barney DownPeak y sus distintas
intensidades, usando las fórmulas anteriormente descritas.
Barney DownPeak 15% POP
AWT
Límite inferior
Media
Límite Superior
Conv.
123.2
131.8
140.3
NC 1
289.1
317
344.8
NC 2
166.6
183
199.4
Límite inferior
Media
Límite Superior
Conv.
78.1
79.7
81.3
NC 1
126.5
130.1
133.7
NC 2
63.3
64.6
65.8
Límite inferior
Media
Límite Superior
Conv.
202.2
211.5
220.7
NC 1
419.6
447
474.5
NC 2
231.5
247.6
263.6
ATT
AJT
Tabla 19: Intervalos de confianza con un tráfico Barney DownPeak 15% POP, Edificio 2
En la tabla 19, se observa como el algoritmo convencional es el que mejor responde a este tipo de
tráfico. Ya que los otros dos algoritmos producen unos tiempos de espera muchísimo más altos al no
seguir el método de recogida recomendable para periodos DownPeak, siendo especialmente
llamativas las diferencias del algoritmo Nearest Call básico.
84
Barney DownPeak 12% POP
AWT
Límite inferior
Media
Límite Superior
Conv.
88.7
96.8
104.9
NC 1
205.8
233.2
260.5
NC 2
141.7
157.3
173
Límite inferior
Media
Límite Superior
Conv.
75.2
76.4
77.6
NC 1
123
128.7
134.3
NC 2
58.9
60.5
62.1
Límite inferior
Media
Límite Superior
Conv.
164.6
173.1
181.7
NC 1
331.3
361.8
392.3
NC 2
202.5
217.8
233.1
ATT
AJT
Tabla 20: Intervalos de confianza con un tráfico Barney DownPeak 12% POP, Edificio 2
En esta tabla se observa como aunque han disminuido los tiempos de cada algoritmo. Ya que
también se ha visto reducida la intensidad del tráfico, la relación entre ellos sigue siendo igual.
Demostrando la poca eficacia de los dos algoritmos diseñados ante tráficos del tipo DownPeak,
aunque esto se podría solucionar cambiando el método de despacho cuando se detecten patrones de
tráfico de este tipo.
85
Barney DownPeak 8% POP
AWT
Límite inferior
Media
Límite Superior
Conv.
65.4
68.7
72.1
NC 1
107.2
126.3
145.3
NC 2
100.4
111.5
122.6
Límite inferior
Media
Límite Superior
Conv.
65.8
68
70.1
NC 1
114.7
121.1
127.4
NC 2
53.6
55.2
56.8
Límite inferior
Media
Límite Superior
Conv.
131.5
136.7
141.9
NC 1
223.4
247.3
271.3
NC 2
155.4
166.6
177.9
ATT
AJT
Tabla 21: Intervalos de confianza con un tráfico Barney DownPeak 8% POP, Edificio 2
En la tabla número 21 se observa como el algoritmo convencional continúa demostrando ser el más
recomendable para este tipo de tráfico con el menor tiempo de trayecto y el menor tiempo de espera.
Por otro lado el algoritmo Nearest Call sigue presentando unos tiempos de tránsito muy elevados
que provocan que tenga una calidad de respuesta muy baja. Pero como se ha comentado
anteriormente estos algoritmos no están preparados para este tipo de tráfico.
86
En estas tablas se observa como ninguno de los algoritmos consigue buenos tiempos de espera ante
un tráfico DownPeak, siendo especialmente mala la respuesta del algoritmo Nearest Call y aunque
en menor medida también la del Nearest Call diseñado para el trabajo.
Concluyéndose en base a los datos anteriores que el algoritmo convencional es el que mejor
responde ante tráficos del tipo DownPeak. Sin embargo esto se podría mejorar con sistemas de
despacho que infieran o prevean a través de la experiencia cuando se va a producir un periodo de este
tipo. Esto puede ser sabiendo a la hora a la que se van los empleados, en ese caso hay un
procedimiento sencillo pero que mejora los tiempos de forma considerable. Este consiste en enviar
los ascensores lo más arriba posible, teniendo en cuenta las llamadas ya asignadas a otros ascensores,
de forma que conforme vayan descendiendo vayan recogiendo pasajeros y llevándolos a la planta
baja. Una vez hecho esto y considerando que se trabaja con ascensores del tipo Double-Deck se
podría premiar como en el algoritmo diseñado en este trabajo, el servir a plantas consecutivas. Lo
que ha probado reducir los tiempos tanto de tránsito como de espera.
87
7.5.3 BARNEY UPPEAK
En la tabla 22, se muestran los intervalos de confianza que se obtienen al someter los tres algoritmos
a las distintas simulaciones, ante un tráfico del tipo Barney UpPeak y una intensidad del 7% POP,
usando las fórmulas anteriormente descritas.
Barney UpPeak 7% POP
AWT
Límite inferior
Media
Límite Superior
Conv.
628.7
758
887.2
NC 1
130.4
159.2
188
NC 2
149.9
177.3
204.8
Límite inferior
Media
Límite Superior
Conv.
90.4
91.3
92.2
NC 1
94.9
97.6
100.3
NC 2
107.2
109.6
111.9
Límite inferior
Media
Límite Superior
Conv.
719.7
849.3
978.8
NC 1
227.1
256.8
286.6
NC 2
259.7
286.9
314.1
ATT
AJT
Tabla 22: Intervalos de confianza con un tráfico Barney UpPeak 7% POP, Edificio 2
En la tabla 22 se observa como los algoritmos Nearest Call de este trabajo responden de forma
parecida a un tipo de tráfico UpPeak. Siendo un poco mejores los tiempos del primero de ellos
respecto a los del segundo en todas las categorías. Siendo los de ambos mucho mejores respecto a los
del algoritmo convencional. Este no responde bien a este tipo de tráfico, lo que provoca unos tiempos
de espera altísimos y en consecuencia unos tiempos de trayecto también muy elevados.
88
Usando estos datos se puede extraer la conclusión de que el algoritmo convencional es el que peor
responde ante tráficos del tipo UpPeak. Sin embargo esto se podría mejorar con sistemas de
despacho que infieran o prevean a través de la experiencia cuando se va a producir un periodo
UpPeak. Esto puede ser sabiendo a la hora a la que entran los empleados, los sistemas de control
cuando detectan tasas de tráfico nítidamente UpPeak ponen en marcha un procedimiento sencillo
que mejora profundamente los resultados ofrecidos en este apartado. Dicho procedimiento consiste
en que cuando un ascensor atiende todas sus llamadas de cabina vuelva automáticamente a la planta
baja para seguir cargando pasajeros que se encuentran a la espera. Esta forma de actuar mejora
enormemente los resultados ofrecidos. Esto se debe a que los métodos de despacho en su modo de
funcionamiento normal, bajo condiciones UpPeak solo registran una llamada de planta en la planta
baja aunque haya decenas de personas esperando ascensores. Esto provoca que esta única llamada
sea asociada a una única cabina, y cuando esta cabina atiende la llamada y carga pasajeros hasta
completar su capacidad es cuando de nuevo se registra una nueva llamada. Esta será la que hará que
otro ascensor venga para transportar nuevos pasajeros. El alto tiempo de procesado entre que se
asigna la llamada de la planta baja a un ascensor, este llega y carga y se vuelve a procesar una nueva
llamada de planta baja provoca que haya ascensores que se encuentren ociosos. Ya que cuando les
llega el turno hay otro que acaba de quedar libre o está a punto de hacerlo.
Los algoritmos Nearest Call empleados en este trabajo, en este edificio han visto como empeoraban
mucho sus tiempos aún siendo mejores que los del algoritmo convencional, respecto al otro edificio.
Ya que en este al aumentar su altura aumenta la distancia que tienen que recorrer y no se aprovechan
todos los ascensores. Debido esto al problema típico de este periodo descrito anteriormente. Ya que
el número elevado de ascensores no garantiza un mejor servicio en este caso, porque provoca
simplemente que haya más ascensores ociosos. Por lo que es aconsejable utilizar algoritmos de
despachos pensados para este tipo de tráfico.
89
8. Conclusión
Este trabajo se llevo a cabo con el objeto de profundizar en el despacho de llamadas, una de las
funcionalidades clásicas de los sistemas de control de transporte vertical. Este consta de cuatro fases
principales que son: introducción del tema, información y documentación, propuesta de una solución
al problema y las conclusiones a las que se llega
Este trabajo comienza introduciendo el tema sobre el que trata el proyecto. Formando una idea
general desde la que se parte para su posterior desarrollo
Tras esta introducción comienza la fase de información y documentación. Esta fase comienza con un
periodo de información del funcionamiento de los sistemas de ascensores. Seguido de otro periodo
de información de los aspectos asociados a los sistemas de transporte vertical mediante ascensores.
Una vez se concluye este periodo el trabajo comienza a enfocar su objetivo, siendo este los sistemas
para la asignación de llamadas. Para esto se estudian los distintos sistemas de control y las soluciones
que han surgido al problema de la asignación de llamadas durante los últimos años.
En esta primera fase se concluyó que los controladores modernos actúan mejor que los clásicos.
Apreciándose una tendencia a la innovación en el desarrollo de los nuevos modelos en busca de una
solución que optimice la calidad de la respuesta. Observándose cómo estos no solo mejoran la
calidad del servicio prestado a los usuarios, sino que además también buscan mejorar el servicio al
propietario reduciendo el consume energético. Aunque todavía desde un punto de vista económico,
en ocasiones la relación entre las ventajas de su aplicación y su coste de implementación es menor
que la de los controladores clásicos. Por lo que a pesar de lo desfasado de su diseño no han perdido
toda la vigencia. Ya que en la práctica la simplicidad en el diseño de los controladores clásicos
provoca que tengan estos unos costes menores tanto de fabricación como luego de instalación.
Por otro lado es esta fase se observo las ventajas que ofrecen los ascensores del tipo Double-Deck a
la hora de diseñar la instalación del sistema de ascensores. Ya que aunque sea un tipo de ascensores
que no están siendo muy utilizados ofrecen grandes ventajas a la hora de servir en grandes edificios y
rascacielos. Especialmente debido a la oportunidad de aumentar la capacidad de servicio sin requerir
para ello un espacio adicional. Algo que a la hora de diseñar y construir grandes edificios es muy
importante, siendo como es actualmente, el espacio utilizado una variable clave para ello. De esta
forma el uso de ascensores de este tipo permite disminuir el espacio utilizado por los ascensores en el
edificio. Pudiendo este ser aprovechado para otros fines sin empeorar la calidad del servicio
proporcionado a los pasajeros. Aparte de la posibilidad de servir simultáneamente a plantas
90
adyacentes disminuyendo con ello los tiempos de servicio.
Tras esta fase se decidió desarrollar un algoritmo diseñado especialmente para este tipo de
ascensores, con el objetivo de mejorar la calidad de servicio respecto a otros algoritmos clásicos.
Pero teniendo siempre en cuenta que este fuera a su vez de fácil implementación y no muy complejo,
intentando combinar eficiencia y simplicidad, para facilitar su uso y reducir sus costes. De forma que
no tenga el problema de ser muy costoso, como les ocurre a muchos controladores modernos, para
poder prestar un servicio de calidad y que se pueda implementar fácilmente.
El algoritmo que se ha diseñado en este trabajo se ha pensado para situaciones de tráfico del tipo
Interfloor. Ya que para los tráficos DownPeak y UpPeak ya existen algoritmos que demuestran ser
bastante eficaces y simples. Sin embargo se ha observado que es el tipo de tráfico que más tiempo
dura y sin embargo el menos estudiado, a pesar de ser un tráfico de complejidad elevada.
Para comprobar la eficacia de este algoritmo diseñado se ha elaborado el código en C++ necesario
para su implementación y se han llevado a cabo distintas simulaciones con el software Elevate
desarrollado por Peters Research Ltd. para probar su validez.
Para poder afirmar que los datos obtenidos son válidos y que se puedan extraer conclusiones
generales de las simulaciones han debido efectuarse un número de ellas elevado. En estas
simulaciones llevadas a cabo el algoritmo diseñado ha demostrado ser muy eficaz ante tipos de
tráfico Interfloor. Alcanzando de esta forma las expectativas generadas y pudiendo afirmarse que
cumple sus especificaciones. Ya que aunque no funcione de forma eficaz ante tráficos del tipo
UpPeak y DownPeak para estos ya hay algoritmos que responden de forma eficaz siendo simples.
91
9. Bibliografía

Iglesias G. (2013), Diseño y simulación de un algoritmo basado en lógica difusa para el
despacho de ascensores en un edificio, proyecto fin de carrera.

Lauener J. (2007), Traffic Performance of Elevators with Destination Control,
www.elevator-world.com, septiembre 2007, pp. 86-94.

Jairo J. y Rosso A.(2008): Sistema de control inteligente para un grupo de elevadores,
Ciencia e Ingeniería Neogranadina, Vol. 18-2, pp. 117-130.

Barney, G (2003), Elevator Traffic Handbook: Theory and Practice, Spon Press, pp.388-390

Aparicio P., Cortés P. y Fernández J. (2011), Optimización del despacho de llamadas
mediante la inclusión de la consideración del tiempo de espera relativo, XV Congreso de
Ingeniería de Organización, Cartagena, 7-9 Septiembre 2011 pp. 899-906

Cortés P., Guadix J., Larrañeta J., Muñuzuri J. y Onieva L. (2003), Algoritmos para la
Asignación de Llamadas en Sistemas de Tráfico Vertical Selectivo en Bajada, V Congreso de
Ingeniería de Organización, Valladolid, 4-5 Septiembre 2003.

http://www.schindler.com/za/internet/en/mobility-solutions/products/destinationtechnology/destination-control-technology.html

http://www.emporis.com/statistics/worlds-tallest-buildings
92
10. Anexo A, resultados intermedios
En esta sección de mostrarán todos los resultados obtenidos de las simulaciones con
los que se han obtenido los intervalos de confianza. Cada resultado muestra los
tiempos que se obtienen para cada algoritmo en cada simulación, distinguiéndose
estas por edificio, número de semilla y tipo de tráfico.
Edificio 1
Semilla 1
Constant traffic Interfloor 15%
AWT
ATT
AJT
Algoritmo
Convencional
115.3
86.6
201.9
Nearest Call
125.3
97
222.3
116,9
86,4
203,3
ajuste en peso
Nearest Call
Editado Double-Deck
93
Constant traffic Interfloor 11%
AWT
ATT
AJT
Algoritmo
Convencional
110,5
70,8
181,3
Nearest Call
87,5
91,2
178,7
69,6
76,4
146
AWT
ATT
AJT
Algoritmo
Convencional
99,1
61,8
160,8
Nearest Call
60,9
69,5
130,4
54,5
56,3
110,8
AWT
ATT
AJT
Algoritmo
Convencional
64,3
43,1
107,4
Nearest Call
45,2
46,7
91,9
34,9
40,1
75
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 8%
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 5%
ajuste en peso
Nearest Call
Editado Double-Deck
94
Barney DownPeak 15%
AWT
ATT
AJT
Algoritmo
Convencional
190,1
81,3
271,4
Nearest Call
264,5
113,6
378,1
292,4
53,4
345,8
AWT
ATT
AJT
Algoritmo
Convencional
104,3
71,5
175,9
Nearest Call
225,9
112,6
338,6
282,4
51,2
333,6
AWT
ATT
AJT
Algoritmo
Convencional
73,5
66,9
140,4
Nearest Call
76,5
98,2
174,7
187,5
48,1
235,6
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 12%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 8%
ajuste en peso
Nearest Call
Editado Double-Deck
95
Barney UpPeak 7%
AWT
ATT
AJT
Algoritmo
Convencional
348,4
79,8
428,2
Nearest Call
26,2
87,3
113,5
54,9
86,9
141,7
AWT
ATT
AJT
Algoritmo
Convencional
138.9
83.7
222.6
Nearest Call
125.5
94.3
219.9
91,8
85,3
177,1
ajuste en peso
Nearest Call
Editado Double-Deck
Semilla 11
Constant traffic Interfloor 15%
ajuste en peso
Nearest Call
Editado Double-Deck
96
Constant traffic Interfloor 11%
AWT
ATT
AJT
Algoritmo
Convencional
105,6
76,1
181,6
Nearest Call
67,4
86,6
154
77,6
71,7
149,3
AWT
ATT
AJT
Algoritmo
Convencional
76,9
63,2
140
Nearest Call
65,5
72,4
137,9
51,7
56,2
107,9
AWT
ATT
AJT
Algoritmo
Convencional
66,2
41,3
107,5
Nearest Call
38,2
45,3
83,5
41,2
38,4
79,6
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 8%
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 5%
ajuste en peso
Nearest Call
Editado Double-Deck
97
Barney DownPeak 15%
AWT
ATT
AJT
Algoritmo
Convencional
190,7
74,6
265,3
Nearest Call
284,5
117,8
402,3
301,8
50,1
351,9
AWT
ATT
AJT
Algoritmo
Convencional
134,6
78,2
212,8
Nearest Call
216,4
113
329,4
249
50,7
299,6
AWT
ATT
AJT
Algoritmo
Convencional
58,6
63,5
122,1
Nearest Call
57,2
80,5
137,7
164
44.9
208.9
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 12%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 8%
ajuste en peso
Nearest Call
Editado Double-Deck
98
Barney UpPeak 7%
AWT
ATT
AJT
Algoritmo
Convencional
445,3
78,3
523,6
Nearest Call
16,8
92,9
109,7
29
92,7
121,6
AWT
ATT
AJT
Algoritmo
Convencional
148.9
83.7
232.6
Nearest Call
129.2
96
225.2
112,9
87,8
200,7
ajuste en peso
Nearest Call
Editado Double-Deck
Semilla 87
Constant traffic Interfloor 15%
ajuste en peso
Nearest Call
Editado Double-Deck
99
Constant traffic Interfloor 11%
AWT
ATT
AJT
Algoritmo
Convencional
96,5
69
165,5
Nearest Call
83,7
82,1
165,8
91,6
74,4
166
AWT
ATT
AJT
Algoritmo
Convencional
90,6
54,4
145,1
Nearest Call
64
72,9
136,9
52,7
63,6
116,3
AWT
ATT
AJT
Algoritmo
Convencional
61,8
42,9
104,7
Nearest Call
38,7
44
82,8
40,9
39
80
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 8%
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 5%
ajuste en peso
Nearest Call
Editado Double-Deck
100
Barney DownPeak 15%
AWT
ATT
AJT
Algoritmo
Convencional
186,6
77,9
264,5
Nearest Call
314,9
119,1
434
306,6
51,1
357,7
AWT
ATT
AJT
Algoritmo
Convencional
145,3
75,3
220,7
Nearest Call
179,1
119,9
299
246,2
49,3
295,5
AWT
ATT
AJT
Algoritmo
Convencional
63,2
65,3
128,5
Nearest Call
80,9
90,1
171
242,6
44,4
286,9
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 12%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 8%
ajuste en peso
Nearest Call
Editado Double-Deck
101
Barney UpPeak 7%
AWT
ATT
AJT
Algoritmo
Convencional
688,1
82,9
771
Nearest Call
42,7
89,2
131,9
37
91,6
128,6
AWT
ATT
AJT
Algoritmo
Convencional
131.7
82.3
213.9
Nearest Call
156.1
101
257.1
147,6
89,1
236,7
ajuste en peso
Nearest Call
Editado Double-Deck
Semilla 165
Constant traffic Interfloor 15%
ajuste en peso
Nearest Call
Editado Double-Deck
102
Constant traffic Interfloor 11%
AWT
ATT
AJT
Algoritmo
Convencional
112,1
74,4
186,5
Nearest Call
105,6
88,3
193,9
85,6
73,4
159
AWT
ATT
AJT
Algoritmo
Convencional
81,3
59,2
140,5
Nearest Call
58,7
74,4
133,1
61,3
60,5
121,8
AWT
ATT
AJT
Algoritmo
Convencional
64
45,7
109,7
Nearest Call
42,3
47,5
89,8
47,2
39,9
87,1
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 8%
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 5%
ajuste en peso
Nearest Call
Editado Double-Deck
103
Barney DownPeak 15%
AWT
ATT
AJT
Algoritmo
Convencional
156,7
80,1
236,9
Nearest Call
341,6
122,1
463,7
262,9
54,1
317
AWT
ATT
AJT
Algoritmo
Convencional
145,3
79,3
224,6
Nearest Call
232,6
115,6
348,1
268,7
50
318,7
AWT
ATT
AJT
Algoritmo
Convencional
69
62,3
131,3
Nearest Call
63,3
85,5
148,9
158,4
45,2
203,7
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 12%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 8%
ajuste en peso
Nearest Call
Editado Double-Deck
104
Barney UpPeak 7%
AWT
ATT
AJT
Algoritmo
Convencional
409,4
78,4
487,8
Nearest Call
22
97,6
119,6
17,2
100
117,2
AWT
ATT
AJT
Algoritmo
Convencional
133.3
86.2
219.5
Nearest Call
180.6
96.4
277
110,5
91
201,6
ajuste en peso
Nearest Call
Editado Double-Deck
Semilla 258
Constant traffic Interfloor 15%
ajuste en peso
Nearest Call
Editado Double-Deck
105
Constant traffic Interfloor 11%
AWT
ATT
AJT
Algoritmo
Convencional
99,2
69,1
168,3
Nearest Call
74,8
84,4
159,2
65,8
69
134,7
AWT
ATT
AJT
Algoritmo
Convencional
85
69,7
154,7
Nearest Call
71,6
67,5
139,1
67,5
60,7
128,3
AWT
ATT
AJT
Algoritmo
Convencional
72,2
50,3
122,5
Nearest Call
46,6
51,1
97,7
45,5
45
90,4
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 8%
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 5%
ajuste en peso
Nearest Call
Editado Double-Deck
106
Barney DownPeak 15%
AWT
ATT
AJT
Algoritmo
Convencional
217,2
82,2
299,4
Nearest Call
370,2
127,1
497,3
302,7
52,9
355,5
AWT
ATT
AJT
Algoritmo
Convencional
89
70,4
159,4
Nearest Call
157,4
100,9
258,3
267,4
51,4
318,8
AWT
ATT
AJT
Algoritmo
Convencional
88,3
69,2
157,6
Nearest Call
65
77,4
142,4
171,6
50,2
221,8
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 12%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 8%
ajuste en peso
Nearest Call
Editado Double-Deck
107
Barney UpPeak 7%
AWT
ATT
AJT
Algoritmo
Convencional
739,5
79,9
819,5
Nearest Call
24,9
84,2
109,1
63,3
96,9
160,2
AWT
ATT
AJT
Algoritmo
Convencional
129.1
82.9
212
Nearest Call
143.5
90.8
234.4
102,4
82,6
185
ajuste en peso
Nearest Call
Editado Double-Deck
Semilla 333
Constant traffic Interfloor 15%
ajuste en peso
Nearest Call
Editado Double-Deck
108
Constant traffic Interfloor 11%
AWT
ATT
AJT
Algoritmo
Convencional
112,2
68,1
180,4
Nearest Call
90,2
87,2
177,4
71,4
70,7
142,1
AWT
ATT
AJT
Algoritmo
Convencional
90,2
57,4
147,6
Nearest Call
61,3
71,2
132,4
59,7
55,3
115
AWT
ATT
AJT
Algoritmo
Convencional
71
44,4
115,4
Nearest Call
42,6
43,7
86,3
55,5
37,5
93
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 8%
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 5%
ajuste en peso
Nearest Call
Editado Double-Deck
109
Barney DownPeak 15%
AWT
ATT
AJT
Algoritmo
Convencional
170,2
75,4
245,6
Nearest Call
298,7
122,5
421,3
398,3
52,3
450,7
AWT
ATT
AJT
Algoritmo
Convencional
122,2
73,5
195,7
Nearest Call
200
106,1
306,1
170,5
53,9
224,4
AWT
ATT
AJT
Algoritmo
Convencional
111,9
70,1
181,9
Nearest Call
43
71,4
114,4
188,4
45,9
234,3
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 12%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 8%
ajuste en peso
Nearest Call
Editado Double-Deck
110
Barney UpPeak 7%
AWT
ATT
AJT
Algoritmo
Convencional
430,9
78,9
509,8
Nearest Call
14,8
94,7
109,5
27,2
95
122,2
AWT
ATT
AJT
Algoritmo
Convencional
156.5
81.5
238.1
Nearest Call
140.4
95.7
236.1
76
84,3
160,3
ajuste en peso
Nearest Call
Editado Double-Deck
Semilla 369
Constant traffic Interfloor 15%
ajuste en peso
Nearest Call
Editado Double-Deck
111
Constant traffic Interfloor 11%
AWT
ATT
AJT
Algoritmo
Convencional
105,8
72,8
178,6
Nearest Call
93,5
93,5
187
86,3
75
161,3
AWT
ATT
AJT
Algoritmo
Convencional
89,5
63,1
152,6
Nearest Call
59,2
67,7
127
52,4
60,6
113
AWT
ATT
AJT
Algoritmo
Convencional
62,6
44,8
107,4
Nearest Call
47,5
46,4
94
32,7
39,6
72,3
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 8%
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 5%
ajuste en peso
Nearest Call
Editado Double-Deck
112
Barney DownPeak 15%
AWT
ATT
AJT
Algoritmo
Convencional
185
77,5
262,5
Nearest Call
399,7
121,5
521,2
360,5
51,6
412
AWT
ATT
AJT
Algoritmo
Convencional
128
76,9
204,9
Nearest Call
147,4
104,7
252,1
213,3
51,7
265
AWT
ATT
AJT
Algoritmo
Convencional
72,6
66
138,6
Nearest Call
82
94,6
176,6
158,1
48,7
206,8
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 12%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 8%
ajuste en peso
Nearest Call
Editado Double-Deck
113
Barney UpPeak 7%
AWT
ATT
AJT
Algoritmo
Convencional
539,6
82,4
622,1
Nearest Call
45,2
90,9
136,1
16,7
96,8
113,4
AWT
ATT
AJT
Algoritmo
Convencional
125.2
89
214.3
Nearest Call
179.2
97.4
276.6
104,9
88
192,9
ajuste en peso
Nearest Call
Editado Double-Deck
Semilla 456
Constant traffic Interfloor 15%
ajuste en peso
Nearest Call
Editado Double-Deck
114
Constant traffic Interfloor 11%
AWT
ATT
AJT
Algoritmo
Convencional
106,9
78,7
185,6
Nearest Call
87,3
84,4
171,7
66,1
71,8
137,9
AWT
ATT
AJT
Algoritmo
Convencional
89,8
58,4
148,2
Nearest Call
55,8
73,3
129
56,5
59,6
116,1
AWT
ATT
AJT
Algoritmo
Convencional
71,8
41,5
113,3
Nearest Call
36,3
48,6
84,9
31,5
40,4
71,9
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 8%
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 5%
ajuste en peso
Nearest Call
Editado Double-Deck
115
Barney DownPeak 15%
AWT
ATT
AJT
Algoritmo
Convencional
191,3
78,2
269,5
Nearest Call
381,5
125,3
506,8
291,8
52
343,8
AWT
ATT
AJT
Algoritmo
Convencional
120,9
74,4
195,3
Nearest Call
246
109,1
355,1
212,7
51,5
264,2
AWT
ATT
AJT
Algoritmo
Convencional
69,3
63,3
132,6
Nearest Call
61
78,8
139,8
152,5
49,6
202,2
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 12%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 8%
ajuste en peso
Nearest Call
Editado Double-Deck
116
Barney UpPeak 7%
AWT
ATT
AJT
Algoritmo
Convencional
597,7
79,2
676,8
Nearest Call
50,9
89,8
140,8
60,4
102,5
162,9
AWT
ATT
AJT
Algoritmo
Convencional
128.3
86.5
214.7
Nearest Call
136.6
97.8
234.4
87,4
87,3
174,7
ajuste en peso
Nearest Call
Editado Double-Deck
Semilla 741
Constant traffic Interfloor 15%
ajuste en peso
Nearest Call
Editado Double-Deck
117
Constant traffic Interfloor 11%
AWT
ATT
AJT
Algoritmo
Convencional
100,5
73,8
174,3
Nearest Call
90,4
85,5
176
91,7
75,5
167,2
AWT
ATT
AJT
Algoritmo
Convencional
102,5
62,7
165,2
Nearest Call
74,3
74,5
148,7
60,4
56,3
116,7
AWT
ATT
AJT
Algoritmo
Convencional
58,5
45,8
104,3
Nearest Call
43
52,5
95,5
43,7
43,7
87,4
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 8%
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 5%
ajuste en peso
Nearest Call
Editado Double-Deck
118
Barney DownPeak 15%
AWT
ATT
AJT
Algoritmo
Convencional
193,2
78
271,2
Nearest Call
281,4
118,8
400,2
266,4
55,7
322,1
AWT
ATT
AJT
Algoritmo
Convencional
135,8
78
213,8
Nearest Call
132,2
110,7
242,9
199,4
53,5
252,9
AWT
ATT
AJT
Algoritmo
Convencional
60,4
60,3
120,8
Nearest Call
87,2
85,2
172,5
144,8
51,8
196,6
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 12%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 8%
ajuste en peso
Nearest Call
Editado Double-Deck
119
Barney UpPeak 7%
AWT
ATT
AJT
Algoritmo
Convencional
557,6
80,1
637,7
Nearest Call
32,6
85,9
118,5
53,5
92
145,5
AWT
ATT
AJT
Algoritmo
Convencional
142.8
82.9
225.7
Nearest Call
123.2
94.9
218.1
116,7
86,3
203
ajuste en peso
Nearest Call
Editado Double-Deck
Semilla 987
Constant traffic Interfloor 15%
ajuste en peso
Nearest Call
Editado Double-Deck
120
Constant traffic Interfloor 11%
AWT
ATT
AJT
Algoritmo
Convencional
104,3
71,3
175,6
Nearest Call
83,2
83,7
166,9
76,2
70,1
146,2
AWT
ATT
AJT
Algoritmo
Convencional
85,6
58,6
144,2
Nearest Call
88,8
71,7
160,5
61,7
54,9
116,6
AWT
ATT
AJT
Algoritmo
Convencional
67,3
44,7
112
Nearest Call
37,6
46,7
84,3
38,7
38,6
77,3
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 8%
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 5%
ajuste en peso
Nearest Call
Editado Double-Deck
121
Barney DownPeak 15%
AWT
ATT
AJT
Algoritmo
Convencional
190,7
80,8
271,4
Nearest Call
303,8
115,4
419,2
370,2
49,7
419,9
AWT
ATT
AJT
Algoritmo
Convencional
114,2
72
186,2
Nearest Call
176,8
104,1
280,9
226,4
54,9
281,2
AWT
ATT
AJT
Algoritmo
Convencional
64,8
60,1
124,9
Nearest Call
70,9
90,1
160,9
171,3
45,7
217
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 12%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 8%
ajuste en peso
Nearest Call
Editado Double-Deck
122
Barney UpPeak 7%
AWT
ATT
AJT
Algoritmo
Convencional
483,7
80,1
563,8
Nearest Call
14,2
98,2
112,4
21,5
97,2
118,8
ajuste en peso
Nearest Call
Editado Double-Deck
123
Edificio 2
Semilla 1
Constant traffic Interfloor 15%
AWT
ATT
AJT
Algoritmo
Convencional
130,4
96,9
227,3
Nearest Call
146,5
118,5
265
74,1
102,8
176,9
AWT
ATT
AJT
Algoritmo
Convencional
99,9
81,4
181,3
Nearest Call
68,4
107
175,4
72,8
83,3
156
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 11%
ajuste en peso
Nearest Call
Editado Double-Deck
124
Constant traffic Interfloor 8%
AWT
ATT
AJT
Algoritmo
Convencional
73,2
64,6
137,8
Nearest Call
50,6
77,4
128
41,9
66,1
108
AWT
ATT
AJT
Algoritmo
Convencional
64
46,5
110,4
Nearest Call
31
48
79
31
41,7
72,7
AWT
ATT
AJT
Algoritmo
Convencional
136,6
84,3
221
Nearest Call
326,8
140,2
467
161,7
64,8
226,5
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 5%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 15%
ajuste en peso
Nearest Call
Editado Double-Deck
125
Barney DownPeak 12%
AWT
ATT
AJT
Algoritmo
Convencional
84,5
74,9
159,4
Nearest Call
223,5
112,7
336,2
179,5
57,8
237,2
AWT
ATT
AJT
Algoritmo
Convencional
66,4
66,7
133,1
Nearest Call
112,1
112,6
224,7
100,6
51,4
152
AWT
ATT
AJT
Algoritmo
Convencional
1088
91,7
1179,5
Nearest Call
211,2
98,1
309,4
183
112,2
295,2
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 8%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney UpPeak 7%
ajuste en peso
Nearest Call
Editado Double-Deck
126
Semilla 11
Constant traffic Interfloor 15%
AWT
ATT
AJT
Algoritmo
Convencional
131,4
97,2
228,6
Nearest Call
114,2
122
236,3
83
107,4
190,4
AWT
ATT
AJT
Algoritmo
Convencional
110,1
81,7
191,8
Nearest Call
60,9
97,4
158,2
55,6
84,8
140,4
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 11%
ajuste en peso
Nearest Call
Editado Double-Deck
127
Constant traffic Interfloor 8%
AWT
ATT
AJT
Algoritmo
Convencional
73,3
62,2
135,5
Nearest Call
45,8
75,5
121,3
38,6
62,9
101,5
AWT
ATT
AJT
Algoritmo
Convencional
61,6
44,6
106,1
Nearest Call
28,5
61,1
89,6
38,9
43,8
82,6
AWT
ATT
AJT
Algoritmo
Convencional
120,6
78,9
199,5
Nearest Call
260,4
131,1
391,5
174,6
65,6
240,2
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 5%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 15%
ajuste en peso
Nearest Call
Editado Double-Deck
128
Barney DownPeak 12%
AWT
ATT
AJT
Algoritmo
Convencional
113,5
79,4
192,9
Nearest Call
223,2
134,7
357,9
143,2
57,8
201
AWT
ATT
AJT
Algoritmo
Convencional
68
66,3
134,3
Nearest Call
96,4
108,8
205,3
93,2
59,5
152,6
AWT
ATT
AJT
Algoritmo
Convencional
819,4
91,7
911,1
Nearest Call
126,2
101,9
228,1
168,7
110
278,8
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 8%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney UpPeak 7%
ajuste en peso
Nearest Call
Editado Double-Deck
129
Semilla 87
Constant traffic Interfloor 15%
AWT
ATT
AJT
Algoritmo
Convencional
138,3
91,9
230,2
Nearest Call
128,4
122,5
250,9
72,1
105,5
177,6
AWT
ATT
AJT
Algoritmo
Convencional
89,3
75,5
164,8
Nearest Call
71,3
94
165,3
58,9
83,3
142,2
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 11%
ajuste en peso
Nearest Call
Editado Double-Deck
130
Constant traffic Interfloor 8%
AWT
ATT
AJT
Algoritmo
Convencional
88,3
73,1
161,4
Nearest Call
46,7
78,3
125
42,7
70,7
113,4
AWT
ATT
AJT
Algoritmo
Convencional
57
42,3
99,3
Nearest Call
24,4
42,7
67,1
23
43,4
66,5
AWT
ATT
AJT
Algoritmo
Convencional
131,1
79,7
210,9
Nearest Call
336,4
122,7
459,1
193,6
65
258,6
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 5%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 15%
ajuste en peso
Nearest Call
Editado Double-Deck
131
Barney DownPeak 12%
AWT
ATT
AJT
Algoritmo
Convencional
85,8
74,9
160,7
Nearest Call
267,8
134,5
402,3
167,4
60
227,4
AWT
ATT
AJT
Algoritmo
Convencional
73,7
66,7
140,3
Nearest Call
116,3
131,9
248,2
146,7
57,2
203,9
AWT
ATT
AJT
Algoritmo
Convencional
664,9
92,9
757,9
Nearest Call
171
93,2
264,2
139,3
114,8
254,1
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 8%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney UpPeak 7%
ajuste en peso
Nearest Call
Editado Double-Deck
132
Semilla 165
Constant traffic Interfloor 15%
AWT
ATT
AJT
Algoritmo
Convencional
148,8
99,1
247,9
Nearest Call
133,3
119
252,4
86,7
105
191,6
AWT
ATT
AJT
Algoritmo
Convencional
85,3
81,7
167
Nearest Call
77,8
98,4
176,2
57,5
90,8
148,3
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 11%
ajuste en peso
Nearest Call
Editado Double-Deck
133
Constant traffic Interfloor 8%
AWT
ATT
AJT
Algoritmo
Convencional
88,3
64,2
152,5
Nearest Call
56
75,9
131,9
39,2
64,7
103,9
AWT
ATT
AJT
Algoritmo
Convencional
63,4
44,8
108,2
Nearest Call
29,8
46,5
76,4
30,2
40,8
71
AWT
ATT
AJT
Algoritmo
Convencional
136,1
79,4
215,5
Nearest Call
278
134,8
412,7
171,5
68,2
239,8
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 5%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 15%
ajuste en peso
Nearest Call
Editado Double-Deck
134
arney DownPeak 12%
AWT
ATT
AJT
Algoritmo
Convencional
116,3
75,2
191,5
Nearest Call
261,6
134,2
395,8
152,6
59,5
212,1
AWT
ATT
AJT
Algoritmo
Convencional
67,5
69,2
136,7
Nearest Call
128,4
122,1
250,5
115,2
54
169,2
AWT
ATT
AJT
Algoritmo
Convencional
558,1
90,9
649
Nearest Call
121,8
93,9
215,7
229,2
107,3
336,5
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 8%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney UpPeak 7%
ajuste en peso
Nearest Call
Editado Double-Deck
135
Semilla 258
Constant traffic Interfloor 15%
AWT
ATT
AJT
Algoritmo
Convencional
132,8
94,8
227,6
Nearest Call
123,5
121,6
245,1
68
107,3
175,3
AWT
ATT
AJT
Algoritmo
Convencional
97,6
83,4
181
Nearest Call
72
101,4
173,4
44,3
86,7
130,9
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 11%
ajuste en peso
Nearest Call
Editado Double-Deck
136
Constant traffic Interfloor 8%
AWT
ATT
AJT
Algoritmo
Convencional
93
61,5
154,5
Nearest Call
47,2
80,2
127,4
45,1
64,6
109,7
AWT
ATT
AJT
Algoritmo
Convencional
68,3
45,3
113,6
Nearest Call
37,5
54,7
92,2
39,8
49,7
89,5
AWT
ATT
AJT
Algoritmo
Convencional
108,2
80
188,2
Nearest Call
340,7
128,5
469,2
221,5
63,9
285,3
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 5%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 15%
ajuste en peso
Nearest Call
Editado Double-Deck
137
Barney DownPeak 12%
AWT
ATT
AJT
Algoritmo
Convencional
88
76,5
164,4
Nearest Call
286,2
141,2
427,4
151,3
63,6
214,9
AWT
ATT
AJT
Algoritmo
Convencional
72,5
73
145,5
Nearest Call
90,2
117,7
207,8
99,1
56,9
156
AWT
ATT
AJT
Algoritmo
Convencional
490,7
90,4
581,1
Nearest Call
208,1
101,5
309,6
220,9
112
332,9
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 8%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney UpPeak 7%
ajuste en peso
Nearest Call
Editado Double-Deck
138
Semilla 333
Constant traffic Interfloor 15%
AWT
ATT
AJT
Algoritmo
Convencional
115,3
90,6
205,8
Nearest Call
117,2
115,6
232,8
75,9
94,2
170,1
AWT
ATT
AJT
Algoritmo
Convencional
100,3
78,9
179,2
Nearest Call
75,8
100,4
176,2
58,5
87,5
146
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 11%
ajuste en peso
Nearest Call
Editado Double-Deck
139
Constant traffic Interfloor 8%
AWT
ATT
AJT
Algoritmo
Convencional
72,8
61,7
134,5
Nearest Call
45,5
77,6
123,1
44,8
64,4
109,2
AWT
ATT
AJT
Algoritmo
Convencional
63,6
42,8
106,4
Nearest Call
37,2
49,4
86,6
36,7
46,3
82,9
AWT
ATT
AJT
Algoritmo
Convencional
121,2
75,5
196,7
Nearest Call
340,5
131,8
472,2
201,3
63,4
264,7
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 5%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 15%
ajuste en peso
Nearest Call
Editado Double-Deck
140
Barney DownPeak 12%
AWT
ATT
AJT
Algoritmo
Convencional
88,1
75,9
164
Nearest Call
272,3
123,1
395,4
122
62,3
184,3
AWT
ATT
AJT
Algoritmo
Convencional
59,5
63,2
122,7
Nearest Call
133,9
116,9
250,8
115,5
55,3
170,8
AWT
ATT
AJT
Algoritmo
Convencional
741,7
88,8
830,5
Nearest Call
120,4
101,2
221,7
148,5
111,4
259,9
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 8%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney UpPeak 7%
ajuste en peso
Nearest Call
Editado Double-Deck
141
Semilla 369
Constant traffic Interfloor 15%
AWT
ATT
AJT
Algoritmo
Convencional
133,7
89,5
223,3
Nearest Call
106,2
113,1
219,3
97,1
97
194,1
AWT
ATT
AJT
Algoritmo
Convencional
91,6
79,9
171,6
Nearest Call
86
102,7
188,7
56
89
145
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 11%
ajuste en peso
Nearest Call
Editado Double-Deck
142
Constant traffic Interfloor 8%
AWT
ATT
AJT
Algoritmo
Convencional
87,2
66,3
153,4
Nearest Call
55,3
84,3
139,7
42
66,8
108,9
AWT
ATT
AJT
Algoritmo
Convencional
67,7
45,7
113,3
Nearest Call
30,8
54,3
85,1
26
45,5
71,5
AWT
ATT
AJT
Algoritmo
Convencional
143,7
80,8
224,4
Nearest Call
384,7
126,6
511,3
202,3
61,8
264,1
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 5%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 15%
ajuste en peso
Nearest Call
Editado Double-Deck
143
Barney DownPeak 12%
AWT
ATT
AJT
Algoritmo
Convencional
104,9
74,6
179,5
Nearest Call
165,5
124,3
289,8
143,8
58,7
202,5
AWT
ATT
AJT
Algoritmo
Convencional
76
72
148
Nearest Call
121
119,4
240,4
109,6
55
164,6
AWT
ATT
AJT
Algoritmo
Convencional
758,3
90,9
849,1
Nearest Call
203,6
99,9
303,5
188,2
105,8
294
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 8%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney UpPeak 7%
ajuste en peso
Nearest Call
Editado Double-Deck
144
Semilla 456
Constant traffic Interfloor 15%
AWT
ATT
AJT
Algoritmo
Convencional
123,9
96,7
220,6
Nearest Call
129,1
114,8
243,8
88
108,2
196,2
AWT
ATT
AJT
Algoritmo
Convencional
99
80
179
Nearest Call
64,9
107,9
172,8
59
86,7
145,6
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 11%
ajuste en peso
Nearest Call
Editado Double-Deck
145
Constant traffic Interfloor 8%
AWT
ATT
AJT
Algoritmo
Convencional
81,4
65,1
146,5
Nearest Call
54,6
81,3
135,8
48,7
68,3
117,1
AWT
ATT
AJT
Algoritmo
Convencional
62,5
47,5
110
Nearest Call
32,8
56,4
89,2
27,4
43,4
70,8
AWT
ATT
AJT
Algoritmo
Convencional
148,1
80,8
228,9
Nearest Call
326,4
128,8
455,2
154,3
65,3
219,6
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 5%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 15%
ajuste en peso
Nearest Call
Editado Double-Deck
146
Barney DownPeak 12%
AWT
ATT
AJT
Algoritmo
Convencional
94,9
77
172
Nearest Call
199,8
126,8
326,6
148,4
63,1
211,5
AWT
ATT
AJT
Algoritmo
Convencional
69,4
68,5
137,9
Nearest Call
132,7
115,3
248
101,2
54,6
155,8
AWT
ATT
AJT
Algoritmo
Convencional
921,3
91,4
1012,7
Nearest Call
182,8
97,1
279,8
156,9
111
267,9
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 8%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney UpPeak 7%
ajuste en peso
Nearest Call
Editado Double-Deck
147
Semilla 741
Constant traffic Interfloor 15%
AWT
ATT
AJT
Algoritmo
Convencional
122,8
96,7
219,6
Nearest Call
134,9
119
253,8
102,2
111
213,2
AWT
ATT
AJT
Algoritmo
Convencional
86,7
82,3
169
Nearest Call
81,6
90,6
172,2
57,4
87,2
144,6
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 11%
ajuste en peso
Nearest Call
Editado Double-Deck
148
Constant traffic Interfloor 8%
AWT
ATT
AJT
Algoritmo
Convencional
92,7
65,9
158,6
Nearest Call
47,6
78,6
126,3
38,7
64,3
103
AWT
ATT
AJT
Algoritmo
Convencional
64,9
49,5
114,4
Nearest Call
31,3
57,8
89,1
29,2
49,4
78,6
AWT
ATT
AJT
Algoritmo
Convencional
137,8
78,5
216,3
Nearest Call
265,9
125,2
391,1
194,8
65,1
259,9
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 5%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 15%
ajuste en peso
Nearest Call
Editado Double-Deck
149
Barney DownPeak 12%
AWT
ATT
AJT
Algoritmo
Convencional
96,4
79
175,4
Nearest Call
227,9
128,2
356
164
62,8
226,7
AWT
ATT
AJT
Algoritmo
Convencional
65
65,2
130,2
Nearest Call
147,9
129,5
277,4
108,6
53,5
162,1
AWT
ATT
AJT
Algoritmo
Convencional
638,4
91,2
729,6
Nearest Call
111
91,1
202
116,2
104,9
221,1
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 8%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney UpPeak 7%
ajuste en peso
Nearest Call
Editado Double-Deck
150
Semilla 987
Constant traffic Interfloor 15%
AWT
ATT
AJT
Algoritmo
Convencional
119,9
95,3
215,2
Nearest Call
108,1
114,2
222,3
70,9
101
171,9
AWT
ATT
AJT
Algoritmo
Convencional
84,6
74,7
159,3
Nearest Call
88,1
100,2
188,3
69,8
88,5
158,3
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 11%
ajuste en peso
Nearest Call
Editado Double-Deck
151
Constant traffic Interfloor 8%
AWT
ATT
AJT
Algoritmo
Convencional
75
62,7
137,7
Nearest Call
54,5
88,3
142,8
37,3
62,5
99,7
AWT
ATT
AJT
Algoritmo
Convencional
59,5
41,2
100,6
Nearest Call
31,8
44,2
76
28,5
43,8
72,3
AWT
ATT
AJT
Algoritmo
Convencional
134,3
79,1
213,4
Nearest Call
309,9
131,2
441,1
154,4
62,4
216,8
ajuste en peso
Nearest Call
Editado Double-Deck
Constant traffic Interfloor 5%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 15%
ajuste en peso
Nearest Call
Editado Double-Deck
152
Barney DownPeak 12%
AWT
ATT
AJT
Algoritmo
Convencional
95,2
76,3
171,6
Nearest Call
203,8
126,8
330,6
201,1
59,6
260,7
AWT
ATT
AJT
Algoritmo
Convencional
69,3
69,1
138,4
Nearest Call
183,7
136,3
320
125,2
54,2
179,4
AWT
ATT
AJT
Algoritmo
Convencional
899
93
992
Nearest Call
136
98,4
234,4
222,5
106,4
328,9
ajuste en peso
Nearest Call
Editado Double-Deck
Barney DownPeak 8%
ajuste en peso
Nearest Call
Editado Double-Deck
Barney UpPeak 7%
ajuste en peso
Nearest Call
Editado Double-Deck
153
11. Anexo B, Código C++
En este anexo se mostrarán los distintos códigos de los principales objetos que son utilizados por el
programa para el correcto funcionamiento de este y la obtención de los datos, en el programa de
simulación de transporte vertical ELEVATE.
Objeto ascensor (lift.h)
/*
----------------------------------------------------------------------------Filename
lift.h
Copyright
(c) Peters Research Ltd
SVN variables, Updated by SVN @ each commit Id, Revision surrounded by '$'
if the SVN file properties SVN:Keywords are set
Revision
This keyword describes the last known revision in which this file changed in
the repository
$Id: lift.h 1750 2012-09-19 14:13:11Z Jim.Nickerson $
$Revision: 1750 $
----------------------------------------------------------------------------*/
#ifndef _INC_LIFT
class
#define _INC_LIFT
//check flag to avoid re-definition of
#include "stdafx.h"
#if _MSC_VER > 1000
#pragma once
#endif
#include "arraysize.h"
#include "building.h"
#include "DestinationCall.h"
#define MAX_DESTINATION_CALL_LIFT
1000
class lift
154
{
public:
enum _tag_LIFT_TYPE
{
SINGLE_DECK = 0,
// IDSX_LIFT_TYPE_0
DOUBLE_DECK = 1,
// IDSX_LIFT_TYPE_1
TWO_CARS_PER_SHAFT = 2, // IDSX_LIFT_TYPE_2
LAST_LIFT_TYPE
// used to fill string arrays
from string table
};
enum _tag_CALL_CANCELLATION
{
ARRIVAL=0,
SLOWDOWN=1
};
enum _kW_STATES
{
each of these load conditions
DRIVE_OFF,
DRIVE_ON,
DRIVE_UP_0,
DRIVE_UP_25,
DRIVE_UP_50,
DRIVE_UP_75,
DRIVE_UP_100,
DRIVE_DOWN_0,
DRIVE_DOWN_25,
DRIVE_DOWN_50,
DRIVE_DOWN_75,
DRIVE_DOWN_100,
DRIVE_LAST_STATE
};
// the energy consumed by the drive in
double m_Acceleration;
//rated lift acceleration (m/s/s)
[elive static data] XMLS_1_ACCELERATION_MSS
double m_AccelerationMultiply;
//not currently used, but allows
dispatcher to change the rated acceleration for a single trip. Set to 1.0 by
default.
int m_ActualQuickestStopFloor; //actual (as opposed to ideal) quickest
stop floor. Not normally used in Elevate, but when class used in real
systems
double m_ActualStoppingDistance; //actual (as opposed to ideal)
stopping distance. Not normally used in Elevate, but when class used in real
systems
int m_AlgorithmType;
//algorithm type CONVENTIONAL,
DESTINATION or MIXED using global Elevate definition
bool m_Available;
//normally true, can be off due to
motor generator
double m_Capacity;
//nominal lift capacity (kg)
[elive static data] XMLS_1_CAPACITY_KG
int m_CarCall[MAX_FLOORS];
//car calls registered (1
registered, 0 not) [elive dynamic data] XMLS_1_REGISTERED_CALLS
int m_CarCallCancellation;
//defines when lift class cancels
car calls
//options ARRIVAL
(default) or SLOWDOWN
//m_CarCall is set when
value is 1. If SLOWDOWN option selected then value is changed to 2 on
slowdown
double m_CarCallDwellTime;
//not used
double m_CarCallDwellTimePostPersonExit; //not used
155
int m_CarCallUpperCar[MAX_FLOORS]; //car calls registered (1
registered, 0 not) [elive dynamic data]
int m_CarService;
//indicates current service state
car is in (i.e. AUTOMATIC, etc) [elive dynamic data] XMLS_1_CAR_SERVICE
double m_CounterweightProportion; //used in conjunction with
m_VelocityMultiply to model ThyssenKrupp VMAX.
double m_CurrentAcceleration; //current acceleration (m/s/s)
double m_CurrentArea;
//current area taken in car by
passengers (m²)
double m_CurrentAreaUpperCar; //current area taken in upper car by
passengers (m²)
double m_CurrentDistance;
//distance travelled on current trip
(m)
int m_CurrentFloorNo;
//current floor number (where 1 is
lowest floor), NONE when travelling [elive dynamic data] XMLS_1_FLOOR
double m_CurrentJerk;
//current jerk (m/s/s/s)
double m_CurrentLoad;
//current car load (kg) [elive
dynamic data] XMLS_1_CURRENT_LOADKG
double m_CurrentLoadUpperCar; //current car load upper car (kg) [elive
dynamic data]
double m_CurrentPosition;
//current position (m above
reference)
double m_CurrentTime;
//current time (s past reference)
double m_CurrentVelocity;
//current velocity (m/s)
bool m_DeleteDestinationCallAtDestination; //chooses if the lift class
deletes the call when the lift arrives at destination,
//or changes state to
PENDING_RESET and saves the time the car arrives
int DestinationByDispatcher; //Normally the lift class will decide what
call to serve next based on the
//car calls and
allocated landing calls
//set this variable to 1
for the lift to travel to m_RequestedDestination
int m_DestinationFloor;
//current destination floor no
[elive dynamic data]
double m_DestinationPosition; //current destination (m above reference)
double m_DestinationTime;
//arrival time next planned stop (s
past reference)
int m_Direction;
//direction of travel (-1 down, 0
neither, 1 up) [elive dynamic data] XMLS_1_DIRECTION
int m_DoorBeams;
//flag for operation of door beams
representing passenger
//transfer (1 beams
broken, 0 clear) [elive dynamic data]
int m_DoorBeamsRear;
//flag for operation of door beams
rear doors representing passenger
//transfer (1 beams
broken, 0 clear) [elive dynamic data]
int m_DoorBeamsUpperCar;
//flag for operation of door beams
upper car representing passenger
//transfer (1 beams
broken, 0 clear) [elive dynamic data]
int m_DoorBeamsRearUpperCar; //flag for operation of door beams upper
car rear doors representing passenger
//transfer (1 beams
broken, 0 clear) [elive dynamic data]
double m_DoorClose;
//door closing time (s) [elive
static data]
XMLS_1_DOOR_CLOSE
double m_DoorDwell1;
//door dwell time 1 (s)
//corresponds to time
doors will wait until
//closing if beam not
broken
156
bool m_DoorDwell1Expired;
//true if last time doors closed, no
one had entered/exited the lift
bool m_DoorDwell1ExpiredRear; //true if last time rear doors closed, no
one had entered/exited the lift
bool m_DoorDwell1ExpiredRearUpperCar;
//true if last time upper car
rear doors closed, no one had entered/exited the lift
bool m_DoorDwell1ExpiredUpperCar;
//true if last time upper car
doors closed, no one had entered/exited the lift
double m_DoorDwell2;
//door dwell time 2 (s)
//corresponds to time
doors will wait until
//closing after beams
have been broken/cleared
int m_DoorDwellMode;
//not used
bool m_DoorHoldOpen;
//set to true to hold doors open,
overrides m_DoorDwell2
bool m_DoorHoldOpenRear;
//set to true to hold rear doors
open, overrides m_DoorDwell2
double m_DoorOpen;
//door open time (s) [elive
static data]
XMLS_1_DOOR_OPEN
double m_DoorPreOpen;
//door pre-opening (s) [elive static
data] XMLS_1_DOOR_PRE_OPEN
double m_DoorsStart;
//time doors started
openning/closing (s past reference)
double m_DoorsStartRear;
//time rear doors started
openning/closing (s past reference)
double m_DoorsStartRearUpperCar;//time rear doors upper car started
openning/closing (s past reference)
double m_DoorsStartUpperCar; //time doors upper car started
openning/closing (s past reference)
int m_DoorStatus;
//Door Status (1 fully open, 2
closing,3 fully closed, 4 openning, 5 nudging) [elive dynamic data]
XMLS_1_DOOR_STATUS
int m_DoorStatusCombined;
//used by dispatcher to determine
one value combining front and rear door status
int m_DoorStatusCombinedUpperCar;//used by dispatcher to determine one
value combining front and rear door status upper car
int m_DoorStatusRear;
//Door dtatus (1 fully open, 2
closing,3 fully closed, 4 openning, 5 nudging) [elive dynamic data]
XMLS_1_DOOR_STATUS
int m_DoorStatusRearUpperCar; //Rear door status upper car (1 fully
open, 2 closing,3 fully closed, 4 openning, 5 nudging) [elive dynamic data]
XMLS_1_DOOR_STATUS
int m_DoorStatusUpperCar;
//Door status upper car (1 fully
open, 2 closing,3 fully closed, 4 openning, 5 nudging) [elive dynamic data]
XMLS_1_DOOR_STATUS
int m_DownLandingCalls[MAX_FLOORS]; //down landing calls allocated to
lift by dispatcher (1 registered, 0 not) [elive dynamic data]
XMLS_1_DOWN_LANDING_CALL
int m_DownLandingCallsCombined[MAX_FLOORS]; //used by dispatcher to
determine one value combining front and rear status
int m_DownLandingCallsRear[MAX_FLOORS]; //rear down landing calls
allocated to lift by dispatcher[elive dynamic data]
int m_DownLandingCallsRearUpperCar[MAX_FLOORS]; //rear down landing
calls upper car allocated to lift by dispatcher [elive dynamic data]
int m_DownLandingCallsUpperCar[MAX_FLOORS]; //down landing calls
allocated to lift by dispatcher (1 registered, 0 not) [elive dynamic data]
bool m_EndTravelNoCall;
//defines what happens if the call a
car is travelling to is removed
//(e.g. by dispatcher).
False by default. If true, then car will stop
//at next floor (unless
it has other calls to travel to).
double m_FloorArea;
//floor area of car (m²)
157
double m_FloorPositions[MAX_FLOORS]; //positions of floors in building
[elive static data]
//(m above reference,
can be negative)
//array element [0] not
used, start with
//lowest floor at
m_FloorPositions[1]
int m_FloorsServed[MAX_FLOORS]; //indicates whether lift serves floor
[elive static data] XMLS_1_FLOORS_SERVED
//used when lifts in a
group do not serve all floors
//for low/high rise
groups, run separate simulations
//may be changed
dynamically by dispatcher
//0 not served
//1 if front doors
//2 if rear doors
//3 if front and rear
doors
bool m_FrontDoors[MAX_FLOORS]; //true if front doors on this landing
int m_FrontDoorsOpenCount;
//counter for m_MaxDoorReOpen
int m_FrontDoorsOpenCountUpperCar; //counter for m_MaxDoorReOpen, upper
car
bool m_FrontDoorsUpper[MAX_FLOORS]; //true if front doors on this
landing
bool m_FrontLocks[MAX_FLOORS];
//true if car not allowed to access
for security reasons (even if served) [elive dynamic data]
bool m_FrontLocksUpper[MAX_FLOORS]; //ditto for upper car [elive
dynamic data]
bool m_FullByVision;
//true if vision device says lift if
full - for use in real systems where there is a volumetric detection device
int m_FutureCarCalls[MAX_FLOORS];//not used
int m_Home;
//home floor/default parking
position [elive static data] XMLS_1_HOME
double m_HomeDoorDwell1;
//alternative door dwell time for
home floor (s)
double m_HomeDoorDwell2;
//alternative door dwell time for
home floor (s)
double m_HomePeakLandingCallDwellTime; //not used
double m_HorizontalPosition; //horizontal position in the shaft, e.g.
[elive static data]
//1 - shaft 1
//2 - shaft 2
//1.5 - half way between
shaft 1 and 2
//user of lift class
must check that lifts do not crash!
int m_Index;
//index number of this lift
car [elive static data - allow string] XMLS_1_CARID
//note that the Elevate
lift array is 1 index. l[0] is not used or initialised.
double m_Jerk;
//rated lift jerk (m/s/s/s)
[elive static data] XMLS_1_JERK_MSSS
double m_JourneyStart;
//time lift journey started (s past
reference)
double m_kW[ DRIVE_LAST_STATE ]; //energy consumption, this specifies
the energy consumed while in each of these load states
int m_LandingCallCancellation;
//defines when lift class cancel
hall calls
//options ARRIVAL
(default) or SLOWDOWN
158
//Landing calls are set
when value is 1. If SLOWDOWN option selected then value is changed to 2 on
slowdown
double m_LandingCallDwellTime;
//not used
double m_LandingCallDwellTimePostCarCall; //not used
double m_LevellingDelay;
//levelling delay (s)
int m_MaxDoorReOpen;
//maximum number of time doors are
allowed to re-open once car calls have been registered
//set to -1 for
unlimited
double m_MaxVelocityMultiply; //allows dispatcher to change the rated
acceleration for a single trip. Also use in ThyssenKrupp VMAX to overspeed
the lift.
double m_MGRestartTime;
//time it takes for motor generator
set to re-start (s)
bool m_MGSet;
//true if this lift has motor
gererator
double m_MGShutDownAfterTime; //time after which motor generator set
will shut down (s)
double m_MotorStartDelay;
//motor start up delay (s)
int m_NoFloors;
//no of floors in building
[elive static data]
XMLS_1_NO_FLOORS
int m_ParkCall[MAX_FLOORS];
//parking calls, like landing call,
but placed by dispatcher[elive dynamic data] XMLS_1_PARK_CALL
//lift does not open
doors on arrival
int m_ParkOpenCall[MAX_FLOORS];
//as parking calls, but lift parks
with doors open
bool m_PeakMode;
//not used
bool m_PersonTransferred;
//not used
int m_PreDirection;
//direction of travel once we
reach current destination [elive dynamic data]
double m_QuickestStopPosition;
//next possible stop lift can make
(m above reference)
bool m_RearDoors[MAX_FLOORS]; //true if rear doors on this landing
int m_RearDoorsOpenCount;
//not used - for future
int m_RearDoorsOpenCountUpperCar; //not used - for future
bool m_RearDoorsUpper[MAX_FLOORS]; //true if rear doors on this landing
bool m_RearLocks[MAX_FLOORS]; //true if car not allowed to access rear
doors for security reasons (even if served)[elive dynamic data]
bool m_RearLocksUpper[MAX_FLOORS]; //true if car not allowed to access
rear doors upper car for security reasons (even if served)[elive dynamic
data]
int m_ReasonForStopping;
//not used
bool m_RequestAvailability;
//set to true to start up MG set
int m_RequestedDestination;
//Specific destination requested by
dispatcher
bool m_SlowDown;
//true if the lift has started
slowing coming into a stop
int m_StartFloor;
//floor no current journey started
double m_StartPosition;
//position current journey started
(m above reference)
double m_TimeBeganStartUp;
//time we requested the MG set to be
turned on
double m_TimeLastTrip;
//time last trip, used to see if to
turn off MG set
double m_TimerT1;
//time timer T1 began (s past
reference), -1 if not in use
double m_TimerT1Rear;
//time timer T1 began for rear doors
(s past reference), -1 if not in use
double m_TimerT1RearUpperCar; //time timer T1 began for rear doors upper
car (s past reference), -1 if not in use
double m_TimerT1UpperCar;
//time timer T1 began for upper car
(s past reference), -1 if not in use
159
double m_TimerT2;
//time timer T2 began (s past
reference), -1 if not in use
double m_TimerT2Rear;
//time timer T2 began for rear doors
(s past reference), -1 if not in use
double m_TimerT2RearUpperCar; //time timer T2 began for rear doors upper
car (s past reference), -1 if not in use
double m_TimerT2UpperCar;
//time timer T2 began for upper car
(s past reference), -1 if not in use
int m_TravelStatus;
//current travel status, (1
travelling, 0 at floor) [elive dynamic data] XMLS_1_TRAVEL_STATUS
int m_Type;
//type of lift (single, double
deck, etc.), see _tag_LIFT_TYPE
int m_UpLandingCalls[MAX_FLOORS];//up landing calls allocated to lift
by dispatcher (1 registered, 0 not) [elive dynamic data]
XMLS_1_UP_LANDING_CALL
int m_UpLandingCallsCombined[MAX_FLOORS]; //used by dispatcher to
determine one value combining front and rear status
int m_UpLandingCallsRear[MAX_FLOORS]; //rear up landing calls [elive
dynamic data]
int m_UpLandingCallsRearUpperCar[MAX_FLOORS]; //rear up landing calls
upper car [elive dynamic data]
int m_UpLandingCallsUpperCar[MAX_FLOORS]; //landing calls upper car
[elive dynamic data]
double m_Velocity;
//rated lift velocity (m/s)
[elive static data]
XMLS_1_VELOCITY_MS
double m_VelocityMultiply;
//allows dispatcher to change the
rated acceleration for a single trip. Set to 1.0 by default.
//Used by ThyssenKrupp
VMAX feature.
public:
//constructors
lift();
//destructor
~lift() {};
//member functions
int ChangeJourney(int floor); //change journey, new destination, "floor"
//use this function
having checked this is possible using QuickestFloorStopFloor();
//returns 1 if OK, -1 if
not possible to change journey
void DestinationCallUpdate(int floor, DestinationCall
m_DestCalls[MAX_DESTINATION_CALLS]); //updates the status of the destination
calls
int FloorAt();
//return floor no if not
travelling
int FloorNo(double position); //returns floor no at position
bool GetCarCall(int nFloor,int nDeck); //returns if there is a car call
registered for a given floor and deck
int GetDoorStatus(int nSide, int nDeck); //returns the door status of
the given deck and side
bool GetFloorsForTripServed(int nArrivalFloor, int nDestinationFloor,
int nArrivalSide, int nDestinationSide);
//returns if the lift
can serve a trip
bool GetLandingCall(int nDirection, int nFloor, int nDeck, int nSide);
//returns true or false
depeding on if there is a landing call allocated to the lift for the
specified
//lift direction, deck
and side
160
int GetNoDecks();
//returns the number of decks,
currently limited but related routines being developped
//for n decks for future
use
bool GetParkCall(int nFloor); //returns if there is a parking call for
the given floor
bool GetParkOpenCall(int nFloor); //returns if there is a park open
call for the given floor
int HighestFloorServed();
//Highest floor served by the lift
int LowestFloorServed();
//Lowest floor served by the lift
bool NoCalls();
//true if lift has no calls at
all (up, down, car, parking, etc.)
bool NoDestinationCalls(int LiftNo, DestinationCall
DestCalls[MAX_DESTINATION_CALLS]);
//true if there are no
oustanding destination calls to serve
bool OpenDoorsNewCallAtLanding(); //checks to see if new call
registered while lift at landing and re-opens doors if required
bool OpenDoorsNewCallAtLandingRear(); //checks to see if new call
registered rear side while lift at landing and re-opens doors if required
bool OpenDoorsNewCallAtLandingUpperCar(); //checks to see if new call
upper car registered while lift at landing and re-opens doors if required
bool OpenDoorsNewCallAtLandingUpperCarRear(); //checks to see if new
call registered upper car rear doors while lift at landing and re-opens doors
if required
int QuickestFloorStopFloor();
//next stop lift could make (floor no)
double QuickestStopPosition();
//next stop lift could make (m above
reference)
double QuickestFloorStopTime();
//time of next stop lift could make
at floor (s after midnight day 1)
double QuickestFloorStopPosition(); //next stop at floor lift could
make (position)
double QuickestStopTime();
//time of next stop lift could make
(s after midnight day 1)
void RemoveLandingCall(int direction, int floor); //removes landing
call - called by class when lift arrives at landing.
//May also be called by
dispatcher when re-allocating call to another lift
void Reset(building b, int index = 0);
//sets lift to home
position,cancels all calls, etc.
void ResetDoorDwellTimers(); //Reset door dwell timers - use when door
opening complete, or if
//necessary to re-start
the door time out process (e.g. new destination
//based control system
allocation while lift is at landing, to avoid passenger missing lift.
void ResetDoorDwellTimersRear();//Reset door dwell timers rear doors
void ResetDoorDwellTimersUpperCar(); //Reset door dwell upper car
timers
void ResetDoorDwellTimersRearUpperCar(); //Reset door dwell timers rear
car upper lift
void SetDestination(DestinationCall
m_DestCalls[MAX_DESTINATION_CALLS]); //set destination/direction travel
int StartJourney(int floor); //start journey, destination "floor" N.B.
this sets the direction of the lift there is no need to use SetDirection();
//returns 1 if
sucessful, -1 if failed e.g. because doors open
double TimeSinceStartedJourney();//Calculates how long lift has been
travelling on its current trip
void Update(double CurrentTime,int Index, DestinationCall
m_DestCalls[MAX_DESTINATION_CALLS]);
//this function updates
the status of the lift (position, speed, door operation, etc.)
161
void UpdateDestination(double CurrentTime, DestinationCall
DestCalls[MAX_DESTINATION_CALLS]);
//check for calls
allocated to lift and sets destination
private:
void AdvancedCallCancellation();
void EndTravelDeallocatedCalls();
};
#endif
162
Objeto dispatch (dispatch.h)
// Dispatch.h: interface for the CDispatchW class.
//
// $Id: Dispatch.h 1106 2011-04-06 19:51:12Z Richard.Peters $
// $Revision: 1106 $
// 12/01/2010 jimn add #if defined(DLL_USE_XML_PARAMETERS)
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_DISPATCH_H__163502DF_E3E1_4DA5_BB84_9BEF27C83AB0__INCLUDED_)
#define AFX_DISPATCH_H__163502DF_E3E1_4DA5_BB84_9BEF27C83AB0__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "DispatchBase.h"
//
#if defined(DLL_USE_XML_PARAMETERS)
// if used defined in stdafx.h,
added to return the Xml file name to Elevate
#include "../Xml/CXml/Xml.h" // required if using xml parameters, make
sure the path is correct for your implementation
using namespace ElevateXml;
// required if using xml parameters,
this namespace is referenced
#endif
//
class CDispatchW : public CDispatchBase
{
public:
CDispatchW();
virtual ~CDispatchW();
// Public member functions
public:
virtual void Update(double CurrentTime,
lift l[MAX_LIFTS],
double SimulationTimeStep,
building b,
int NoLifts,
CString message,
CString &mode,
CArray<person*, person*> &PersonArray,
int NoPassengers,
int NoTrafficPeriods,
double m_u[MAX_TRAFFIC_PERIODS][MAX_FLOORS],
double
m_d[MAX_TRAFFIC_PERIODS][MAX_FLOORS][MAX_FLOORS],
double m_StartTime[MAX_TRAFFIC_PERIODS],
double m_EndTime[MAX_TRAFFIC_PERIODS],
int XMLmode,
DestinationCall DestCalls[MAX_DESTINATION_CALLS],
CString Document,
bool DestinationButtons[MAX_FLOORS],
int UserSelectedMode);
virtual void Reset(building b, bool ResetHistory, int version);
virtual int GetNoOfAlgorithms();
163
virtual CString GetAlgorithmName(int nAlgorithm);
virtual int GetUpLandingCall(int floor, int side);
virtual int GetDownLandingCall(int floor, int side);
virtual void SetUpLandingCall(int floor, int val, int side);
virtual void SetDownLandingCall(int floor, int val, int side);
virtual void SetAlgorithmNo(int val);
virtual int GetAlgorithmNo();
virtual int GetAlgorithmType();
virtual CString GetDispatcherOptions();
virtual CString GetAlgorithmModeName(int nAlgorithm, int nMode);
virtual int GetNoPeakModes(int nAlgorithm);
virtual void SetDispatcherOptionsUserSelections(CString
DispatcherOptionsUserSelections);
// Data members
//about the dispatcher algorithms
int m_NoOfAlgorithms;
defined by the developer
//the number of algorothms
//in this DLL
(maximum MAX_USER_ALGORITHMS)
int m_DispatcherPeakMode;
currently using
//peak mode dispatcher is
//NORMAL, UP_PEAK,
DOWN_PEAK
CString m_AlgorithmName[MAX_USER_ALGORITHMS];
//the names of the
algorithms - these will be
//added to drop
down box in Simulation Data
int m_NumberOfPeakModes[MAX_USER_ALGORITHMS];
//determines how
many peak modes, e.g. normal, up peak, down peak, etc.
//the number of peak modes available with for algorithm
CString
m_PeakModeNames[MAX_PEAK_MODES][MAX_USER_ALGORITHMS];
//not used
//the number of the dispatcher
int m_Algorithm;
algorithm selected by the user
int m_AlgorithmType[MAX_USER_ALGORITHMS];
//the type of the
algorithm
//0 - conventional
//1 - destinations
registered at landings
//about the calls registered with the dipatcher
int m_UpLandingCalls[MAX_FLOORS]; //up calls registered with the
dispatcher (1 registered, 0 not)
int m_UpLandingCallsRear[MAX_FLOORS]; //rear up landing calls
int m_DownLandingCalls[MAX_FLOORS]; //down calls registered with the
dispatcher (1 registered, 0 not)
int m_DownLandingCallsRear[MAX_FLOORS];
//rear down landing calls
//The following variables provided so that you can store data between
//calls to Update(double CurrentTime,lift l...).
int m_User1[1000];
164
double m_User2[1000];
bool m_RequestSimulationData; //flag to indicate that simulation data is
being requested
//by dispatcher which is
not normally available to in real life
//set this flay to true
if you want to access data from the
//person class and the
traffic arrival rate/destination matrix
CString m_DispatcherParameters;
CString m_DispatcherOptions;
CString m_DispatcherOptionsUserSelections;
CStdioFile m_File;
void Algorithm0(double CurrentTime,lift l[MAX_LIFTS], double
SimulationTimeStep,building b,int NoLifts,
CString message,CString &mode,
CArray<person*,person*> &PersonArray, int NoPassengers,
int NoTrafficPeriods, double
m_u[MAX_TRAFFIC_PERIODS][MAX_FLOORS],
double
m_d[MAX_TRAFFIC_PERIODS][MAX_FLOORS][MAX_FLOORS],double
m_StartTime[MAX_TRAFFIC_PERIODS],
double
m_EndTime[MAX_TRAFFIC_PERIODS],DestinationCall
DestCalls[MAX_DESTINATION_CALLS],
CString Document,bool
DestinationButtons[MAX_FLOORS],int UserSelectedMode);
void Algorithm1(double CurrentTime,lift l[MAX_LIFTS], double
SimulationTimeStep,building b,int NoLifts,
CString message,CString &mode,
CArray<person*,person*> &PersonArray, int NoPassengers,
int NoTrafficPeriods, double
m_u[MAX_TRAFFIC_PERIODS][MAX_FLOORS],
double
m_d[MAX_TRAFFIC_PERIODS][MAX_FLOORS][MAX_FLOORS],double
m_StartTime[MAX_TRAFFIC_PERIODS],
double
m_EndTime[MAX_TRAFFIC_PERIODS],DestinationCall
DestCalls[MAX_DESTINATION_CALLS],
CString Document,bool
DestinationButtons[MAX_FLOORS],int UserSelectedMode);
void Algorithm2(double CurrentTime,lift l[MAX_LIFTS], double
SimulationTimeStep,building b,int NoLifts,
CString message,CString &mode,
CArray<person*,person*> &PersonArray, int NoPassengers,
int NoTrafficPeriods, double
m_u[MAX_TRAFFIC_PERIODS][MAX_FLOORS],
double
m_d[MAX_TRAFFIC_PERIODS][MAX_FLOORS][MAX_FLOORS],double
m_StartTime[MAX_TRAFFIC_PERIODS],
double
m_EndTime[MAX_TRAFFIC_PERIODS],DestinationCall
DestCalls[MAX_DESTINATION_CALLS],
CString Document,bool
DestinationButtons[MAX_FLOORS],int UserSelectedMode);
void Algorithm3(double CurrentTime,lift l[MAX_LIFTS], double
SimulationTimeStep,building b,int NoLifts,
CString message,CString &mode,
CArray<person*,person*> &PersonArray, int NoPassengers,
165
int NoTrafficPeriods, double
m_u[MAX_TRAFFIC_PERIODS][MAX_FLOORS],
double
m_d[MAX_TRAFFIC_PERIODS][MAX_FLOORS][MAX_FLOORS],double
m_StartTime[MAX_TRAFFIC_PERIODS],
double
m_EndTime[MAX_TRAFFIC_PERIODS],DestinationCall
DestCalls[MAX_DESTINATION_CALLS],
CString Document,bool
DestinationButtons[MAX_FLOORS],int UserSelectedMode);
void Algorithm4(double CurrentTime,lift l[MAX_LIFTS], double
SimulationTimeStep,building b,int NoLifts,
CString message,CString &mode,
CArray<person*,person*> &PersonArray, int NoPassengers,
int NoTrafficPeriods, double
m_u[MAX_TRAFFIC_PERIODS][MAX_FLOORS],
double
m_d[MAX_TRAFFIC_PERIODS][MAX_FLOORS][MAX_FLOORS],double
m_StartTime[MAX_TRAFFIC_PERIODS],
double
m_EndTime[MAX_TRAFFIC_PERIODS],DestinationCall
DestCalls[MAX_DESTINATION_CALLS],
CString Document,bool
DestinationButtons[MAX_FLOORS],int UserSelectedMode);
void Algorithm5(double CurrentTime,lift l[MAX_LIFTS], double
SimulationTimeStep,building b,int NoLifts,
CString message,CString &mode,
CArray<person*,person*> &PersonArray, int NoPassengers,
int NoTrafficPeriods, double
m_u[MAX_TRAFFIC_PERIODS][MAX_FLOORS],
double
m_d[MAX_TRAFFIC_PERIODS][MAX_FLOORS][MAX_FLOORS],double
m_StartTime[MAX_TRAFFIC_PERIODS],
double
m_EndTime[MAX_TRAFFIC_PERIODS],DestinationCall
DestCalls[MAX_DESTINATION_CALLS],
CString Document,bool
DestinationButtons[MAX_FLOORS],int UserSelectedMode);
void Algorithm6(double CurrentTime,lift l[MAX_LIFTS], double
SimulationTimeStep,building b,int NoLifts,
CString message,CString &mode,
CArray<person*,person*> &PersonArray, int NoPassengers,
int NoTrafficPeriods, double
m_u[MAX_TRAFFIC_PERIODS][MAX_FLOORS],
double
m_d[MAX_TRAFFIC_PERIODS][MAX_FLOORS][MAX_FLOORS],double
m_StartTime[MAX_TRAFFIC_PERIODS],
double
m_EndTime[MAX_TRAFFIC_PERIODS],DestinationCall
DestCalls[MAX_DESTINATION_CALLS],
CString Document,bool
DestinationButtons[MAX_FLOORS],int UserSelectedMode);
void Algorithm7(double CurrentTime,lift l[MAX_LIFTS], double
SimulationTimeStep,building b,int NoLifts,
CString message,CString &mode,
CArray<person*,person*> &PersonArray, int NoPassengers,
int NoTrafficPeriods, double
m_u[MAX_TRAFFIC_PERIODS][MAX_FLOORS],
double
m_d[MAX_TRAFFIC_PERIODS][MAX_FLOORS][MAX_FLOORS],double
m_StartTime[MAX_TRAFFIC_PERIODS],
double
m_EndTime[MAX_TRAFFIC_PERIODS],DestinationCall
DestCalls[MAX_DESTINATION_CALLS],
166
CString Document,bool
DestinationButtons[MAX_FLOORS],int UserSelectedMode);
void Algorithm8(double CurrentTime,lift l[MAX_LIFTS], double
SimulationTimeStep,building b,int NoLifts,
CString message,CString &mode,
CArray<person*,person*> &PersonArray, int NoPassengers,
int NoTrafficPeriods, double
m_u[MAX_TRAFFIC_PERIODS][MAX_FLOORS],
double
m_d[MAX_TRAFFIC_PERIODS][MAX_FLOORS][MAX_FLOORS],double
m_StartTime[MAX_TRAFFIC_PERIODS],
double
m_EndTime[MAX_TRAFFIC_PERIODS],DestinationCall
DestCalls[MAX_DESTINATION_CALLS],
CString Document,bool
DestinationButtons[MAX_FLOORS],int UserSelectedMode);
void Algorithm9(double CurrentTime,lift l[MAX_LIFTS], double
SimulationTimeStep,building b,int NoLifts,
CString message,CString &mode,
CArray<person*,person*> &PersonArray, int NoPassengers,
int NoTrafficPeriods, double
m_u[MAX_TRAFFIC_PERIODS][MAX_FLOORS],
double
m_d[MAX_TRAFFIC_PERIODS][MAX_FLOORS][MAX_FLOORS],double
m_StartTime[MAX_TRAFFIC_PERIODS],
double
m_EndTime[MAX_TRAFFIC_PERIODS],DestinationCall
DestCalls[MAX_DESTINATION_CALLS],
CString Document,bool
DestinationButtons[MAX_FLOORS],int UserSelectedMode);
void Algorithm10(double CurrentTime,lift l[MAX_LIFTS], double
SimulationTimeStep,building b,int NoLifts,
CString message,CString &mode,
CArray<person*,person*> &PersonArray, int NoPassengers,
int NoTrafficPeriods, double
m_u[MAX_TRAFFIC_PERIODS][MAX_FLOORS],
double
m_d[MAX_TRAFFIC_PERIODS][MAX_FLOORS][MAX_FLOORS],double
m_StartTime[MAX_TRAFFIC_PERIODS],
double
m_EndTime[MAX_TRAFFIC_PERIODS],DestinationCall
DestCalls[MAX_DESTINATION_CALLS],
CString Document,bool
DestinationButtons[MAX_FLOORS],int UserSelectedMode);
void Algorithm11(double CurrentTime,lift l[MAX_LIFTS], double
SimulationTimeStep,building b,int NoLifts,
CString message,CString &mode,
CArray<person*,person*> &PersonArray, int NoPassengers,
int NoTrafficPeriods, double
m_u[MAX_TRAFFIC_PERIODS][MAX_FLOORS],
double
m_d[MAX_TRAFFIC_PERIODS][MAX_FLOORS][MAX_FLOORS],double
m_StartTime[MAX_TRAFFIC_PERIODS],
double
m_EndTime[MAX_TRAFFIC_PERIODS],DestinationCall
DestCalls[MAX_DESTINATION_CALLS],
CString Document,bool
DestinationButtons[MAX_FLOORS],int UserSelectedMode);
bool GetDispatcherOptionsValueBool(CString VariableName);
double GetDispatcherOptionsValueNumber(CString VariableName);
double GetDispatcherOptionsValueTime(CString VariableName);
CString GetDispatcherOptionsValueCombo(CString VariableName);
167
void SetValue(CString VariableName, double VariableValue);
void SetValue(CString VariableName, int index1, double VariableValue);
void SetValue(CString VariableName, int index1, int index2, double
VariableValue);
double GetValue(CString VariableName);
double GetValue(CString VariableName, int index1);
double GetValue(CString VariableName, int index1, int index2);
CString NumberText(double val);
CString NumberText(int val);
#if defined(DLL_USE_XML_PARAMETERS)
void SetDispatcherDllOptions( CXmlNode DllOptions, CString
csAlgorithmName ); // if supports Xml Parameters
void GetOptionsFromXml( CString csAlgorithmName ); // extract the
Option Value names and values from the Xml file for this algorithm
#endif
protected:
};
#endif //
!defined(AFX_DISPATCH_H__163502DF_E3E1_4DA5_BB84_9BEF27C83AB0__INCLUDED_)
168
Descargar