Beautiful graphs
This commit is contained in:
parent
ce5b4e560c
commit
7804bbfc43
1 changed files with 72 additions and 53 deletions
125
Probas.py
125
Probas.py
|
@ -5,6 +5,7 @@ from statistics import mean, variance
|
||||||
from matplotlib import pyplot as plt
|
from matplotlib import pyplot as plt
|
||||||
from pylab import *
|
from pylab import *
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
import matplotlib.pyplot as pt
|
||||||
|
|
||||||
def simulate_NFBP(N):
|
def simulate_NFBP(N):
|
||||||
"""
|
"""
|
||||||
|
@ -70,9 +71,8 @@ def stats_NFBP_iter(R, N):
|
||||||
IVarianceSum = 0
|
IVarianceSum = 0
|
||||||
HSum = [0 for _ in range(N)]
|
HSum = [0 for _ in range(N)]
|
||||||
HSumVariance = [0 for _ in range(N)]
|
HSumVariance = [0 for _ in range(N)]
|
||||||
Sum_T=[0 for _ in range(10)]
|
Sum_T=[0 for _ in range(N)]
|
||||||
Sum_V=[]
|
Sum_V=[0 for _ in range(N)]
|
||||||
Sum_H=[]
|
|
||||||
for i in range(R):
|
for i in range(R):
|
||||||
sim = simulate_NFBP(N)
|
sim = simulate_NFBP(N)
|
||||||
ISum += sim["i"]
|
ISum += sim["i"]
|
||||||
|
@ -81,54 +81,63 @@ def stats_NFBP_iter(R, N):
|
||||||
HSum[n] += sim["H"][n]
|
HSum[n] += sim["H"][n]
|
||||||
HSumVariance[n] += sim["H"][n]**2
|
HSumVariance[n] += sim["H"][n]**2
|
||||||
T=sim['T']
|
T=sim['T']
|
||||||
for i in range(5):
|
V=sim['V']
|
||||||
|
for i in range(N):
|
||||||
T.append(0)
|
T.append(0)
|
||||||
|
V.append(0)
|
||||||
Sum_T=[x+y for x,y in zip(Sum_T,T)]
|
Sum_T=[x+y for x,y in zip(Sum_T,T)]
|
||||||
Sum_H=Sum_H+sim['H']
|
Sum_V=[x+y for x,y in zip(Sum_V,V)]
|
||||||
for k in range(sim['i']):
|
|
||||||
#we use round to approximate variations of continuous variable 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]
|
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
|
I = ISum/R
|
||||||
IVariance = sqrt(IVarianceSum/(R-1) - I**2)
|
IVariance = sqrt(IVarianceSum/(R-1) - I**2)
|
||||||
print("Mean number of boxes : {} (variance {})".format(I, IVariance),'\n')
|
print("Mean number of boxes : {} (variance {})".format(I, IVariance),'\n')
|
||||||
print(" {} * {} iterations of T".format(R,N),'\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
|
#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()
|
fig = plt.figure()
|
||||||
#T plot
|
#T plot
|
||||||
x = np.arange(7)
|
x = np.arange(N)
|
||||||
print(x)
|
print(x)
|
||||||
ax = fig.add_subplot(221)
|
ax = fig.add_subplot(221)
|
||||||
ax.bar(x,Sum_T, width=1, edgecolor="white", linewidth=0.7)
|
ax.bar(x,Sum_T, width=1,label='Empirical values', edgecolor="blue", linewidth=0.7,color='red')
|
||||||
# ax.hist(Sum_T, bins=6, linewidth=0.5, edgecolor="white", label='Empirical values')
|
ax.set(xlim=(0, N), xticks=np.arange(0, N),ylim=(0,3), yticks=np.linspace(0, 3, 5))
|
||||||
ax.set(xlim=(0, 10), xticks=np.arange(0, 10),ylim=(0,10), yticks=np.linspace(0, 10, 1))
|
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.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
|
#V plot
|
||||||
bx = fig.add_subplot(222)
|
bx = fig.add_subplot(222)
|
||||||
bx.hist(Sum_V, bins=10, linewidth=0.5, edgecolor="white", label='Empirical values')
|
bx.bar(x,Sum_V, width=1,label='Empirical values', edgecolor="blue", linewidth=0.7,color='orange')
|
||||||
bx.set(xlim=(0, 1), xticks=np.arange(0, 1),ylim=(0, 1000), yticks=np.linspace(0, 1000, 9))
|
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.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
|
#H plot
|
||||||
cx = fig.add_subplot(223)
|
#We will simulate this part for a asymptotic study
|
||||||
cx.hist(Sum_H, bins=10, linewidth=0.5, edgecolor="white", label='Empirical values')
|
cx = fig.add_subplot(223)
|
||||||
cx.set(xlim=(0, 10), xticks=np.arange(0, 10),ylim=(0, 2000), yticks=np.linspace(0, 2000, 9))
|
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.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()
|
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):
|
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...
|
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
|
P=N*R
|
||||||
I = []
|
I = []
|
||||||
H = [[] for _ in range(N)] # List of empty lists
|
H = [[] for _ in range(N)] # List of empty lists
|
||||||
Tmean=[]
|
|
||||||
T=[]
|
T=[]
|
||||||
Sum_T=[]
|
Tk=[[] for _ in range(N)]
|
||||||
|
Ti=[]
|
||||||
#First iteration to use zip after
|
#First iteration to use zip after
|
||||||
sim=simulate_NFDBP(N)
|
sim=simulate_NFDBP(N)
|
||||||
Sum_T=sim["T"]
|
Sum_T=sim["T"]
|
||||||
|
@ -184,37 +193,47 @@ def stats_NFDBP(R, N):
|
||||||
I.append(sim["i"])
|
I.append(sim["i"])
|
||||||
for n in range(N):
|
for n in range(N):
|
||||||
H[n].append(sim["H"][n])
|
H[n].append(sim["H"][n])
|
||||||
|
Tk[n].append(sim["T"][n])
|
||||||
T=sim["T"]
|
T=sim["T"]
|
||||||
for k in range(10):
|
Ti.append(sim["T"])
|
||||||
|
for k in range(N):
|
||||||
Sum_T.append(0)
|
Sum_T.append(0)
|
||||||
for k in range(sim["i"]):
|
T.append(0)
|
||||||
Tmean.append(T[k])
|
Sum_T=[x+y for x,y in zip(Sum_T,T)]
|
||||||
Sum_T=[x+y for x,y in zip(Sum_T,sim["T"])]
|
Sum_T=[x/R for x in Sum_T] #Experimental [Ti=k]
|
||||||
print(Sum_T)
|
Sum_T=[x*100/(sum(Sum_T)) for x in Sum_T] #Pourcentage de la repartition des items
|
||||||
print(sum(Sum_T))
|
print(Tk)
|
||||||
print(P)
|
|
||||||
Sum_T=[x*100/(sum(Sum_T)) for x in Sum_T]
|
|
||||||
print(Sum_T)
|
|
||||||
print("Mean number of boxes : {} (variance {})".format(mean(I), variance(I)))
|
print("Mean number of boxes : {} (variance {})".format(mean(I), variance(I)))
|
||||||
|
|
||||||
for n in range(N):
|
for n in range(N):
|
||||||
print("Mean H_{} : {} (variance {})".format(n, mean(H[n]), variance(H[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
|
#Plotting
|
||||||
fig, ax = plt.subplots()
|
fig = plt.figure()
|
||||||
#T plot
|
#T plot
|
||||||
x = 0.5 + np.arange(8)
|
x = np.arange(N)
|
||||||
x=x.tolist()
|
|
||||||
print(type(x))
|
|
||||||
print(x)
|
print(x)
|
||||||
ax.bar(x, Sum_T, width=1, edgecolor="white", linewidth=0.5)
|
ax = fig.add_subplot(121)
|
||||||
ax.set(xlim=(0, 10), xticks=np.arange(0, 10),ylim=(0, 25), yticks=np.linspace(0, 25, 9))
|
ax.bar(x,Sum_T, width=1,label='Empirical values', edgecolor="blue", linewidth=0.7,color='red')
|
||||||
ax.set_title('Repartition of packets in each box percents for {} packages '.format(P))
|
ax.set(xlim=(0, N), xticks=np.arange(0, N),ylim=(0,3), yticks=np.linspace(0, 3, 5))
|
||||||
ax.legend()
|
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()
|
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
|
N = 10 ** 1
|
||||||
sim = simulate_NFBP(N)
|
sim = simulate_NFBP(N)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue