From c0dff5ad9de38ac3250b4c732a8cef686fd75c6f Mon Sep 17 00:00:00 2001 From: Clement Lacau Date: Mon, 13 Mar 2023 10:05:27 +0100 Subject: [PATCH] =?UTF-8?q?Transf=C3=A9rer=20les=20fichiers=20vers=20''?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Probas.py | 149 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 Probas.py diff --git a/Probas.py b/Probas.py new file mode 100644 index 0000000..2b58e1c --- /dev/null +++ b/Probas.py @@ -0,0 +1,149 @@ +from random import random +from math import floor +from statistics import mean, variance +# from matplotlib import pyplot + +def simulate_NFBP(N): + """ + Tries to simulate T_i, V_i and H_n for N boxes of random size. + """ + i = 0 # Nombre de boites + R = [0] # Remplissage 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 + H = [] # Rang de la boite contenant le n-ieme paquet + for n in range(N): + size = random() + if R[i] + size >= 1: + # Il y n'y a plus de la place dans la boite pour le paquet. + # On passe à la boite suivante (qu'on initialise) + i += 1 + R.append(0) + T.append(0) + V.append(0) + R[i] += size + T[i] += 1 + if V[i] == 0: + # C'est le premier paquet de la boite + V[i] = size + H.append(i) + + return { + "i": i, + "R": R, + "T": T, + "V": V, + "H": H + } + + +def stats_NFBP(R, N): + """ + Runs R runs of NFBP (for N packages) and studies distribution, variance, mean... + """ + print("Running {} NFBP simulations with {} packages".format(R, N)) + I = [] + H = [[] for _ in range(N)] # List of empty lists + + for i in range(R): + sim = simulate_NFBP(N) + I.append(sim["i"]) + for n in range(N): + H[n].append(sim["H"][n]) + + 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]))) + + +def simulate_NFDBP(N): + """ + Tries to simulate T_i, V_i and H_n for N boxes of random size. + """ + i = 0 # Nombre de boites + R = [0] # Remplissage 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 + H = [] # Rang de la boite contenant le n-ieme paquet + for n in range(N): + size = random() + R[i] += size + T[i] += 1 + if R[i] + size >= 1: + # Il y n'y a plus de la place dans la boite pour le paquet. + # On passe à la boite suivante (qu'on initialise) + i += 1 + R.append(0) + T.append(0) + V.append(0) + + if V[i] == 0: + # C'est le premier paquet de la boite + V[i] = size + H.append(i) + + return { + "i": i, + "R": R, + "T": T, + "V": V, + "H": H + } + + +def stats_NFDBP(R, N): + """ + Runs R runs of NFDBP (for N packages) and studies distribution, variance, mean... + """ + print("Running {} NFDBP simulations with {} packages".format(R, N)) + I = [] + H = [[] for _ in range(N)] # List of empty lists + Tmean=[] + for i in range(R): + sim = simulate_NFDBP(N) + I.append(sim["i"]) + for n in range(N): + H[n].append(sim["H"][n]) + + for k in range(sim["i"]): + # for o in range(sim["i"]): + Tmean+=sim["T"] + 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]))) + for k in range(int(mean(I))+1): + print(Tmean[7]) + # print("Mean T_{} : {} (variance {})".format(k, mean(Tmean[k]), variance(Tmean[k]))) + +N = 10 ** 1 +sim = simulate_NFBP(N) + +print("Simulation NFBP pour {} packaets. Contenu des boites :".format(N)) +for j in range(sim["i"] + 1): + remplissage = floor(sim["R"][j] * 100) + print("Boite {} : Rempli à {} % avec {} paquets. Taille du premier paquet : {}".format(j, remplissage, sim["T"][j], + sim["V"][j])) + +print() +stats_NFBP(10 ** 4, 10) + +N = 10 ** 1 +sim = simulate_NFDBP(N) +print("Simulation NFDBP pour {} packaets. Contenu des boites :".format(N)) +for j in range(sim["i"] + 1): + remplissage = floor(sim["R"][j] * 100) + print("Boite {} : Rempli à {} % avec {} paquets. Taille du premier paquet : {}".format(j, remplissage, + sim["T"][j], + sim["V"][j])) + +print() +stats_NFDBP(10 ** 4, 10) + +# +# pyplot.plot([1, 2, 4, 4, 2, 1], color = 'red', linestyle = 'dashed', linewidth = 2, +# markerfacecolor = 'blue', markersize = 5) +# pyplot.ylim(0, 5) +# pyplot.title('Un exemple') +