Themen für das (Projekt-) Praktikum Algorithmen und Vertiefung

Die Seite wird erstellt Sophie Petersen
 
WEITER LESEN
Themen für das (Projekt-)
Praktikum Algorithmen und
Vertiefung
Wintersemester 2021 / 2022

  • Das Praktikum Algorithmen wird bis auf Weiteres ausschließlich online angeboten.
  • Bewerbungen auf Praktikumsthemen werden bis zum 31.10.2021 unter der E-Mail
    Adresse lab@algo.informatik.tu-darmstadt.de angenommen. Danach ist keine
    Bewerbung mehr möglich. Bewerbungen unter anderen E-Mail Adressen werden
    ignoriert. Jede Bewerbung muss drei Themen mit Prioritäten (Erst-, Zweit- und
    Drittwunsch) enthalten. Zur Bewerbung auf ein Thema schreiben Sie uns bitte
    eine kurze Motivation, warum Sie genau dieses Thema bearbeiten möchten sowie
    Ihre Vorkenntnisse.
  • Das Kick-Off Treffen findet nach Vereinbarung für jedes Thema separat statt.
  • Um die Integration der Praktikumsergebnisse in die quelloffenen Projekte SORO-
    S/O bzw. MOTIS zu ermöglichen, müssen alle Teilnehmer Ihre Abgaben unter die
    MIT / Apache2 Lizenz stellen. Nach dem Kick-Off senden Sie dem Betreuer des
    Themas eine unterschriebene Lizenzvereinbarung (MIT / Apache2) und falls nötig
    eine unterschriebene Vertraulichkeitserkärung für die für das Praktikum bereitge-
    stellten Daten. Dies wird gleichzeitig als verbindliche Zusage zur Bearbeitung des
    Themas angesehen.
  • In einem zweiwöchigen Rythmus finden regelmäßige verpflichtende Treffen statt.
    Die genauen Termine werden beim Kick-Off Treffen vereinbart. Bei jedem Termin
    stellt jeder Teilnehmer einen Foliensatz mit 3 Folien vor (max. 5 min):
       – Welche Fortschritte / Erkenntnisse wurden seit dem letzten Treffen erreicht?
       – Welche nächsten Schritte sind geplant?
       – Liste mit Fragen - bitte achten Sie darauf, dass die Bewertungskriterien unter
         anderem selbstständiges Arbeiten berücksichtigen. Hier sollten Sie folglich
         nur Fragen stellen, deren Beantwortung nicht durch Google / bzw. das Lesen
         von bereitgestelltem Material möglich ist.
  • Abgabefrist für eine Bewertung im Semester ist der letzte Tag im Semester.

                                                                                      1
Es gelten folgende Markierungen:

      • A: Das thema kann als Praktikum Algorithmen (6CP) oder Vertiefungspraktikum
        Algorithmen (6CP) bearbeitet werden.
      • P: Das Thema kann als Projektpraktikum (9CP) bearbeitet werden.
      • E: Das Thema kann einzeln bearbeitet werden.
      • G: Das Thema kann auch als Gruppe bearbeitet werden.

Hinweise:

      • Planen Sie bitte zusätzlichen Aufwand ein, falls die genannten Programmierspra-
        chen (TypeScript, C++) oder verwendeten Technologien (z.B. CMake, React, Git,
        etc.) neu für Sie sind.
      • Betrifft alle C++ Praktika: Als Referenz für die Komplexität des Projektes, das im
        Praktikum erweitert wird, können Sie MOTIS1 anschauen. Das SORO Projekt aus
        den Themen 1.x ist ähnlich komplex.
        Bitte überlegen Sie sich genau, ob Sie mit einer großen “real-world” Modern-C++
        Code Basis klarkommen. Bisherige Erfahrungen haben gezeigt, dass Studierende
        den Einarbeitungsaufwand und die Komplexität der Programmiersprache unter-
        schätzen.
        Einen Crash-Kurs in die MOTIS/SORO-typische C++-Programmierung gibt es hier:
        https://www.algo.informatik.tu-darmstadt.de/dl/cpp.pdf.
      • Falls Themen in Gruppen bearbeitet werden, steigt der Aufwand linear mit der
        Summe der CPs der Gruppenmitglieder. Die unten genannten Themen sind auf
        Einzelpersonen ausgelegt. Bei einer Bearbeitung in der Gruppe (nur bei Themen
        mit G möglich!) wird der Umfang entsprechend erweitert.

Thema 1.1 Erweitern einer Fahrzeitrechnung [A, P, E, G]

Im Bahnprojekt des Fachgebiets Algorithmik entsteht eine Bahnbetriebssimulation. Diese
bedient sich einer physikalisch basierten Fahrzeitrechnung. Aus grundlegenden Parame-
tern eines Zuges werden Beschleunigungs- und Bremsvorgänge auf Basis physikalischer
Berechnungen ermittelt. Auf einen Zug wirken während einer Fahrt eine Vielzahl von
Faktoren ein, die das Fahrverhalten beeinflussen (bspw. Luftwiderstand oder spezi-
elle Geschwindigkeitsbegrenzungen). Ziel dieses Praktikums ist es eine bestehende
Fahrzeitrechnung zu erweitern, sodass mehr einflussnehmende Faktoren berücksichtigt
werden.

      • Programmiersprache: C++

 1
     https://github.com/motis-project/motis

                                                                                        2
Thema 1.2 Visualisierung von Zugbewegungen [A, P, E, G]

Um Informationen, die im Bahnbetrieb anfallen, dem Menschen darstellbar zu machen
bedient man sich unterschiedlichster Visualisierungsformen. Eine davon umfasst das
sogennante Zeit-Wege-Diagramm. Hierbei wird die Strecke, die ein Zug fährt, gegen
die Zeit, die er dafür benötigt, in einem Liniendiagramm aufgetragen. Visuell ähn-
liche Diagramme sind Beschleunigungs- oder Geschwindigkeitsdiagramme. Ziel des
Praktikums ist es einen Rahmen für derartige Visualisierungsmethoden und die Vi-
sualisierungsmethoden selbst zu schaffen. Dazu soll auf Webtechnologien aufgebaut
werden.
     • Programmiersprache: JavaScript/React/d3.js, C++, WebAssembly

Thema 1.3 GPU-beschleunigter Fahrstraßenauschluss [A, P, E, G]

Unter einer Fahrstraße versteht man im Bahnbetrieb einen durch die Sicherungstechnik
gesicherten Fahrweg. Dies bedeutet, dass eine Strecke einem einzelnen Zug exklusiv
zugeordnet wird. Die Sicherungstechnik verhindert, dass ein zweiter Zug auf den Fahr-
weg des ersten Zuges gelangen kann. Dies führt dazu, dass sich zwei überlappende
Fahrwege als Fahrstraßen gegenseitig ausschließen; sie können nicht gleichzeitig ge-
schaltet werden. Um alle Auschlüsse zu ermitteln ist mindestens quadratischer Aufwand
notwendig. Bei großer Anzahl von Fahrstraßen resultiert dies in langen Laufzeiten. Das
Problem kann allerdings mittels parallelisierter Algorithmen gelöst werden. Nicht nur
Multithreading via CPU eignet sich hierfür, sondern auch Parallelisierung durch Einsatz
einer GPU. Vorkenntnisse in C++/CUDA stark empfohlen!
     • Programmiersprache: C++/CUDA

Thema 2.1: Interaktive Reisendenstromvisualisierung [A, P, E, G]

Bei diesem Thema sollen interaktive Grafiken zur Darstellung von Reisendenströmen im
ÖV entwickelt werden. Zum einen soll eine Ansicht entwickelt werden, die alle an einem
Bahnhof ankommenden und abfahrenden Züge und die Umstiege zwischen den Zügen
als Sankey-Diagramm visualisiert, ähnlich wie bei den aus der Wählerstromanalyse2
bekannten Grafiken. Außerdem sollen in einer weiteren Ansicht die Reisendenströme,
die einen ausgewählten Zug betreffen, über dessen Fahrtstrecke hinweg dargestellt
werden. Bei Bearbeitung als Gruppe oder Projektpraktikum sollen zusätzlich weitere
Visualisierungen aus dem Themengebiet erstellt werden3 .
     • Programmiersprache: TypeScript + React + Tailwind
 2
   Beispiel:                    https://www.zeit.de/politik/deutschland/2021-09/
    waehlerwanderung-bundestagswahl-2021-wahlergebnis-stimmen-parteien
 3
   Beispiele: https://nand.io/projects/peak-spotting

                                                                                     3
Thema 3.1: Einbindung Bike Sharing in MOTIS [A, P, G]

Basierend auf dem General Bikeshare Feed Specification (GBFS)4 Format wird MOTIS5
um die Möglichkeit ergänzt, für die erste und letzte Meile Leihräder zu benutzen.
Es werden Daten über die Vergangenheit aggregiert um eine möglichst zuverlässige
Prognose über die Verfügbarkeit von Leihrädern an bestimmten Orten in der Zukunft
zu ermöglichen. Zudem werden Echtzeitdaten verarbeitet um die Reiseplanung zum
aktuellen Zeitpunkt zu unterstützen. Die Bike Sharing Unterstützung wird in MOTIS
modular umgesetzt: es wird ein neues Bike Sharing Modul erstellt und das Modul
für die intermodale Verbindungssuche wird so angepasst, dass es das Bike Sharing
Modul bzgl. Optionen für die erste und letzte Meile (unter Berücksichtigung der vom
Nutzer angegebenen maximalen Nutzungsdauer) abfragt und diese Optionen während
der Suche berücksichtigt. Die in Elm6 und JavaScript geschriebene Nutzeroberfläche
wird erweitert, so dass die Nutzer/innen die Wahl haben, Bike Sharing für die erste
und/oder letzte Meile zu nutzen. Die Kartendarstellung wird erweitert, so dass optional
alle Fahrräder und Stationen sowie deren aktueller Belegungsstand angezeigt werden
können.

     • Programmiersprache: C++17/20, Elm/JavaScript

Thema 3.2: NeTeX Unterstützung in MOTIS [A, P, E, G]

Ziel ist es neben den Fahrplanformaten GTFS und HAFAS Rohdaten, auch das NeTeX For-
mat in MOTIS zu unterstützen. Insebesondere die Unterstützung von Durchbindungen
und Vereinigungen soll korrekt umgesetzt werden.
Bisherige Implementierungen als Referenz: Bitte schauen Sie sich vor der Bewerbung
auf dieses Thema die entsprechenden Stellen im Code (base/loader/{hrd/gtfs}) an, um
einschätzen zu können, ob Sie der Aufgabe gewachsen sind.

     • Programmiersprache: C++17/20

Thema 3.3: Web Oberfläche MOTIS Rewrite [A, P, G]

Die aktuelle Web Oberfläche in MOTIS ist in Elm entwickelt worden und soll in TypeS-
cript + React neu geschrieben werden. Es sollen alle Funktionen übertragen werden.
Die Kartendarstellung ist bereits in JavaScript und soll übernommen werden.

     • Programmiersprache: React + Typescript + Tailwind

 4
   https://github.com/NABSA/gbfs/blob/v2.2/gbfs.md
 5
   https://motis-project.de
 6
   https://elm-lang.org/

                                                                                     4
Thema 3.4: MOTIS Instance Management [A, P, E, G]

Anforderungen an die zu entwickelnde Instanz-/Fahrplanverwaltung: es wird eine
Fahrplan-Crawler Integration entwickelt, die den Fahrplan-Download ermöglicht. Der zu
implementierende Fahrplan-Crawler soll auf eingebetteten Lua Skripten basieren. Es soll
eine Web Oberfläche entwickelt werden, die die Fahrpläne auflistet. Es können beliebige
Fahrpläne und OpenStreetMap Daten zusammengestellt und geladen werden. Zudem
soll über die Weboberfläche auch die MOTIS Instanz umkonfiguriert und neugestartet
werden können. Es wird ein automatischer Fahrplanwechsel zu einem konfigurierbaren
Zeitpunkt (oder “jetzt sofort”) implementiert. Der Fahrplanwechsel soll so implementiert
werden, dass die MOTIS Instanz permanent erreichbar ist, falls das gewünscht ist. Es
wird also zuerst der neue Fahrplan geladen und dann erst der alte Fahrplan gelöscht.
Bitte schauen Sie sich vor der Bewerbung auf dieses Thema die entsprechenden Stellen
(im base Ordner: launcher, bootstrap, module) im Code an, um einschätzen zu können,
ob Sie der Aufgabe gewachsen sind.

   • Programmiersprache: C++17/20 + Lua, React + Typescript + Tailwind

Thema 3.5: MOTIS User Experience Upgrade [A, P, E]

Um die Nutzerfreundlichkeit von MOTIS zu verbessern, werden in diesem Praktikum
folgende neue Funktionalitäten entwickelt:
   • Bei einer Reisekette für jeden Abschnitt Alternativen einschließlich Takten an-
     zeigen. Beispiel: bei einer Reise vom Luisenplatz nach Berlin Hbf können auf
     dem Weg zum Hauptbahnhof (DA Luisenplatz nach DA Hbf) viele Alternativen
     verwendet werden. Aktuell wird aber nur eine konkrete Alternative (z.B. die Linie
     5) angezeigt. Ziel des Praktikums ist es, Frontend (Elm) und Backend entspre-
     chend zu erweitern, so dass alle Alternativen (hier z.B. Linie F, H, 671, 672,
     usw.) einschließlich der entsprechenden Takte (z.B. “alle 10 Minuten”) angezeigt
     werden.
   • Die Verbindungssuche optimiert unter anderem die Reisezeit. Das führt dazu,
     dass häufig sehr knappe Umstiege gefunden werden. Im Praktikum soll eine
     Funktion “frühere Ankunft an diesem Halt” bzw. “spätere Abfahrt an diesem Halt”
     für jeden Umstiegshalt sowohl im Frontend als auch im Backend eingebaut werden.
     Somit hat man als Nutzer/in die Möglichkeit, sich selbst sicherere Verbindungen
     zusammenzustellen.

   • Programmiersprache: C++17/20 + Elm

                                                                                      5
Sie können auch lesen