top of page

Endversion der KI

Nach vielen Ansätzen, Entwickungen, die doch kein Ende fanden, aber auch guten Ideen sind wir zu einer turnierfähigen Endversion unserer KI gekommen. Im Folgenden möchten wir sie euch vorstellen.

 

 

Als nächstes ermitteln wir, wie viele Minen sich auf dem Spielfeld befinden, da die Anzahl an Minen variieren kann.

Nun kommen notwendige Festlegungen zum Thema Video- und Texteinblendung. Des Weiteren aktivieren wir den Tankmodus.

Zuerst müssen wir Einiges definieren, z.B. dir Farbe unseres Spaceballs.

Es folgt ein Teil der Kollisiosanalyse, welche wir später noch ausführlicher betrachten werden. In diesem Fall wird ermittelt, ob zwischen uns und dem Gegner eine Mine liegt. Dementsprechend wird eine 1 (Mine im Weg) oder eine 0 (keine Mine im Weg) ausgegeben.

Nun gibt es eine Aufzählung aller möglichen flags. Diese werden jedoch alle auf 0 gesetzt, damit sie inaktiv sind.

Es folgen Berechnungen, die wir später im m-file noch brauchen werden. Wir berechnen den Abstand von unserem Spaceball zu allen vier Banden und definieren eine maximale Geschwindigkeit, sowie eine langsamere Geschwindigkeit.

Ab hier beginnt unser Tanksystem.

In Zeile 52 bestimmen wir zuerst eine Tanke, die wir nach bestimmten Kriterien aussuchen lassen.

Danach bestimmen wir, dass wenn die erste Tankstelle zu kleine geworden ist, eine neue Tanke bestimmt wird.

Ab der Zeile 58 folgt unser Mittelpunktverfahren. Mit diesem Verfahren wollen wir uns große Teile des Treibstoffes vom Spielfeld sichern.

Das Mittelpunktverfahren wird nur dann durchlaufen, wenn unser Tankmodus aktiviert ist. Nun wird eine ausgewählte Tanke mit allen anderen nach Größe und Nähe zu der aktuellen Position verglichen.

Daran schließt sich eine Besonderheit an. Wenn zwei Tanken so nah beieinander liegen, dass unser Spaceball mit seiner derzeitigen Größe die Lücke zwischen den Beiden füllen kann, dann wird unser System gleich 2 gesetzt (Zeile 71). Wenn dieses nicht zutrift wäre es  gleich 1 (Zeile 73).

Als nächstes berechnen wir den Winkel zwischen unserem Geschwindigkeitsvektor und dem Mittelpunkt der ausgewählten Tankstelle.

In einem zweiten Fall beziehen wir uns auf unseren Spezialfall, wenn wir zwei Tanken gleichzeitig nutzen. Hierbei ist der Winkel dann zwischen unserem Geschwindigkeitsvektor und dem Vektor zwischen den beiden Mittelpunkten der beiden Tankstellen.

Mit diesen berechneten Winkeln kann unsere Spaceball nun auf die ausgewählte Tankstelle zusteuern.

In den folgenden Zeilen wird mit einer If-Bedingung beim Berühren der Tanke gebremst und der passende Text "Stop" eingeblendet (Zeile 117-122).

In der nächsten If-Bedingung (Zeile 125-127) wird ein Schubvektor zur Korrektur definiert, wenn der Winkel zwischen Geschwindigkeit und Tankstelle größer ist als 10°.

Es folgt eine weitere Korrektur. Dieses Mal für unser Mittelpunktverfahren (Zeile 131-133).

Wenn keine Korrektur nötig ist, kann der Spaceball den Mittelpunkt zwischen den Tankstellen anfahren (Zeile 135-140).

Auch gibt es eine normale Ansteuerung der aktuellen Tankstelle (Zeile 142-146).

Zuletzt kommt eine for-Schleife, die dem Spaceball sagt, dass er eine Tankstelle leer tanken soll, auch wenn sie ihm ab einem bestimmten Punkt eigentlich zu klein wäre und er sich in der Zwischenzeit schon eine attraktivere Tanke gesucht hat.

Es folgt unser ausführliches Optimierungsverfahren. Dieses Verfahren soll unserem Space ermöglichen die Minen, die auf unserem Weg zum Ziel (z.B. einer Tankstelle) liegen, zu umfahren.

Zuerst wird abgefragt, ob unsere Geschwindigkeit größer Null ist und in welchem Tankssystem wir uns befinden. Daraufhin wird analysiert, ob Minen im Weg dorthin liegen. Wenn dies der Fall ist, wird ein Ersatzpunkt bestimmt, der links oder rechts der Mine liegt. Auch werden weitere Faktoren geprüft, wie zum Beispiel welcher Weg um die Mine der Kürzere ist. Nachdem bestimmt wurde, welcher Punkt geeigneter ist wird dieser Punkt in "Ziel" umbenannt und wir steuern ihn an.

Es folgen einige Abbruchbedingungen.

Sie erziehlen, dass unser Spaceball stehen bleibt, wenn alle Tankstellen, bis zu einer bestimmten Größe, auf dem Spielfeld aufgebraucht sind.

Um genau dieses zu berwirken wird eine Tankstelle ausgewählt und mit den anderen verglichen, damit man feststellt wie klein die Tankstellen sind.

Der Schub wid eingestellt, wenn die noch vorhandene Tankstelle einen kleineren Radius als 0.01 hat und unser Radius größer ist als der des Gegners.

Wenn uns jedoch zum Gewinn noch etwas Treibstoff fehlt und auf dem Weg zu der verbleibenden Tankstelle keine Mine liegt, geben wir noch einmal kurz Schub.

Wenn wir vor Ende des Spieles schon so viel Sprit getankt haben, dass der Gegner uns mit dem verbleibenden Sprit nicht mehr einholen kann, dann bleiben wir vorerst abrubt stehen.

Als nächstes beschäftigen wir uns mit dem Fall, dass unser Spaceball so viel Sprit getankt hat, dass er zu dick und behäbig ist den Gegner langsam anzugreifen. Wenn in diesem Fall der Weg zum Gegner frei von Minen ist, beginnen wir durch ein kontrolliertes Flackern Treibstoff zu verlieren damit wir den Gegner angreifen können.

Wenn wir aber nur gernigfühgig größer sind als der Gegner bewegen wir uns nicht.

Wenn nun der Weg zum Gegner minenfrei ist und wir wendig, also klein genug sind um anzugreifen, dann geben wir Schub um die Geschwindigkeit 0.05 zu erreichen und gleiten dann langsam auf den Gegner zu.

Den langsamen Angriff ersetzen wir durch einen schnellen Angriff, wenn wir uns in der Nähe des Gegners befinden.

Als nächstes beschäftigen wir uns mit dem Schub, wenn wir in die Nähe einer Tankstelle kommen.

Hier wird wieder zwischen System 1 und 2 unterschieden. Wenn wir auf eine einzelne Tankstelle zusteuern verringern wir den Schub. Wenn die Geschwindigkeit sehr niedrig ist, stellen wir ihn sogar ganz ab (Zeile 296-302).

Wenn wir mit dem System 2 arbeiten, also auf dem Weg zu zwei Tankstellen sind, dann bremsen wir ab und verhalten uns wie beim System eins (Zeile 304-307).

Jetzt können wir uns dem Angriff widmen.

Unser Angriff basiert auf der Kollisionsanalyse zweier Kreise (Zeile 314-316).

Hier stellen wir die Bedingungen auf, wann wir angreifen wollen. Dies wollren wir nur, wenn wir größer als der Gegner sind, uns nicht nahe einer Tankstelle befinden oder wenn wir nur ein wenig größer sind als der Gegner uns aber in seiner Nähe befinden.

In den folgenden Zeilen stehen die verschiedenen Angriffsvarianten. Sie unterscheiden sich dahingegen wie weit wir vom Gegner entfernt sind, wie schnell wir oder der Gegner sind. Die unterschiedlichen Modi treten jeweils nur in Kraft, wenn keine Mine im Weg ist.

Ab hier beginnt unsere Verteidigung. 

Diese basiert auch auf der Kollisionsanalyse (Zeile 355).

Wenn der Gegner größer ist als wir und eine Kollision kurz bevor steht, dann entfernen wir uns in eine andere Richtung.

Es folgen unser Wandpräventationssystem, welches einer der wichtigsten Schutzmechanismen unseres Spaceballs ist.

Für jede Spielfeldbegrenzungsseite und jede Ecke wird hierbei analysiert, ob unser Spaceball gefährdet ist in diese zu fahren. Darauf wird ein entsprechender flag gesetzt.

Gefolgt wird unser Anti-Wand-System von dem Anti-Mine-System, welches auch ein wichtiger Schutzmechanismus unseres Spaceballs ist.

Hierbei ist hervorzuheben, dass bei zwei Minen, die so eng aneinander liegen, dass unser Spaceball nicht zwischen ihnen herfahren kann, eine imaginäre dritte Mine gebildet wird, welche beide umschließt, sodass die gefährliche Stelle großräumig umfahren wird.

Es folgt die flag-Auswertung, damit je nachdem auf welche Wand unser Spaceball zusteuert, der passende Gegenschub gegeben wird.

Von Zeile 460-479 sind wichtige functions angegeben auf die wir immer wieder zugreifen. 

Es folgt eine weitere function "minennummer", welche allen Minen eine Nummer zuordnet. Auf diese Nummern wird dann in anderen Systemen, wie dem Minenumfahrungssystem zugegriffen.

Zuletzt befindet sich noch die Kollisionsanalyse zweier Kreise in unserem m-file.

Um ein hohes Maß an strategischer Planung erreichen zu können, berechnen wir sowohl den Ort, an dem sich die zwei Spaceballs berühren, also auch den Zeitpunkt.

In unserer Dokumentation findet ihr eine weitere Zusammenfassung unserer KI und eine ausführliche Beschreibung der Entwicklung.

bottom of page