IT-Academy Logo
Sign Up Login Help
Home - Fortbildung­&Lektüre - Weiterbildung - Wie funktioniert künstliche Intelligenz



Wie funktioniert künstliche Intelligenz

KI, jeder redet davon, kaum einer weiß wie es funktioniert. Eine Erklärung der Grundlagen.


Autor: Patrick Faes (dreamer)
Datum: 30-12-2003, 01:05:41
Referenzen: keine
Schwierigkeit: Fortgeschrittene
Ansichten: 11728x
Rating: 9.4 (5x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Einleitung

"Künstliche Intelligenz (= KI)", das Zauberwort der Computerspiele. Viel wird darüber geredet, jedoch weiß kaum einer was hier mit "Intelligenz" gemeint ist. In Wirklichkeit kann ein Computer nicht denken (da er keinen eigenen Willen hat), sondern nur berechnen. Es kommt also darauf an, den Computer zu erzählen was er machen soll in einer bestimmten Situation. Man versucht also den Computern einen Menschen nachahmen zu lassen.

Die erste Form von KI war pur "determinierend", was heißt, dass es völlig abhing von sehr logische Entscheidungen, z.B.:



Nach einiger Zeit wollte man aber eine realistischere KI, wobei auch nicht-logische Entscheidungen getroffen werden sollen. Diese sind dann vielmehr basiert auf Erfahrungen, Präferenzen und Emotionen (bei Menschen). Ein Beispiel:



Dieses Beispiel zeigt, dass ein Mensch nicht immer nach Logik handelt:
  • Emotion: Hammer wegwerfen (bringt einen ja nichts)
  • Erfahrung: wenn es nicht schlimm ist, kann man weiter arbeiten
  • Präferenz: nur zum Arzt gehen wenn man versichert ist, ansonsten ist es zu teuer
KI-Typen für Computerspiele

Es gibt sehr viele KI-Typen und noch mehr Algoritmen um diese aus zu führen. Ich werde hier nur die meist essentiellen Typen besprechen:
  • Roaming KI
  • Benehmungs-KI
  • Strategische KI
Roaming KI

Roaming stammt vom englischen "to roam", was soviel bedeutet wie "herum irren". Es ist eine Technik die die Bewegungen eines Objektes bestimmt. So gibt es z.B. Objekte die immer einen bestimmten Kurs folgen, und diese wenn nötig korrigieren. Man kann hierbei drei Arten unterscheiden:
  • Verfolgung
  • Ausweichung
  • Patron-basiert
Verfolgungs-KI

Hierbei wird ein Objekt andere Objekte aufspüren und verfolgen. Dies wird z.B. in Shoot'm-ups genutzt, wo ein Gegner den Spieler verfolgt. Man könnte dies z.B. so implementieren:
  • wenn X-Koordinat der Position des Gegners > X-Koordinat der Position des Spielers:
    -> X-Koordinat Gegner vertiefen;
  • wenn X-Koordinat der Position des Gegners < X-Koordinat der Position des Spielers:
    -> X-Koordinat Gegner erhöhen;
  • wenn Y-Koordinat der Position des Gegners > Y-Koordinat der Position des Spielers:
    -> Y-Koordinat Gegner vertiefen;
  • wenn Y-Koordinat der Position des Gegners < Y-Koordinat der Position des Spielers:
    -> Y-Koordinat Gegner erhöhen;
Wenn der Gegner sich auf eine höhere Position als dem Spieler befindet, nimmt er eine niedrigere Position ein. Wenn er sich auf eine Position weiter als dem Spieler befindet, kommt er näher.
Durch diese Technik wird ein Gegner allerdings perfekt. Dies kann man ein wenig ändern durch eine Zufallszahl hinzu zu fügen. Die meisten Programmiersprachen benutzen hierfür die Funktion rand():
  • wenn die Zufallszahl geteilt durch drei eine gleiche Zahl ergibt;
  • und der X-Koordinat des Gegners ist größer als der X-Koordinat des Spielers, dann wird die Position des Gegners vertieft,
  • und der X-Koordinat des Gegners ist kleiner als der X-Koordinat des Spielers, dann wird die Position des Gegners erhöht;
Das gleiche kann man nochmal machen für die Y-Koordinaten.
Mit dieser Technik wird der Gegner nicht immer, sondern fast immer gewinnen.

Ausweichungs-KI

Kurz gefasst: dies ist genau das Umgekehrte von der Verfolgungs-KI. Dies wurde z.B. für Pac Man benutzt. (Als man einen Kecks gefressen hatte, liefen die Geister davon.)
Diese KI wird auch manuel benutzt um den Spieler zu steuern (dies geschieht dann also nicht automatisch).

Patron-basierte KI

Dies ist eine Bewegungs-KI wobei eine vorher definierte Bewegung benutzt wird. Auch dies ist etwas das man häufig in Shoot'm-ups sieht: gegnerische Raumschiffe die Kreise fliegen, von links nach rechts und zurück, usw.
Dies erreicht man, indem man die einzelnen Geschwindigkeits- und Positionsverschiebungen eines Objektes in eine Variable speichert. Um dies zu verdeutlichen gebe ich hier ein Beispiel:
  • jede Sekunde wird eine Bewegung ausgeführt. Hierbei wird ein variabler Wert benutzt. Wenn dieser denn Wert null hat, wird die X-Koordinate erhöht, die Y-Koordinate wird auch erhöht, und die Variable bekommt den Wert 1.
  • wenn nun die Variable den Wert 1 hat, wird die X-Koordinate vertieft und die Y-Koordinate erhöht, und die Variable bekommt den Wert 1
Dies schafft eine endlose Schleife, wobei ein Gegner von links nach rechts bewegt, mit sich immer wiederholenden auf und ab Bewegungen.

Benehmungs-KI

Die obigen drei sind an sich schon sehr wirkungsvoll (man kann diese z.B. erweitern indem der Gegner schießen soll wenn er nahe genug ist), aber es kann sein, dass man die KI noch intelligenter machen möchte. Dies kann man erreichen indem man anhand von einer Zufallszahl mehrere Möglichkeiten einbaut. So kann man z.B. die KI so bauen, dass der Gegner in 50% der Fälle den Spieler verfolgt, in 30% der Fälle nichts macht, in 20% der Fälle ausweicht.

Dies macht man so:
  • man nimmt eine Zufallszahl zwischen 1 und 100 (in PHP z.B. ist das rand(1,100));
  • wenn die Zahl kleiner ist als 51, soll der Gegner den Spieler verfolgen;
  • wenn die Zahl zwischen 50 und 81 liegt, soll der Gegner einfach nichts tun und abwarten;
  • wenn die Zahl größer als 80 ist, soll der Gegner ausweichen;
  • um die Schleife fort zu setzen, muss jetzt eine neue Zufallszahl selektiert werden;
Strategischer KI

Die strategische KI fügt an einem Spiel Regeln hinzu. Das Spiel sollte nach diese Regeln gespielt werden. Dies wird z.B. bei Schachspielen benutzt. Aber nicht nur Regeln, sondern wirkliche Strategien können programmiert werden. Ein Schachcomputer z.B. versucht immer zu gewinnen. Dabei muss er an Hand vom letzten Zug des Spielers Entscheidungen treffen, die einerseits auf Logik basieren, andererseits versuchen vorher zu sehen was der Spieler als nächstes macht. In der Praxis ist es meist so, dass ein Computer die Entscheidung nimmt, die dem Spieler am wenigsten hilft (Englisch: the least worse move).

Eine KI bauen

Da wir jetzt die wichtigsten Bestandteile einer KI gesehen haben, wird es Zeit diese mal zu kombinieren und ein KI für ein modernes Computerspiel zu definieren. Als erstes nochmal die 3 eszentiellen KI-Typen:
  • Roaming AI: Bewegungs-KI; an Hand verschiedener Parametern wird bestimmt welche Aktion automatisch als nächstes ausgeführt wird
  • Behavior AI: Benehmungs-KI: um die KI etwas menschlicher wirken zu lassen, wird per Zufall bestimmt was der Computer als nächstes macht
  • Strategic AI: strategischer KI: um die KI mehr Tiefe zu verleihen, werden Regeln und Strategien definiert
Die beste Methode um KI zu verstehen, ist ein Konzept. Hier folgt ein theoretische Beschreibung einer KI:
  • Der Gegner ist ein Parkwächter.
  • Er läuft immer die selbe Straße entlang von links nach rechts (also auf der X-Axe). Dies erreicht man indem man den X-Koordinat erhöht (nach rechts laufen) oder vertieft (nach links laufen). Wenn der X-Koordinat einen bestimmten Wert erreicht hat, ist er am Ende der Straße angekommen und dreht er sich um und läuft zurück.
  • Der Wächter hat ein Sichtfeld von 50 Pixel. Das heißt, dass das Sichtfeld reicht vom X-Koordinat der Position des Wächters bis diese Position + 50 Pixel (wenn er nach rechts lauft) oder - 50 Pixel (wenn er nach Links lauft). Die Y-Koordinaten sind gleich die Position des Wächters (in der Höhe) minus 30 Pixel bis die Position plus 30 Pixel. So hat der Wächter ein Blickfeld von 50 bei 60 Pixel.
  • Solange die Position des Spielers nicht im Blickfeld des Wächters liegt, läuft der ruhig weiter, ansonsten wird er die Verfolgung aufnehmen.
  • Wenn man danach während 30 Sekunden aus seinem Blickfeld entkommen kann, wird er die Verfolgung aufgeben und wieder seine normale Route folgen.
Im Falle, dass der Wächter in diesem Beispiel den Spieler bemerkt, bekommt er plötzlich auch ein anderes Benehmen. In der Praxis würde man dies realisieren mit Objekt Orientiertes Programmieren (kurz OOP). Ein Objekt (z.B. der Parkwächter) wird dann eine Klasse hinzugefügt. Diese Klasse enthält alle wichtige Parameter die der Computer braucht um das Benehmen des Parkwächters zu bestimmen. In bestimmte Fällen (z.B. der Parkwächter entdeckt den Spieler) ändert er aber sein Benehmen (das Objekt wird dann eine andere Klasse zugewiesen).

Leute die mehr wissen möchten über Spieleprogrammierung, sollten sich mal in die Tauschbörse der IT-Academy umschauen. Da gibt es einige Bücher zu diesem Thema.
Desweiteren werden auch bei Amazon viele Bücher zum Thema angeboten.
Als Suchbegriff sollte man z.B. "Spieleprogrammierung", "KI", "Spiele mit C++" usw. eingeben. Wenn Sie etwas bei Amazon kaufen, dann bitte benutzen Sie den Banner auf der linken Seite. Es wird Ihnen nichts extra kosten, aber so können Sie diese Seite unterstützen. Wenn Sie ein online-Forum für Spiele-Entwicklung suchen, kann ich Ihnen www.c-plusplus.de empfehlen.


picard
Professonial
Beitrag vom:
30-12-2003, 16:52:04

schön!

bin begeistert ;-)

-----------------------------------------------------
"...denn wir arbeiten nicht nur um uns selbst zu verbessern, sondern auch den Rest der Menschheit!"


dreamer
Expert
Beitrag vom:
30-12-2003, 16:28:32

Jaja, schon gut, du bekommst ne neue.

-----------------------------------------------------


picard
Professonial
Beitrag vom:
30-12-2003, 01:12:32

zu schade!

dass ich die zweite Grafik nicht bearbeiten kann!

Warum? Naja, wie schreibt man denn Arzt ;-)

-----------------------------------------------------
"...denn wir arbeiten nicht nur um uns selbst zu verbessern, sondern auch den Rest der Menschheit!"


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04508
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06245
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1150
Comments: 0