Free Web Site - Free Web Space and Site Hosting - Web Hosting - Internet Store and Ecommerce Solution Provider - High Speed Internet
Search the Web

Simulación


Se creará un programa que simule el proceso una cola de banco de N clientes, para obtener información estadística.

Propiedades del cliente

  • servicio : identificador numérico (único) que representa el requerimiento.
  • Los requerimientos son los siguientes :

    1.- depósito   -->  cliente realiza un depósito 
    2.- giro         -->  cliente realiza giro
    3.- ambos     -->  cliente realiza un giro y un depósito 
    4.- otro        --> cliente realiza otro requerimiento ( ej : cambiar dólares )
    5.- nulo        -->  cliente es atendido pero no realiza trámite
    
  • tipoCuenta : identificador numérico (único) que representa el tipo de cuenta del Cliente
  • Tipos de cuenta :

    1.- Cuenta Corriente    
    2.- Cuenta de Ahorro         
    3.- ninguna     -->  cliente no se identifica con cuenta alguna
    
  • tiempoMax : tiempo máximo que el cliente está dispuesto a estar en la cola.
  • Esta propiedad será medida en segundos, y será asignada aleatoriamente.

  • tiempoEspera : tiempo que permanece el cliente en la cola.
  • tiempoServicio : tiempo que demora en realizar el trámite .

  • Con estas características estamos en condiciones de crear la clase ClienteBanco

    class ClienteBanco
    {
        int servicio;
        int tipoCuenta;
        int tiempoMax;
        int tiempoEspera;
        int tiempoServicio;    
    }

    Propiedades de la simulación

    Proceso del cliente
    
    1) Llega al final de cola
    
    2) Por cada puesto que avanza , incrementa su variable tiempoEspera, que 
       corresponde al tiempo de Servicio del último cliente en ser atendido.
    
    3) Si todavía se encuentra en la cola y su tiempo de espera sobrepasa a su tiempo 
       máximo de espera (tiempoMax) se retira de la cola y se va.
    
    4) Si todavía se encuentra en la cola y le toca el turno para ser atendido, éste sale 
       de la cola terminando su tiempo de espera.
    
    5) Al empezar el trámite virtual se asigna aleatoriamente un tiempo de servicio (tiempoServicio) 
    
    6) Finaliza la atención, y se actualiza la cola.
    

    Estadísticas

    Despúes de procesar a N clientes se quiere saber lo siguiente :

    a) Tiempo promedio de espera
    b) Tiempo promedio de servicio
    c) Cantidad de clientes que abandonaron la cola durante el proceso.
    d) cantidad de clientes atendidos
    e) Porcentaje de clientes que realizaron requerimiento i-esimo (giro, depósito..)
    f) Porcentaje de clientes que presentaron Cuenta i-ésima (corriente , ahorro ..)
    g) Total de clientes atendidos



    Creación de una clase estadística

    Necesitamos un objeto capaz de almacenar todos los datos requeridos y además realizar operaciones necesarias para obtenerlos.

    class Estadistica
    {
        public Estadistica(int numRequerimientos, int numTiposCuenta);
        
        public void informe(String strReq[ ] , String strTipoDeCuenta[ ] );
        public void ClienteDespachado(ClienteBanco cte ,boolean atendido)
        public static double redondear(double num, int decimales);
    }

    *nota : esta clase consta de seis atributos privados , un constructor, tres métodos públicos y seis métodos privados.

    bajar implementación (Clases : ClienteBanco y Estadistica)
    Estadistica( ) :  requiere como parámetro el número de requerimientos y tipos 
    de cuenta del cliente ( 5 y 3 respectivamente).
    
    informe( ) :  muestra en pantalla los valores estadñisticos obtenidos en 
    el proceso. Como parámetro requiere dos arreglos de String con las descripciones
    respectivas de requerimientos y tipos de Cuenta.
    
    Ejemplo 
    
    
    private String strReq[ ] = { "deposito","giro    ","ambos   ","otro    ","nulo    "};
    private String strCuenta[ ] = { "corriente","ahorro   ","ninguna  "};
    
    estad.informe(strReq,strCuenta);
    
    ClienteDespachado( ) : actualiza las variables según la información del último cliente que salió de la cola, fuera atendido o no. redondear( ) : Redondea una variable double a un número determinado de decimales.


    Creación de una clase Simulación

    Se creo una clase que manejara internamente una estructura de tipo Cola y un objeto Estadistica, proporcionando sólo, los métodos naturales para realizar la simulación desde un programa de prueba.

    class Simulacion
    {
        public final static int NUM_REQUERIMIENTOS = 5;
        public final static int NUM_TIPOS_CUENTA = 3;
        public  static int TIEMPO_MAX_PROM = 1550;  
        public  static int DESV_TMAX= 205;  
        public  static int TIEMPO_SERV_PROM = 97;  
        public  static int DESV_TSERV = 15;  
        public static double TASA_LLEGADA = (7.0 / 3.0); 
        
        public Simulacion( );
       
        public void llegaCliente( );
        public void atenderCliente( );
        public int generarClientes( );
        public void informe( );
        public boolean ColaVacia( );
    }

    *nota : esta clase consta de cuatro atributos privados ,siete atributos públicos y estáticos , un constructor, cinco métodos públicos y cinco métodos privados.

    bajar implementación
    NUM_REQUERIMIENTOS : número de operaciones o requerimientos.
    
    NUM_TIPOS_CUENTA : tipos de cliente según cuenta.
    
    TIEMPO_MAX_PROM : tiempo máximo de espera (primedio). 
    
    DESV_TMAX : desviación estandar de tiempo máximo de espera.
    
    TIEMPO_SERV_PROM : tiempo promedio de servicio.
    
    DESV_TSERV : desviación estandar del tiempo de servicio.
    
    TASA_LLEGADA : tasa de llegada de clientes. En este caso por cada siete clientes 
    que llegan a la cola, tres se van de ella.
    
    llegaCliente( ) :  incluye un nuevo cliente en la Cola, asignando 
    aleatorialente el requerimiento, tipo de cuenta y tiempo máximo de espera. 
    
    atenderCliente( ) : elimina el primer elemento de la cola y obtiene su información
    para actualizar la cola entera ( tiempos de espera ). Durante la actualización se producen
    abandonos por citerio de tiempo máximo de espera. 
    
    generarClientes( ) : genera un número ( N > 0 ) determinado de clientes para 
    que se incorpore a  la cola, retornando la cantidad generada. 
    Este número se determina aleatoriamente según la tasa de llegada.
    
    informe( ) : muestra el informe estadístico. ColaVacia( ) : retorna true si la cola se encuentra sin elementos, false en caso contrario.


    Programa de prueba

    Este programa consiste en realizar una sumulación con los siguientes datos ingresados por teclado :

  • número inicial de clientes : Se incorporan clientes a la Cola pero no se atienden. Representa a la cola inicial, antes que la caja comience a atender.
  • número esperado de clientes : es el número de clientes que se quiere incoprporar a la cola, para realizar la simulación. El proceso termina cuando la cola se vacía.

  • Código fuente

    import java.io.*;
    
    class ProgSimulacion
    {
        public static void main(String arg[ ])    
        {
             
            Simulacion simul = new Simulacion( );
            
            BufferedReader in = new BufferedReader(new 
                InputStreamReader(System.in));
            
            int cont = 0;
            int cte_esp = 0;
            
            try
            {
                System.out.print("\n\tIngrese clientes iniciales : ");
                int cte_ini = Integer.parseInt(in.readLine( ) );
            
                do 
                {
                    simul.llegaCliente( );
                    cont++;
                } while(cont < cte_ini);
                
             } catch(Exception e) { System.out.println("Error : " + e); }
            
            try
            {
                System.out.print("\n\tIngrese clientes esperados : ");
                cte_esp = Integer.parseInt(in.readLine( ) );
            } 
            catch(Exception e) 
            { 
                cte_esp = 200; 
                System.out.println("\tPor error de entrada, se usara el valor 200");
            }
            
            while(cont < cte_esp)
            { 
                cont += simul.generarClientes( );
                simul.atenderCliente( );
            }
            
            while (!simul.ColaVacia( ) )
            {
                simul.atenderCliente( );    
            }        
                    
            System.out.println( );                
            simul.informe( );        
            System.out.println( );        
        } 
        
    }    
    
    
    bajar archivo