Simulated Annealing

 

In der Veranstaltung „Computer Aided Design for Integrated Circuits“ im Sommersemester 2014 konnte als freiwillige Zusatzabgabe ein Algorithmus der Vorlesung implementiert werden. Ich habe mich für den Algorithmus „Simulated Annealing“ als Lösung des Module-Placement Problems entschieden. Dabei wurde der Algorithmus erstmal allgemein implementiert und er kann jetzt verwendet werden, um für schwere Probleme (in der Regel NP-schwere Probleme) eine Lösung zu finden. Die in dem Programm implementierten Versionen befassen sich alle mit Module Placement. Die erste Lösung platziert indirekt unter der Verwendung eines Slicing Trees. Die zweite Lösung ist eine direkte Lösung. Hierbei können Module auch überlappen.  In der dritten Lösung wird ein Gitter vorgegeben. Hierbei wird sowohl die Größe des Gitters als auch die Positionierung der Elemente im Gitter optimiert.

Seeheimer Märchenbühne

Screenshot der neuen Internetseite

Screenshot der neuen Internetseite

Nachdem ich schon die erste Version der Internetseite der Seeheimer Märchenbühne erstellt hatte, habe ich diese Webseite überarbeitet und nun fertig gestellt. Neben dem Design und der Strukturierung war es vor allem wichtig, auch eine internen Bereich zu erstellen, sodass z.B. Termine von den Seitenbetreibern selbstständig verwaltet werden können.

Bachelorarbeit

Ich habe meine Bachelorarbeit mit dem Thema „Growing Context-Sensitive Matrix Grammars“ fertig gestellt. In der Arbeit geht es um die Verbindung von wachsend kontext-sensitiven Sprachen mit den 2-dimensionalen Grammatiken von den Sironmoneys.

Wachsend kontext-sensitive Sprachen können durch Grammatiken beschrieben werden, die nur Regeln enthalten, die echt wachsen. Dass heißt, die Länge der linken Seite einer Regel ist echt kürzer als die Länge der rechten Seite. Die davon erzeugte Sprachklasse ist insofern interessant, als dass das Wortproblem effizient gelöst werden kann.

Die Grammatiken der Sironmoney’s verwenden zuerst eine horizontale Grammatik um einen String zu erzeugen. In dem Fall meiner Arbeit war diese Grammatik vom Typ wachsend kontext-sensitiv. Die Symbole dieses Strings sind Startsymbole für mehrere reguläre Grammatiken, welche nun ein Bild erzeugen.

In meiner Arbeit habe ich die Abschlusseigenschaften der Sprachklasse untersucht, die von den Growing Context-Sensitive Matrix Grammars erzeugt wird. Dabei konnte ich beweisen, dass diese Klasse unter Vereinigung, Spaltenverkettung, Spaltenabschluss, Spaltenhomomorphismen, inversen Homomorphismen und Schnitt mit regulären Matrizen abgeschlossen ist. Nach der Definition der Sironmoney’s handelt es sich dann dabei um eine abstrakte Matrizenfamilie.

Neben der Anfertigung einer Bachelorarbeit werde ich eine Präsentation halten um meine Ergebnisse den Korrekteuren Prof. Dr. Friedrich Otto und Prof. Dr. Martin Lange vorzutragen.

Collision Trees

Die einzelnen Stufen der Kollisionserkennung

Visualierung des Sphere-trees anhand eines Beispiels: Bei diesem Modell wurden 6 Ebenen erstellt.

 

In Rahmen der Entwicklung der Spherical-Engine habe ich eine Lösung für objektunabhängige Kollisionserkennung entwickelt. Die Anforderung war, beliebige 3D Objekte zu laden und beim Ladevorgang mit Kollisionserkennung auszustatten.

Neben verschiedenen Ansätzen, entschieden David Kronenberger und ich uns dazu, die Objekte durch Kugeln zu approximieren, da dann die Auflösung der Kollisionen recht einfach ist. Um Rechenaufwand zu sparen und die Objekte möglichst genau zu approximieren, verwenden wir einen Sphere-Tree und testen erst auf der gröbsten Ebene, ob die Objekte überhaupt kollidieren können. Dann wird mit der nächsten Ebene fortgefahren bis entschieden werden kann, dass die Objekte kollidieren. Beim Laden der Objekte kann dabei angegeben werden, wie viele Ebenen für die Kollision erstellt werden sollen. In der Demo dazu, wurden die Kugeln visualisiert um die Korrektheit der Kollisionsüberprüfung zu testen. Der Sphere-tree wird bisher nur auf basis von Octrees erstellt. Dies ist zwar keine optimale Lösung, aber sie ist einfach und vor allem schnell.

Erste Demo der „Spherical Engine“

Seit nun mehr als 3 Jahren entwickeln David Kronenberger und ich in unserer Freizeit an einer Spiele-Engine, mit der wir unseren Traum von einem eigenen Spiel verwirklichen wollen.

Die Grundlage der Engine ist fertig gestellt und ermöglicht eine einfach Verwaltung von einer großen Anzahl an Objekten in einer 3D-Szene. Mit verschiedene Techniken werden detaillierte Objekte nur in der Nähe angezeigt wohingegen grobe und große Objekte noch in weiter ferne erkennbar sind. Darüber hinaus gibt es die Möglichkeit, ein Objekt in den Hintergrund zu setzen, wie hier in dem Screenshot der Nachthimmel.

Die Game-Engine ist in Java geschrieben und verwendet die LWJGL-API für das Rendern mittels OpenGL. Nach dem Start mit OpenGL 1.0 basiert die Engine heute auf OpenGL 3.1 und ist auch nicht mehr abwärtskompatibel. Diese Entscheidung beruhte darauf, dass heute (so gut wie) jeder Computer mindestens OpenGL 3.3 unterstützt und dass mit der Version 3.1 einige Funktionen „deprecated“ wurden, so zum Beispiel die Funktionen der Fixed-Pipeline. Entsprechend muss alles mit Shadern implementiert werden.

Diese erste Beispielszene verifiziert die Funktionsweise der Transformation der Objekte, sowie deren Abhängigkeiten und kann hier als *.jar runtergeladen werden. Die Objekte werden in Bäumen gespeichert und die Kindknoten bewegen sich mit ihren Elternknoten mit. Gleichzeitig sind die Koordinaten der Kindknoten abhängig vom globalen Koordinatensystem und nicht vom Koordinatensystem der Elternknoten.

Projekt: 2-dimensionale Sprachen

Zu Beginn des Sommersemesters 2013 habe ich zusammen mit David Kronenberger an einer Übersichtsarbeit zu 2-dimensionalen Sprachen gearbeitet. Betreut wurde dieses Projekt von Prof. Dr. Friedrich Otto. Dieses Projekt diente als Vorarbeit und Themenfindung der Bachelorarbeit.

Inhaltlich wurden die verschiedenen Möglichkeiten erarbeitet, wie 2-dimensionale Sprachen erzeugt, bzw. akzeptiert werden können. Dazu zählen Grammatiken, Automaten, Tiling Systeme und reguläre Ausdrücke. Darüber hinaus wurden auch neuere Ideen wie Sgraffito Automaten und Restarting Tiling Automaten behandelt. D. Kronenbergers Schwerpunkte lagen bei den Automaten und deterministischen Tiling Systemen, wohingegen ich mich mit Grammatiken und regulären Ausdrücken beschäftigt habe.

Während des Projekts haben wir in regelmäßigen Abständen Präsentationen über den aktuellen Fortschritt gehalten.

Praktikum bei Open-Xchange

FIrmenlogo von Open-Xchange

FIrmenlogo von Open-Xchange

Vom 01.09.2013 bis 01.11.2013 habe ich mein Praktikum bei der Firma Open-Xchange in der UI-Entwicklung gemacht. Ich habe dort an der Webanwendung Appsuite, dem Frontend für den Open-Xchange-Server gearbeitet.

Neben der Einarbeitung in gängige Javascript-Frameworks wie jQuery, Require.js, Underscore.js und weitere konnte ich meine Kenntnis für Webentwicklung mit HTML5, CSS3 und Javascript verbessern. Während des Praktikums habe ich ganz normal im Entwicklerteam mitgearbeitet und habe sowohl an Features gearbeitet als auch Bugs gefixed.

RMS Relaunch

Ein Screenshot der Straßenerstellungssoftware.

Ein Screenshot der Straßenerstellungssoftware.

Die Simulationssoftware RMS-Fahrradwelt, die vom Fachgebiet technische Informatik erstellt wird, ermöglicht es dem Benutzer, die Theorie des Fahrradfahrens zu erlernen. Die Software zielt vor allem auf Schulen ab, da dort die Zeit nicht mehr genutzt wird um in eine Fahrrad Fahrschule zu gehen. Nun können die Verkehrsregeln in wenigen Stunden am Computer in der Schule oder zu hause erlernt werden.

Damit die Lehrer ihre bisherigen Straßenkreuzungen und schwierigen Situation weiter verwenden können, habe ich dieses Semester mit einem Kommilitonen die Grundlage für ein Tool erstellt um beliebige Straßen zu zeichnen. Dabei kam wieder die GameEngine Unity zum Einsatz. Die Straßenmodelle wurden mit Blender erstellt. Die nächsten Projektgruppen werden Ampeln und Schilder, sowie automatisierten Verkehr implementieren.

Für die graphische Benutzeroberfläche wurde NGUI verwendet. Bis die Universität die Vollversion davon kauft wird das Logo in der oberen Linke Ecke weiter zu sehen sein.

Leiterwagensimulation

Demo zur Leitersteuerung. Sicht aus dem Hauptsteuerstand.

Demo zur Leitersteuerung. Sicht aus dem Hauptsteuerstand.

Im Wintersemester 12/13 an der Uni Kassel habe ich Rahmen der Veranstaltung „Graphische Simulationen“ eine Simulation für einen Leiterwagen der Feuerwehr erstellt. Dazu sollte mit der Gameengine Unity ein bereits vorhandenes 3D-Modell mit Funktionalitäten ausgestattet werden.

Die Hauptaufgabe war, Informationen bezüglich der Funktionalität des Leiterwagens zu sammeln. Dazu blieb ein Besuch bei der Kasseler Feuerwehr nicht aus. Anschließend mussten die zusammengetragenenen Informationen durch technische Details ergänzt werden und in Unity umgesetzt werden. Dazu wurde auch noch eine Demo zum kennenlernen der Funktionen des Leiterwages entwickelt.

Locksher und Sonwat

Screenshot zu Locksher und Sonwat

Screenshot zu Locksher und Sonwat

Im Rahmen des „3D Game Programming“-Praktikums an der Uni Kassel wurde in diesem Semester ein Action-Adventure Game entwickelt. Dazu wurde die Gamengine Unity verwendet.

Das Spiel erzählt die Geschichte von Locksher und Sonwat (angelehnt an Sherlock und Watson), wie sie Sonwats Frau retten. Dazu musste jeder Praktikumsteilnehmer eine eigene Szene entwickeln, die Locksher und Sonwat meistern müssen, um der Rettung von Sonwats Frau näher zu kommen. Gleichzeitig mussten auch alle nötigen Modelle und Sounds für die Szenen erstellt werden. Ich habe dabei eine 3D-Jump and Run Szene entwickelt.

Zusätzlich zur Entwicklung an sich standen auch Teamwork, Dokumentation und Präsentation im vordergrund. Das Ergebnis kann mit dem Unity Webplayer gespielt und hier gefunden werden.