Skip to content
Extraits de code Groupes Projets
Valider 4adafc75 rédigé par Anzo's avatar Anzo
Parcourir les fichiers

algorithm shit

parent 11d8d322
Branches
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Aucun aperçu pour ce type de fichier
Fichier ajouté
## Various Random Generators ## ## Various Random Generators ##
import random import random
import numpy as np
class RandomNumberGenerator: class RandomNumberGenerator:
def __init__(self): def __init__(self):
...@@ -29,7 +29,7 @@ class RandomNumberGenerator: ...@@ -29,7 +29,7 @@ class RandomNumberGenerator:
""" """
return n normalized values return n normalized values
""" """
return [self.random() for i in range(n)] / self.max return np.divide(np.array([self.random() for i in range(n)]),self.max)
class LCG(RandomNumberGenerator): class LCG(RandomNumberGenerator):
...@@ -62,7 +62,7 @@ class ParkMiller(LCG): ...@@ -62,7 +62,7 @@ class ParkMiller(LCG):
""" """
def __init__(self): def __init__(self):
super().__init__(16807, 0, 2147483647) super().__init__(16807, 0, (2**31) - 1)
class KnuthLewis(LCG): class KnuthLewis(LCG):
...@@ -71,7 +71,7 @@ class KnuthLewis(LCG): ...@@ -71,7 +71,7 @@ class KnuthLewis(LCG):
""" """
def __init__(self): def __init__(self):
super().__init__(1664525, 1013904223, 4294967296) super().__init__(1664525, 1013904223, 2**32)
class Marsaglia(LCG): class Marsaglia(LCG):
...@@ -80,7 +80,7 @@ class Marsaglia(LCG): ...@@ -80,7 +80,7 @@ class Marsaglia(LCG):
""" """
def __init__(self): def __init__(self):
super().__init__(69069, 0, 4294967296) super().__init__(69069, 0, 2**32)
class LavauxJenssens(LCG): class LavauxJenssens(LCG):
...@@ -89,7 +89,7 @@ class LavauxJenssens(LCG): ...@@ -89,7 +89,7 @@ class LavauxJenssens(LCG):
""" """
def __init__(self): def __init__(self):
super().__init__(31167285, 1, 281474976710656) super().__init__(31167285, 1, 2**48)
class Haynes(LCG): class Haynes(LCG):
...@@ -98,7 +98,7 @@ class Haynes(LCG): ...@@ -98,7 +98,7 @@ class Haynes(LCG):
""" """
def __init__(self): def __init__(self):
super().__init__(6364136223846793005, 1, 18446744073709552000) super().__init__(6364136223846793005, 1, 2**64)
class LaggedFibonnaci(RandomNumberGenerator): class LaggedFibonnaci(RandomNumberGenerator):
...@@ -157,6 +157,9 @@ class MersenneTwister(RandomNumberGenerator): ...@@ -157,6 +157,9 @@ class MersenneTwister(RandomNumberGenerator):
def random(self): def random(self):
return self.randomNorm() return self.randomNorm()
def batchRandomNormalized(self,n):
return np.array([self.random() for i in range(n)])
class CNS(RandomNumberGenerator): class CNS(RandomNumberGenerator):
""" """
......
"""
Module for graphing
"""
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
def hist_distributivity_graph(N,RESOLUTION,seed,data):
"""
graphs histograms
see values function in main module
"""
for name in data:
print("building "+str(name)+" histogram...")
xlabel= "Value"
ylabel="Count"
title_name= name +"\n N = "+str(N)+"\n seed = "+str(seed)
graph=sns.displot(data[name], kde=True)
graph.set(title=title_name)
graph.set_axis_labels(xlabel,ylabel)
graph.savefig(name+'_hist.png', bbox_inches='tight')
return
def ecdf_graph(N,RESOLUTION,seed,data):
"""
graphs histograms
see values function in main module
"""
plt.clf()
for name in data:
print("building "+str(name)+" ecdf...")
xlabel= "Value"
ylabel="Cumulative Probability"
title_name= name +"\n N = "+str(N)+"\n seed = "+str(seed)
graph=sns.displot(data[name], kind="ecdf")
graph.set(title=title_name)
graph.set_axis_labels(xlabel,ylabel)
graph.savefig(name+'_ecdf.png', bbox_inches='tight')
return
def compare(N, RESOLUTION, seed, data):
"""
Create graphs superposing two, already generated,
distributivity
"""
plt.clf()
BW = 0.337
name = "compare_"
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.kdeplot(data,legend=True,bw_adjust=BW,common_norm=False)
graph.set(title=title_name)
plt.xlabel(xlabel)
plt.ylabel(ylabel)
plt.savefig(name+'.png', bbox_inches='tight')
return
from generators import * from generators import *
import graph
from datetime import datetime from datetime import datetime
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
import numpy as np import numpy as np
import seaborn as sns import seaborn as sns
if __name__=="__main__": #shut up stupid warnings from not "the-most-up-to-date" libraries
import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)
##INIT PARAMS## def subdict(keys,dictio):
N = 1000000 return {k : dictio[k] for k in keys}
RESOLUTION = 100
#set seaborn params def values(N, seed, generators):
sns.set_theme(style="darkgrid") """
random values N elements and given seed.
Returns a dictionnary with values
"""
results = {}
#generate each diagrams for each random func
for e in generators:
name = type(e).__name__
#bandwidth for smooth density print("processing "+name+"...")
#https://en.wikipedia.org/wiki/Kernel_density_estimation#Bandwidth_selection e.seed(seed)
BW = 0.337 res = e.batchRandomNormalized(N)
results[name] = res
return results
def iteratives(N, seed, generator):
"""
Random values iteratively with same seed and list N
"""
results = {}
#generate each diagrams for each random func
for n in N:
name = type(generator).__name__+"_"+str(n)
print("processing "+name+"...")
generator.seed(seed)
res = generator.batchRandomNormalized(n)
results[name] = res
return results
if __name__=="__main__":
##INIT PARAMS##
N = 100
RESOLUTION = 1000
#init generators #init generators
generators = [ParkMiller(), KnuthLewis(), Marsaglia() generators = [ParkMiller(), KnuthLewis(), Marsaglia()
...@@ -22,23 +54,19 @@ if __name__=="__main__": ...@@ -22,23 +54,19 @@ if __name__=="__main__":
, MersenneTwister(), BlumBlumShub()] , MersenneTwister(), BlumBlumShub()]
#init seed on timesystem #init seed on timesystem
seed = datetime.now().timestamp() seed = int(datetime.now().timestamp())
#generate each diagrams for each random func #set seaborn params
for e in generators: sns.set_theme(style="darkgrid")
name = type(e).__name__
print("processing "+name+"...") #generate all diagrams
e.seed(seed) data = values(N,seed,generators)
res = e.batchRandomNormalized(N)
results.append(results) #graph.hist_distributivity_graph(N,RESOLUTION,seed,data)
#graph.compare(N, RESOLUTION, seed
# , subdict(["ParkMiller","KnuthLewis","Haynes"], data))
print("building histograms..") #graph.ecdf_graph(N,RESOLUTION,seed,data)
fig, ax = plt.subplots()
sns.displot(res, kde=True)
ax.set_xlabel('Value')
ax.set_ylabel('Probability density')
ax.set_title(type(e).__name__)
plt.savefig(type(e).__name__+'.png')
#generate diagrams with all randoms graph.compare(0, RESOLUTION, seed
, iteratives([1000, 100000, 100000000], seed, ParkMiller()))
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter