/// <summary> /// Genera un atraso aleatorio /// </summary> /// <param name="randomTramo">Objeto Random de un tramo</param> /// <param name="prob">Probabilidad</param> /// <param name="media">Media</param> /// <param name="desvest">Desviación estándar</param> /// <param name="min">Mínimo</param> /// <param name="max">Máximo</param> /// <returns>Retorna minutos de atraso</returns> public static double GenerarAleatorio(Random randomTramo, DistribucionesEnum distribucion, double prob, double media, double desvest, double min, double max) { int factorPrueba = 1; if (randomTramo.NextDouble() <= prob * factorPrueba) { if (distribucion == DistribucionesEnum.LogNormal) { return(Distribuciones.LogNormal(randomTramo.NextDouble(), randomTramo.NextDouble(), media * factorPrueba, desvest, int.MaxValue)); } else if (distribucion == DistribucionesEnum.Logística) { return(Distribuciones.Logistic(randomTramo.NextDouble(), media, desvest, min, max)); } else if (distribucion == DistribucionesEnum.Normal) { return(Distribuciones.Norm(randomTramo.NextDouble(), randomTramo.NextDouble(), media, desvest, min, max)); } else if (distribucion == DistribucionesEnum.Exponencial) { return(Distribuciones.Expo(randomTramo.NextDouble(), media)); } else if (distribucion == DistribucionesEnum.Uniforme) { return(randomTramo.NextDouble()); } else { return(0); } } return(0); }
/// <summary> /// Distribución Gamma /// </summary> /// <param name="alpha"></param> /// <param name="aleatorio"></param> /// <param name="p1"></param> /// <param name="p2"></param> /// <returns></returns> private static double Gamma(double alpha, Random aleatorio, double p1, double p2) { return(Math.Max(0, Convert.ToInt32(p1 + p2 * Distribuciones.Gamma(alpha, aleatorio)))); }