Semester | Sommersemester 2022 |
Modulnummer | INF-ALG-17 |
Veranstaltungsnummer | INF-ALG-009 , INF-ALG-010 |
Studiengänge | Wirtschaftsinformatik Master, Informatik Master, Informations-Systemtechnik Master |
IBR Gruppe | ALG (Prof. Fekete) |
Art | Vorlesung & Übung |
Dozenten | Dr. Phillip Keldenich Wissenschaftlicher Mitarbeiter keldenich[[at]]ibr.cs.tu-bs.de +49 531 3913112 Raum 317 |
LP | 5 |
SWS | 2+2 |
Ort & Zeit | Vorlesung: Dienstag 11:30-13:00, SN19.3 |
Beginn | Erste Vorlesung: 25.04.2022 (im Übungsslot) |
Voraussetzungen | Kenntnis von Algorithmen und Datenstrukturen sowie Programmierkenntnisse. Kenntnisse von C++ und Python sind grundsätzlich nützlich, müssen aber nicht unbedingt mitgebracht werden. Die Vorlesung kann ausdrücklich auch von fortgeschrittenen Bachelorstudenten besucht werden. Die Prüfung kann in diesem Fall sowohl als reguläre Bachelor-Prüfung (nach §4.11 der aktuellen BPO) als auch als vorgezogene Master-Prüfung abgelegt werden. |
Scheinerwerb | Während des Semesters werden Hausaufgabenblätter ausgegeben, die von den Teilnehmern bearbeitet werden müssen. Am Ende des Semesters gibt es eine mündliche Prüfung. |
Anmeldung und KommunikationWir verwenden auch für diesen Kurs eine Mailingliste. Über diese Liste versenden wir Material und Ankündigungen, beispielsweise wenn kurzfristig eine Veranstaltung ausfallen sollte. Wir bitten daher alle Teilnehmer und Interessenten, sich möglichst auf dieser Liste anzumelden. InhaltBeim Algorithm Engineering geht es grob vereinfacht gesagt darum, Algorithmen aus der Theorie möglichst effizient und robust in die Praxis umzusetzen. Dabei kann es auch vorkommen, dass man Algorithmen entwirft oder modifiziert, damit sie sich besser in die Praxis umsetzen lassen. In diesem Kurs werdet Ihr folgendes lernen. Allgemeine Patterns und Guidelines zum Entwickeln und Tunen von Algorithmen:
Effizienten Code in C++ schreiben und Performance-Pitfalls moderner Hardware vermeiden:
NP-Schwere kombinatorische Probleme in vielen Fällen mit wenig (Python-)Code effizient lösen:
Es gibt inhaltliche Überlappungen mit dem Kurs Mathematische Methoden der Algorithmik und dem Algorithmik-Teamprojekt. Für diesen Kurs solltet Ihr euch grundsätzlich zutrauen, Codebeispielen in C++ und Python zu folgen, sowie ein Interesse am Entwickeln von Algorithmen und auch am Programmieren haben. Der Schwerpunkt der Vorlesung liegt auf dem dritten Teil zu NP-schweren Problemen. LernzieleEinführungIn dieser Vorlesung wird ein Überblick über das restliche Semester gegeben. Erst soll gelernt werden, dass aufgrund moderner CPU-Architekturen eine gute Implementierung einen großen Unterschied machen kann und Konstanten nicht zu vernachlässigen sind. Dann soll gelernt werden, dass dank SAT, LP/MIP und CP viele NP-schwere Probleme mittlerweile gut optimiert werden können. Ein Beispiel hier ist das TSP. CPU ArchitekturModerne CPU-Architekturen sind sehr komplex geworden und weichen mittlerweile stark vom theoretischen Modell ab. Unterschiedliche Operationen, z.B. Addition vs. Division, können nicht nur unterschiedlich lange brauchen sondern selbst die gleichen Operationen können in unterschiedlichen Kontexten unterschiedliche performant sein da sie nicht strikt sequentiell ausgeführt werden (ILP, Branch Prediction, etc.). In dieser Vorlesung sollen die Studierenden lernen, warum Programme trotz gleicher Instruktionszahl (und minimalen Cache-Misses) stark abweichende Laufzeiten haben können und wie sie dies beeinflussen können. Memory HierarchyDa schneller Speicher teuer und aufwendig ist, wird das Prinzip der Lokalität genutzt und auf unterschiedliche Speicherlevel bzw. Caches gesetzt. In dieser Vorlesung sollen die Studierenden lernen, wie der Speicher funktioniert und wie sie diesen am effizientesten Nutzen. Zusätzlich werden die wichtigsten Datenstrukturen betrachtet. ParallelisierungAufgrund stagnierender CPU-Frequenzen wird immer mehr auf Parallelisierung gesetzt. Parallelisierung ist aber nicht einfach und mit einigen Problem und Overheads (insb. bei der Synchronisierung) verbunden. In dieser Vorlesung soll gelernt werden, wie Parallelisierung sinnvoll implementiert weren kann und was es dabei unbedingt zu vermeiden gilt. Linear ProgrammingLinear Programming ist ein mächtiges Werkzeug in vielen Kontexten: Einige Optimierungsprobleme lassen sich direkt als LP ausdrücken. Andere Optimierungsprobleme haben eine hilfreiche Linear Relaxation. Lineare Programme können sowohl in der Theorie als auch in der Praxis effizient gelöst werden. Insbesondere lassen sich LPs iterativ lösen. In dieser Vorlesung sollen die Studierenden die Grundlagen des Linear Programmings (Grundlegende Formulierung, Algorithmen, Dualität, Cutting Planes,…) und deren Nutzen lernen. Zusätzlich soll der Gurobi-Log verstanden werden. Mixed Integer ProgrammingMixed Integer Programming ist eine Technik, mit der sich viele wichtige aber NP-schwere Optimierungsprobleme optimal oder zumindest gut lösen lassen. Die Technik nutzt die Lineare Relaxierung aus um mittels Branch and Bound und Cutting Planes zur optimalen Lösung zu gelangen. In dieser Vorlesung sollen die Studierenden die umfangreichen mathematischen Modellierungsmethoden (und deren Probleme) kennen lernen, um so effiziente Modelle für diverse Probleme erstellen zu können. Traveling Salesman ProblemAm Beispiel vom TSP soll die Funktionsweise von Mixed Integer Programming Solvern tiefer verstanden werden. Ein Großteil der Techniken die Mixed Integer Programming Solver ausmachen, wurde vorher am Traveling Salesman Problem erprobt. Dies macht es zu einem exzellenten Beispiel um Branch and Bound (schon vorher behandelt) und insbesondere Cutting Planes (die hier recht anschaulich sind) tiefer zu verstehen. Hierbei gehen wir auch ein wenig auf die theoretischen Hintergründe ein. SATModerne SAT-Solver können regelmäßig Probleme mit hunderttausenden Variablen und millionen von Klauseln für reale Anwendungen lösen. In dieser Vorlesung gehen wir auf die hierfür genutzten Techniken ein, insbesondere dem Lernen von Konfliktklauseln. Im Anschluss sollten die Studierenden genug Kenntnisse haben, um einen mäßig effizienten SAT-Solver selber implementieren zu können. Constraint ProgrammingConstraint Programming erlaubt es komplexe kombinatorische Probleme zu modellieren, leider waren die Solver aber lange Zeit lang nicht sehr konkurrenzfähig (insb. im Vergleich zu MIPs). Dies scheint sich jetzt insbesondere durch CP-SAT geändert zu haben. CP-SAT nutzt als Grundtechnik einen SAT-Solver mit Lazy Clause Generation, integriert aber u.A. auch den Simplex-Algorithmus. In dieser Vorlesung sollen die Studierenden die Grundideen von CP-SAT sowie dessen Anwendungsmöglichkeiten (insb. im Vergleich zu MIPs) erlernen. HeuristikenNicht immer sind MIP/SAT/CP-Solver selber in der Lage, vernünftige Lösungen zu generieren. In diesen Fällen ist die Nutzung von Heuristiken sinnvoll. Diese können dann genutzt werden um selbständig Lösungen zu finden, oder etwa den MIP-Solver zu unterstützen. In der LNS kann der MIP/CP-Solver selbst auch genutzt werden, um mit wenig Aufwand, gute Heuristiken zu bauen. Zusätzlich werden sich noch weitere Ansätze wie Reinforcement Learning sowie Heuristiken angesehen. Im Anschluss sollten die Studierenden in der Lage sein, für die meisten (kombinatorischen) Probleme eine einfache, aber brauchbare Heuristik zu bauen. |
Technische Universität Braunschweig
Universitätsplatz 2
38106 Braunschweig
Postfach: 38092 Braunschweig
Telefon: +49 (0) 531 391-0