Ejemplo n.º 1
0
        private void btnSimular_Click(object sender, EventArgs e)
        {
            int vueltas = 0;

            if (General.ValidarConversionInt(txtVueltas.Text))
            {
                vueltas = Int32.Parse(txtVueltas.Text);
            }
            if (ValidarSimular())
            {
                dgvResultados.Rows.Clear();

                //variables a utilizarse durante la ejecucion del metodo

                string   generator      = RadioButtonElegido.Text;
                int      puntosStrike   = Int32.Parse(txtStrike.Text);
                int      puntosSpare    = Int32.Parse(txtSpare.Text);
                int      puntosLimite   = Int32.Parse(txtThreshold.Text);
                int      maximo         = Int32.Parse(txtMaximo.Text);
                int      minimo         = Int32.Parse(txtMinimo.Text);
                int      total          = maximo - minimo;
                int      rounds         = Int32.Parse(txtRounds.Text);
                double[] probabilidades = new double[total + 1];
                Dictionary <int, double[]> probabilidadXResultado     = new Dictionary <int, double[]>();
                Dictionary <int, PMF>      FuncionesDeCuantiaPorValor = new Dictionary <int, PMF>();

                CargarProbabilidadXResultado(probabilidades, probabilidadXResultado, total);
                CargarFuncionesDeCuantiaXValor(FuncionesDeCuantiaPorValor, probabilidadXResultado, maximo);

                int desde = Int32.Parse(txtDesde.Text);
                int hasta = Int32.Parse(txtHasta.Text);

                int primeraVueltaAPersistir = (desde - 1) / rounds;
                int ultimaVueltaAPersistir  = (hasta - 1) / rounds;

                double[]        ultimoVector       = { 0 };
                List <double[]> enIntervalo        = new List <double[]>();
                bool            terminaEnIntervalo = false;

                for (int vuelta = 0; vuelta < vueltas; vuelta++)
                {
                    //Al ejecutarse la simulación se suma uno al total
                    IncrementarSimulaciones();

                    Ejercicio24 ejercicio24 = new Ejercicio24(minimo, maximo, probabilidades, puntosStrike, puntosSpare, puntosLimite, FuncionesDeCuantiaPorValor, generator);

                    if (chkVerMedio.Checked && vuelta >= primeraVueltaAPersistir && vuelta <= ultimaVueltaAPersistir)
                    {
                        int filasDesde, filasHasta;
                        if (vuelta == primeraVueltaAPersistir)
                        {
                            filasDesde = (desde - 1) % rounds + 1;
                            if (vuelta != ultimaVueltaAPersistir)
                            {
                                filasHasta = rounds + 1;
                            }
                            else
                            {
                                filasHasta = (hasta - 1) % rounds + 1;
                            }
                        }
                        else if (vuelta == ultimaVueltaAPersistir)
                        {
                            filasDesde = 1;
                            filasHasta = (hasta - 1) % rounds + 1;
                        }
                        else
                        {
                            filasDesde = 1;
                            filasHasta = rounds + 1;
                        }

                        enIntervalo = ejercicio24.ComputeMontecarlo(rounds, filasDesde, filasHasta);
                        foreach (double[] vector in enIntervalo)
                        {
                            vector[0] += vuelta * rounds;
                            insertarArrayEnDGV(vector, dgvResultados);
                        }

                        if (vuelta == vueltas - 1 && filasHasta - 1 == rounds)
                        {
                            terminaEnIntervalo = true;
                        }
                    }
                    else
                    {
                        ejercicio24.ComputeMontecarlo(rounds);
                    }
                    if (ejercicio24.SurpassedThreshold())
                    {
                        IncrementarExitos();
                    }
                    ultimoVector = ejercicio24.getLastVector();
                }
                if (!terminaEnIntervalo)
                {
                    ultimoVector[0] += (vueltas - 1) * rounds;
                    insertarArrayEnDGV(ultimoVector, dgvResultados);
                }

                CalcularProbabilidadExito();
            }
        }