diff --git a/Probas.py b/Probas.py index 318a39f..0668bbf 100755 --- a/Probas.py +++ b/Probas.py @@ -5,6 +5,7 @@ from statistics import mean, variance from matplotlib import pyplot as plt from pylab import * import numpy as np +import matplotlib.pyplot as pt def simulate_NFBP(N): """ @@ -70,9 +71,8 @@ def stats_NFBP_iter(R, N): IVarianceSum = 0 HSum = [0 for _ in range(N)] HSumVariance = [0 for _ in range(N)] - Sum_T=[0 for _ in range(10)] - Sum_V=[] - Sum_H=[] + Sum_T=[0 for _ in range(N)] + Sum_V=[0 for _ in range(N)] for i in range(R): sim = simulate_NFBP(N) ISum += sim["i"] @@ -81,54 +81,63 @@ def stats_NFBP_iter(R, N): HSum[n] += sim["H"][n] HSumVariance[n] += sim["H"][n]**2 T=sim['T'] - for i in range(5): + V=sim['V'] + for i in range(N): T.append(0) + V.append(0) Sum_T=[x+y for x,y in zip(Sum_T,T)] - Sum_H=Sum_H+sim['H'] - for k in range(sim['i']): + Sum_V=[x+y for x,y in zip(Sum_V,V)] #we use round to approximate variations of continuous variable V - Sum_V.append(round(sim['V'][k],2)) + # Sum_V= round(sim['V'],2)) Sum_T=[x/R for x in Sum_T] - print(Sum_T) + Sum_V=[round(x/R,2) for x in Sum_V] + print(Sum_V) I = ISum/R IVariance = sqrt(IVarianceSum/(R-1) - I**2) print("Mean number of boxes : {} (variance {})".format(I, IVariance),'\n') print(" {} * {} iterations of T".format(R,N),'\n') - + + for n in range(N): + Hn = HSum[n]/R # moyenne + HVariance = sqrt(HSumVariance[n]/(R-1) - Hn**2) # Variance + print("Index of box containing the {}th package (H_{}) : {} (variance {})".format(n, n, Hn, HVariance)) + HSum=[x/R for x in HSum] + print(HSum) #Plotting - #matplotlib.stairs(Sum_T,bins=[0,1,2,3,4]) - #ax.hist(Sum_T, bins=8, edgecolor='k', density=True, label='Valeurs empiriques') - #ax.set(xlim=(0, 8), xticks=np.arange(1, 8), - #ylim=(0, 500), yticks=np.linspace(0, 56, 9)) - #plot: - #fig = plt.subplots() fig = plt.figure() #T plot - x = np.arange(7) + x = np.arange(N) print(x) ax = fig.add_subplot(221) - ax.bar(x,Sum_T, width=1, edgecolor="white", linewidth=0.7) - # ax.hist(Sum_T, bins=6, linewidth=0.5, edgecolor="white", label='Empirical values') - ax.set(xlim=(0, 10), xticks=np.arange(0, 10),ylim=(0,10), yticks=np.linspace(0, 10, 1)) + ax.bar(x,Sum_T, width=1,label='Empirical values', edgecolor="blue", linewidth=0.7,color='red') + ax.set(xlim=(0, N), xticks=np.arange(0, N),ylim=(0,3), yticks=np.linspace(0, 3, 5)) + ax.set_ylabel('Items') + ax.set_xlabel('Boxes (1-{})'.format(N)) ax.set_title('T histogram for {} packages (Number of packages in each box)'.format(P)) - ax.legend() + ax.legend(loc='upper left',title='Legend') #V plot bx = fig.add_subplot(222) - bx.hist(Sum_V, bins=10, linewidth=0.5, edgecolor="white", label='Empirical values') - bx.set(xlim=(0, 1), xticks=np.arange(0, 1),ylim=(0, 1000), yticks=np.linspace(0, 1000, 9)) + bx.bar(x,Sum_V, width=1,label='Empirical values', edgecolor="blue", linewidth=0.7,color='orange') + bx.set(xlim=(0, N), xticks=np.arange(0, N),ylim=(0, 1), yticks=np.linspace(0, 1, 10)) + bx.set_ylabel('First item size') + bx.set_xlabel('Boxes (1-{})'.format(N)) bx.set_title('V histogram for {} packages (first package size of each box)'.format(P)) - bx.legend() + bx.legend(loc='upper left',title='Legend') #H plot - cx = fig.add_subplot(223) - cx.hist(Sum_H, bins=10, linewidth=0.5, edgecolor="white", label='Empirical values') - cx.set(xlim=(0, 10), xticks=np.arange(0, 10),ylim=(0, 2000), yticks=np.linspace(0, 2000, 9)) + #We will simulate this part for a asymptotic study + cx = fig.add_subplot(223) + cx.bar(x,HSum, width=1,label='Empirical values', edgecolor="blue", linewidth=0.7,color='green') + cx.set(xlim=(0, N), xticks=np.arange(0, N),ylim=(0, 10), yticks=np.linspace(0, N, 5)) + cx.set_ylabel('Box ranking of n-item') + cx.set_xlabel('n-item (1-{})'.format(N)) cx.set_title('H histogram for {} packages'.format(P)) - cx.legend() + xb=linspace(0,N,10) + yb=Hn*xb/10 + wb=HVariance*xb/10 + cx.plot(xb,yb,label='Theoretical E(Hn)',color='brown') + cx.plot(xb,wb,label='Theoretical V(Hn)',color='purple') + cx.legend(loc='upper left',title='Legend') plt.show() - for n in range(n): - Hn = HSum[n]/R - HVariance = sqrt(HSumVariance[n]/(R-1) - Hn**2) - print("Index of box containing the {}th package (H_{}) : {} (variance {})".format(n, n, Hn, HVariance)) def simulate_NFDBP(N): """ @@ -165,7 +174,7 @@ def simulate_NFDBP(N): } -def stats_NFDBP(R, N): +def stats_NFDBP(R, N,t_i): """ Runs R runs of NFDBP (for N packages) and studies distribution, variance, mean... """ @@ -173,9 +182,9 @@ def stats_NFDBP(R, N): P=N*R I = [] H = [[] for _ in range(N)] # List of empty lists - Tmean=[] T=[] - Sum_T=[] + Tk=[[] for _ in range(N)] + Ti=[] #First iteration to use zip after sim=simulate_NFDBP(N) Sum_T=sim["T"] @@ -184,37 +193,47 @@ def stats_NFDBP(R, N): I.append(sim["i"]) for n in range(N): H[n].append(sim["H"][n]) + Tk[n].append(sim["T"][n]) T=sim["T"] - for k in range(10): + Ti.append(sim["T"]) + for k in range(N): Sum_T.append(0) - for k in range(sim["i"]): - Tmean.append(T[k]) - Sum_T=[x+y for x,y in zip(Sum_T,sim["T"])] - print(Sum_T) - print(sum(Sum_T)) - print(P) - Sum_T=[x*100/(sum(Sum_T)) for x in Sum_T] - print(Sum_T) + T.append(0) + Sum_T=[x+y for x,y in zip(Sum_T,T)] + Sum_T=[x/R for x in Sum_T] #Experimental [Ti=k] + Sum_T=[x*100/(sum(Sum_T)) for x in Sum_T] #Pourcentage de la repartition des items + print(Tk) print("Mean number of boxes : {} (variance {})".format(mean(I), variance(I))) for n in range(N): print("Mean H_{} : {} (variance {})".format(n, mean(H[n]), variance(H[n]))) - print("Mean T_{} : {} (variance {})".format(k, mean(Tmean), variance(Tmean))) + print("Mean T_{} : {} (variance {})".format(k, mean(Sum_T), variance(Sum_T))) #Plotting - fig, ax = plt.subplots() + fig = plt.figure() #T plot - x = 0.5 + np.arange(8) - x=x.tolist() - print(type(x)) + x = np.arange(N) print(x) - ax.bar(x, Sum_T, width=1, edgecolor="white", linewidth=0.5) - ax.set(xlim=(0, 10), xticks=np.arange(0, 10),ylim=(0, 25), yticks=np.linspace(0, 25, 9)) - ax.set_title('Repartition of packets in each box percents for {} packages '.format(P)) - ax.legend() + ax = fig.add_subplot(121) + ax.bar(x,Sum_T, width=1,label='Empirical values', edgecolor="blue", linewidth=0.7,color='red') + ax.set(xlim=(0, N), xticks=np.arange(0, N),ylim=(0,3), yticks=np.linspace(0, 3, 5)) + ax.set_ylabel('Items') + ax.set_xlabel('Boxes (1-{})'.format(N)) + ax.set_title('T histogram for {} packages (Number of packages in each box)'.format(P)) + ax.legend(loc='upper left',title='Legend') plt.show() - + #Mathematical P(Ti=k) plot + x = np.arange(N) + print(x) + ax = fig.add_subplot(122) + ax.hist(x,Sum_T, width=1,label='Empirical values', edgecolor="blue", linewidth=0.7,color='red') + ax.set(xlim=(0, N), xticks=np.arange(0, N),ylim=(0,3), yticks=np.linspace(0, 3, 5)) + ax.set_ylabel('Items') + ax.set_xlabel('Boxes (1-{})'.format(N)) + ax.set_title('T histogram for {} packages (Number of packages in each box)'.format(P)) + ax.legend(loc='upper left',title='Legend') + plt.show() N = 10 ** 1 sim = simulate_NFBP(N)