-->

Dokumentation: Inu

Thursday, May 03rd, 2007 |  Author: Jan Lachnit

copyleft (k) 2007

geschrieben von
Jan Lachnit , Matrikel: [zahl]
Stephan Winkler , Matrikel:[zahl]

Inhalt:

1. Einführung, oder warum ich diese Dokumentation schrieb.

2. Inu, die Entstehungsgeschichte

3. Inu, Funktion und so

4. Danksagungen

1. Einführung, oder warum ich diese Dokumentation schrieb

Als ich Anfangs Inu programmierte war es ausschliesslich um den Schein dafür zu bekommen.
Beim schreiben dieser Dokumentation verhält es sich genauso.

2. Inu, die Entstehungsgeschichte

Inu ist eine tolle von Jan Lachnit und Stephan Winkler entwickelte Verbesserung der bekannten Struppi KI. Bei der Programmierung handelten wir nach zwei wichtigen Grundprinzipien:

1. Es muss einfach sein.
2. Es muss schnell gehen.

Nach eingehender, ein-minütiger Tiefenanalyse der Vorgehensweise der Struppi KI wurden die Hauptnachteile der KI ausgearbeitet und studiert. Nach etwa einer weiteren Minute stellten wir fest, dass drei Punkte wahrscheinlich am einfachsten umzusetzen sein würden:

1. Die drei Hunde sollten nicht alle das Gleiche machen.
2. Die Hunde sollten sich erstmal um die nähesten Schafe kümmern.
3. Die Hunde sollten, wenn genug Schafe im Kreis sind, diese bewachen.

Mit diesem gesammelten Wissen machten wir uns an die Arbeit.

3. Inu, Funktion und so

Unsere vorläufige Version von Inu sollte möglichst wenig von Struppi abweichen, da sonst die Gefahr bestanden hätte, dass wir uns über das Programmieren Gedanken machen müssten, also schrieben wir einfach eine Kopie von Struppi um. Die drei Veränderungen, die wir an der KI vorgenommen haben sind folgende:

3.1 Drei Targets und ein count
Da jede Hund-Instanz die gleiche Think-Methode aufruft bauten wir einen count ein. Anfangs steht er auf 1. Aus Struppi’s Target machten wir drei. die if-Schleife die dafür zuständig war wurde einfach erweitert:

if (dist>distanz || target1==null) {
target3 = target2;
target2 = target1;
target1 = e;
distanz = dist;
}

Darunter setzten wir dann einen Switch, der je nachdem auf was der count steht dem Hund ein anderes Target zuweist und count weiter stellt:

switch (count){
case 1: count=2; target=target1; break;
case 2: count=3; if (target2!=null){target=target2;} break;
case 3: count=1; if (target3!=null){target=target3;} break;
}

Damit hat jeder Hund ein anderes Ziel und sie kümmern sich gemeinsam um die drei am weitesten entfernten Targets.

3.2 Liebe deinen Nächsten

Struppi sucht das Schaf, das am weitesten entfernt ist indem er in einer for-Schleife alle Entitys durchgeht und sich das am weitesten entfernte Target nimmt. Durch ändern der Auswahlkriterien in der if Anweisung, konnte erreicht werden, dass sich unser Inu das nächste Schaf nimmt:

if (dist < distanz || target1==null)

3.3 Was man hat, hat man

Damit sich Inu, nicht um überflüssige Schafe kümmert, wurden zwei verschiedene Befehlsmuster mit if-else getrennt. Sollte if(t.getCurrentCount()

if (!t.isTarget(e) || !t.isInside(e)) {continue;} // uninteressant für Aufgabe, bzw. schon im Target

3.4 Warum Inu trotzdem erst nicht bestand

Tja, tolles Prinzip und funktioniert auf der Standard-Karte mit zufällig verteilten Schafen auch super. Doch auf der Belegkarte stehen die Schafe alle in zwei Reihen! Die drei Hunde rennen dann zu den drei nähesten Schafen und verscheuchen damit den Rest…
Darum stellten wir Inu wieder darauf ein, sich um die Schafe zu kümmern die am weitesten entfernt sind., mit überraschend guten Ergebnissen!

if (dist < distanz || target1==null)

Momentan befindet sich Inu auf Platz 26 und hat somit sicher auch einige KI’s geschlagen bei denen sich ihre Schöpfer richtig ins Zeug gelegt haben. Haha.

4. Danksagungen

Jan Lachnit:
Ich möchte meiner Freundin danken, die mich immer wieder daran erinnert hat, dass ich die KI noch programmieren muss. Von ihr stammt auch der Name Inu, was Hund auf japanisch heisst.
Dann möchte ich noch meiner Mutter danken, die dafür gesorgt hat, dass ich nochmal geschaut habe ob meine KI schon getestet wurde. Ohne sie hätte ich nicht bemerkt, dass Inu zuerst nicht bestanden hat.
Zuletzt danke ich meinem Partner Stephan, der mich auch geistig und seelisch unterstützt hat, bzw. mich ständig abgelenkt hat, wenn ich grad am Programmieren war.

Stephan Winkler:
Ich möchte eigentlich nur Jan danken, der für immer mein einziger Held sein wird. Er hat das Meiste von Inu programmiert und ist auch in allem anderen besser als ich. Er ist wirklich toll. Er hat auch die Dokumentation geschrieben, die wirklich sehr gut gelungen ist. Ich bin noch nicht sicher wie ich mich für all das, was er mir gegeben hat, revanchieren werde. Er ist so bescheiden, aber ich denke zu einem Kasten Bier wird er sicher nicht nein sagen.

Tags »   

Trackback: Trackback-URL | Comments Feed: RSS 2.0
Category: random jazz

You can leave a response.

One Response

  1. Ja und was wurde nun aus dem kasten Bier???

    Musste noch schnell einholen bevor Stefan gar nicht mehr überhaupt nach MD kommt ^^ !

Leave a Reply