From e479b6ae1db323fee59fea8ff9ddee3e6e0173f6 Mon Sep 17 00:00:00 2001 From: Paul ALNET Date: Mon, 13 Mar 2023 10:25:04 +0100 Subject: [PATCH] feat: add NFBP iterative algo --- Probas.py | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/Probas.py b/Probas.py index 2b58e1c..240a19e 100644 --- a/Probas.py +++ b/Probas.py @@ -1,5 +1,5 @@ from random import random -from math import floor +from math import floor, sqrt from statistics import mean, variance # from matplotlib import pyplot @@ -56,6 +56,33 @@ def stats_NFBP(R, N): for n in range(N): print("Mean H_{} : {} (variance {})".format(n, mean(H[n]), variance(H[n]))) +def stats_NFBP_iter(R, N): + """ + Runs R runs of NFBP (for N packages) and studies distribution, variance, mean... + Calculates stats during runtime instead of after to avoid excessive memory usage. + """ + print("Running {} NFBP simulations with {} packages".format(R, N)) + ISum = 0 + IVarianceSum = 0 + HSum = [0 for _ in range(N)] + HSumVariance = [0 for _ in range(N)] + + for i in range(R): + sim = simulate_NFBP(N) + ISum += sim["i"] + IVarianceSum += sim["i"]**2 + for n in range(N): + HSum[n] += sim["H"][n] + HSumVariance[n] += sim["H"][n]**2 + + I = ISum/R + IVariance = sqrt(IVarianceSum/(R-1) - I**2) + + print("Mean number of boxes : {} (variance {})".format(I, IVariance)) + 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): """ @@ -140,6 +167,7 @@ for j in range(sim["i"] + 1): print() stats_NFDBP(10 ** 4, 10) +stats_NFBP_iter(10**6, 10) # # pyplot.plot([1, 2, 4, 4, 2, 1], color = 'red', linestyle = 'dashed', linewidth = 2,