plot progress per run

Signed-off-by: Csaba Kiraly <csaba.kiraly@gmail.com>
This commit is contained in:
Csaba Kiraly 2023-03-27 23:16:05 +02:00
parent eb4f451303
commit dc51727b32
No known key found for this signature in database
GPG Key ID: 0FE274EE8C95166E
3 changed files with 18 additions and 2 deletions

View File

@ -3,6 +3,7 @@
import networkx as nx import networkx as nx
import logging, random import logging, random
import pandas as pd import pandas as pd
import matplotlib
from functools import partial, partialmethod from functools import partial, partialmethod
from datetime import datetime from datetime import datetime
from DAS.tools import * from DAS.tools import *
@ -13,7 +14,7 @@ from DAS.validator import *
class Simulator: class Simulator:
"""This class implements the main DAS simulator.""" """This class implements the main DAS simulator."""
def __init__(self, shape, config): def __init__(self, shape, config, execID):
"""It initializes the simulation with a set of parameters (shape).""" """It initializes the simulation with a set of parameters (shape)."""
self.shape = shape self.shape = shape
self.config = config self.config = config
@ -24,6 +25,7 @@ class Simulator:
self.logLevel = config.logLevel self.logLevel = config.logLevel
self.proposerID = 0 self.proposerID = 0
self.glob = [] self.glob = []
self.execID = execID
# In GossipSub the initiator might push messages without participating in the mesh. # In GossipSub the initiator might push messages without participating in the mesh.
# proposerPublishOnly regulates this behavior. If set to true, the proposer is not # proposerPublishOnly regulates this behavior. If set to true, the proposer is not
@ -240,6 +242,16 @@ class Simulator:
progress = pd.DataFrame(progressVector) progress = pd.DataFrame(progressVector)
if self.config.saveProgress: if self.config.saveProgress:
self.result.addMetric("progress", progress.to_dict(orient='list')) self.result.addMetric("progress", progress.to_dict(orient='list'))
if self.config.plotProgress:
progress.plot.line(subplots = [[cnS, cnN, cnV], [cnT0], [cnT1, cnR1, cnD1], [cnT2, cnR2, cnD2]],
title = str(self.shape))
if not os.path.exists("results"):
os.makedirs("results")
if not os.path.exists("results/"+self.execID):
os.makedirs("results/"+self.execID)
filePath = "results/"+self.execID+"/"+str(self.shape)+".png"
matplotlib.pyplot.savefig(filePath)
self.result.populate(self.shape, missingVector) self.result.populate(self.shape, missingVector)
return self.result return self.result

View File

@ -22,6 +22,10 @@ dumpXML = 1
# save progress vectors to XML # save progress vectors to XML
saveProgress = 1 saveProgress = 1
# plot progress for each run to PNG
plotProgress = 1
visualization = 1 visualization = 1
logLevel = logging.INFO logLevel = logging.INFO

View File

@ -28,7 +28,7 @@ def runOnce(config, shape, execID):
shape.setSeed(config.randomSeed+"-"+str(shape)) shape.setSeed(config.randomSeed+"-"+str(shape))
random.seed(shape.randomSeed) random.seed(shape.randomSeed)
sim = Simulator(shape, config) sim = Simulator(shape, config, execID)
sim.initLogger() sim.initLogger()
sim.initValidators() sim.initValidators()
sim.initNetwork() sim.initNetwork()