From f3a01787fcc9e97e21b4bf4532138fe1cbcf90b5 Mon Sep 17 00:00:00 2001 From: Enzo De Carvalho Bittencourt <enzo.decarvalhobittencourt@ensiie.eu> Date: Fri, 29 Sep 2023 15:35:30 +0200 Subject: [PATCH] updated with multiprocessing --- Random/__pycache__/graph.cpython-311.pyc | Bin 3608 -> 6734 bytes Random/graph.py | 57 +++++++++++++++++++- Random/main.py | 66 ++++++++++++++++++++--- 3 files changed, 116 insertions(+), 7 deletions(-) diff --git a/Random/__pycache__/graph.cpython-311.pyc b/Random/__pycache__/graph.cpython-311.pyc index 2aa0b3cb28e4111dd0991d20891f1d59472dc43b..c7675dbef627265d7065aaa70c3b625f417f1540 100644 GIT binary patch delta 2512 zcmb7GO-vg{6yEX9+WX^mfIt!`1cyIkLP-LYrfPm#!cQOwwMx=fRU_nh7YAZ&cWl&z zI>L!KaL56&{UKEvp&lp{4r%EjmD)-<RBA6NRvihgf|^UzOVpD7<bZnUduwb=(n{&m z&gVBXZ}!d3``#N*mELZ4eX6Q52Xg6$ZTj!(q-zK1p7iYBZXe^`R5S;mQxgGI&32sg zN|RcX?E_-eigorl-^QK#!uXP2H^zl(qn~UuQqZnI`%P#w9+01$bCStNf-#f#2m6g% zwmaq3;7EcN{ShF+{UvjPIM#WwYpg5LwVYSD_!+;I-^21?l9iwt+PX8ss-S1ex?k(> z3ou{g46B2I5@Va=QE3fmehQEgJ19J~KUT?Ntyn-BWB9Ih85A;FoY$P1y5O1t+j+FN z<boWRr|rf=VXLtyy=$D1D@na^PA(sHqjT7gjC=a!JNFHCX7bKqQ}u_3B0i?~S$i`{ z-<o7?a3B<Lukj5H4GgzqI@<J5bRc$qjrO_^x*2YW*#OoYQC-(y=me{UuGePTgL*&@ zY0Qfz3YyS{NGPB(6$e}Zy<XY4ZLb_<ZXDT#Pz*4quxC&&MJPkq31He<UuWg05Itu> z1<qFjM9~F)(z>Ki+L`-R>;*7+7Hvghg-*0W=UR`Q<Vv(ID<y{Pyi~R#tCx3AXwy~8 z<<+Y^Q9KVhfIkru?Z)@cW^&&U)t#iqP{m?$deI|3B(AtTm<`aN-S}48ZXA;(qd_hs ziqRvFw6l6}Zi<;bu?Fa}JqUXd@POGqghqty*|H|+p6KvW)(nbKu2dDU=g=bOB%N@Q z#jlx;vzi_WhGT3y&btxtTutgbr$?>j))BK782tAWbFA-<y$mKt(d@;=RmDl9Wh#wz zkM$;cjlZ3BX|iT12xgdo7Fi!zsZ|=wnbb(k0n_Ue=O=H~?u~PhdV4PjF$hIQ2D9vs z(>NCwkPT_kcq1WJ)Gr7#U^1UIBi!YEn_iH08t09BQW>!uHFC9*b*|ZA)I*3hCm9dK z9mcQH7KoC}^V13@%P6NgG;szfJ&&}uM3Y9~SCbc%&EtgAI4CI2-i;WVBs?NuCLF{J z81k{RI%9`mwaEv=fi>bz$9!}2yiS%6CaeHplx;<|5SLIZl1}Vn;7$9vsNWaNWj`K} z>0l6YpI@J|TZys}b%sk#VIZcnUbY|fC^9UaAL;Z^g99OpFMaPoF=9R7pX*1%p8*ow z3Uy>E+X|J&cfaqSs-7HtZ!jslr;CzuO_F+2)U!lA%WD2AM}#9JjpJlRR4$7XMN@R@ z)oYGf{>Jm)G~ImrtCp`@K0mZ1wkE~al-LRiJomvz*SMafg(+INL`w_NY4^pRv7SVa zrH&6LX;F$6Ezu(5uCuE1*o5$*dPSY`Pd6p=JgGd-tUa06aI<rXwk2s>inf80epn5B zg+EIP=!noPlHPqPl8#y=-SzY&)u<*c*k{1yeAX>+v|<xSv+Rvi%@H6mEL`gnr!$Za z^O=;$=SJW)ny5(&a+>&9R1}P&C25l9&|CR0dXK^#VUZZ`iB05QC-IgX60;-l_P|G1 zQRWVtJkvEV&)Q(n6nw$R8J{Wm!@)2Mq<3-eut`q`hjr7gg<~<WwXs*wRzh+`W9Naf z?V~X8Sk3Y(8?4_TJ?q4!d{7Tr>}6Piau|(-XWal#P`MyW<ssb{>hoa{Jc)+b9-#mK z%V(S5UgZFuWOMU!@lLoEBsbg&k{fOX2`n>!gg!cca^m<z`^S}2`qjE?b;-hgRkIy8 z-&mp@N!pR39iSk$b9kSo{bO9O0IpB;PdaBI#~PEgF-03eNk103y)L6(t$quuhbe@H zha%@qTPR|}UF<s@W+7Gt6Ra8m|7KYCpH<f}(>d#S<~Zv`RykM`4-AF1;h=tqoq~B} wVe}K@y86=K7NV?jS*XazZWd~av73dKQtW2ofI`}#EaYH`LYi>kaj-V>57>M-MF0Q* delta 681 zcmZXSO=uHA6vt<FcC-21c5NCH`{CLc>-v#{A5g`rNcB*#APUlhgqYo?)nv2GZiFsM zy?K=Q4tnsYh&Qnw1uqI7MDdWz916X8QF2o7<h;cc!3XnW-v7;e``*lcKJjGIc#+Gc ziL~hHxcf!#8AUqRo1N2?tHe(9?i`=?DIt%^UA91OyuPP~(i@sXL)QC#kuq4;Dv}$T zWrW%=O2{n+59m><f|=M2pJ<+HuuTuc8(M%FrLWjJFxJn{$b^(!!F!4OWRNE2_~tJ* z#!NdUnBNKoYqVDQsEoq)SpHFFq!QqHYiN9*^hDZiI4iX#uluXqmO=?m=|5>19%f6* zq5@ylL(olrgSWXY7!(Td(U^jFMhboye7X6-dc{|J{c|GO=(PPhcWZ*yqEuXL&1+f_ zt5&N#fuGSATrXG)*CTbwnzuMM!WD@~4_w!g(zQ#rDiSTX>3R-4AKAYVsa4-=@*JKt zB$n(9pGD^&0>|PeVwZ%_Z#%Bv>V!Ox(iCDEQAHFaWO5PrCBz=YgoIEoT<4Rxq3%Cf zd!?dq3$A4H#rTr+zw_~vGIB(&;MnHkXqG}PtAS%y5@o5`87P-3m$65odEK_ZE)>rf za=`k{4)@|lIlfwa&vB`jgkxs>62FsY+8w9ca?kR4sp0<;aClZaf7+m#0oj3NqPv3w K6X^brxbPnbJf3I( diff --git a/Random/graph.py b/Random/graph.py index 38f1c6a..037ab66 100644 --- a/Random/graph.py +++ b/Random/graph.py @@ -11,6 +11,7 @@ def hist_distributivity_graph(N,RESOLUTION,seed,data): graphs histograms see values function in main module """ + plt.clf() for name in data: print("building "+str(name)+" histogram...") xlabel= "Value" @@ -41,6 +42,33 @@ def ecdf_graph(N,RESOLUTION,seed,data): graph.savefig(name+'_ecdf.png', bbox_inches='tight') return +def compare_ecdf(N, RESOLUTION, seed, data): + """ + Create graphs superposing ecdf + """ + plt.clf() + BW = 0.337 + name = "compare_ecdf_" + for e in data: + name += e+"_" + + #subdata = {k : data[k] for k in names} + print("graphing "+str(name)+"...") + + xlabel = "Value" + ylabel = "Density" + title_name="N = "+str(N)+"\n seed = "+str(seed) + if N == 0: + title_name = "seed = "+str(seed) + graph=sns.displot(data,legend=True + , kind="ecdf") + graph.set(title=title_name) + plt.xlabel(xlabel) + plt.ylabel(ylabel) + #plt.legend() + plt.savefig(name+'.png', bbox_inches='tight') + return + def compare(N, RESOLUTION, seed, data): """ Create graphs superposing two, already generated, @@ -66,6 +94,33 @@ def compare(N, RESOLUTION, seed, data): graph.set(title=title_name) plt.xlabel(xlabel) plt.ylabel(ylabel) + graph.axes.set plt.legend() - plt.savefig(name+'.png', bbox_inches='tight') + plt.savefig(name+'.png', bbox_inches='tight') return + +def lineplot_wrap(data, xlabel, ylabel, title, iterN): + plt.clf() + print("graphing "+str(title)+"...") + for e in data: + plt.plot(iterN, data[e], marker="o", label="seed="+str(e)) + #graph = sns.lineplot(data, legend=True, x=iterN) + plt.title(title) + plt.legend() + plt.xscale('log') + plt.xlabel(xlabel) + plt.ylabel(ylabel) + plt.savefig(title.replace(" ", "_")+".png", bbox_inches="tight") + +def lineplot_mean_alot(data, xlabel, ylabel, title, iterN): + plt.clf() + print("graphing "+str(title)+"...") + for e in data: + plt.plot(iterN, data[e], marker="o", alpha=0.05 + , color="red") + plt.plot(iterN, [0.5]*len(iterN), color="blue",linestyle='dotted') + plt.title(title) + plt.xscale('log') + plt.xlabel(xlabel) + plt.ylabel(ylabel) + plt.savefig(title+".png", bbox_inches="tight") diff --git a/Random/main.py b/Random/main.py index f10ead0..f6ba337 100755 --- a/Random/main.py +++ b/Random/main.py @@ -7,6 +7,7 @@ import stats import scipy import seaborn as sns import csv +import multiprocessing #shut up stupid warnings from not "the-most-up-to-date" libraries import warnings @@ -72,7 +73,7 @@ def write_stats(data, name): return def write_stats_chi(data, name, RES): - fields=["chi","p"] + fields=["name","chi","p"] val = stats.chisquared_uniform(data,RES) chi = val[0] p = val[1] @@ -86,16 +87,60 @@ def write_stats_chi(data, name, RES): "p" : str(p)}) return -if __name__=="__main__": - ##INIT PARAMS## +def mean_evolves(generator,number,iterN): + datas = {} + for i in range(number): + seed = int(datetime.now().timestamp()+i) + sub_data = iteratives(iterN, seed, generator) + res = [] + for a in sub_data: + res.append(np.mean(sub_data[a])) + datas[str(seed)] = res + return datas + + +def pipeline(generator): N = 1000000 RESOLUTION = 100 - iterN = [100, 1000000, 100000000] + iterN = [100,10000,1000000,100000000] + iterNmean = [100, 1000, 10000, 100000, 1000000] + seed = int(datetime.now().timestamp()) + name_ = type(generator).__name__ + + sns.set_theme(style="darkgrid") + data=values(N,seed,[generator]) + + #generate a lot of diagrams + graph.hist_distributivity_graph(N,RESOLUTION,seed,data) + for name in data: + write_stats(data[name],name) + write_stats_chi(data[name],name,RESOLUTION) + + data_iter = iteratives(iterN, seed, generator) + graph.compare(0, RESOLUTION, seed, data_iter) + graph.compare(0, RESOLUTION, seed, data_iter) + + data_alot = mean_evolves(generator, 500, iterNmean) + graph.lineplot_mean_alot(data_alot, "Size", "Mean" + , "Mean values evolution for "+name_, iterNmean) + + +if __name__=="__main__": #init generators generators = [ParkMiller(), KnuthLewis(), Marsaglia() , LavauxJenssens(), Haynes(), MitchelMoore() , MersenneTwister(), BlumBlumShub()] + for a in generators: + p = multiprocessing.Process(target=pipeline, args=[a]) + p.start() + + """ + ##INIT PARAMS## + N = 1000000 + RESOLUTION = 100 + iterN = [100, 10000, 1000000, 100000000] + #init seed on timesystem seed = int(datetime.now().timestamp()) @@ -104,8 +149,16 @@ if __name__=="__main__": sns.set_theme(style="darkgrid") #generate N random values for each RNG - data = values(N,seed,generators) - + #data = values(N,seed,generators) + + #graph.compare_ecdf(0, RESOLUTION, seed + # , iteratives([100,1000,1000000], seed, ParkMiller())) + + a = mean_evolves(ParkMiller(), 500, [100,1000]) + graph.lineplot_mean_alot(a, "Size", "Mean" + , "Mean Value evolution for ParkMiller" + ,[100,1000]) + #generate a lot of diagrams graph.hist_distributivity_graph(N,RESOLUTION,seed,data) for name in data: @@ -116,3 +169,4 @@ if __name__=="__main__": graph.ecdf_graph(0, RESOLUTION, seed, data_iter) graph.compare(0, RESOLUTION, seed, data_iter) + """ -- GitLab