Browse Source

Mostly working PM2DEVS mapping, which prints results

Yentl Van Tendeloo 7 years ago
parent
commit
b94a9783fd

+ 2 - 27
models/WSC/DEVS_simulate.alc

@@ -126,35 +126,10 @@ Boolean function main(model : Element):
     comm_set(port, model_rep)
 
 	String experiment
-	//experiment = ""
-	//experiment = experiment + "import random\n"
-	//experiment = experiment + "from pypdevs.simulator import Simulator\n"
-
-	//experiment = experiment + "def simulate(nresources, seed):\n"
-	//experiment = experiment + "\trandom.seed(seed)\n"
-	//experiment = experiment + "\tmodel = Root('root', [nresources])\n"
-	//experiment = experiment + "\tsim = Simulator(model)\n"
-	//experiment = experiment + "\tsim.setClassicDEVS()\n"
-	//experiment = experiment + "\tsim.simulate()\n"
-	//experiment = experiment + "\treturn model.finish.state\n"
-
-	//experiment = experiment + "def main():\n"
-	//experiment = experiment + "\tresults = ''\n"
-	//experiment = experiment + "\tfor i in range(1, 3):\n"
-	//experiment = experiment + "\t\tresults = results + str(i)\n"
-	//experiment = experiment + "\t\tfor v in range(1, 3):\n"
-	//experiment = experiment + "\t\t\tresults = results + ' ' + simulate(i, v)\n"
-	//experiment = experiment + "\t\tresults = results + '\\n'\n"
-	//experiment = experiment + "\tprint('Result: ' + results)\n"
-	//experiment = experiment + "\treturn results\n"
 	experiment = read_attribute(model, set_pop(allInstances(model, "Experiment/Experiment")), "code")
 	comm_set(port, experiment)
     
-    while (True):
-        if (comm_hasInput(port)):
-            the_input = comm_get(port)
-            log("(PDEVS) Got input from simulator!")
-            log("(PDEVS) " + the_input)
-        sleep(0.05)
+	the_input = comm_get(port)
+	log(the_input)
 
 	return True!

+ 5 - 4
models/WSC/experiment_example.mvc

@@ -1,6 +1,8 @@
 Experiment {
     code = """
 import random
+import math
+
 from pypdevs.simulator import Simulator
 
 def simulate(nresources, seed):
@@ -8,18 +10,17 @@ def simulate(nresources, seed):
     model = Root('root', [nresources])
     sim = Simulator(model)
     sim.setClassicDEVS()
-    sim.setVerbose()
     sim.simulate()
     return model.submodels['finish'].state
 
 def main():
     results = ''
-    for i in range(1, 3):
+    for i in range(1, 14):
         results = results + str(i)
-        for v in range(1, 3):
+        for v in range(2, 100):
             results = results + ' ' + str(simulate(i, v))
             print(results)
-        results = results + '\\n'
+        results = results + '\n'
     print('Result: ' + results)
     return results
     """

+ 6 - 6
models/WSC/pm_example.mvc

@@ -3,14 +3,14 @@ Initial init {
 }
 Activity req {
     name = "define_requirements"
-    distribution = "lambda iteration: iteration + 1"
+    distribution = "lambda iteration: max(0.0, random.gauss(10.0 * (1-math.exp(-(iteration+1) / 0.7)), (10.0 * (1-math.exp(-(iteration+1) / 0.7)))*0.15625))"
 }
 SimpleMerge merge {
     name = "merge_0"
 }
 Activity model {
     name = "model_system"
-    distribution = "lambda iteration: iteration + 1"
+    distribution = "lambda iteration: max(0.0, random.gauss(100.0 * (1-math.exp(-(iteration+1) / 0.7)), (100.0 * (1-math.exp(-(iteration+1) / 0.7)))*0.15625))"
 }
 ParallelSplit split {
     name = "split_0"
@@ -18,22 +18,22 @@ ParallelSplit split {
 MultiInstance simulate {
     name = "simulate"
     nr_instances = 10
-    distribution = "lambda iteration: iteration + 1"
+    distribution = "lambda iteration: max(0.0, random.gauss(20.0 * (1-math.exp(-(iteration+1) / 0.7)), (20.0 * (1-math.exp(-(iteration+1) / 0.7)))*0.15625))"
 }
 Activity check {
     name = "check"
-    distribution = "lambda iteration: iteration + 1"
+    distribution = "lambda iteration: max(0.0, random.gauss(30.0 * (1-math.exp(-(iteration+1) / 0.7)), (30.0 * (1-math.exp(-(iteration+1) / 0.7)))*0.15625))"
 }
 Synchronization sync {
     name = "sync_0"
 }
 Activity evaluate {
     name = "evaluate"
-    distribution = "lambda iteration: iteration + 1"
+    distribution = "lambda iteration: max(0.0, random.gauss(0.1 * (1-math.exp(-(iteration+1) / 0.7)), (0.1 * (1-math.exp(-(iteration+1) / 0.7)))*0.15625))"
 }
 ExclusiveChoice choice {
     name = "xor_0"
-    distribution = "lambda iteration: 1 - 1/(iteration+1)"
+    distribution = "lambda iteration: int(random.random() < {0: 0.99, 1: 0.9, 2: 0.8, 3: 0.5, 4: 0.2, 5: 0.1, 6: 0.02}.get(iteration, 0.0))"
 }
 Finish finish {
     name = "finish"

+ 1 - 1
wrappers/modelverse_SCCD.py

@@ -1,7 +1,7 @@
 """
 Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
 
-Date:   Tue May 15 16:13:15 2018
+Date:   Tue May 15 16:34:02 2018
 
 Model author: Yentl Van Tendeloo
 Model name:   MvK Server