3. Teil Programmierpraktikum

Werbung
Prof. Dr. R. Schrader
Anna Schulze [[email protected]]
Birgit Engels [[email protected]]
SS 2006
3. Teil Programmierpraktikum
Abgabe Donnerstag, 29.6.2006
Einsendung des tar- oder rar-gepackten, make- bzw. javac-kompilierbaren Codes bis spätestens
Dienstag, 27.6.2006, 24:00 Uhr an obige Email-Adresse(n)!
Aktuelle Informationen bezüglich des Vorlesungsteils (Skript) sowie des Programmierteils des
Praktikums (Header und Testprogramme) finden sich weiterhin unter :
http://www.zaik.uni-koeln.de/AFS/teachings/courses/Programmierpraktikum/progprakt.html.de
Von dort können die aktuellen Projekt-Dateien (C++-Version [cheader3.tar.gz, ctests3.tar.gz] und
Java- Version [jclasstemplates3.tar.gz]) sowie das Paper zum Canadian Traveller Problem von Barnoy und Schieber heruntergeladen werden.
Aufgabe 1: (Deterministic recoverable k-CTP) Implementieren Sie den vorgestellten Algorithmus
von Bar-Noy und Schieber zur Lösung des deterministischen recoverable k-CTP mit höchstens k
abbaubaren Blockaden.
Hinweise:
Eingabe Der Konstruktor für die Klasse Graph, der den Graphen aus einer Text-Datei aufbaut, muß
für Aufgabe 3 wiederum an ein neues Format angepasst bzw. erweitert werden. Anstelle der
Blockadewahrscheinlichkeit bei den einzelnen Kanten tritt hier die Anzahl der tatsächlichen
Blockierungen, die auf der Kante auftreten. Die Summe dieser Blockaden ist in jeder Beispieldatei kleiner, als die in der letzten Zeile angegebene Anzahl der maximalen Blockaden
k. (Dennoch kann es nicht schaden, eine entsprechende Überprüfung zu programmieren.)
Es ist also bekannt, welche Kante wie oft (bei der Ankunft des Reisenden“) blockiert ist.
”
Diese Information darf zur Berechnung der Reisestrategien“ durch den Algorithmus nicht
”
benutzt werden. Die Information dient nur der späteren Simulation und der Ausgabe eines
eindeutigen Weges vom Startknoten s zum Zielknoten t (siehe 2).
Das neue Format für einen Graph G(V, E) mit n Knoten und m Kanten ( Alle Angaben von
Zeilennummern verstehen sich ohne Berücksichtigung von Kommentarzeilen):
• Die n Zeilen nach den Angaben n (1. Zeile) und m (2.Zeile) enhalten je ausschliesslich
den Wert ttw für den entsprechenden Knoten ( id=Zeilennummer-2). Dieser entspricht
der Zeit nach der alle Blockaden angrenzender Kanten einmal behoben wurden.
• Die folgenden m Zeilen enthalten weiterhin die Daten der m Kanten: Start-Knoten-ID
Ziel-Knoten-ID Kantengewicht Blockadeanzahl
• Die beiden vorletzten Zeilen enthalten weiterhin Start- und Ziel-Knoten
• Die letzte Zeile anthält die maximale Anzahl von Blockaden k.
Ausgabe Die Ausgabe-Datei soll in diesem Aufgabenteil wieder einen eindeutigen Weg enthalten.
Dazu dürfen erst in der Implementierung der Methode makePath() der Klasse DRCTP die
Angaben zu tatsächlichen Kantenblockierungen genutzt werden, da diese erst online bekannt
werden sollen und der vorgestellte Algorithmus gerade das berücksichtigt!!!
makePath() Es wird hier die Benutzung der vom Algorithmus berechneten Reisestrategien“ simuliert,
”
d.h., beginnend beim Startknoten s wird überprüft, ob die Primärkante Pk (s) blockiert ist.
Falls nicht, wird diese benutzt. Andernfalls wird die erste nicht blockierte Kante der Liste
Alternativer Kanten AEk (s) traversiert. Anschliessend muss ein Zähler b für die Anzahl bereits blockierter Kanten an die Anzahl der gerade gefundenen Blockaden angepasst werden.
Achtung! Auch wenn die x-te Kante (x < k + 1) der Liste AEk (s) bereits frei ist und traversiert wird, müssen trotzdem alle Kanten aus AEk (s) auf Blockaden hin überprüft werden.
Sonst werden Informationen verschenkt“: Je schneller sich b k nähert, um so günstigere
”
Strategien können gewählt werden, da Strategien, die weniger mögliche Blockaden in Betracht ziehen auch weniger lange Alternativen zum kürzesten Weg von s nach t beinhalten
müssen.
Nach dem Bereisen der ausgewählten Kante wird ein neuer Knoten v erreicht, der in den
Pfad aufgenommen wird und von dem aus wiederum — wie oben — die nächste Kante ausgewählt wird. Zu Grunde liegt nun die Primärkante Pi (v) und die Liste alternativer Kanten
AEi (v) für die Strategie Si , i = k − b mit einer um b verringerten Anzahl von Blockaden.
Herunterladen