public double[] expNeg(double[] vectorAleatorios, double parametro, bool esFrecuencia) { int cantidad = vectorAleatorios.Length; double frecuencia = 0; // Verifico si el parametro ingresado es frecuencia. // True : Si es así lo copio tal cual (Frecuencia = parametro) // False : Si no lo es (porque es una media), calculo la frecuencia segun la media (Frecuencia = 1/parametro). if (esFrecuencia) { frecuencia = parametro; } else { frecuencia = 1 / parametro; } double[] vectorExpNeg = new double[cantidad]; for (int i = 0; i < cantidad; i++) { // X = (-1/frecuencia) * ln(1 - RND) double X = (-1 / frecuencia) * Math.Log(1 - vectorAleatorios[i]); vectorExpNeg[i] = Truncate.truncar(X, 4); } return(vectorExpNeg); }
public double[] generarAleatorios01(int cantidad) { double[] vectorAleatorios = new double[cantidad]; Random aleatorio = new Random(); for (int i = 0; i < cantidad; i++) { double num = Truncate.truncar(aleatorio.NextDouble(), 4); if (num == 0) { num = 0.0001; } vectorAleatorios[i] = num; } return(vectorAleatorios); }
//X = vectorUniforme[i]; //A = limiteInferior; //B = limiteSuperior; //RND = vectorAleatorios[i]; public double[] uniforme(double[] vectorAleatorios, double limiteInferior, double limiteSuperior) { // obtengo cantidad de numeros a generar int cantidad = vectorAleatorios.Length; // Genero vector con distribucion uniforme (A-B) double[] vectorUniforme = new double[cantidad]; for (int i = 0; i < cantidad; i++) { // X = A + RND * (B-A); -> Formula para generar Uniformes (A-B) double X = limiteInferior + vectorAleatorios[i] * (limiteSuperior - limiteInferior); vectorUniforme[i] = Truncate.truncar(X, 4); } return(vectorUniforme); }
public double[] normal(double[] vectorAleatorios, double media, double desviacion) { int cantidad = vectorAleatorios.Length; double[] vectorNormal = new double[cantidad]; for (int i = 0; i < cantidad; i += 2) { // N1 = ((-2 * ln(RND1)^0,5).cos(2.Pi.RND2)) * desviacion + media // N2 = ((-2 * ln(RND1)^0,5).sen(2.Pi.RND2)) * desviacion + media double RND1 = vectorAleatorios[i]; double RND2 = vectorAleatorios[i + 1]; double PI = Math.PI; double n1 = (Math.Pow(-2 * Math.Log(RND1), 0.5) * Math.Cos(2 * PI * RND2)) * desviacion + media; double n2 = (Math.Pow(-2 * Math.Log(RND1), 0.5) * Math.Sin(2 * PI * RND2)) * desviacion + media; vectorNormal[i] = Truncate.truncar(n1, 4); vectorNormal[i + 1] = Truncate.truncar(n2, 4); } return(vectorNormal); }
public string[][] ObtenerSimulacion(int cantidad, int limInf, int limSup) { // Los 2 vectores con los que vamos a trabajar. string[] vectorSimulacion = new string[11]; string[] vectorSimulacion_menos1 = new string[11]; // Cantidad de filas que vamos a mostrar. int simul_a_mostrar = (limSup - limInf) + 1; // Creo el vector que contendra las simulaciones a mostrar string[][] simulaciones = new string[simul_a_mostrar][]; // Variables varias Random aleatorio = new Random(); // Valor RND int num; int z = 0; for (int a = 0; a < vectorSimulacion_menos1.Length; a++) { if (a == 7 || a == 10) { vectorSimulacion_menos1[a] = "0"; } else { vectorSimulacion_menos1[a] = " "; } } for (int i = 1; i <= cantidad; i++) { // Reseteo el vector para cada simulacion for (int j = 0; j < vectorSimulacion.Length; j++) { if (j == 7 || j == 10) { // Conservo los valores de los acumuladores vectorSimulacion[j] = vectorSimulacion_menos1[j]; } else { vectorSimulacion[j] = " "; } } // Visitas vectorSimulacion[0] = (i).ToString(); // RND AbrePuerta (si abre la puerta o no) double RND = Truncate.truncar(aleatorio.NextDouble(), 3); vectorSimulacion[1] = RND.ToString(); foreach (Opcion opcion in AbrePuerta.opciones) { if (RND > opcion.acum) { vectorSimulacion[2] = opcion.nombre; } } // RND HombreMujer (Si es mujer o hombre) RND = Truncate.truncar(aleatorio.NextDouble(), 3); vectorSimulacion[3] = RND.ToString(); if (vectorSimulacion[2] == "SI") { foreach (Opcion opcion in AtiendePuerta.opciones) { if (RND > opcion.acum) { vectorSimulacion[4] = opcion.nombre; } } // RND Venta (si vendio o no vendio) RND = Truncate.truncar(aleatorio.NextDouble(), 3); vectorSimulacion[5] = RND.ToString(); if (vectorSimulacion[4] == "Mujer") { foreach (Opcion opcion in VentaMujer.opciones) { if (RND > opcion.acum) { vectorSimulacion[6] = opcion.nombre; } } } else { foreach (Opcion opcion in VentaHombre.opciones) { if (RND > opcion.acum) { vectorSimulacion[6] = opcion.nombre; } } } // Cuento las ventas realizadas. if (vectorSimulacion[6] == "SI") { vectorSimulacion[7] = (Convert.ToInt32(vectorSimulacion[7]) + 1).ToString(); } // RND Suscripcion (Cuantas suscripciones compro dependiendo el sexo) RND = Truncate.truncar(aleatorio.NextDouble(), 3); vectorSimulacion[8] = RND.ToString(); if (vectorSimulacion[6] == "SI") { if (vectorSimulacion[4] == "Mujer") { foreach (Opcion opcion in SuscripcionMujer.opciones) { if (RND > opcion.acum) { vectorSimulacion[9] = opcion.nombre; } } } else { foreach (Opcion opcion in SuscripcionHombre.opciones) { if (RND > opcion.acum) { vectorSimulacion[9] = opcion.nombre; } } } } } // Acumulo las suscripciones vendidas if (vectorSimulacion[9] == " ") { num = 0; } else { num = Convert.ToInt32(vectorSimulacion[9]); } vectorSimulacion[10] = (Convert.ToInt32(vectorSimulacion_menos1[10]) + num).ToString(); // Copio el vector simulacion al vector menos 1 para la proxima simulacion. for (int r = 0; r < vectorSimulacion.Length; r++) { vectorSimulacion_menos1[r] = vectorSimulacion[r]; } // Pregunto si debo mostrar la informacion de la simulacion actual o no. if (i >= limInf && i <= limSup) { simulaciones[z] = new string[11]; for (int u = 0; u < 11; u++) { simulaciones[z][u] = vectorSimulacion[u]; } z++; } } return(simulaciones); }
public string[][] ObtenerSimulacion(int cantidad, int limInf, int limSup) { // Los 2 vectores con los que vamos a trabajar. string[] vectorSimulacion = new string[11]; string[] vectorSimulacion_menos1 = new string[11]; // Cantidad de filas que vamos a mostrar. int simul_a_mostrar = (limSup - limInf) + 1; // Creo el vector que contendra las simulaciones a mostrar string[][] simulaciones = new string[simul_a_mostrar][]; // Variables varias Random aleatorio = new Random(); // Valor RND int acumSusc = 0; int acumVentas = 0; int num = 0; int z = 0; for (int i = 1; i <= cantidad; i++) { // Reseteo los vectores para cara simulacion for (int j = 0; j < 11; j++) { vectorSimulacion[j] = " "; vectorSimulacion_menos1[j] = " "; } // Visitas vectorSimulacion[0] = (i).ToString(); // RND AbrePuerta double RND = Truncate.truncar(aleatorio.NextDouble(), 3); vectorSimulacion[1] = RND.ToString(); // AbrePuerta foreach (Opcion opcion in AbrePuerta.opciones) { if (RND > opcion.acum) { vectorSimulacion[2] = opcion.nombre; } } // RND HombreMujer RND = Truncate.truncar(aleatorio.NextDouble(), 3); vectorSimulacion[3] = RND.ToString(); // Hombre/Mujer if (vectorSimulacion[2] == "SI") { foreach (Opcion opcion in AtiendePuerta.opciones) { if (RND > opcion.acum) { vectorSimulacion[4] = opcion.nombre; } } // RND Venta RND = Truncate.truncar(aleatorio.NextDouble(), 3); vectorSimulacion[5] = RND.ToString(); if (vectorSimulacion[4] == "Mujer") { foreach (Opcion opcion in VentaMujer.opciones) { if (RND > opcion.acum) { vectorSimulacion[6] = opcion.nombre; } } } else { foreach (Opcion opcion in VentaHombre.opciones) { if (RND > opcion.acum) { vectorSimulacion[6] = opcion.nombre; } } } if (vectorSimulacion[6] == "SI") { acumVentas++; } // RND Suscripcion RND = Truncate.truncar(aleatorio.NextDouble(), 3); vectorSimulacion[8] = RND.ToString(); if (vectorSimulacion[6] == "SI") { if (vectorSimulacion[4] == "Mujer") { foreach (Opcion opcion in SuscripcionMujer.opciones) { if (RND > opcion.acum) { vectorSimulacion[9] = opcion.nombre; } } } else { foreach (Opcion opcion in SuscripcionHombre.opciones) { if (RND > opcion.acum) { vectorSimulacion[9] = opcion.nombre; } } } } } if (vectorSimulacion[9] == " ") { num = 0; } else { num = Convert.ToInt32(vectorSimulacion[9]); } acumSusc += num; vectorSimulacion[10] = acumSusc.ToString(); vectorSimulacion[7] = acumVentas.ToString(); if (i >= limInf && i <= limSup) { simulaciones[z] = new string[11]; for (int u = 0; u < 11; u++) { simulaciones[z][u] = vectorSimulacion[u]; } z++; } } return(simulaciones); }