Exemple #1
0
        public Transbordador(string ubicacion, Uniforme distribucionCargaAutos,
                             Uniforme distribucionCargaCamiones, int capacidad, string nombre, Uniforme distribucionCruceAgua,
                             int mantenimiento)
        {
            Ubicacion = ubicacion;
            DistribucionCargaAutos    = distribucionCargaAutos;
            DistribucionCargaCamiones = distribucionCargaCamiones;
            Capacidad             = capacidad;
            Estado                = "Libre";
            Vehiculos             = new List <Vehiculo>();
            Nombre                = nombre;
            DistribucionCruceAgua = distribucionCruceAgua;
            Mantenimiento         = mantenimiento;

            DistribucionInterrupciones50 = new DistribucionAleatoria(new List <Probabilidad>()
            {
                new Probabilidad(273, 0.20),
                new Probabilidad(0, 0.80)
            });

            DistribucionInterrupciones70 = new DistribucionAleatoria(new List <Probabilidad>()
            {
                new Probabilidad(312, 0.30),
                new Probabilidad(0, 0.70)
            });

            DistribucionInterrupciones100 = new DistribucionAleatoria(new List <Probabilidad>()
            {
                new Probabilidad(364, 0.50),
                new Probabilidad(0, 0.50)
            });
        }
Exemple #2
0
        public Principal()
        {
            var culture = CultureInfo.InvariantCulture;

            Thread.CurrentThread.CurrentCulture   = culture;
            Thread.CurrentThread.CurrentUICulture = culture;

            InitializeComponent();
            btn_comparar.Enabled = false;
            _demanda             = new DistribucionAleatoria(new List <Probabilidad>()
            {
                new Probabilidad(0, 0.05),
                new Probabilidad(10, 0.12),
                new Probabilidad(20, 0.18),
                new Probabilidad(30, 0.25),
                new Probabilidad(40, 0.22),
                new Probabilidad(50, 0.18)
            });
            _demora = new DistribucionAleatoria(new List <Probabilidad>()
            {
                new Probabilidad(0, 0.301),
                new Probabilidad(2, 0.361),
                new Probabilidad(3, 0.217),
                new Probabilidad(5, 0.087),
                new Probabilidad(6, 0.026),
                new Probabilidad(7, 0.006),
                new Probabilidad(9, 0.001),
            });
        }
        public principal()
        {
            _culture = CultureInfo.InvariantCulture;
            Thread.CurrentThread.CurrentCulture   = _culture;
            Thread.CurrentThread.CurrentUICulture = _culture;
            InitializeComponent();
            DoubleBuffer();

            _tipoAuto = new DistribucionAleatoria(new List <Probabilidad>()
            {
                new Probabilidad(1, 0.20),
                new Probabilidad(2, 0.30),
                new Probabilidad(3, 0.50)
            });
        }
Exemple #4
0
        public TP_4()
        {
            InitializeComponent();

            txt_promedio_semanal.Enabled = false;

            _comisionPromedioSemanal = 0;

            //Inicializo tabla de distribucion de autos vendidos
            _cantidadAutosVendidos = new DistribucionAleatoria(new List <Probabilidad>()
            {
                new Probabilidad(0, 0.20),
                new Probabilidad(1, 0.30),
                new Probabilidad(2, 0.30),
                new Probabilidad(3, 0.15),
                new Probabilidad(4, 0.05)
            });

            //Inicializo tabla de distribucion de tipo de autos
            _tipoAuto = new DistribucionAleatoria(new List <Probabilidad>()
            {
                new Probabilidad(1, 0.50), //compacto
                new Probabilidad(2, 0.35), //mediano
                new Probabilidad(3, 0.15)  //lujo
            });

            //Inicializo tabla de distribucion de comision de autos compactos
            _comisionCompacto = new DistribucionAleatoria(new List <Probabilidad>()
            {
                new Probabilidad(250, 1)
            });

            //Inicializo tabla de distribucion de comision de autos medianos
            _comisionMediano = new DistribucionAleatoria(new List <Probabilidad>()
            {
                new Probabilidad(400, 0.40),
                new Probabilidad(500, 0.60)
            });

            //Inicializo tabla de distribucion de comision de autos de lujo
            _comisionLujo = new DistribucionAleatoria(new List <Probabilidad>()
            {
                new Probabilidad(2000, 0.25),
                new Probabilidad(1500, 0.40),
                new Probabilidad(1000, 0.35),
            });
        }
Exemple #5
0
        public Principal()
        {
            InitializeComponent();

            _tiempoActividadA = new DistribucionAleatoria(new List <Probabilidad>()
            {
                new Probabilidad(5, 0.25),
                new Probabilidad(6, 0.35),
                new Probabilidad(7, 0.25),
                new Probabilidad(8, 0.15)
            });
            _tiempoActividadB = new DistribucionAleatoria(new List <Probabilidad>()
            {
                new Probabilidad(3, 0.20),
                new Probabilidad(5, 0.55),
                new Probabilidad(7, 0.25)
            });
            _tiempoActividadC = new DistribucionAleatoria(new List <Probabilidad>()
            {
                new Probabilidad(10, 0.10),
                new Probabilidad(12, 0.25),
                new Probabilidad(14, 0.40),
                new Probabilidad(16, 0.20),
                new Probabilidad(18, 0.05)
            });
            _tiempoActividadD = new DistribucionAleatoria(new List <Probabilidad>()
            {
                new Probabilidad(8, 0.60),
                new Probabilidad(10, 0.40)
            });

            txtProbabilidad.Text  = "";
            txtSemanas.Text       = @"33";
            txtSimulaciones.Text  = @"10";
            txtFilaDesde.Text     = @"1";
            txtCantidadFilas.Text = @"10";
        }
Exemple #6
0
        private void Simular()
        {
            //delegates
            var inicioFinInstance  = new InicioFinDelegate(InicioFin);
            var columnasInstance   = new ColumnasDelegate(AgregarColumnas);
            var filaInstance       = new FilaDelegate(AgregarFila);
            var statusInstance     = new StatusDelegate(ActualizarStatus);
            var resultadosInstance = new ResultadosDelegate(MostrarResultados);

            //preparación inicial del formulario
            Invoke(inicioFinInstance, false);

            //clientes
            var entreLlegadas        = double.Parse(txt_llegadas.Text);
            var distribucionLlegadas = new DistribucionUniforme(entreLlegadas, entreLlegadas);

            var minInicio  = (double)DateTimeConverter.EnMinutos($"{txt_apertura.Text}:00");
            var horaInicio = DateTime.Today.AddMinutes(minInicio);

            var minFin  = (double)DateTimeConverter.EnMinutos($"{txt_cierre.Text}:00");
            var horaFin = DateTime.Today.AddMinutes(minFin);

            var local = new Llegada(distribucionLlegadas, horaInicio, horaFin);

            var colaMax = int.Parse(txt_cola_max.Text);

            //grupos
            var probabilidadGrupo2 = double.Parse(txt_grupos_2.Text);
            var probabilidadGrupo4 = double.Parse(txt_grupos_4.Text);

            var grupos = new DistribucionAleatoria(new List <Probabilidad>
            {
                new Probabilidad(2, probabilidadGrupo2),
                new Probabilidad(4, probabilidadGrupo4)
            });

            //menús
            var probabilidadMenu1 = double.Parse(txt_menu_1.Text);
            var probabilidadMenu2 = double.Parse(txt_menu_2.Text);

            var menus = new DistribucionAleatoria(new List <Probabilidad>
            {
                new Probabilidad(1, probabilidadMenu1),
                new Probabilidad(2, probabilidadMenu2)
            });

            var demoraMenu1       = double.Parse(txt_demora_menu_1.Text);
            var distribucionMenu1 = new DistribucionUniforme(demoraMenu1, demoraMenu1);

            var demoraMenu2       = double.Parse(txt_demora_menu_2.Text);
            var distribucionMenu2 = new DistribucionUniforme(demoraMenu2, demoraMenu2);

            //mozo
            var demoraCarta       = double.Parse(txt_carta.Text);
            var distribucionCarta = new DistribucionUniforme(demoraCarta, demoraCarta);

            var demoraPedido       = double.Parse(txt_pedido.Text);
            var distribucionPedido = new DistribucionUniforme(demoraPedido, demoraPedido);

            //comida
            var media    = double.Parse(txt_comida_media.Text);
            var varianza = double.Parse(txt_comida_varianza.Text);

            var distribucionComida = new DistribucionNormal(media, varianza);

            //eventos
            var inicio = int.Parse(txt_desde.Text);
            var fin    = int.Parse(txt_hasta.Text);

            //servidores
            var colaMesas = new ColaVacia();
            var mesa1     = new Servidor(distribucionComida, colaMesas, "Mesa 1");
            var mesa2     = new Servidor(distribucionComida, colaMesas, "Mesa 2");
            var mesa3     = new Servidor(distribucionComida, colaMesas, "Mesa 3");
            var mesa4     = new Servidor(distribucionComida, colaMesas, "Mesa 4");
            var mesa5     = new Servidor(distribucionComida, colaMesas, "Mesa 5");
            var mesa6     = new Servidor(distribucionComida, colaMesas, "Mesa 6");
            var mesa7     = new Servidor(distribucionComida, colaMesas, "Mesa 7");
            var mesa8     = new Servidor(distribucionComida, colaMesas, "Mesa 8");
            var mesa9     = new Servidor(distribucionComida, colaMesas, "Mesa 9");
            var mesa10    = new Servidor(distribucionComida, colaMesas, "Mesa 10");

            var mesas = new List <Ocupacion>
            {
                new Ocupacion(mesa1),
                new Ocupacion(mesa2),
                new Ocupacion(mesa3),
                new Ocupacion(mesa4),
                new Ocupacion(mesa5),
                new Ocupacion(mesa6),
                new Ocupacion(mesa7),
                new Ocupacion(mesa8),
                new Ocupacion(mesa9),
                new Ocupacion(mesa10)
            };

            var colaMozo = new ColaPriorizada("mozo");
            var mozo     = new ServidorDoble(distribucionCarta, distribucionPedido, colaMozo, "mozo");

            var colaCocina = new ColaFifo("cocina");
            var cocina     = new ServidorDoble(distribucionMenu1, distribucionMenu2, colaCocina, "cocina");

            //simulación

            var     simulacion       = 0;
            var     numCliente       = 0;
            var     colaLocal        = new ColaFifo("local");
            var     clientes         = new List <VectorCliente>();
            var     atendidos        = 0;
            var     perdidos         = 0;
            var     acumuladorEspera = new PromedioAcumulado();
            decimal esperaPromedio   = 0;

            local.Abrir();

            _cancelar = false;

            while (local.EstaAbierto() ||
                   !mozo.EstaLibre() ||
                   !cocina.EstaLibre() ||
                   mesas.Any(m => !m.Mesa.EstaLibre()))
            {
                if (_cancelar)
                {
                    break;
                }

                simulacion++;

                var eventos = new List <Evento>
                {
                    new Evento("Llegada", local.ProximaLlegada),
                    new Evento("Cierre", local.Cierre),
                    new Evento("Fin Mozo", mozo.ProximoFinAtencion),
                    new Evento("Fin Cocina", cocina.ProximoFinAtencion),
                    new Evento("Fin Mesa 1", mesa1.ProximoFinAtencion),
                    new Evento("Fin Mesa 2", mesa2.ProximoFinAtencion),
                    new Evento("Fin Mesa 3", mesa3.ProximoFinAtencion),
                    new Evento("Fin Mesa 4", mesa4.ProximoFinAtencion),
                    new Evento("Fin Mesa 5", mesa5.ProximoFinAtencion),
                    new Evento("Fin Mesa 6", mesa6.ProximoFinAtencion),
                    new Evento("Fin Mesa 7", mesa7.ProximoFinAtencion),
                    new Evento("Fin Mesa 8", mesa8.ProximoFinAtencion),
                    new Evento("Fin Mesa 9", mesa9.ProximoFinAtencion),
                    new Evento("Fin Mesa 10", mesa10.ProximoFinAtencion),
                };

                // ReSharper disable once PossibleInvalidOperationException
                var relojActual  = eventos.Where(ev => ev.Hora.HasValue).Min(ev => ev.Hora).Value;
                var eventoActual = eventos.First(ev => ev.Hora.Equals(relojActual)).Nombre;

                switch (eventoActual)
                {
                case "Llegada":
                    local.ActualizarLlegada();
                    numCliente++;
                    var clienteLlegando = new Cliente($"Grupo {numCliente}", 1);
                    clienteLlegando.Llegar(relojActual);
                    var cantidadGrupo = (int)grupos.ObtenerValor();

                    if (simulacion < fin)
                    {
                        clientes.Add(new VectorCliente
                        {
                            Cliente  = clienteLlegando,
                            Cantidad = cantidadGrupo
                        });
                        //agrego las columnas para el vector de estados del cliente
                        Invoke(columnasInstance, numCliente);
                    }

                    if (mesas.Any(m => m.EstaLibre()))
                    {
                        var mesaLibre = mesas.First(m => m.EstaLibre());
                        mesaLibre.Ocupar(clienteLlegando, cantidadGrupo);
                        mozo.LlegadaGrupo(relojActual, clienteLlegando, cantidadGrupo);
                        if (simulacion < fin)
                        {
                            clientes.Last().Mesa = mesaLibre.Mesa.Nombre;
                        }
                    }
                    else if (colaLocal.Cantidad() < colaMax)
                    {
                        colaLocal.AgregarCliente(clienteLlegando);
                    }
                    else
                    {
                        clienteLlegando.Salir(relojActual);
                        perdidos += cantidadGrupo;
                    }
                    break;

                case "Fin Mozo":
                    var clienteAtendido = mozo.FinAtencion();
                    var mesa            = mesas.Single(m => clienteAtendido.Equals(m.Cliente));
                    if (clienteAtendido.Prioridad.Equals(1))
                    {
                        var pedido          = (int)menus.ObtenerValor();
                        var cantidadPedidos = mesa.Cantidad;
                        clienteAtendido.CambiarPrioridad(pedido);
                        cocina.LlegadaGrupo(relojActual, clienteAtendido, cantidadPedidos);

                        if (simulacion < fin)
                        {
                            clientes.Single(c => c.Cliente.Equals(clienteAtendido))
                            .Menu         = $"Menu {pedido}";
                            eventoActual += " (Carta)";
                        }
                    }
                    else
                    {
                        mesa.Mesa.LlegadaCliente(relojActual, clienteAtendido);
                        eventoActual += " (Pedido)";
                    }
                    break;

                case "Fin Cocina":
                    var clienteConPedido = cocina.FinAtencion();
                    clienteConPedido.CambiarPrioridad(2);
                    mozo.LlegadaCliente(relojActual, clienteConPedido);
                    break;

                case "Fin Mesa 1":
                    var clienteSaliendo1 = mesa1.FinAtencion();
                    clienteSaliendo1.Salir(relojActual);
                    var cantidadAtendidos1 = mesas.Single(m => m.Mesa.Equals(mesa1)).Cantidad;
                    atendidos += cantidadAtendidos1;

                    for (var i = 0; i < cantidadAtendidos1; i++)
                    {
                        esperaPromedio = acumuladorEspera.CalcularSiguiente(clienteSaliendo1.TiempoEspera);
                    }

                    mesas.Single(m => m.Mesa.Equals(mesa1)).Liberar();

                    if (!colaLocal.Vacia())
                    {
                        var clienteEsperando  = colaLocal.ProximoCliente();
                        var cantidadEsperando = (int)grupos.ObtenerValor();
                        mesas.First(m => m.EstaLibre()).Ocupar(clienteEsperando, cantidadEsperando);
                        mozo.LlegadaGrupo(relojActual, clienteEsperando, cantidadEsperando);
                    }
                    break;

                case "Fin Mesa 2":
                    var clienteSaliendo2 = mesa2.FinAtencion();
                    clienteSaliendo2.Salir(relojActual);
                    var cantidadAtendidos2 = mesas.Single(m => m.Mesa.Equals(mesa2)).Cantidad;
                    atendidos += cantidadAtendidos2;

                    for (var i = 0; i < cantidadAtendidos2; i++)
                    {
                        esperaPromedio = acumuladorEspera.CalcularSiguiente(clienteSaliendo2.TiempoEspera);
                    }

                    mesas.Single(m => m.Mesa.Equals(mesa2)).Liberar();

                    if (!colaLocal.Vacia())
                    {
                        var clienteEsperando  = colaLocal.ProximoCliente();
                        var cantidadEsperando = (int)grupos.ObtenerValor();
                        mesas.First(m => m.EstaLibre()).Ocupar(clienteEsperando, cantidadEsperando);
                        mozo.LlegadaGrupo(relojActual, clienteEsperando, cantidadEsperando);
                    }
                    break;

                case "Fin Mesa 3":
                    var clienteSaliendo3 = mesa3.FinAtencion();
                    clienteSaliendo3.Salir(relojActual);
                    var cantidadAtendidos3 = mesas.Single(m => m.Mesa.Equals(mesa3)).Cantidad;
                    atendidos += cantidadAtendidos3;

                    for (var i = 0; i < cantidadAtendidos3; i++)
                    {
                        esperaPromedio = acumuladorEspera.CalcularSiguiente(clienteSaliendo3.TiempoEspera);
                    }

                    mesas.Single(m => m.Mesa.Equals(mesa3)).Liberar();

                    if (!colaLocal.Vacia())
                    {
                        var clienteEsperando  = colaLocal.ProximoCliente();
                        var cantidadEsperando = (int)grupos.ObtenerValor();
                        mesas.First(m => m.EstaLibre()).Ocupar(clienteEsperando, cantidadEsperando);
                        mozo.LlegadaGrupo(relojActual, clienteEsperando, cantidadEsperando);
                    }
                    break;

                case "Fin Mesa 4":
                    var clienteSaliendo4 = mesa4.FinAtencion();
                    clienteSaliendo4.Salir(relojActual);
                    var cantidadAtendidos4 = mesas.Single(m => m.Mesa.Equals(mesa4)).Cantidad;
                    atendidos += cantidadAtendidos4;

                    for (var i = 0; i < cantidadAtendidos4; i++)
                    {
                        esperaPromedio = acumuladorEspera.CalcularSiguiente(clienteSaliendo4.TiempoEspera);
                    }

                    mesas.Single(m => m.Mesa.Equals(mesa4)).Liberar();

                    if (!colaLocal.Vacia())
                    {
                        var clienteEsperando  = colaLocal.ProximoCliente();
                        var cantidadEsperando = (int)grupos.ObtenerValor();
                        mesas.First(m => m.EstaLibre()).Ocupar(clienteEsperando, cantidadEsperando);
                        mozo.LlegadaGrupo(relojActual, clienteEsperando, cantidadEsperando);
                    }
                    break;

                case "Fin Mesa 5":
                    var clienteSaliendo5 = mesa5.FinAtencion();
                    clienteSaliendo5.Salir(relojActual);
                    var cantidadAtendidos5 = mesas.Single(m => m.Mesa.Equals(mesa5)).Cantidad;
                    atendidos += cantidadAtendidos5;

                    for (var i = 0; i < cantidadAtendidos5; i++)
                    {
                        esperaPromedio = acumuladorEspera.CalcularSiguiente(clienteSaliendo5.TiempoEspera);
                    }

                    mesas.Single(m => m.Mesa.Equals(mesa5)).Liberar();

                    if (!colaLocal.Vacia())
                    {
                        var clienteEsperando  = colaLocal.ProximoCliente();
                        var cantidadEsperando = (int)grupos.ObtenerValor();
                        mesas.First(m => m.EstaLibre()).Ocupar(clienteEsperando, cantidadEsperando);
                        mozo.LlegadaGrupo(relojActual, clienteEsperando, cantidadEsperando);
                    }
                    break;

                case "Fin Mesa 6":
                    var clienteSaliendo6 = mesa6.FinAtencion();
                    clienteSaliendo6.Salir(relojActual);
                    var cantidadAtendidos6 = mesas.Single(m => m.Mesa.Equals(mesa6)).Cantidad;
                    atendidos += cantidadAtendidos6;

                    for (var i = 0; i < cantidadAtendidos6; i++)
                    {
                        esperaPromedio = acumuladorEspera.CalcularSiguiente(clienteSaliendo6.TiempoEspera);
                    }

                    mesas.Single(m => m.Mesa.Equals(mesa6)).Liberar();

                    if (!colaLocal.Vacia())
                    {
                        var clienteEsperando  = colaLocal.ProximoCliente();
                        var cantidadEsperando = (int)grupos.ObtenerValor();
                        mesas.First(m => m.EstaLibre()).Ocupar(clienteEsperando, cantidadEsperando);
                        mozo.LlegadaGrupo(relojActual, clienteEsperando, cantidadEsperando);
                    }
                    break;

                case "Fin Mesa 7":
                    var clienteSaliendo7 = mesa7.FinAtencion();
                    clienteSaliendo7.Salir(relojActual);
                    var cantidadAtendidos7 = mesas.Single(m => m.Mesa.Equals(mesa7)).Cantidad;
                    atendidos += cantidadAtendidos7;

                    for (var i = 0; i < cantidadAtendidos7; i++)
                    {
                        esperaPromedio = acumuladorEspera.CalcularSiguiente(clienteSaliendo7.TiempoEspera);
                    }

                    mesas.Single(m => m.Mesa.Equals(mesa7)).Liberar();

                    if (!colaLocal.Vacia())
                    {
                        var clienteEsperando  = colaLocal.ProximoCliente();
                        var cantidadEsperando = (int)grupos.ObtenerValor();
                        mesas.First(m => m.EstaLibre()).Ocupar(clienteEsperando, cantidadEsperando);
                        mozo.LlegadaGrupo(relojActual, clienteEsperando, cantidadEsperando);
                    }
                    break;

                case "Fin Mesa 8":
                    var clienteSaliendo8 = mesa8.FinAtencion();
                    clienteSaliendo8.Salir(relojActual);
                    var cantidadAtendidos8 = mesas.Single(m => m.Mesa.Equals(mesa8)).Cantidad;
                    atendidos += cantidadAtendidos8;

                    for (var i = 0; i < cantidadAtendidos8; i++)
                    {
                        esperaPromedio = acumuladorEspera.CalcularSiguiente(clienteSaliendo8.TiempoEspera);
                    }

                    mesas.Single(m => m.Mesa.Equals(mesa8)).Liberar();

                    if (!colaLocal.Vacia())
                    {
                        var clienteEsperando  = colaLocal.ProximoCliente();
                        var cantidadEsperando = (int)grupos.ObtenerValor();
                        mesas.First(m => m.EstaLibre()).Ocupar(clienteEsperando, cantidadEsperando);
                        mozo.LlegadaGrupo(relojActual, clienteEsperando, cantidadEsperando);
                    }
                    break;

                case "Fin Mesa 9":
                    var clienteSaliendo9 = mesa9.FinAtencion();
                    clienteSaliendo9.Salir(relojActual);
                    var cantidadAtendidos9 = mesas.Single(m => m.Mesa.Equals(mesa9)).Cantidad;
                    atendidos += cantidadAtendidos9;

                    for (var i = 0; i < cantidadAtendidos9; i++)
                    {
                        esperaPromedio = acumuladorEspera.CalcularSiguiente(clienteSaliendo9.TiempoEspera);
                    }

                    mesas.Single(m => m.Mesa.Equals(mesa9)).Liberar();

                    if (!colaLocal.Vacia())
                    {
                        var clienteEsperando  = colaLocal.ProximoCliente();
                        var cantidadEsperando = (int)grupos.ObtenerValor();
                        mesas.First(m => m.EstaLibre()).Ocupar(clienteEsperando, cantidadEsperando);
                        mozo.LlegadaGrupo(relojActual, clienteEsperando, cantidadEsperando);
                    }
                    break;

                case "Fin Mesa 10":
                    var clienteSaliendo10 = mesa10.FinAtencion();
                    clienteSaliendo10.Salir(relojActual);
                    var cantidadAtendidos10 = mesas.Single(m => m.Mesa.Equals(mesa10)).Cantidad;
                    atendidos += cantidadAtendidos10;

                    for (var i = 0; i < cantidadAtendidos10; i++)
                    {
                        esperaPromedio = acumuladorEspera.CalcularSiguiente(clienteSaliendo10.TiempoEspera);
                    }

                    mesas.Single(m => m.Mesa.Equals(mesa10)).Liberar();

                    if (!colaLocal.Vacia())
                    {
                        var clienteEsperando  = colaLocal.ProximoCliente();
                        var cantidadEsperando = (int)grupos.ObtenerValor();
                        mesas.First(m => m.EstaLibre()).Ocupar(clienteEsperando, cantidadEsperando);
                        mozo.LlegadaGrupo(relojActual, clienteEsperando, cantidadEsperando);
                    }
                    break;

                case "Cierre":
                    local.Cerrar();
                    foreach (var cliente in colaLocal.Clientes)
                    {
                        var cantidadAfuera = (int)grupos.ObtenerValor();
                        cliente.Salir(relojActual);
                        perdidos += cantidadAfuera;
                    }
                    colaLocal.Vaciar();
                    break;
                }
                //agrego la fila del evento actual
                if (simulacion >= inicio && simulacion <= fin)
                {
                    Invoke(filaInstance, relojActual, eventoActual, local, colaLocal, colaMozo, mozo,
                           colaCocina, cocina, mesas, atendidos, perdidos, esperaPromedio, clientes);
                }

                //cada 10 eventos actualizo el status
                if (simulacion % 10 == 0)
                {
                    Invoke(statusInstance, relojActual, simulacion);
                }
            }
            //muestro los resultados
            Invoke(resultadosInstance, atendidos, perdidos, esperaPromedio);

            //dejo el formulario como estaba
            Invoke(inicioFinInstance, true);
        }