Vorlesung Algorithmen und Datenstrukturen
2002
zurueck zur Startseite
Inhalt
|
|
Aktuelles
- 20.07.2002: Hier sind die
Bilder von der Preisverleihung (die auch von der Vorlesungsseite abrufbar sind).
Endlich sind auch die Hamster mit Quelltexten runterladbar von
dieser Seite.
- 11.06.2002: Die Ergebnisseite ist fertig.
-
14.05.2002: Bis Freitag (17.05.) ist entschieden, wer den Beleg bekommt
und wer nicht. Die Teilnehmer werden benachrichtigt.
Die Preisverleihung ist irgendwann im Juni, vorher werden die
Wettbewerbslabyrinthe nicht veroeffentlicht (s.a.
FAQ 10).
-
23.04.2002: Wir drei Tutoren entscheiden ueber die Hamster-Beleg-Vergabe.
(siehe unten)
-
13.04.2002:
Ich hab ne neue Version der Laufumgebung, die ihr braucht, um die
Wettbewerbslabyrinthe laden zu koennen:
- RunAll heisst jetzt RunHamster (siehe unten)
- Hab das Dateiformat der Labyrinthe erweitert, so dass sie weniger
Platz verbrauchen, leider kann die alte Version das nicht laden
Die beiden Wettbewerbslabyrinthe sind auch dabei.
-
04.04.2002: Hier sind die versprochenen Wettbewerbslabyrinthe.
Eins fuer den einfachen Wettbewerb
(c00.maze),
und eins fuer den erweiterten Wettbewerb
(c20.maze).
Die restlichen Labyrinthe sind bis zur Auswertung geheim.
Wieviele Punkte H2D2 auf den beiden Labyrinthen schafft, wird nicht verraten.
Einige von euch haben mir noch nicht den Namen und Typ ihres Hamsters
geschrieben, bitte tut das noch bevor Ende April alle Hamster auf einmal
kommen.
Und nochwas: Bei der Abgabe der Hamster dulde ich keine Verspaetung!
Schickt eure Hamster bis 30.04.2002 Mitternacht.
Ein Hamster, der erst am 01.05. eingeht oder spaeter, wird nicht gewertet!
(Das faende ich sehr bedauerlich, wenn das passiert, aber ich befuerchte
es schon.) Natuerlich koennt ihr eure Hamster auch jetzt schon einschicken,
wenn ihr fertig seid. Wenn ihr nach der Abgabe eures Hamsters noch
Verbesserungen vornehmt, koennt ihr ihn auch nochmal schicken
(aber bitte mit demselben ZIP-Namen).
Beachtet bitte die Angaben zur Dateistruktur!
-
13.03.2002: Es haben sich viel mehr Teilnehmer angemeldet als wir erwartet
hatten. Wir freuen uns schon auf den April, wenn nach und nach die Hamster
eingereicht werden. Die Teilnehmerliste hab ich alphabetisch sortiert.
[...]
-
05.03.2002: Ich moechte von euch bis Ende Maerz wissen
(zusaetzlich zum Namen des Hamsters), ob ihr einen
einfachen oder erweiterten Hamster einreichen wollt (ein einfacher
erbt von Hamster, ein erweiterter von Hamster2).
Mail an mich.
-
16.02.2002: Anmeldeschluss ist der 28.02.,
die Namen eurer Hamster will ich bis zum 31.03. wissen
(und zwar den Klassennamen und eventuell den davon abweichenden
vollstaendigen Namen, wie bei "TVO (Tierversuchsopfer)"),
abgeben muesst ihr die Hamster bis zum 30.04.
Fehlerkorrektur:
- Die Innereien der
lookForward()-Methode
lagen quer, so dass der Hamster2 auch bei absteigenden Klippen nichts sah,
aber nun kann er was er koennen soll.
-
11.02.2002: Ich hab die bisher aufgetretenen Fragen zusammengestellt in einer
FAQ-Liste
damit andere auch in den Genuss der Tips und Hilfestellungen kommen.
-
07.02.2002:
Weil schon zwei Anfragen kamen, verrat ich in der FAQ-Liste, was H2D2 leistet.
-
03.02.2002: Fehlerkorrektur:
- Wenn der Hamster einen Error produzierte,
wurde die gesamte Laufzeitumgebung abgeschossen.
- Wenn ein Hamster im Wettbewerb einen Error erzeugt, werde ich in
Zusammenarbeit mit den Hamsterautoren den Fehler beheben. Denn meist
liegt das dann nicht am Hamsterprogramm selbst.
- Ein kleiner Patzer ist mir in der Klasse Hamster2 unterlaufen:
getHeightDifference() soll keinen Parameter haben. (Das fiel mir nicht auf,
weil ich die Methode erst nach der Praesentation auf Anfrage eingebaut hab,
und mein Testhamster sie nicht verwendete.)
-
01.02.2002: Ab sofort ist die aktuelle
Teilnehmerliste abrufbar.
-
31.01.2002: Der Wettbewerb ist eroeffnet.
Ab jetzt wird nichts wesentliches mehr geaendert, alles was jetzt noch
kommt sind Korrekturen. Wie zum Beispiel heute:
- Kleines Problem beim Timeout bescherte uns einen doppelten Abbruch des Hamsters.
- Anzeige der verstrichenen Zeit in die Statuszeile eingefuegt.
-
28.01.2002: Ein boeser (und schon korrigiert geglaubter) Programmfehler
verhinderte einen Start der world, und die Dokumentation enthielt einen
Fehler: javac kennt -cp nicht.
-
27.01.2002: Ab sofort ist die Laufzeitumgebung (mit Dokumentation) verfuegbar,
so wie es unten beschrieben ist.
contest2002.zip (13.03.2002, 225KB)
Zusaetzlich sind hier die Quellcodes der Laufzeitumgebung
contestsrc.zip (13.03.2002, 84KB)
-
21.01.2002: [...]
-
15.01.2002: Die Laufzeitumgebung wird Ende Januar veroeffentlicht.
Beginn des Wettbewerbs ist der 31.01.2002, Abgabeschluss ist der
30.04.2002.
Einleitung
Seit 1998 wird im Rahmen der Vorlesung Algorithmen und Datenstrukturen
ein Programmierwettbewerb durchgeführt - das Hamsterproblem:
Ein Hamster, der seinen Wintervorrat an Getreide noch nicht gesammelt
hat, wird in einem Labyrinth ausgesetzt. In diesem Labyrinth sind
Maiskörner verteilt.
Die Aufgabe des Hamsters ist es, möglichst viele Maiskörner
zu sammeln und zu seinem Heimatfeld (von dem er startet) zu bringen.
Dabei muss er die Sammelwege möglichst kurz halten.
Am Ende muss er wieder zuhause sein, um seinen Winterschlaf beginnen
zu können.
Aufgabenstellung
In diesem Programmierwettbewerb soll ein Programm geschrieben werden,
das den Hamster so durch das Labyrinth steuert, dass er moeglichst
viel Getreide mit moeglichst wenigen Schritten einsammelt.
Dazu steht eine Reihe von Funktionen zur Verfügung,
mit denen dem Hamster bestimmte einfache Befehle gegeben werden
können (z.B. "Drehe Dich nach links!", "Gehe ein Feld geradeaus!",
"Nimm drei Maiskörner auf!") oder mit denen man Informationen
über die Umgebung des Hamster erhält (z.B.
"Wieviel Mais liegt auf dem Feld auf dem ich gerade bin?",
"Was sehe ich vor mir?").
Wie gut ein Programm die Aufgabe gelöst hat, wird anhand der Anzahl
der gesammelten Maiskörner und der Länge des beim Sammeln
zurückgelegten Weges entschieden.
Die Teilnahme am Programmierwettbewerb ist eine der vier Aufgaben
(neben der Probeklausur und den zwei Belegen), von denen fuer die
Zulassung zur Klausur zwei erfuellt werden muessen.
Seitenanfang
Installation und Nutzung
Voraussetzung um einen eigenen Hamster schreiben und testen zu können,
ist die Wettbewerbsumgebung, die alle benötigten Klassen und
Programme beinhaltet.
Diese Umgebung erfordert mindestens ein JDK 1.2.2 und sollte eigentlich
auf allen Systemen laufen, auf denen das installiert ist.
(Informationen, wo's nicht läuft, sind jederzeit willkommen.)
Installation:
Dabei entstehen
-
eine Datei "contest.jar" mit den Klassen der Laufzeitumgebung,
-
ein Verzeichnis "docs" mit dieser Dokumentation,
-
ein Verzeichnis "mazes" für die Labyrinthe,
-
ein Verzeichnis "hamster" für die Wettbewerbshamster.
In "hamster" liegt ein Beispielhamster
(
LeftHand),
den ihr euch anschauen und testen koennt, aber bitte vergesst seine
Strategie und schreibt eine bessere.
In "mazes" liegen schon einige Labyrinthe, ihr solltet aber
auch eigene erstellen, um euren Hamster zu testen. (Zur Unterscheidung von
einfachen und erweiterten Labyrinthen liegen sie in den Unterverzeichnissen
mazes/flat und mazes/ext.)
Das Archiv "contest.jar" enthält die Java-Programme
-
World, zum Erzeugen und Editieren von Labyrinthen und zum graphischen
Lauf des Hamsters,
-
MazeRunner, eine Kommandozeilen-orientierte grafiklose Ablaufumgebung
für schnelle Durchläufe,
-
RunHamster, lässt einen Hamster auf mehreren Labyrinthen mit dem
MazeRunner laufen.
Zusaetzlich gibt es RunMaze um mehrere Hamster
auf einem Labyrinth laufen zu lassen und RunAll um mehrere Hamster
auf mehreren Labyrinthen laufen zu lassen.
Hier ist eine
Beschreibung
der World.
Wenn etwas unklar oder nicht wie erwartet ist, lest sie euch nochmal
aufmerksam durch. Und wenn ihr in dem Durcheinander tatsächlich
keine Antwort auf eure Frage findet, schreibt an einen der zuständigen
Tutoren.
Das Programm World erlaubt das Erstellen neuer Labyrinthe und das
Verändern bereits existierender. Die Labyrinth-Dateien
(mit der Endung ".maze") sollten im Verzeichnis
"mazes" (oder einem Unterverzeichnis davon) abgelegt werden,
weil MazeRunner sie von dort laedt.
Ein Hamster-Programm wird als Java-Klasse implementiert, die von der
Klasse algds.c2002.Hamster erbt.
(Siehe Implementierung eines Hamsters weiter unten.)
Da die kompilierte Klasse im Verzeichnis "hamster" abgelegt wird,
muss man dieses Verzeichnis zusätzlich zum Archiv in den Klassenpfad
aufnehmen.
Unix/Linux:
java -cp contest.jar:hamster algds.c2002.World
Windows:
java -cp contest.jar;hamster algds.c2002.World
(Unterschied: Unix hat Doppelpunkt als Pfadtrenner, Windows hat Semikolon)
Alternativ kann auch die Kommandozeilen-Version verwendet werden,
wobei hier das Labyrinth (ohne das Verzeichnis "mazes/" und Endung
".maze", aber mit eventuellen Unterverzeichnissen)
und die Hamster-Klasse (ohne "hamster/" und ".class")
als Parameter anzugeben sind:
java -cp contest.jar:hamster algds.c2002.MazeRunner Hamster Maze
Wenn ihr euren Hamster auf mehreren Labyrinthen direkt hintereinander
laufen lassen wollt, koennt ihr RunHamster verwenden:
java -cp contest.jar:hamster algds.c2002.RunHamster Hamster Maze1 ... MazeN
Also z.B.
java -cp contest.jar:hamster algds.c2002.RunHamster LeftHand flat/weg01 ext/treppen1
Ihr könnt statt dieser langen Befehle auch die mitgelieferten
Batch-Dateien run, world (Unix-Systeme),
run.bat, world.bat (Windows) aufrufen.
Auf Unix-Systemen muesst ihr diese Scripte erst mit
chmod 755 run world
lauffaehig machen.
Seitenanfang
Labyrinth
Ein Labyrinth besteht aus sechseckigen Feldern, die wie Bienenwaben angeordnet
sind und ein Sechseck bilden. Durch Waende zwischen den Feldern bilden
sich Gänge und Räume. Auf einigen Feldern liegen Maiskörner.
Das ganze Labyrinth ist von Wänden umrandet,
so dass der Hamster nicht "rausfallen" kann.
Das Heimatfeld des Hamsters ist immer das mittlere Feld des Labyrinths.
In der erweiterten Variante gibt es mehrere Hoehenstufen, die durch
Schraegen und Klippen verbunden sind. An Schraegen kann der Hamster in
beiden Richtungen (rauf und runter) laufen, an Klippen kann er nur
hinunterspringen, jedoch nicht wieder hinauf.
Die Ausdehnung des Labyrinths ist dem Hamster nicht von vornherein
bekannt, es gibt aber die Beschraenkung auf eine Seitenlaenge von
hoechstens 30 Feldern.
Es muss nicht jedes Feld des Labyrinths erreichbar sein, es ist aber
auf den Wettbewerbslabyrinthen sichergestellt, dass man von jedem
erreichbaren Feld wieder heimkommt
(Überprüfungsmöglichkeit in der World).
Ein erweitertes Labyrinth mit Hamster, und ein einfaches Labyrinth.
Beschreibung ist
hier.
Seitenanfang
Implementierung eines Hamsters
Das Schreiben eines Hamster-Programms ist relativ einfach: Es stehen wenige
Steuerbefehle zur Verfügung, die man kennen muss. Die Schwierigkeit
besteht darin, sich eine geeignete Strategie zum Erkunden des Labyrinthes
und Sammeln der Maiskörner zu überlegen.
Jeder Hamster muss als Java-Klasse implementiert und von der Klasse
algds.c2002.Hamster abgeleitet werden.
Das Leben eines Hamsters spielt sich vollständig
in der Methode run ab, die für jeden Hamster neu implementiert
werden muss.
Zur Steuerung stehen die in der Beschreibung zu
algds.c2002.Hamster
dokumentierten Methoden zur Verfügung.
Wenn der Hamster nicht nur auf den normalen Labyrinthen laufen soll,
sondern auch auf den erweiterten, dann muss er statt von Hamster
von Hamster2
abgeleitet werden. Die Klasse
algds.c2002.Hamster2
stellt Methoden zur Verfügung, um mit Klippen umzugehen.
Als Beispiel ist hier der einfache Hamster
LeftHand
gegeben.
Der Quelltext ist im Unterverzeichnis hamster abgelegt.
Die Hamster-Klasse ist wie üblich zu kompilieren
und ebenfalls im Unterverzeichnis hamster abzulegen:
Rufe den Compiler im Verzeichnis
java/contest/hamster(*)
so auf:
javac -classpath ../contest.jar;. LeftHand.java
Anschliessend starte World, lade ein Labyrinth und
den Hamster. Mit dem Start-Button geht's dann los.
Oder lass den Hamster ohne Grafik laufen (hier auf einem mitgebrachten
Labyrinth), indem du im Verzeichnis
java/contest(*)
diesen Befehl eingibst:
java -cp contest.jar;hamster algds.c2002.MazeRunner LeftHand flat/weg01
bzw.
run LeftHand flat/weg01
Seitenanfang
Regeln
Es gibt zwei Wettbewerbe:
Einen Wettbewerb aller Hamster (einfach und erweitert),
der auf einfachen Labyrinthen ausgetragen wird,
und einen Wettbewerb der erweiterten Hamster,
der auf erweiterten Labyrinthen ausgetragen wird.
Diese beiden Wettbewerbe werden getrennt prämiert.
Ein einfaches und ein erweitertes Labyrinth werden Anfang April bekanntgegeben.
Die uebrigen Labyrinthe und ihre genaue Anzahl sind bis
zum Abgabeschluss geheim (weil wir sie erst kurz vorher erstellen werden
:-) ). Es werden aber mindestens 10 Labyrinthe pro Wettbewerb sein.
Es gelten folgende Regeln:
-
Es darf vom Paket algds.c2002 nur die dokumentierte
Schnittstelle
der Klassen
Hamster,
Hamster2 und
Constants
verwendet werden. Es ist verboten, direkt auf die internen Strukturen der
Laufumgebung zuzugreifen, oder das Labyrinth selbstaendig von der Platte
zu laden.
Die Klassen der Java-Bibliothek duerft ihr natuerlich benutzen (z.B. die
aus dem package java.util).
-
Ein Hamster, der direkt von
Hamster
abgeleitet ist,
kann nur auf den einfachen Labyrinthen laufen und wird nur am Wettbewerb
auf den einfachen Labyrinthen teilnehmen.
Ein Hamster, der von Hamster2
abgeleitet ist,
kann auch auf den erweiterten Labyrinthen laufen und wird an beiden
Wettbewerben teilnehmen.
-
Für die Platzierung im Wettbewerb ist die Platzierung der Hamster
auf den einzelnen Labyrinthen massgeblich. Das heisst:
Auf jedem einzelnen Labyrinth werden die Hamster nach den erreichten
Labyrinthpunkten (LP) platziert.
Fuer die Plaetze werden dann Bewertungspunkte (BP) vergeben,
aehnlich wie in
der Formel 1.
(Die genauen Bewertungspunkte richten sich nach der
Teilnehmerzahl.)
Schliesslich werden die Hamster nach der Summe der erreichten BP platziert.
-
Für jedes Maiskorn, das auf dem Heimatfeld abgelegt ist,
erhält der Hamster 10 Punkte.
Für jeden Schritt wird ihm 1 Punkt abgezogen.
Für jede Kollision mit einer Wand oder einer aufsteigenden Klippe
werden ihm 200 Punkte abgezogen.
-
Verursacht der Hamster eine Exception, die seinen Lauf stoppt ("Absturz"
des Hamsters), wird er mit 3000 Minuspunkten betraft.
-
Wenn der Hamster während des Wettbewerbs in der grafikfreien Umgebung
für drei Minuten (3 min) keinen Schritt macht, wird sein Lauf beendet
und der Hamster mit 3000 Minuspunkten bestraft.
Zusätzlich wird ein Zeitlimit von zwei Stunden (120 min) gesetzt,
in dem der Hamster seinen Lauf beenden muss. Schafft er es nicht in der
vorgegebenen Zeit, so wird sein Lauf abgebrochen und der Hamster
mit 3000 Minuspunkten bestraft.
(Kein funktionierender Hamster hat im letzten Jahr das Zeitlimit
überschritten, es dient nur der Erkennung von Endlosschleifen.)
-
Beendet der Hamster seinen Lauf normal, ist dabei aber nicht
auf den Heimatfeld, wird er mit 1000 Minuspunkten bestraft.
-
Da ein Hamster theoretisch beliebig viele Minuspunkte
machen kann, indem er einfach nur hin und her laeuft (z.B. als Folge einer
Endlosschleife, bei der der Hamster noch laeuft),
wird die Punktzahl (nach dem Aufaddieren eventueller Strafpunkte)
nach unten auf -10000 beschraenkt.
Die erreichte Punktzahl berechnet sich wie folgt:
P =
10 * gesammelteKoerner - gegangeneSchritte - 200 * gemachteKollisionen
zusätzlich kommen hinzu:
Wenn Absturz oder Zeitüberschreitung (Schrittzeit oder Gesamtzeit):
-3000, sonst Wenn nicht auf Heimatfeld beendet: -1000, sonst 0
Labyrinthpunkte = max(P, -10000)
Den Siegern winken natürlich tolle Preise !!!
Seitenanfang
Ablauf
Teilnahmeberechtigt am Wettbewerb sind alle Studentinnen und Studenten,
die die Vorlesung
Algorithmen und Datenstrukturen von Prof. Roesner
im WiSe 2001/2002 und SoSe 2002
hören, und zwar einzeln oder im Team von 2 Personen
(keine grösseren Gruppen!).
Natürlich sind auch andere "Hamstertrainer" willkommen,
die würden aber ausser Konkurrenz teilnehmen (so wie mein
eigener Hamster).
Falls ihr vorhabt, an dem Wettbewerb teilzunehmen, schreibt mir
bis Ende Februar eure Namen. (Nach neuesten Informationen ist die
Angabe der Uebungsgruppe und auch der Matrikelnummer nicht notwendig!)
Bis Ende Maerz habt ihr Zeit, euch einen Namen fuer euren Hamster
auszudenken. Sobald ihr euch entschieden habt,
schreibt mir den Klassennamen und eventuell den
vollstaendigen Hamsternamen (falls der vom Klassennamen abweicht),
damit wir doppelte Namen vermeiden koennen.
Ausserdem moechte ich
von euch bis Ende Maerz wissen, ob ihr einen
einfachen oder erweiterten Hamster einreichen wollt (ein einfacher
erbt von Hamster, ein erweiterter von Hamster2).
Ihr koennt spaeter sagen, dass ihr nicht mehr teilnehmen wollt (oder
einfach keinen Hamster schicken), aber nur wer sich angemeldet hat,
wird gewertet (als Beleg und im Wettbewerb).
Abgabeschluss ist der 30.04.2002.
Natuerlich stehen wir gern fuer Fragen zur Verfuegung, per EMail
oder im Tutor-Forum (auf der Tutorseite).
Um teilzunehmen müsst ihr ein kommentiertes
Hamster-Steuerprogramm schreiben und eine Dokumentation anfertigen
(in einem Windows- und Unix-kompatiblen Format,
vorzugsweise als TXT oder HTML), in der das Hamsterprogramm beschrieben wird.
Dazu gehört die Beschreibung
des Lösungsansatzes (der Erkundungs- und Sammelstrategie),
und der verwendeten Datenstrukturen (wie wird das Labyrinth
im Hamsterprogramm dargestellt).
Auf ein javadoc des Programms koennen wir verzichten, geht lieber im
Dokumentationstext auf die Aufgaben eurer Klassen und Methoden ein.
Ein Hamster hat erfolgreich teilgenommen, wenn er funktioniert
und gut dokumentiert ist,
also die gestellte Aufgabe im einfachen Labyrinth erfuellt
(insbesondere keine Exceptions erzeugt, Nachbesserungen sind möglich)
und man aus der Beschreibung erkennen kann, wie der Hamster was tut.
Hier sind unsere Wünsche zur
Dateistruktur
des Hamsters.
Jeder Teilnehmer
muss spätestens am 30.04.2002 den Quelltext seines Hamsters
mit Dokumentation (alles in einer ZIP-Datei gepackt) per EMail an
[eine nicht mehr vorhandene Adresse]
senden.
Wir drei Tutoren (Stephan Finn, Thomas Steube und Christian Semrau) werden entscheiden,
welcher Hamster den Beleg kriegt. Dazu werden wir alle Hamster auf einem Satz einfacher
Labyrinthe (die Wettbewerbslabyrinthe) laufen lassen, und anhand der Ergebnisse entscheiden,
welcher Hamster in der Lage ist, "mit moeglichst wenigen Schritten moeglichst viel Getreide
einzusammeln". Ausserdem sollen die Hamster gut dokumentiert und der Quelltext kommentiert
sein.
Zusaetzlich werden die erweiterten Hamster auf einem Satz von erweiterten Labyrinthen laufen,
die dort erzielten Ergebnisse sind fuer den Wettbewerb relevant, aber nicht fuer den Beleg!
Fragen zur Programm-Umgebung richtet ihr bitte an Christian Semrau (contest2002 (at) chsemrau (punkt) de).
Betreuer des Wettbewerbs sind neben mir
Thomas Steube und Stephan Finn.
Seitenanfang
Status vom 18.12.2005, Christian Semrau