mosis24DEVS/models/dist_memo/model.py
Yentl Van Tendeloo 66a6860316 Initial commit
2016-08-04 17:38:43 +02:00

76 lines
2 KiB
Python

import random
import sys
sys.path.append("../../../src/")
sys.path.append("../../src/")
from DEVS import AtomicDEVS, CoupledDEVS
class Node(AtomicDEVS):
def __init__(self, nr, load):
AtomicDEVS.__init__(self, "Node" + str(nr))
self.state = None
self.load = load
def intTransition(self):
for _ in xrange(self.load):
pass
return self.state
def extTransition(self, inputs):
return self.state
def timeAdvance(self):
return 1.0
def outputFnc(self):
return {}
class ExchangeModel(AtomicDEVS):
def __init__(self):
AtomicDEVS.__init__(self, "Exchange")
self.state = None
self.inport = self.addInPort("in")
self.outport = self.addOutPort("out")
def intTransition(self):
return self.state
def extTransition(self, inputs):
return self.state
def timeAdvance(self):
return 1.0
def outputFnc(self):
return {self.outport: [None]}
class NodeGrid(CoupledDEVS):
def __init__(self, load):
CoupledDEVS.__init__(self, "Grid")
for i in range(800):
self.addSubModel(Node(i, load))
class DualGrid(CoupledDEVS):
def __init__(self, load):
CoupledDEVS.__init__(self, "Root")
grid1 = self.addSubModel(NodeGrid(load), 0)
grid2 = self.addSubModel(NodeGrid(load), 1)
grid1_node = self.addSubModel(ExchangeModel(), 0)
grid2_node = self.addSubModel(ExchangeModel(), 1)
self.connectPorts(grid1_node.outport, grid2_node.inport)
self.connectPorts(grid2_node.outport, grid1_node.inport)
if __name__ == "__main__":
random.seed(1)
from simulator import Simulator
model = DualGrid(int(sys.argv[1]))
sim = Simulator(model)
sim.setTerminationTime(100)
#sim.setVerbose(True)
sim.setMessageCopy('none')
sim.setStateSaving('assign')
sim.setGVTInterval(5)
memo = True if sys.argv[2] == "True" else False
sim.setMemoization(memo)
sim.setSchedulerSortedList()
sim.simulate()