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);
        }
Exemple #5
0
        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);
        }