diff --git a/ws2012/CE/Folien/gms-02-NAE-col.pdf b/ws2012/CE/Folien/gms-02-NAE-col.pdf
new file mode 100644
index 00000000..0497bbf3
Binary files /dev/null and b/ws2012/CE/Folien/gms-02-NAE-col.pdf differ
diff --git a/ws2012/CE/Folien/gms-03-NAE-col.pdf b/ws2012/CE/Folien/gms-03-NAE-col.pdf
new file mode 100644
index 00000000..1e2f9ab7
Binary files /dev/null and b/ws2012/CE/Folien/gms-03-NAE-col.pdf differ
diff --git a/ws2012/CE/Folien/gms-04-NAE-col.pdf b/ws2012/CE/Folien/gms-04-NAE-col.pdf
new file mode 100644
index 00000000..074be132
Binary files /dev/null and b/ws2012/CE/Folien/gms-04-NAE-col.pdf differ
diff --git a/ws2012/CE/uebungen/0/EiCE_Uebung_00b.pdf b/ws2012/CE/uebungen/0/EiCE_Uebung_00b.pdf
new file mode 100644
index 00000000..2821effd
Binary files /dev/null and b/ws2012/CE/uebungen/0/EiCE_Uebung_00b.pdf differ
diff --git a/ws2012/CE/uebungen/1/EiCE_Uebung01.pdf b/ws2012/CE/uebungen/1/EiCE_Uebung01.pdf
new file mode 100644
index 00000000..d8666454
Binary files /dev/null and b/ws2012/CE/uebungen/1/EiCE_Uebung01.pdf differ
diff --git a/ws2012/CE/uebungen/1/EiCE_Uebung01_Solution_Lukas.pdf b/ws2012/CE/uebungen/1/EiCE_Uebung01_Solution_Lukas.pdf
new file mode 100644
index 00000000..3683d90f
Binary files /dev/null and b/ws2012/CE/uebungen/1/EiCE_Uebung01_Solution_Lukas.pdf differ
diff --git a/ws2012/CE/uebungen/1/petrinetz.graphml b/ws2012/CE/uebungen/1/petrinetz.graphml
new file mode 100644
index 00000000..9942bc22
--- /dev/null
+++ b/ws2012/CE/uebungen/1/petrinetz.graphml
@@ -0,0 +1,2119 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ P1-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ P1-2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ P1-4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ P1-3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ P1-5
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ t1-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ t1-2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ t1-3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ P1-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ P1-2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ P1-4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ P1-3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ P1-5
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ t1-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ t1-2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ t1-3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ P1-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ P1-2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ P1-4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ P1-3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ P1-5
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ t1-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ t1-2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ t1-3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ P1-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ P1-2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ P1-4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ P1-3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ P1-5
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ t1-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ t1-2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ t1-3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ P1-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ P1-2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ P1-4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ P1-3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ P1-5
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ t1-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ t1-2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ t1-3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ws2012/CE/uebungen/1/petrinetz.jpg b/ws2012/CE/uebungen/1/petrinetz.jpg
new file mode 100644
index 00000000..6f98d7f0
Binary files /dev/null and b/ws2012/CE/uebungen/1/petrinetz.jpg differ
diff --git a/ws2012/CE/uebungen/1/solution.odt b/ws2012/CE/uebungen/1/solution.odt
new file mode 100644
index 00000000..9c144cae
Binary files /dev/null and b/ws2012/CE/uebungen/1/solution.odt differ
diff --git a/ws2012/CE/uebungen/1/solution.pdf b/ws2012/CE/uebungen/1/solution.pdf
new file mode 100644
index 00000000..79962996
Binary files /dev/null and b/ws2012/CE/uebungen/1/solution.pdf differ
diff --git a/ws2012/CE/uebungen/2/EiCE_Uebung02.pdf b/ws2012/CE/uebungen/2/EiCE_Uebung02.pdf
new file mode 100644
index 00000000..6f46275f
Binary files /dev/null and b/ws2012/CE/uebungen/2/EiCE_Uebung02.pdf differ
diff --git a/ws2012/CE/uebungen/2/uebung02_solution.odt b/ws2012/CE/uebungen/2/uebung02_solution.odt
new file mode 100644
index 00000000..c526aa33
Binary files /dev/null and b/ws2012/CE/uebungen/2/uebung02_solution.odt differ
diff --git a/ws2012/CE/uebungen/2/uebung02_solution.pdf b/ws2012/CE/uebungen/2/uebung02_solution.pdf
new file mode 100644
index 00000000..522eeea7
Binary files /dev/null and b/ws2012/CE/uebungen/2/uebung02_solution.pdf differ
diff --git a/ws2012/CE/uebungen/3/02_20051116_dsi.pdf b/ws2012/CE/uebungen/3/02_20051116_dsi.pdf
new file mode 100644
index 00000000..10b5dd0b
Binary files /dev/null and b/ws2012/CE/uebungen/3/02_20051116_dsi.pdf differ
diff --git a/ws2012/CE/uebungen/3/7.Komplexe Zahlen.pdf b/ws2012/CE/uebungen/3/7.Komplexe Zahlen.pdf
new file mode 100644
index 00000000..335a1bef
Binary files /dev/null and b/ws2012/CE/uebungen/3/7.Komplexe Zahlen.pdf differ
diff --git a/ws2012/CE/uebungen/3/EiCE_Uebung03_update.pdf b/ws2012/CE/uebungen/3/EiCE_Uebung03_update.pdf
new file mode 100644
index 00000000..06e094a0
Binary files /dev/null and b/ws2012/CE/uebungen/3/EiCE_Uebung03_update.pdf differ
diff --git a/ws2012/CE/uebungen/3/Merkzettel - Nichtlineare Systeme.pdf b/ws2012/CE/uebungen/3/Merkzettel - Nichtlineare Systeme.pdf
new file mode 100644
index 00000000..337eaa35
Binary files /dev/null and b/ws2012/CE/uebungen/3/Merkzettel - Nichtlineare Systeme.pdf differ
diff --git a/ws2012/CE/uebungen/3/uebung03_solution.odt b/ws2012/CE/uebungen/3/uebung03_solution.odt
new file mode 100644
index 00000000..4a1a5f94
Binary files /dev/null and b/ws2012/CE/uebungen/3/uebung03_solution.odt differ
diff --git a/ws2012/CE/uebungen/3/uebung03_solution.pdf b/ws2012/CE/uebungen/3/uebung03_solution.pdf
new file mode 100644
index 00000000..f36e1151
Binary files /dev/null and b/ws2012/CE/uebungen/3/uebung03_solution.pdf differ
diff --git a/ws2012/CE/uebungen/EiCE_Uebung_00b.pdf b/ws2012/CE/uebungen/EiCE_Uebung_00b.pdf
deleted file mode 100644
index 84387052..00000000
Binary files a/ws2012/CE/uebungen/EiCE_Uebung_00b.pdf and /dev/null differ
diff --git a/ws2012/CE/uebungen/P1/DEVS/.classpath b/ws2012/CE/uebungen/P1/DEVS/.classpath
new file mode 100644
index 00000000..87279173
--- /dev/null
+++ b/ws2012/CE/uebungen/P1/DEVS/.classpath
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/ws2012/CE/uebungen/P1/DEVS/.project b/ws2012/CE/uebungen/P1/DEVS/.project
new file mode 100644
index 00000000..ee0093a7
--- /dev/null
+++ b/ws2012/CE/uebungen/P1/DEVS/.project
@@ -0,0 +1,17 @@
+
+
+ DEVS2
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/ws2012/CE/uebungen/P1/DEVS/.settings/org.eclipse.jdt.core.prefs b/ws2012/CE/uebungen/P1/DEVS/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..ab76192d
--- /dev/null
+++ b/ws2012/CE/uebungen/P1/DEVS/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Thu Oct 11 22:30:59 CEST 2012
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/DEVS$StopEvent.class b/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/DEVS$StopEvent.class
new file mode 100644
index 00000000..4f623403
Binary files /dev/null and b/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/DEVS$StopEvent.class differ
diff --git a/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/DEVS.class b/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/DEVS.class
new file mode 100644
index 00000000..8d874abe
Binary files /dev/null and b/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/DEVS.class differ
diff --git a/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/DEVSMain.class b/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/DEVSMain.class
new file mode 100644
index 00000000..e43038f2
Binary files /dev/null and b/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/DEVSMain.class differ
diff --git a/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/DiscreteEvent.class b/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/DiscreteEvent.class
new file mode 100644
index 00000000..59e58b30
Binary files /dev/null and b/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/DiscreteEvent.class differ
diff --git a/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/ExponentialDistributionWrapper.class b/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/ExponentialDistributionWrapper.class
new file mode 100644
index 00000000..2587ce74
Binary files /dev/null and b/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/ExponentialDistributionWrapper.class differ
diff --git a/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/MyExponential.class b/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/MyExponential.class
new file mode 100644
index 00000000..df2a32c5
Binary files /dev/null and b/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/MyExponential.class differ
diff --git a/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/MyNormalDist.class b/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/MyNormalDist.class
new file mode 100644
index 00000000..702bc6ed
Binary files /dev/null and b/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/MyNormalDist.class differ
diff --git a/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/NormalDistributionWrapper.class b/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/NormalDistributionWrapper.class
new file mode 100644
index 00000000..b14fdd2e
Binary files /dev/null and b/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/NormalDistributionWrapper.class differ
diff --git a/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/QueueDEVS.class b/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/QueueDEVS.class
new file mode 100644
index 00000000..9ffcfac6
Binary files /dev/null and b/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/QueueDEVS.class differ
diff --git a/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/RandomNumberGenerator.class b/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/RandomNumberGenerator.class
new file mode 100644
index 00000000..0ed2314c
Binary files /dev/null and b/ws2012/CE/uebungen/P1/DEVS/bin/edu/eice2012/RandomNumberGenerator.class differ
diff --git a/ws2012/CE/uebungen/P1/DEVS/src/edu/eice2012/DEVS.java b/ws2012/CE/uebungen/P1/DEVS/src/edu/eice2012/DEVS.java
new file mode 100644
index 00000000..1ca90303
--- /dev/null
+++ b/ws2012/CE/uebungen/P1/DEVS/src/edu/eice2012/DEVS.java
@@ -0,0 +1,117 @@
+/**
+ Vorlesung: Einfuehrung in Computational Engineering
+ @author Arne Naegel
+ @date Oktober 2012
+ */
+
+package edu.eice2012;
+
+
+
+import java.util.Iterator;
+import java.util.PriorityQueue;
+
+/* This class implements a time dependent discrete event simulation */
+abstract public class DEVS {
+
+ // GENERAL
+ protected PriorityQueue queue;
+ private double time;
+ private double maxTime;
+
+ // CONSTRUCTOR
+ public DEVS(){
+ queue = new PriorityQueue(2);
+ time = 0.0;
+
+
+ }
+
+ protected class StopEvent extends DiscreteEvent{
+ StopEvent(double t) {
+ super(t,'X');
+ }
+ }
+
+ // USER-DEFINED FUNCTIONS
+ /** This routine may be implemented */
+ public void initialize() {
+ queue.add(new StopEvent(maxTime));
+ }
+
+ /** This routine must be implemented */
+ abstract public void eventRoutine(DiscreteEvent ev);
+
+ /** This routine may be implemented */
+ public void statistics() {}
+
+
+
+ // GENERAL FUNCTIONS
+ /** getter time */
+ public double getTime() {
+ return time;
+ }
+
+ /** setter time */
+ public void setTime(double time) {
+ this.time = time;
+ }
+
+ /** getter max time */
+ public double getMaxTime() {
+ return maxTime;
+ }
+
+ /** setter max time */
+ public void setMaxTime(double time) {
+ this.maxTime = time;
+ }
+
+
+ /** Simulation stops if time limit has been reached*/
+ public boolean stopCondition() {
+ return getTime() > getMaxTime();
+ }
+
+ /** Perform simulation run (event loop) */
+ public void simulate(){
+
+ while (true){
+
+ // get event
+ DiscreteEvent ev = queue.poll();
+
+ // abort, if queue is empty
+ if (ev==null) {
+ System.out.println("Queue is empty!");
+ break;
+ }
+
+ // update time and treat event
+ time = ev.getTime();
+ eventRoutine(ev);
+
+ // print queue status
+ System.out.print("{");
+
+ for (Iterator it = queue.iterator(); it.hasNext();)
+ {
+ System.out.print(it.next()+", ");
+ }
+ System.out.println("}");
+
+ // check for stop condition
+ if (ev instanceof StopEvent)
+ {
+ System.out.println("Terminating");
+ break;
+ }
+ }
+ }
+
+
+
+
+}
+
diff --git a/ws2012/CE/uebungen/P1/DEVS/src/edu/eice2012/DEVSMain.java b/ws2012/CE/uebungen/P1/DEVS/src/edu/eice2012/DEVSMain.java
new file mode 100644
index 00000000..bd33cae0
--- /dev/null
+++ b/ws2012/CE/uebungen/P1/DEVS/src/edu/eice2012/DEVSMain.java
@@ -0,0 +1,50 @@
+/**
+ Vorlesung: Einfuehrung in Computational Engineering
+ @author Arne Naegel
+ @date Oktober 2012
+ */
+
+package edu.eice2012;
+
+import java.util.Random;
+
+public class DEVSMain {
+
+ /** execute program */
+ public static void main(String args[]){
+
+ // create random number generator
+ RandomNumberGenerator randA;
+ RandomNumberGenerator randD;
+ double maxtime;
+
+ // ALTERNATIVE 1: results from exercise 1
+ // TODO: VAlidierung in Aufgabenteil b)
+ randA = new MyExponential();
+ randD = new MyNormalDist();
+ maxtime = 100.0;
+
+
+ // ALTERNATIVE 2: 'real' random numbers
+ // TODO: Experimente in Aufgabenteil d)
+ /* Random r = new Random(47);
+
+
+ randA = new ExponentialDistributionWrapper(r, 5.0);
+ randD = new ExponentialDistributionWrapper(r, 6.0);
+ //randD= new NormalDistributionWrapper(r, 6.0, 2.0);
+ maxtime = 20000;
+ */
+
+ DEVS sim = new QueueDEVS(randA, randD);
+
+ sim.setMaxTime(maxtime);
+ sim.initialize();
+ sim.simulate();
+
+ sim.statistics();
+ }
+
+
+
+}
diff --git a/ws2012/CE/uebungen/P1/DEVS/src/edu/eice2012/DiscreteEvent.java b/ws2012/CE/uebungen/P1/DEVS/src/edu/eice2012/DiscreteEvent.java
new file mode 100644
index 00000000..e1cf2afb
--- /dev/null
+++ b/ws2012/CE/uebungen/P1/DEVS/src/edu/eice2012/DiscreteEvent.java
@@ -0,0 +1,43 @@
+/**
+ Vorlesung: Einfuehrung in Computational Engineering
+ @author Arne Naegel
+ @date Oktober 2012
+ */
+package edu.eice2012;
+
+import java.lang.Double;
+
+public class DiscreteEvent implements Comparable{
+
+ private double time;
+ private char type;
+
+
+ DiscreteEvent(double t, char c) {time=t; type=c;}
+
+ public double getTime() {
+ return time;
+ }
+ public void setTime(double time) {
+ this.time = time;
+ }
+
+ public char getType() {
+ return type;
+ }
+ public void setType(char type) {
+ this.type = type;
+ }
+
+
+ public String toString(){
+ return "Event<"+type+", "+time+">";
+ }
+
+
+
+ public int compareTo(DiscreteEvent e) {
+ return new Double(time).compareTo(e.getTime());
+
+ }
+}
diff --git a/ws2012/CE/uebungen/P1/DEVS/src/edu/eice2012/ExponentialDistributionWrapper.java b/ws2012/CE/uebungen/P1/DEVS/src/edu/eice2012/ExponentialDistributionWrapper.java
new file mode 100644
index 00000000..58c97ba0
--- /dev/null
+++ b/ws2012/CE/uebungen/P1/DEVS/src/edu/eice2012/ExponentialDistributionWrapper.java
@@ -0,0 +1,32 @@
+package edu.eice2012;
+
+import java.util.Random;
+
+
+/** Generiert Werte einer Exponentialverteilung */
+public class ExponentialDistributionWrapper implements RandomNumberGenerator {
+
+private static final long serialVersionUID = 1L;
+
+ private double lambda;
+ private Random r;
+ private boolean doInteger;
+
+ public ExponentialDistributionWrapper(Random r){
+ this (r, 1.0);
+ }
+
+ public ExponentialDistributionWrapper(Random r, double lambda){
+ this.doInteger=false;
+ this.r = r;
+ this.lambda=lambda;
+ }
+
+
+ public double nextDoubleValue(){
+ double x = r.nextDouble();
+ if (doInteger) return (double) Math.round(-Math.log(1.0-x)/lambda);
+ return -Math.log(1.0-x)/lambda;
+ }
+
+}
diff --git a/ws2012/CE/uebungen/P1/DEVS/src/edu/eice2012/MyExponential.java b/ws2012/CE/uebungen/P1/DEVS/src/edu/eice2012/MyExponential.java
new file mode 100644
index 00000000..c20b54af
--- /dev/null
+++ b/ws2012/CE/uebungen/P1/DEVS/src/edu/eice2012/MyExponential.java
@@ -0,0 +1,30 @@
+/**
+ Vorlesung: Einfuehrung in Computational Engineering
+ @author Arne Naegel
+ @date Oktober 2012
+ */
+package edu.eice2012;
+
+public class MyExponential implements RandomNumberGenerator
+
+{
+ MyExponential() {i=0;}
+
+ public double nextDoubleValue(){
+ double val=data[i];
+ i=(i+1)%data.length;
+ return val;
+ };
+
+ private int i;
+ private static final long serialVersionUID = 1L;
+ private static double data[] =
+ //{0.57, 2.73, 1.36, 0.72, 0.23, 0.08, 1.21, 0.35, 2.81, 0.19, 0.88};
+ {8.76, 16.82, 15.40, 26.72,3.46,27.06,23.52,8.06,0.71,42.03,56.27};
+
+
+
+
+
+
+}
diff --git a/ws2012/CE/uebungen/P1/DEVS/src/edu/eice2012/MyNormalDist.java b/ws2012/CE/uebungen/P1/DEVS/src/edu/eice2012/MyNormalDist.java
new file mode 100644
index 00000000..188374e4
--- /dev/null
+++ b/ws2012/CE/uebungen/P1/DEVS/src/edu/eice2012/MyNormalDist.java
@@ -0,0 +1,25 @@
+/**
+ Vorlesung: Einfuehrung in Computational Engineering
+ @author Arne Naegel
+ @date Oktober 2012
+ */
+package edu.eice2012;
+
+public class MyNormalDist implements RandomNumberGenerator
+
+{
+ MyNormalDist() {i=0;}
+
+ public double nextDoubleValue(){
+ double val=data[i];
+ i=(i+1)%data.length;
+ return val;
+ };
+
+ private int i;
+ private static final long serialVersionUID = 1L;
+ private static double data[] =
+ //{1.89, 2.02, 2.56, 3.84, 2.00, 2.28, 3.32, 3.56, 2.97, 2.67, 2.70};
+ {25.30, 20.11, 13.25, 10.68, 16.85, 19.22, 23.96, 28.30, 24.55, 22.70, 17.14};
+
+}
diff --git a/ws2012/CE/uebungen/P1/DEVS/src/edu/eice2012/NormalDistributionWrapper.java b/ws2012/CE/uebungen/P1/DEVS/src/edu/eice2012/NormalDistributionWrapper.java
new file mode 100644
index 00000000..f4992e2f
--- /dev/null
+++ b/ws2012/CE/uebungen/P1/DEVS/src/edu/eice2012/NormalDistributionWrapper.java
@@ -0,0 +1,35 @@
+package edu.eice2012;
+
+
+import java.util.Random;
+
+
+/** Generiert Werte einer Normalverteilung */
+public class NormalDistributionWrapper implements RandomNumberGenerator{
+
+ private static final long serialVersionUID = 1L;
+
+ private double mu;
+ private double sigma;
+ private Random r;
+ private boolean doInteger; // returning integers or doubles?
+
+
+ public NormalDistributionWrapper(Random r){
+ this(r, 0.0, 1.0);
+ }
+
+ public NormalDistributionWrapper(Random r, double mu, double sigma){
+ this.r = r;
+ this.mu=mu;
+ this.sigma=sigma;
+ this.doInteger=false;
+ }
+
+ public double nextDoubleValue(){
+ double x = r.nextGaussian();
+ if (doInteger) return (double) Math.round( mu +x*sigma);
+ return mu +x*sigma;
+ }
+
+}
diff --git a/ws2012/CE/uebungen/P1/DEVS/src/edu/eice2012/QueueDEVS.java b/ws2012/CE/uebungen/P1/DEVS/src/edu/eice2012/QueueDEVS.java
new file mode 100644
index 00000000..3d73ad50
--- /dev/null
+++ b/ws2012/CE/uebungen/P1/DEVS/src/edu/eice2012/QueueDEVS.java
@@ -0,0 +1,277 @@
+/**
+ Vorlesung: Einfuehrung in Computational Engineering
+ @author Arne Naegel
+ @date Oktober 2012
+ */
+
+package edu.eice2012;
+
+import java.util.AbstractList;
+import java.util.Vector;
+
+
+public class QueueDEVS extends DEVS {
+
+ // problem specific variables
+ private int server; // current machine state (0=idle)
+ private int buffer; // current buffer length
+ private int maxServers;
+
+ // random number generators
+ private RandomNumberGenerator randA;
+ private RandomNumberGenerator randD;
+
+ // statistics (per event)
+ private Vector eventTimes; // time stamp when event is triggered
+ private Vector eventTypes; // type of event
+ private Vector serverList; // #items processed by server(s)
+ private Vector bufferList; // #items in buffer
+ private Vector loadList; // #items in system
+
+
+
+ /** Constructor */
+ public QueueDEVS(RandomNumberGenerator randA, RandomNumberGenerator randD)
+ {
+ // attributes
+ buffer = 0;
+ server = 0;
+ maxServers = 1;
+
+ // random numbers
+ this.randA = randA;
+ this.randD = randD;
+
+
+ // statistics (per event)
+ eventTimes = new Vector();
+ eventTypes = new Vector();
+ bufferList = new Vector();
+ serverList = new Vector();
+ loadList = new Vector();
+
+ // first entries
+ eventTimes.add(0.0);
+ eventTypes.add('I');
+ bufferList.add(0.0);
+ serverList.add(0.0);
+ loadList.add(0.0);
+ }
+
+ public void setRandomArrival(RandomNumberGenerator rand)
+ {
+ this.randA = rand;
+ }
+
+ public void setRandomDeparture(RandomNumberGenerator rand)
+ {
+ this.randD = rand;
+ }
+
+
+
+ /** status for server */
+ public boolean allBusy()
+ {
+ return (server == maxServers);
+ }
+
+ /** status for server */
+ public boolean isIdle()
+ {
+ return (server==0);
+ }
+
+
+ public int getServerState() {
+ return this.server;
+ }
+
+
+ public void initialize()
+ {
+ super.initialize();
+ server = 0;
+ buffer = 0;
+ queue.add(new DiscreteEvent(0.5, 'A'));
+
+ /*
+ * ALTERNATIVE: first arrival is random
+ double offset = randA.nextDoubleValue();
+ queue.add(new DiscreteEvent((offset), 'A'));
+ */
+ }
+
+
+ /** called for every event */
+ public void eventRoutine(DiscreteEvent e)
+ {
+
+ char type = e.getType();
+ switch (type)
+ {
+ case 'A': arrivalRoutine(e); break;
+ case 'D': departureRoutine(e); break;
+
+ default: System.out.println("Unknown event type -> Aborting!!!");
+ };
+
+
+ // print stats
+ System.out.println("Event: "+e.getTime() + "|"+type+ "|"+ buffer+ "|"+ getServerState());
+
+ // record event statistics (example!)
+ eventTimes.add(e.getTime()); // time stamp
+ eventTypes.add(e.getType()); // type (A/D/X)
+ int serverState = getServerState();
+ serverList.add((double) serverState); // server state
+ bufferList.add((double) buffer); // buffer state
+
+ int nItems = buffer + serverState;
+ loadList.add((double) nItems); // system load
+ };
+
+ /** TODO: called upon arrival */
+ protected void arrivalRoutine (DiscreteEvent e)
+ {
+
+ //System.out.println("arrivalRoutine muss implementiert werden!");
+
+ double offset1 = randA.nextDoubleValue();
+ queue.add(new DiscreteEvent((getTime()+offset1), 'A'));
+
+ if(allBusy()){
+ buffer++;
+ }else{
+ server++;
+ double offset2 = randD.nextDoubleValue();
+ queue.add(new DiscreteEvent(getTime()+offset2, 'D'));
+ }
+
+
+
+
+ }
+
+
+ /** TODO: called upon departure */
+ protected void departureRoutine (DiscreteEvent e)
+ {
+ //System.out.println("departureRoutine muss implementiert werden!");
+
+ if(buffer == 0){
+ server = 0;
+ }else{
+ buffer--;
+ double offset=randD.nextDoubleValue();
+ queue.add(new DiscreteEvent(getTime()+offset, 'D'));
+ }
+
+ }
+
+
+
+ /** aux: compute \sum v_i */
+ static protected double firstMoments(AbstractList values){
+ double val=0.0;
+ int numEvents = values.size()-1;
+ for (int i=0; i values, AbstractList weights){
+ double val=0.0;
+ int numEvents = values.size()-1; // skip final STOP event!
+ for (int i=0; i values){
+ double val=0.0;
+ int numEvents = values.size()-1; // skip final STOP event!
+ for (int i=0; i values, AbstractList weights){
+ double val=0.0;
+ int numEvents = values.size()-1; // skip final STOP event!
+ for (int i=0; i, AbstractList)
+ * */
+ static protected double[] aggregateTimesPerLoad(AbstractList times, AbstractList loads)
+ {
+
+ int numEvents = loads.size()-1; // skip final STOP event!
+
+ // a) find maximum load
+ int maxLoad = 0;
+ for (int i=0; i maxLoad) maxLoad = load;
+ }
+
+ // b) compute sum of values and assign
+ double val[] = new double[maxLoad+1];
+ for (int i=0; i