Esempio n. 1
0
        private void Simular()
        {
            try
            {
                if (!ValidarFormulario())
                {
                    return;
                }

                long simulaciones = Simulaciones();

                LimpiarGrilla();
                IniciarProceso();

                var        acumuladorExitos = new TotalAcumulado();
                int        mostrarDesde     = FilaDesde();
                int        cantidadAMostrar = CantidadFilas();
                Cronometro cronometro       = new Cronometro();
                cronometro.Iniciar();
                int exp;
                for (exp = 1; exp <= simulaciones; exp++)
                {
                    var semanas = new List <int>();
                    var randomA = _tiempoActividadA.ObtenerValorConRandomAsociado();
                    semanas.Add((int)randomA.Valor);
                    var randomB = _tiempoActividadB.ObtenerValorConRandomAsociado();
                    semanas.Add((int)randomB.Valor);
                    var randomC = _tiempoActividadC.ObtenerValorConRandomAsociado();
                    semanas.Add((int)randomC.Valor);
                    var randomD = _tiempoActividadD.ObtenerValorConRandomAsociado();
                    semanas.Add((int)randomD.Valor);

                    int totalSemanas = semanas.Sum();

                    if (CumpleTiempoBuscado(totalSemanas))
                    {
                        acumuladorExitos.CalcularSiguiente(1);
                    }

                    //Tabla
                    if (mostrarDesde <= exp && exp < mostrarDesde + cantidadAMostrar)
                    {
                        dgDatos.Rows.Add(exp, Math.Round(randomA.Random, _decimales), randomA.Valor, Math.Round(randomB.Random, _decimales), randomB.Valor, Math.Round(randomC.Random, _decimales),
                                         randomC.Valor, Math.Round(randomD.Random, _decimales), randomD.Valor, totalSemanas, acumuladorExitos.Total);
                    }

                    Application.DoEvents();
                    if (!EnProceso())
                    {
                        break;
                    }
                }

                CortarProceso();

                cronometro.Finalizar();
                if (_mostrarTiempo)
                {
                    Mensaje(cronometro.TiempoTranscurrido().ToString("h'h 'm'm 's's'"), "Tiempo transcurrido");
                }

                var probabilidad = exp / acumuladorExitos.Total;
                txtProbabilidad.Text = Math.Round(probabilidad, _decimales).ToString();
            }
            catch (Exception e)
            {
                MensajeError(e.Message);
            }
        }