lunes, 26 de marzo de 2012

08 - Práctica Laboratorio 6

PRÁCTICA LABORATORIO 6


Simulación  de un banco:


          Para realizar esta simulación nos vamos a servir de la ayuda que nos proporciona un tutorial de la página "xjtek", en este caso realizaremos la simulación de un banco en el que los clientes irán entrando a la sucursal, y serán atendidos por cajeros u oficinas siempre que haya servidores libres, si no harán cola hasta que puedan ser atendidos. El tutorial está disponible en el siguiente enlace:


        http://www.xjtek.com/anylogic/help/index.jsp?topic=/com.xj.anylogic.help/html/_Enterprise/

          Comienza el tutorial creando un nuevo modelo (elegir la opción "Use template to create model" y posteriormente "Discrete event"), estos parámetros crearán un modelo con los elementos "source", "queue", "delay" y "sink" conectados, de esta manera ahorramos tiempo de diseño. 




          Para simular las entrada de clientes se dibuja  una polilínea y una circunferencia las cuales las asignaremos a "queue" y "delay" respectivamente. En el delay activaremos el tipo Single, y en el "source" introduciremos un evento con figura de persona para que la simulación sea lo más real posible. Por último, para que se observe cuando está el banco ocupado y cuando libre, en las propiedades de la circunferencia introduciremos en la opción "Fill Color" la siguiente instrucción: "delay.size() > 0 ? red : green". Este código de colores representa que cuando el banco está ocupado, el circulo se rellenará de color rojo mientras que si el banco está vacío, el banco se rellenará de color verde.  




           En el espacio de diseño se colocarán dos gráficas que nos permitan observar cual es el grado de ocupación del "delay" como el índice de tamaño de la cola de personas. Las respectivas instruccionesde código que se introducen son las que se muestran a continuación:

delay.statsUtilization.mean()  //Indice de utilización del delay
queue.statsSize.mean()         //Indice de tamaño de la cola

           Las gráficas que mostrarán estos datos son del tipo "Bar Chart" y se encuentran en la parte derecha de la ventana y las líneas de código se introducen en la propiedad "Value" de la misma.



Introducimos nuevos bloques: 

SelectOutput: Es un bloque que permite a los clientes seleccionar con una probabilidad de 0,5 (variable) si van a los cajeros o si van a la oficina. 
Service: Simula los clientes que decidan ir hacia los cajeros.
Resource Pool: Asignamos el nombre "Tellers" y simula los cajeros.
Slider: En función de cuántos cajeros se introduzcan, permite seleccionar cuántos de ellos están en funcionamiento.

           En el elemento service se modifican las propiedades, asignándole una polilínea en la propiedad "Anymation guide shape (queue)" .

           En el elemento Tellers se modificarán varias propiedades. En primer lugar se introducirán dos imágenes denominadas iddleTeller y busyTeller que se encuentran en la siguiente dirección: <AnyLogic folder>\resources\tutorials\Bank Office. 
En segundo lugar, se asignará "set" como tipo de animación. 
Por último, se le asigna una polilínea que tenga cuatro puntos.

           Finalmente, al elemento slider, se le asignará 4 como valor máximo, ya que en este caso solo se quieren cuatro cajeros. Y en la propiedad link to se introduce la línea de código: tellers.capacity. 

           El funcionamiento del programa es el siguiente:
Los clientes con una probabilidad del 50% se dirigirán a los cajeros o a la oficina del banco. Si se dirigen a la oficina, se observará el sistema como en la imagen anterior, con la polilínea representando a la cola y la circunferencia rellena de verde o rojo en función de si está libre u ocupada.  En cambio, si los clientes se dirigen a los cajeros, se podrá observar en la polilínea asignada a los clientes que se encuentran haciendo cola para entrar a los cajeros ocupados. Mientras, en la polilínea con cuatro puntos, se podrá observar a los cuatro cajeros con una imagen u otra en función de si están libres u ocupados. El elemento slider nos permite mientras la simulación seleccionar el número de cajeros operativos, en el caso de la imagen, tres de los cuatro se encuentran operativos y los tres cajeros se encuentran ocupados.




           Por último, se quiere almacenar los datos referentes al tiempo han permanecido los clientes en la cola y cuanto tiempo han estado los clientes siendo atendidos. Para ello, se aprovecha la característica de la herencia de Java, y se crea una nueva clase de Java a la que se denominara "Customer" y que heredará las características de la superclase "entity".




           A la clase Customer le añadiremos las variables de tipo double "startWaiting" y "enteredSystem". Para visualizar los datos en un histograma, introducimos dos "histrogram data" que se llamarán "waitTimeDistr" y "timeInSystemDistr" para poder almacenar los datos de tiempo en el sistema y tiempo en espera.


IMPORTANTE: Es necesario modificar las propiedades de la fuente, ya que hay que asignar como entity class "Customer", en la propiedad new entity "new Customer()" para que se creen clientes en lugar de entidades de la superclase, y por último, para almacenar el tiempo en el sistema, en la propiedad "on exit" se introducirá la línea de comando "entity.enteredSystem = time()" la cual utiliza el reloj de Anylogic para que almacene el momento en el que el cliente entra en el sistema.

           En la cola sucede lo mismo, como entity class se introduce la nueva clase Customer. En la propiedad "On Enter" se introduce la línea "entity.startWaiting = time()" para almacenar el momento en el que el cliente comienza a esperar, mientras que en la opción "On Exit" se introduce la línea  "waitTimeDistr.add(time() - entity.startWaiting)lo cual asigna al elemento "waitTimeDistr" el tiempo en el sistema en el que el cliente no ha estado esperando.

           Por último en el elemento "sink", se asigna como "entity class" a la clase Customer, y en la propiedad "On Enter" se escribe la instrucción "timeInSystemDistr.add(time()-entity.enteredSystem)" la cual nos muestra cuanto tiempo han estado los clientes en el sistema, ya sea siendo atendidos o esperando.

           Finalmente, se introducen dos histogramas, a los que se les asigna los dos "histogram data" creados anteriormente, introduciendo en la propiedad Histrogram el nombre de los mismos. Una vez realizados dichos cambios, el resultado de la simulación del banco se puede observar en la siguiente imagen.


No hay comentarios:

Publicar un comentario