コード例 #1
0
        public void GenerarNumerosC()
        {
            //Congruencial Mixto : Xn = (A * Xn-1 + C ) Mod M
            LimpiarTablas();

            var c       = int.Parse(txt_cC.Text);
            var a       = int.Parse(txt_aC.Text);
            var m       = int.Parse(txt_mC.Text);
            var semilla = double.Parse(txt_semillaC.Text);

            _generadorAleatorio = new CongruencialMixto(semilla, a, c, m);

            var tamañoMuestra      = int.Parse(txt_cant_nroC.Text);
            var cantidadIntervalos = int.Parse(txt_IntC.Text);
            var alfa = double.Parse(txt_chicierto.Text);

            var distribucion = new DistribucionUniforme(0, 1, _generadorAleatorio);

            _gestor = new GestorEstadistico(distribucion, tamañoMuestra, cantidadIntervalos, alfa);

            foreach (var valor in _gestor.Valores)
            {
                _ord++;
                dataGridView1.Rows.Add(_ord, valor);
            }

            AgregarValoresTabla();
            CargarHistograma();
        }
コード例 #2
0
        public void GenerarNumerosB()
        {
            LimpiarTablas();

            var tamañoMuestra      = int.Parse(txt_Cant_nroB.Text);
            var cantidadIntervalos = int.Parse(txt_IntB.Text);
            var alfa = double.Parse(txt_chicierto.Text);

            var distribucion = new DistribucionUniforme(0, 1);

            _gestor = new GestorEstadistico(distribucion, tamañoMuestra, cantidadIntervalos, alfa);

            foreach (var valor in _gestor.Valores)
            {
                _ord++;
                dataGridView1.Rows.Add(_ord, valor);
            }

            AgregarValoresTabla();
            CargarHistograma();
        }
コード例 #3
0
        public void GenerarNumeros()
        {
            LimpiarTablas();

            if (radioButton3.Checked)
            {
                _generadorAleatorio = new GeneradorDelSistema();
            }

            else
            {
                var a       = int.Parse(txt_aA.Text);
                var m       = int.Parse(txt_mA.Text);
                var semilla = double.Parse(txt_semillaA.Text);

                //Congruencial Multiplicativo : Xn = (A * Xn-1 ) Mod M
                if (radioButton2.Checked)
                {
                    _generadorAleatorio = new CongruencialMultiplicativo(semilla, a, m);
                }

                //Congruencial Mixto : Xn = (A * Xn-1 + C ) Mod M
                else if (radioButton1.Checked)
                {
                    var c = int.Parse(txt_cA.Text);
                    _generadorAleatorio = new CongruencialMixto(semilla, a, c, m);
                }
            }

            if (rad_uniforme.Checked)
            {
                var a = double.Parse(txt_a.Text);
                var b = double.Parse(txt_b.Text);

                _distribucion = new DistribucionUniforme(a, b, _generadorAleatorio);
            }

            if (rad_normal.Checked)
            {
                var media    = double.Parse(txt_media.Text);
                var varianza = double.Parse(txt_varianza.Text);

                _distribucion = new DistribucionNormal(media, varianza, _generadorAleatorio);
            }

            if (rad_exponencial.Checked)
            {
                var lambda = double.Parse(txt_lambda.Text);

                _distribucion = new DistribucionExponencialNegativa(lambda, _generadorAleatorio);
            }

            var tamañoMuestra      = int.Parse(txt_cant_nroC.Text);
            var cantidadIntervalos = int.Parse(txt_IntC.Text);
            var alfa = double.Parse(txt_chicierto.Text);

            try
            {
                _gestor = new GestorEstadistico(_distribucion, tamañoMuestra, cantidadIntervalos, alfa);
            }
            catch (Exception)
            {
                var grados = int.Parse(txt_IntC.Text) - _distribucion.CantidadParametros() - 1;

                MessageBox.Show(grados <= 0
                    ? @"Grados de libertad insuficientes, utilice más intervalos"
                    : @"Falla la prueba de Chi Cuadrado porque las frecuencias esperadas tienden a cero, utilice menos intervalos");

                txt_mA.Focus();
                return;
            }

            for (var i = 0; i < tamañoMuestra; i++)
            {
                var valor = _gestor.Valores[i];

                dataGridView1.Rows.Add(i + 1, valor);
            }

            AgregarValoresTabla();
            CargarHistograma();
        }
コード例 #4
0
ファイル: Form1.cs プロジェクト: FedeLopez91/TpSimFinal280
        private void Simular(string tipoFuncion, int cantIteraciones, int mostrarDesde, int cantAMostrar, Restricciones[] restricciones, FunctionZ funcionZ, GestorEstadistico numerosAleatorios)
        {
            var progressBar = (ProgressBar)Controls.Find("progressbar", true).FirstOrDefault();

            progressBar.Value   = 0;
            progressBar.Maximum = cantIteraciones;

            float[] variablesOptimas = new float[funcionZ.variables.Length];
            float   zOptima          = 0;

            txtFuncionZDisplay.Text      = GetFuncionZDisplay(funcionZ, tipoFuncion);
            txtRestriccionesDisplay.Text = GetRestrincionesDisplay(restricciones);

            dgvResultados.DataSource = new ManejadorSimulacion().Simular(tipoFuncion, cantIteraciones, mostrarDesde, cantAMostrar, restricciones, funcionZ, gestor, progressBar, ref variablesOptimas, ref zOptima);

            dgvResultados.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
            dgvResultados.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvResultados.ColumnHeadersDefaultCellStyle.Font      = new Font(dgvResultados.Font, FontStyle.Bold);
            dgvResultados.ColumnHeadersDefaultCellStyle.BackColor = Color.LightGray;
            dgvResultados.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;

            tabParametros.SelectTab(tabResult);
            Cursor.Current           = Cursors.Default;
            txtVariablesOptimas.Text = GetVariablesOptimasDisplay(variablesOptimas);
            txtZOptima.Text          = "Z(X)= " + zOptima.ToString();
        }
コード例 #5
0
ファイル: Form1.cs プロジェクト: FedeLopez91/TpSimFinal280
        public void GenerarNumeros()
        {
            dgvResultadosDistribucion.Rows.Clear();

            if (rbGSistema.Checked)
            {
                IGeneradorAleatorio = new GeneradorDelSistema();
            }

            else
            {
                var a       = int.Parse(txtMultiplicativoA.Text);
                var m       = int.Parse(txtDivisorM.Text);
                var semilla = float.Parse(txtSemillaA.Text);

                //Congruencial Multiplicativo : Xn = (A * Xn-1 ) Mod M
                if (rbGCMultiplicativo.Checked)
                {
                    IGeneradorAleatorio = new CongruencialMultiplicativo(semilla, a, m);
                }

                //Congruencial Mixto : Xn = (A * Xn-1 + C ) Mod M
                else if (rbGCMixto.Checked)
                {
                    var c = int.Parse(txtSumatorioC.Text);
                    IGeneradorAleatorio = new CongruencialMixto(semilla, a, c, m);
                }
            }

            if (rbDUniforme.Checked)
            {
                var a = float.Parse(txtMargenAU.Text);
                var b = float.Parse(txtMargenBU.Text);

                IDistribucion = new DistribucionUniforme(a, b, IGeneradorAleatorio);
            }

            if (rbDNormal.Checked)
            {
                var media    = float.Parse(txtMedia.Text);
                var varianza = float.Parse(txtVarianza.Text);

                IDistribucion = new DistribucionNormal(media, varianza, IGeneradorAleatorio);
            }

            if (rbDExponencial.Checked)
            {
                var lambda = float.Parse(txtLambda.Text);

                IDistribucion = new DistribucionExponencialNegativa(lambda, IGeneradorAleatorio);
            }
            //}

            //}

            var tamañoMuestra      = string.IsNullOrEmpty(txtCantNro.Text) ? 100 : int.Parse(txtCantNro.Text);
            var cantidadIntervalos = string.IsNullOrEmpty(txtIntervalos.Text) ? 100 : int.Parse(txtIntervalos.Text);

            var alfa = (float)0.5;

            try
            {
                gestor = new GestorEstadistico(IDistribucion, tamañoMuestra, cantidadIntervalos, alfa);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
                txtDivisorM.Focus();
                return;
            }
        }
コード例 #6
0
        public DataTable Simular(string tipoFuncion, int cantIteraciones, int mostrarDesde, int cantAMostrar, Restricciones[] restricciones, FunctionZ functionZ, GestorEstadistico numerosAleatorios, ProgressBar pb, ref float[] variablesOptimas, ref float zOptima)
        {
            DataTable tabla        = new DataTable();
            int       mostrarHasta = mostrarDesde + cantAMostrar;

            //NRO ITERACION
            tabla.Columns.Add("#");
            //VARIABLES
            for (int i = 1; i <= functionZ.variables.Length; i++)
            {
                tabla.Columns.Add("RND X" + i);
                tabla.Columns.Add("X" + i);
            }

            //RESTRICCIONES
            for (int i = 1; i <= restricciones.Length; i++)
            {
                tabla.Columns.Add("R" + i);
                tabla.Columns.Add("VÁLIDO R" + i);
            }
            //FUNCION Z
            tabla.Columns.Add("Z");
            //FUNCION Z OPTIMA
            tabla.Columns.Add("Z OPT");
            //VARIABLES OPTIMAS
            for (int i = 1; i <= functionZ.variables.Length; i++)
            {
                tabla.Columns.Add("X" + i + " OPT");
            }

            var random = numerosAleatorios.Distribucion;

            string[] vector     = new string[tabla.Columns.Count];
            var      porcAvance = 0;

            for (int j = 1; j <= cantIteraciones; j++)

            {
                //NUMERO ITERACION
                vector[0] = j.ToString();

                //CALCULO VARIABLES
                var  randomVariables = new float[functionZ.variables.Length];
                var  posicionVector  = 1;
                bool variable0       = false;
                for (int i = 0; i < randomVariables.Length; i++)
                {
                    float rndvariable = random.Generar();
                    if (rndvariable < 0)
                    {
                        variable0 = true;
                    }
                    randomVariables[i]     = (float)Math.Round(rndvariable, 4);
                    vector[posicionVector] = rndvariable.ToString();
                    posicionVector++;
                    vector[posicionVector] = randomVariables[i].ToString();
                    posicionVector++;
                }
                if (!variable0)
                {
                    ////CALCULO RESTRICIONES
                    var restriccionesresult = new List <string>();
                    for (int i = 0; i < restricciones.Length; i++)
                    {
                        float restriccionTotal = 0;
                        for (int h = 0; h < restricciones[i].variables.Length; h++)
                        {
                            restriccionTotal += randomVariables[h] * restricciones[i].variables[h];
                        }
                        vector[posicionVector] = Math.Round(restriccionTotal, 4).ToString();
                        posicionVector++;
                        var restriccValid = GetValidacionRestriccion(restriccionTotal, restricciones[i]);
                        restriccionesresult.Add(restriccValid);
                        vector[posicionVector] = restriccValid;
                        posicionVector++;
                    }

                    //FUNCTION Z
                    var isValid = restriccionesresult.FirstOrDefault(x => x == "NO");
                    if (isValid == null)
                    {
                        float funcionZResult = 0;
                        for (int i = 0; i < randomVariables.Length; i++)
                        {
                            funcionZResult += (randomVariables[i] * functionZ.variables[i]);
                        }

                        funcionZResult        += functionZ.c;
                        vector[posicionVector] = Math.Round(funcionZResult, 4).ToString();
                        posicionVector++;
                        if (tipoFuncion == "MAX")
                        {
                            if (string.IsNullOrEmpty(vector[posicionVector]) || float.Parse(vector[posicionVector]) <= funcionZResult)
                            {
                                vector[posicionVector] = Math.Round(funcionZResult, 4).ToString();
                                zOptima = (float)Math.Round(funcionZResult, 4);
                                posicionVector++;
                                for (int i = 0; i < randomVariables.Length; i++)
                                {
                                    vector[posicionVector] = randomVariables[i].ToString();
                                    variablesOptimas[i]    = randomVariables[i];
                                    posicionVector++;
                                }
                            }
                        }
                        else
                        {
                            if (string.IsNullOrEmpty(vector[posicionVector]) || float.Parse(vector[posicionVector]) >= funcionZResult)
                            {
                                vector[posicionVector] = Math.Round(funcionZResult, 4).ToString();
                                zOptima = (float)Math.Round(funcionZResult, 4);
                                posicionVector++;
                                for (int i = 0; i < randomVariables.Length; i++)
                                {
                                    vector[posicionVector] = randomVariables[i].ToString();
                                    variablesOptimas[i]    = randomVariables[i];
                                    posicionVector++;
                                }
                            }
                        }
                    }
                    else
                    {
                        vector[posicionVector] = "";
                    }
                }
                else
                {
                    vector = LimpiarVector(posicionVector, vector.Length, functionZ.variables.Length, vector);
                }
                if (j >= mostrarDesde && j <= mostrarHasta)
                {
                    tabla.LoadDataRow(vector, true);
                }

                pb.Increment(pb.Step);
                porcAvance = cantIteraciones / j;
            }

            tabla.LoadDataRow(vector, true);

            return(tabla);
        }