chore: clean up outputs + add comments

This commit is contained in:
Paul ALNET 2023-06-04 08:10:42 +02:00
parent 5f56b578d2
commit 7bee845a97

View file

@ -11,11 +11,11 @@ def simulate_NFBP(N):
""" """
Tries to simulate T_i, V_i and H_n for N items of random size. Tries to simulate T_i, V_i and H_n for N items of random size.
""" """
i = 0 # Nombre de boites i = 0 # Nombre de boites
R = [0] # Remplissage de la i-eme boite R = [0] # Remplissage de la i-eme boite
T = [0] # Nombre de paquets de la i-eme boite T = [0] # Nombre de paquets de la i-eme boite
V = [0] # Taille du premier paquet de la i-eme boite V = [0] # Taille du premier paquet de la i-eme boite
H = [] # Rang de la boite contenant le n-ieme paquet H = [] # Rang de la boite contenant le n-ieme paquet
for n in range(N): for n in range(N):
size = random() size = random()
if R[i] + size >= 1: if R[i] + size >= 1:
@ -41,6 +41,7 @@ def simulate_NFBP(N):
} }
# unused
def stats_NFBP(R, N): def stats_NFBP(R, N):
""" """
Runs R runs of NFBP (for N items) and studies distribution, variance, mean... Runs R runs of NFBP (for N items) and studies distribution, variance, mean...
@ -65,14 +66,19 @@ def stats_NFBP_iter(R, N):
Runs R runs of NFBP (for N items) and studies distribution, variance, mean... Runs R runs of NFBP (for N items) and studies distribution, variance, mean...
Calculates stats during runtime instead of after to avoid excessive memory usage. Calculates stats during runtime instead of after to avoid excessive memory usage.
""" """
P=R*N P=R*N # Total number of items
print("Running {} NFBP simulations with {} items".format(R, N)) print("## Running {} NFBP simulations with {} items".format(R, N))
ISum = 0 # number of bins
ISum = 0
IVarianceSum = 0 IVarianceSum = 0
HSum = [0 for _ in range(N)] # index of the bin containing the n-th item
HSum = [0 for _ in range(N)]
HSumVariance = [0 for _ in range(N)] HSumVariance = [0 for _ in range(N)]
# number of items in the i-th bin
Sum_T=[0 for _ in range(N)] Sum_T=[0 for _ in range(N)]
# size of the first item in the i-th bin
Sum_V=[0 for _ in range(N)] Sum_V=[0 for _ in range(N)]
for i in range(R): for i in range(R):
sim = simulate_NFBP(N) sim = simulate_NFBP(N)
ISum += sim["i"] ISum += sim["i"]
@ -87,14 +93,13 @@ def stats_NFBP_iter(R, N):
V.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_V=[x+y for x,y in zip(Sum_V,V)] Sum_V=[x+y for x,y in zip(Sum_V,V)]
#we use round to approximate variations of continuous variable V
# Sum_V= round(sim['V'],2))
Sum_T=[x/R for x in Sum_T] Sum_T=[x/R for x in Sum_T]
Sum_V=[round(x/R,2) for x in Sum_V] Sum_V=[round(x/R,2) for x in Sum_V]
print(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 bins : {} (variance {})".format(I, IVariance),'\n') print("Mean number of bins : {} (variance {})".format(I, IVariance),'\n')
# TODO clarify line below
print(" {} * {} iterations of T".format(R,N),'\n') print(" {} * {} iterations of T".format(R,N),'\n')
for n in range(N): for n in range(N):
@ -102,12 +107,12 @@ def stats_NFBP_iter(R, N):
HVariance = sqrt(HSumVariance[n]/(R-1) - Hn**2) # Variance HVariance = sqrt(HSumVariance[n]/(R-1) - Hn**2) # Variance
print("Index of bin containing the {}th item (H_{}) : {} (variance {})".format(n, n, Hn, HVariance)) print("Index of bin containing the {}th item (H_{}) : {} (variance {})".format(n, n, Hn, HVariance))
HSum=[x/R for x in HSum] HSum=[x/R for x in HSum]
print(HSum) # print(HSum)
#Plotting #Plotting
fig = plt.figure() fig = plt.figure()
#T plot #T plot
x = np.arange(N) 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,label='Empirical values', edgecolor="blue", linewidth=0.7,color='red') 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(xlim=(0, N), xticks=np.arange(0, N),ylim=(0,3), yticks=np.linspace(0, 3, 5))
@ -142,12 +147,13 @@ def stats_NFBP_iter(R, N):
def simulate_NFDBP(N): def simulate_NFDBP(N):
""" """
Tries to simulate T_i, V_i and H_n for N items of random size. Tries to simulate T_i, V_i and H_n for N items of random size.
Next Fit Dual Bin Packing : bins should overflow
""" """
i = 0 # Nombre de boites i = 0 # Nombre de boites
R = [0] # Remplissage de la i-eme boite R = [0] # Remplissage de la i-eme boite
T = [0] # Nombre de paquets de la i-eme boite T = [0] # Nombre de paquets de la i-eme boite
V = [0] # Taille du premier paquet de la i-eme boite V = [0] # Taille du premier paquet de la i-eme boite
H = [] # Rang de la boite contenant le n-ieme paquet H = [] # Rang de la boite contenant le n-ieme paquet
for n in range(N): for n in range(N):
size = random() size = random()
R[i] += size R[i] += size
@ -178,9 +184,9 @@ def stats_NFDBP(R, N,t_i):
""" """
Runs R runs of NFDBP (for N items) and studies distribution, variance, mean... Runs R runs of NFDBP (for N items) and studies distribution, variance, mean...
""" """
print("Running {} NFDBP simulations with {} items".format(R, N)) print("## Running {} NFDBP simulations with {} items".format(R, N))
P=N*R P=N*R # Total number of items
I = [] I = []
H = [[] for _ in range(N)] # List of empty lists H = [[] for _ in range(N)] # List of empty lists
T=[] T=[]
Tk=[[] for _ in range(N)] Tk=[[] for _ in range(N)]
@ -214,14 +220,13 @@ def stats_NFDBP(R, N,t_i):
T_maths.append(1/(factorial(u-1))-1/factorial(u)) T_maths.append(1/(factorial(u-1))-1/factorial(u))
E=0 E=0
sigma2=0 sigma2=0
print("hep") # print(T_maths)
print(T_maths)
for p in range(len(T_maths)): for p in range(len(T_maths)):
E=E+(p+1)*T_maths[p] E=E+(p+1)*T_maths[p]
sigma2=((T_maths[p]-E)**2)/(len(T_maths)-1) sigma2=((T_maths[p]-E)**2)/(len(T_maths)-1)
print("Mathematical values : Empiric mean T_{} : {} Variance {})".format(t_i, E, sqrt(sigma2))) print("Mathematical values : Empiric mean T_{} : {} Variance {})".format(t_i, E, sqrt(sigma2)))
T_maths=[x*100 for x in T_maths] T_maths=[x*100 for x in T_maths]
#Plotting #Plotting
fig = plt.figure() fig = plt.figure()
#T plot #T plot
x = np.arange(N) x = np.arange(N)
@ -277,6 +282,6 @@ for j in range(sim["i"] + 1):
sim["T"][j], sim["T"][j],
sim["V"][j])) sim["V"][j]))
print()
stats_NFBP_iter(10**3, 10) stats_NFBP_iter(10**3, 10)
print('\n\n')
stats_NFDBP(10 ** 3, 10,1) stats_NFDBP(10 ** 3, 10,1)