|
@@ -143,7 +143,7 @@ class MvKState(object):
|
|
|
self.loaded_primitives = False
|
|
|
self.execution_counter = 0
|
|
|
self.all_failed = True
|
|
|
- self.rule_generation_time = 0.0
|
|
|
+ self.rule_generation_time = 0
|
|
|
|
|
|
def __str__(self):
|
|
|
return "\nMvK: %s\n" % self.mvk + \
|
|
@@ -321,13 +321,15 @@ class MvIState():
|
|
|
self.output = []
|
|
|
self.processing = []
|
|
|
self.init = True
|
|
|
+ self.finished = False
|
|
|
|
|
|
class ModelverseInterface(AtomicDEVS):
|
|
|
- def __init__(self, taskname, operations):
|
|
|
+ def __init__(self, taskname, operations, finish_on):
|
|
|
AtomicDEVS.__init__(self, "MvI_%s" % taskname)
|
|
|
self.state = MvIState()
|
|
|
self.state.operations = operations
|
|
|
self.taskname = taskname
|
|
|
+ self.finish_on = finish_on
|
|
|
|
|
|
self.to_mvk = self.addOutPort("to_MvK")
|
|
|
self.from_mvk = self.addInPort("from_MvK")
|
|
@@ -340,6 +342,8 @@ class ModelverseInterface(AtomicDEVS):
|
|
|
def extTransition(self, inputs):
|
|
|
for inp in inputs[self.from_mvk]:
|
|
|
self.state.output.append(inp)
|
|
|
+ if inp == self.finish_on:
|
|
|
+ self.state.finished = True
|
|
|
print("Event history: " + str(self.state.output))
|
|
|
return self.state
|
|
|
|
|
@@ -401,6 +405,7 @@ class System(CoupledDEVS):
|
|
|
def __init__(self,
|
|
|
taskname,
|
|
|
operations,
|
|
|
+ finish_on,
|
|
|
rules_per_phase,
|
|
|
mvi2mvk_latency,
|
|
|
mvi2mvk_bandwidth,
|
|
@@ -432,13 +437,15 @@ class System(CoupledDEVS):
|
|
|
self.mvi_manager = self.addSubModel(ModelverseInterface(\
|
|
|
taskname = "task_manager",
|
|
|
operations = [taskname],
|
|
|
+ finish_on = None,
|
|
|
))
|
|
|
self.mvi = self.addSubModel(ModelverseInterface(\
|
|
|
taskname = taskname,
|
|
|
- operations = operations
|
|
|
+ operations = operations,
|
|
|
+ finish_on = finish_on,
|
|
|
))
|
|
|
self.mvk = self.addSubModel(ModelverseKernel(\
|
|
|
- rules_per_phase = rules_per_phase
|
|
|
+ rules_per_phase = rules_per_phase,
|
|
|
))
|
|
|
self.mvs = self.addSubModel(ModelverseState(\
|
|
|
read_root = read_root,
|
|
@@ -457,7 +464,7 @@ class System(CoupledDEVS):
|
|
|
read_dict_node_edge = read_dict_node_edge,
|
|
|
read_reverse_dict = read_reverse_dict,
|
|
|
delete_node = delete_node,
|
|
|
- delete_edge = delete_edge
|
|
|
+ delete_edge = delete_edge,
|
|
|
))
|
|
|
self.mvi2mvk = self.addSubModel(Network(\
|
|
|
name = "mvi2mvk",
|
|
@@ -493,10 +500,12 @@ class System(CoupledDEVS):
|
|
|
taskname = "test_task"
|
|
|
|
|
|
operations = ["admin", "admin"]
|
|
|
+finish_on = "Use the 'help' command for a list of possible commands"
|
|
|
|
|
|
args = {
|
|
|
"taskname": taskname,
|
|
|
"operations": operations,
|
|
|
+ "finish_on": finish_on,
|
|
|
"mvi2mvk_latency": 1,
|
|
|
"mvi2mvk_bandwidth": 2000,
|
|
|
"mvk2mvs_latency": 1,
|
|
@@ -527,6 +536,6 @@ args = {
|
|
|
|
|
|
model = System(**args)
|
|
|
sim = Simulator(model)
|
|
|
-sim.setTerminationTime(10000000)
|
|
|
+sim.setTerminationCondition(lambda t, m: m.mvi.state.finished)
|
|
|
#sim.setVerbose()
|
|
|
sim.simulate()
|