Neural Network für Spiele

thomy800

Erfahrenes Mitglied
Hiho

Ich habe vor kurzem was zum Thema neurales Netzwerk gefunden. Bei einem Beispiel wird, wie bei einem Scann-Programm, als Bild verschlüsselte Informationen umgewandelt in den Buchstaben, den sie präsentieren. Ich weiß zwar noch nicht so genau, wie es funktioniert, aber, dass man einen Inputstream hat und einen Outputstream.
Nun frage ich mich, kann man das auch auf Spiele anwenden? Ich würde gerne Menschen gegeneinander Skat spielen lassen und dabei die Neuronen trainieren, so dass später, nach hunderten (oder tausenden) Spielen eine KI entwickelt wird, die ähnlich wie Menschen spielt. Was mir etwas Probleme bereitet ist, wie ich den Inputstream gestalte. Ich bräuchte einmal die Karten, die der Spieler besitzt, und zum anderen die Karten, die die anderen Spieler der Reihe nach legen. Nur ist es möglich, diese Informationen sinnvoll umzuwandeln, so dass es später einen Wiedererkennungseffekt gibt?

MfG
Thomy
 
Du vergleichst hier quasi Äpfel mit Birnen, da das erkennen von Text relativ wenig mit dem Lernen einer KI zu tun hat. Auch wenn in beiden Fällen vorhandene Muster abgeglichen werden könnten sind bei einer KI eigentlich andere Mechanismen am Werk. Das bedeutet, dass Schrifterkennung anhand bestimmter Charakteristika erkennt welcher Buchstabe gemeint ist.

Dagegen stellt sich das bei einer KI anders dar. Wenn du eine KI kreierst die das Verhalten vieler Menschen nacharmt ohne zu unterscheiden oder zu werten ob dies eine gute Entscheidung war oder nicht erhälst du am Ende ein Stück Software, dass zwar Karten spielen kann aber mehr oder weniger zufällig gewinnt.

Eine klassische herangehensweise (wobei ich mich bis jetzt nur recht oberflächlich damit auseinander gesetzt habe) bei der KI-Programmierung ist es bestimmte Faktoren zu bestimmen (beim Skat etwa welche Farbe Trumpf ist, wie der Spielmacher gereizt hat, welche Karten noch im Spiel sind und was angespielt wurde um so die beste Zugmöglichkeit zu finden. Zusätzlich kann man dann die KI Möglichkeiten berechnen lassen anhand von Wahrscheinlichkeiten wie sich ein Gegner verhalten wird etc. pp. Natürlich spielt hier auch eine Rolle was dein Ziel ist: Einen unschlagbaren Gegner zu schaffen, der in gewisserweise auch unberechenbar sein soll also seinen Gegner auch durch unerwartete Spielweisen überraschen oder austricksen kann oder eine "menschliche" KI, die Fehler macht.

Man kann ganze Bücher darüber schreiben also ist das hier nicht mal an der Oberfläche gekratzt.
 
Naja, erstmal kann natürlich ein neuronales Netzwerk auch bei der Erkennung von Buchstaben behilflich sein. Ausserdem ist KI eine Sache, die Kombination mit neuronalem Netzwerk noch ein anderer Schuh. Die Beschreibung von Dir, Raubkopierer, stellt quasi die klassische Variante dar, statische Ereignisbehandlung, Auswertung und Reaktion. Der Ansatz des neuronalen Netzwerks, ohne eigentlichen Eingriff des Coders Dinge zu lernen, sieht nochmal anders aus. Ich hab ein Buch dazu zuhause zu liegen, aber es blieb ein interessantes Buch, ohne dass ich angefangen habe, es umzusetzen.. Und weiterhin muss auch gesagt werden, dass "scheinbar" die komplexeste Sache im NN ist, die Schaltung soweit auszutarieren, dass das Ergebnis auch wirklich sinnvoll ist. Weiterhin ist das Ausbrechen aus dem Spielfluß (unerwarteter Spielzug) eher eine Mutation (quasi ein Zufall) als das berechenbare Ergebnis eines NN.

Weblinks:
Schach als NN? - http://forum.fachinformatiker.de/algorithmik/123710-schach-ki-neuronalen-netzen.html
Skat mit NN - http://www.gertsauerstein.de/page.php?page=skat&category=software&language=de

mfg chmee
 
Wenn du eine KI kreierst die das Verhalten vieler Menschen nacharmt ohne zu unterscheiden oder zu werten ob dies eine gute Entscheidung war oder nicht erhälst du am Ende ein Stück Software, dass zwar Karten spielen kann aber mehr oder weniger zufällig gewinnt.
Dagegen könnte man eine Bewertung von Menschen einrichten, zB. dass der Spieler vorher seine Kenntnisse angibt (was viel Vertrauen fordert) oder eine nachträgliche Bewertung der Mitspieler. So würde am Ende eine KI entwickelt, die sogar noch unterschiedliche Schwierigkeitsstufen besäße. Eine zusätzliche Bewertung ist außerdem, ob gewonnen oder verloren wurde (auch wenn das Karten-abhängig ist). Zusätzlich könnte man auch noch in die Bewertung eingehen lassen, an wen die einzelnen Stiche gingen.

Natürlich spielt hier auch eine Rolle was dein Ziel ist: Einen unschlagbaren Gegner zu schaffen, der in gewisserweise auch unberechenbar sein soll also seinen Gegner auch durch unerwartete Spielweisen überraschen oder austricksen kann oder eine "menschliche" KI, die Fehler macht.
Es soll eine menschliche KI werden, die aber nicht absichtlich Fehler macht, sondern ebend nicht mehr weiß als ein Mensch (zb. dass Spieler A schon ganz am Anfang eine 10 blank hat, obwohl das ziehmlich unwahrscheinlich ist).
Ich habe auch irgendwo mal gelesen, dass man durch dieses Lern-prinzip tricksereien von Menschen entgegenwirken kann. So könnte zB. der Spieler eine 9 Spielen, damit das Ass kommt (was für eine einfache KI logisch wäre). Durch das lernen aber, würde die bessere KI vielleicht mit einer 7 bedienen um dann die blanke 10 zu bekommen.

Außerdem gibts beim Skat nicht viel, was unberechenbar wäre (da fällt mir spontan nur der Fall ein, dass ein Grand mit 0 oder nur einem Buben gespielt würde). Von daher ist der Faktor der Unberechenbarkeit eher zu vernachlässigen.

@chmee
Interessante Links! Hätte nich gedacht, dass das schon mal jemand probiert hat :D
 
Zuletzt bearbeitet:
Natürlich hast du recht, dass richtiges Lernen anders als simple Aktion-Reaktion ist, da solch eine KI auf unbekannte Situationen praktisch nur mit Versagen reagieren kann. Mir ging es bei meinem Beitrag auch primär erstmal um den Unterschied einer simplen Texterkennung durch ein Programm und einer (lernenden) KI. Zudem ist er etwas zwischen Tür und Angel entstanden, da ich meinen Bus kriegen musste :)

Anyway siehst du ja die informativen Links von chmee die ich mir nachher auch einmal genauer ansehen werde (Bienchen dafür :D).
Ein noch eher klassischer Ansatz für eine "lernende"KI ist zum Beispiel auch eine statische KI die sich eben Verhaltensweisen abschaut und diese entsprechend selbst in Aktions- und Reaktionsmuster umsetzt und nach dem Spiel verarbeitet wie es auch beim Menschen geschieht. Man könnte dies als eine Art Kompromiss bezeichnen.
 
Also, ich habe mir folgende Struktur für das neuronale Netz im Skat überlegt. Dabei geht es nur um das Spielen (weder Reizen noch Drücken etc.).

Input:
______
[Trumpf] - [ liegende Karten ] x 10
wobei liegende Karten so aussehen kann: [[Karte 1][0/1] [Karte 2][0/1] [n][0/1]] oder [Karte 1][0/1] [n][0/1] [n][0/1]] oder [n][0/1] [n][0/1] [n][0/1]]
n = keine Karte, zb. -1
Karte x = Intervall von 0 bis 31 (Karten ID)
[0/1] steht für Freund oder Feind
=> macht 61 Input-Neuronen

Output:
______
32 Output-Neuronen, wobei jeder für eine Karte steht.
Anschließend werden diese in eine Liste Sortiert und vom aktivsten Neuron abwärts gecheckt, ob die KI diese Karte besitzt. Wenn ja, wird diese gespielt, sonst wird die nächste genommen.

Dazwischen kommen vielelciht noch ein paar hidden-Neuronen... wieviele weiß ich noch nicht xD
Macht das so Sinn? Oder wäre es zB. besser, auch die Karten, die der Spieler besitzt, in den Input einfließen zu lassen? Oder sollte man den Output auf 10 minimieren, da nur 10 Karten legbar sind? Oder gar nur einen Outputneuron, der die ID der Karte beinhaltet?
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück