Merge pull request #23 from status-im/fix-deterministic

Fix deterministic
This commit is contained in:
Leo 2023-03-15 23:15:24 +01:00 committed by GitHub
commit d9d79f9245
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 29 additions and 16 deletions

View File

@ -1,3 +1,7 @@
bitarray==2.6.0 bitarray==2.6.0
DAS==0.28.7 DAS==0.29.0
dicttoxml==1.7.16
matplotlib==3.6.2
networkx==3.0 networkx==3.0
numpy==1.23.5
seaborn==0.12.2

View File

@ -39,11 +39,6 @@ class Result:
resXml = dicttoxml(resd1) resXml = dicttoxml(resd1)
xmlstr = minidom.parseString(resXml) xmlstr = minidom.parseString(resXml)
xmlPretty = xmlstr.toprettyxml() xmlPretty = xmlstr.toprettyxml()
filePath = "results/"+execID+"/nbv-"+str(self.shape.numberValidators)+\ filePath = "results/"+execID+"/"+str(self.shape)+".xml"
"-bs-"+str(self.shape.blockSize)+\
"-nd-"+str(self.shape.netDegree)+\
"-fr-"+str(self.shape.failureRate)+\
"-chi-"+str(self.shape.chi)+\
"-r-"+str(self.shape.run)+".xml"
with open(filePath, "w") as f: with open(filePath, "w") as f:
f.write(xmlPretty) f.write(xmlPretty)

View File

@ -11,7 +11,20 @@ class Shape:
self.failureRate = failureRate self.failureRate = failureRate
self.netDegree = netDegree self.netDegree = netDegree
self.chi = chi self.chi = chi
self.randomSeed = ""
def __repr__(self):
"""Returns a printable representation of the shape"""
shastr = ""
shastr += "bs-"+str(self.blockSize)
shastr += "-nbv-"+str(self.numberValidators)
shastr += "-fr-"+str(self.failureRate)
shastr += "-chi-"+str(self.chi)
shastr += "-nd-"+str(self.netDegree)
shastr += "-r-"+str(self.run)
return shastr
def setSeed(self, seed):
"""Adds the random seed to the shape"""
self.randomSeed = seed

View File

@ -39,11 +39,15 @@ blockSizes = range(32,65,16)
# Per-topic mesh neighborhood size # Per-topic mesh neighborhood size
netDegrees = range(6, 9, 2) netDegrees = range(6, 9, 2)
# number of rows and columns a validator is interested in # Number of rows and columns a validator is interested in
chis = range(4, 9, 2) chis = range(4, 9, 2)
# Set to True if you want your run to be deterministic, False if not
deterministic = False deterministic = False
# If your run is deterministic you can decide the random seed. This is ignore otherwise.
randomSeed = "DAS"
def nextShape(): def nextShape():
for run in runs: for run in runs:
for fr in failureRates: for fr in failureRates:

View File

@ -13,8 +13,9 @@ from DAS import *
# and https://github.com/joblib/joblib/issues/1017 # and https://github.com/joblib/joblib/issues/1017
def runOnce(sim, config, shape): def runOnce(sim, config, shape):
if not config.deterministic: if config.deterministic:
random.seed(datetime.now()) shape.setSeed(config.randomSeed+"-"+str(shape))
random.seed(shape.randomSeed)
sim.initLogger() sim.initLogger()
sim.resetShape(shape) sim.resetShape(shape)
@ -49,10 +50,7 @@ def study():
sim.logger.info("Starting simulations:", extra=sim.format) sim.logger.info("Starting simulations:", extra=sim.format)
start = time.time() start = time.time()
results = Parallel(config.numJobs)(delayed(runOnce)(sim, config, shape) for shape in config.nextShape()) results = Parallel(config.numJobs)(delayed(runOnce)(sim, config, shape) for shape in config.nextShape())
end = time.time() end = time.time()
sim.logger.info("A total of %d simulations ran in %d seconds" % (len(results), end-start), extra=sim.format) sim.logger.info("A total of %d simulations ran in %d seconds" % (len(results), end-start), extra=sim.format)
@ -61,8 +59,7 @@ def study():
res.dump(execID) res.dump(execID)
sim.logger.info("Results dumped into results/%s/" % (execID), extra=sim.format) sim.logger.info("Results dumped into results/%s/" % (execID), extra=sim.format)
visualization = 1 if config.visualization:
if visualization:
vis = Visualizer(execID) vis = Visualizer(execID)
vis.plotHeatmaps() vis.plotHeatmaps()