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(); }
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(); }
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(); }
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(); }
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; } }
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); }