def find_optimal_T(bg_rate, m, P): """Return T so that m-ph delay from pure BG will be < T with prob. < P. This is equivalent to find_optimal_T_chi2 but conceptually simpler. """ T = erlang.ppf(P, m, scale=1./bg_rate) return T
def find_optimal_T(bg_rate, m, P): """Return T so that m-ph delay from pure BG will be < T with prob. < P. This is equivalent to find_optimal_T_chi2 but conceptually simpler. """ T = erlang.ppf(P, m, scale=1. / bg_rate) return T
def create_bins(knn_orders, bins_per_k, nbar=2.0e-4, epsilon=5e-3, upper_stretch=1.25, lower_stretch=1.25): bins = np.zeros((len(knn_orders), bins_per_k)) for i in range(bins.shape[0]): lv = erlang.ppf(epsilon, knn_orders[i]) / nbar ls = (lv * 3 / (4 * np.pi))**(1. / 3.) / lower_stretch uv = erlang.ppf(1.0 - epsilon, knn_orders[i]) / nbar us = (uv * 3 / (4 * np.pi))**(1. / 3.) * upper_stretch bins[i, :] = np.logspace(np.log10(ls), np.log10(us), bins_per_k) return bins
def mse(): """Compute MSE of quantiles from the distributions. Returns: (dict): MSEs of `lognorm`, `gamma`, `weibull` and `erlang` in a dict. """ # quantiles quantile_points = [.05,.25,.5,.75,.95] def _qMSE(q): return np.mean((q - np.array([2.2,3.8,5.1,6.7,11.5]))**2) # distributions distr = continuous() lognorm_quantiles = lognorm.ppf(quantile_points, *distr['lognorm']) gamma_quantiles = gamma.ppf(quantile_points, *distr['gamma']) weibull_quantiles = weibull.ppf(quantile_points, *distr['weibull']) erlang_quantiles = erlang.ppf(quantile_points, *distr['erlang']) # MSE return { 'lognorm': _qMSE(lognorm_quantiles), 'gamma': _qMSE(gamma_quantiles), 'weibull': _qMSE(weibull_quantiles), 'erlang': _qMSE(erlang_quantiles) }
def main(): parser = argparse.ArgumentParser() parser.add_argument('-s', '--stages', type=int, required=False, help='Etapas de la distribución') parser.add_argument('-l', '--lambdap', type=float, required=True, nargs='+', help='Parámetro lambda de cada distribución') parser.add_argument('-r', '--runs', type=int, required=True, help='Ejecuciones a realizar por cada simulación') parser.add_argument('-o', '--output', type=str, required=False, help='Archivo de salida para la grafica') parser.add_argument('-d', '--dist', type=str, required=True, choices=['erlang', 'expon', 'hyperexp'], help='Distribución a emplear para la simulación') parser.add_argument('--no-graph', required=False, help='Suprime la salida como gráfica', dest='graph', action='store_false') parser.add_argument('--graph', required=False, help='Habilita la salida como gráfica (usar con [-o])', dest='graph', action='store_true') parser.add_argument('-p', '--probability', required=False, type=float, help='Probabilidad para la distribución Hiperexp.') parser.set_defaults(graph=True) args = parser.parse_args() # msg = 'Distribución {3} con {0} etapas (lambda={1}) en {2} ejecuciones' # print msg.format(args.stages, args.lambdap, args.runs, args.dist) fig, ax = plt.subplots(1, 1) if args.dist in 'erlang': if args.stages <= 0: print 'Error: se necesita un número válido de etapas' sys.exit(1) lambdap = args.lambdap[0] mean, var, skew, kurt = erlang.stats(args.stages, scale=lambdap, moments='mvsk') x = np.linspace(erlang.ppf(0.00001, args.stages, scale=lambdap), erlang.ppf(0.99999, args.stages, scale=lambdap), num=1000) rv = erlang(args.stages, scale=lambdap) ax.plot(x, rv.pdf(x), 'r-', lw=5, alpha=0.6, label='Erlang PDF') # Generate random numbers with this distribution r = erlang.rvs(args.stages, scale=lambdap, size=args.runs) ax.hist(r, bins=20, normed=True, histtype='stepfilled', alpha=0.4, label='Experimental values') meanexp = np.mean(r) varexp = np.var(r) print 'Mediaexperimental: {0} MediaAnalitica: {1}'.format(meanexp, mean) print 'Sigma2_exp: {0} Sigma2_a: {1}'.format(varexp, var) print 'CoV_exp: {0} CoV_a: {1}'.format(np.sqrt(varexp)/meanexp, np.sqrt(var)/mean) elif args.dist in 'expon': lambdap = args.lambdap[0] mean, var, skew, kurt = expon.stats(scale=lambdap, moments='mvsk') x = np.linspace(expon.ppf(0.00001, scale=lambdap), expon.ppf(0.99999, scale=lambdap), num=1000) rv = expon(scale=lambdap) ax.plot(x, rv.pdf(x), 'r-', lw=5, alpha=0.6, label='Exponential PDF') # Generate random numbers with this distribution r = expon.rvs(scale=lambdap, size=args.runs) ax.hist(r, bins=20, normed=True, histtype='stepfilled', alpha=0.4, label='Experimental values') meanexp = np.mean(r) varexp = np.var(r) print 'Mediaexperimental: {0} MediaAnalitica: {1}'.format(meanexp, mean) print 'Sigma2_exp: {0} Sigma2_a: {1}'.format(varexp, var) print 'CoV_exp: {0} CoV_a: {1}'.format(np.sqrt(varexp)/meanexp, np.sqrt(var)/mean) elif args.dist in 'hyperexp': rv = hyperexp(args.probability, args.lambdap[0], args.lambdap[1]) x = np.linspace(0.00000001, 10.99999, num=1000) ax.plot(x, rv.pdf(x), 'r-', lw=5, alpha=0.6, label='HyperExp PDF') # ax.plot(x, rv.cdf(x), 'b-', lw=2, alpha=0.6, label='HyperExp CDF') r = rv.rvs(size=args.runs) ax.hist(r, normed=True, bins=100, range=(0, 11), histtype='stepfilled', alpha=0.4, label='Experimental values') meanexp = np.mean(r) varexp = np.var(r) mean = rv.mean() var = rv.standard_dev()**2 print 'Mediaexperimental: {0} MediaAnalitica: {1}'.format(meanexp, mean) print 'Sigma2_exp: {0} Sigma2_a: {1}'.format(varexp, var) print 'CoV_exp: {0} CoV_a: {1}'.format(np.sqrt(varexp)/meanexp, rv.CoV()) if args.graph: ax.legend(loc='best', frameon=False) plt.show()
def main(): parser = argparse.ArgumentParser() parser.add_argument("-s", "--stages", type=int, required=False, help="Etapas de la distribución") parser.add_argument( "-l", "--lambdap", type=float, required=True, nargs="+", help="Parámetro lambda de cada distribución" ) parser.add_argument("-r", "--runs", type=int, required=True, help="Ejecuciones a realizar por cada simulación") parser.add_argument("-o", "--output", type=str, required=False, help="Archivo de salida para la grafica") parser.add_argument( "-d", "--dist", type=str, required=True, choices=["erlang", "expon", "hyperexp"], help="Distribución a emplear para la simulación", ) parser.add_argument( "--no-graph", required=False, help="Suprime la salida como gráfica", dest="graph", action="store_false" ) parser.add_argument( "--graph", required=False, help="Habilita la salida como gráfica (usar con [-o])", dest="graph", action="store_true", ) parser.set_defaults(graph=True) args = parser.parse_args() msg = "Distribución {3} con {0} etapas (lambda={1}) en {2} ejecuciones" print msg.format(args.stages, args.lambdap, args.runs, args.dist) fig, ax = plt.subplots(1, 1) if args.dist in "erlang": if args.stages <= 0: print "Error: se necesita un número válido de etapas" sys.exit(1) lambdap = args.lambdap[0] mean, var, skew, kurt = erlang.stats(args.stages, scale=lambdap, moments="mvsk") print "E[X]={0}, var(X)={1}".format(mean, var) x = np.linspace( erlang.ppf(0.00001, args.stages, scale=lambdap), erlang.ppf(0.99999, args.stages, scale=lambdap), num=1000 ) rv = erlang(args.stages, scale=lambdap) ax.plot(x, rv.pdf(x), "r-", lw=5, alpha=0.6, label="Erlang PDF") # Generate random numbers with this distribution r = erlang.rvs(args.stages, scale=lambdap, size=args.runs) ax.hist(r, bins=20, normed=True, histtype="stepfilled", alpha=0.2) meanexp = np.mean(r) varexp = np.var(r) print "Mediaexperimental: {0} MediaAnalitica: {1}".format(meanexp, mean) print "Sigma2_exp: {0} Sigma2_a: {1}".format(varexp, var) print "CoV_exp: {0} CoV_a: {1}".format(np.sqrt(varexp) / meanexp, np.sqrt(var) / mean) elif args.dist in "expon": lambdap = args.lambdap[0] mean, var, skew, kurt = expon.stats(scale=lambdap, moments="mvsk") print "E[X]={0}, var(X)={1}".format(mean, var) x = np.linspace(expon.ppf(0.00001, scale=lambdap), expon.ppf(0.99999, scale=lambdap), num=1000) rv = expon(scale=lambdap) ax.plot(x, rv.pdf(x), "r-", lw=5, alpha=0.6, label="Exponential PDF") # Generate random numbers with this distribution r = expon.rvs(scale=lambdap, size=args.runs) ax.hist(r, bins=20, normed=True, histtype="stepfilled", alpha=0.2) meanexp = np.mean(r) varexp = np.var(r) print "Mediaexperimental: {0} MediaAnalitica: {1}".format(meanexp, mean) print "Sigma2_exp: {0} Sigma2_a: {1}".format(varexp, var) print "CoV_exp: {0} CoV_a: {1}".format(np.sqrt(varexp) / meanexp, np.sqrt(var) / mean) elif args.dist in "hyperexp": print "HyperExponential RV" rv = hyperexp(0.1, args.lambdap[0], args.lambdap[1]) x = np.linspace(0.00000001, 10.99999, num=1000) ax.plot(x, rv.pdf(x), "r-", lw=5, alpha=0.6, label="HyperExp PDF") # ax.plot(x, rv.cdf(x), 'b-', lw=2, alpha=0.6, label='HyperExp CDF') r = rv.rvs(size=args.runs) ax.hist(r, normed=True, bins=100, range=(0, 11), histtype="stepfilled", alpha=0.2) meanexp = np.mean(r) varexp = np.var(r) print "Mediaexperimental: {0} MediaAnalitica: {1}".format(meanexp, mean) print "Sigma2_exp: {0} Sigma2_a: {1}".format(varexp, var) print "CoV_exp: {0} CoV_a: {1}".format(np.sqrt(varexp) / meanexp, np.sqrt(var) / mean) if args.graph: plt.show()