Hamsterdokumentation 

Hamstername : Twister

Erzeuger : Ronny Bubke
Matr-Nr    : 160838


Erkunden:

Mein Hamster versucht sich immer soweit wie moeglich links zu halten. Bevor er in den naechsten Raum geht, dreht er sich ganz nach rechts (2 mal) und dann wieder ganz nach links (5 mal). 

Ich verwende eine Klasse Raum, die alle mglichen Eigenschaften eines Feldes hat. Dabei erhaelt jeder Raum eine Nummer, die dann zur Identifizierung genutzt wird. 
Ausserdem werden alle Nachbarraeume verlinkt.
Diese Rume werden dann mit ihrer Position in einer virtuellen Map gespeichert. So baue ich mir das Labyrinth virtuell noch einmal auf.

Zur Bestimmung eines Raumes, der als naechstes erkundet werden soll, benutze ich einen Stack, der den genauen Hinweg, ohne Zyklen, speichert. 
Zyklen entstehen dann, wenn der Hamster sich in einer Sackgasse oder in Raum, dessen Nachbarraeume schon besucht wurden, befindet.
Dann wird der Stack solange virtuell zurueck gelaufen, bis ein Raum gefunden wurde, der entweder der Hamsterbau ist oder dessen Nachbarraeume noch nicht alle erkundet wurden. Dieser gefundene Raum, von dem wir aus weiter gehen muessen, wird dann einer Klasse "PathTree" uebergeben, die dann eine Liste mit dem kuerzesten Weg zum gesuchten Knoten zurueckgibt.
Dieser Weg wird dann abgegangen und der Hamster faengt von dem gesuchten Knoten aus, wieder zu erkunden.

Klippen sieht mein Hamster als Waende an. Daher ist er auch nur bedingt auf der erweiterten Welt erfolgreich.

In sog. echten Sackgassen nimmt der Hamster schon beim erkunden maximal 20 Korn mit heraus. Der von mir entwickelte Algorithmus versucht alle Raeume schon beim erkunden mit "modulo 20 == 0" Koerner zu bedecken. Dadurch werden spaeter beim absammeln etliche Wege zu Feldern mit weniger Koernern erspart. So auch in den Sackgassen. Falls die Kornanzahl in der Sackgasse 20 uebersteigt, wird alles so verteilt, dass nachher nur noch volle Ladungen transportiert werden muessen. D. h. bei 27 Koernern auf einem Feld werden 7 Koerner mitgenommen, da der Hamster ja sowieso spaeter beim einsammeln dort noch einmal lang laufen muss. Dann hat er gleich ein volle Ladung, die er zum HB bringen kann.

Abgrasen:

Jetzt wo die virtuelle Map dem richtigen Labyrinth entspricht, sind alle Raeume miteinander verknuepft. Nun wird ein optimaler virtueller Suchbaum aufgebaut, der vom Hamsterbau in 6 Richtungen verzweigt. Die Aeste die kein Korn enthalten werden rausgestrichen. (Eigentlich wollte ich noch etwas implementieren, dass Wege im Suchbaum zu Raeumen, die weniger (Korn*10) Punkte enthalten, aus dem Baum gestrichen werden. Habe aber leider keine Zeit mehr :-(.  )

Nun klappert der Hamster zufaellig alle Richtungen im Suchbaum ab. Dies geschieht dadurch, dass der Hamster in alle Richtungen bis zum Ende eines Astes geht und dann das dort vorraetige Korn einsammelt und wenn er noch nich voll ist, an der naechsten Kreuzung ablegt. Von dort aus, streicht er den begangenen Ast, jetzt ohne Korn, aus dem Baum. Dann gehts in den naechsten moeglichen Ast, bis der Hamster entweder voll ist oder alle Aeste leer sind. 
Ist der Hamster mit dem einsammeln fertig ist auch die run-Methode beendet.
 
