ABK-GOFAI: Eine gute altmodische Künstliche Intelligenz zum Spielen von Abak Evolution Backgammon.
Ohne die Hilfe eines Neuronalen Netzwerks erwies sich die Entwicklung einer Künstlichen Intelligenz (KI) für Abak als herausfordernde Aufgabe und erreichte mit der Zeit eine scheinbare Grenze. Dennoch war es ein unterhaltsamer Prozess, sie zu entwickeln, und sie ist immer noch im Dienst für die Stufen "einfach", "normal" und "fortgeschritten". Dies ist ein Beitrag darüber, wie sie funktioniert und wie sie erstellt wurde.
Phase 1, GOFAI PHP
Abaks erste KI-Version wurde in PHP geschrieben und war dazu verdammt, das System mit 'Out of Memory'-Fehlern zum Absturz zu bringen, aber sie ebnete den Weg für eine C++-Version. Es war der Prototyping-Spielplatz für mich, um herauszufinden, wie zum Teufel man eine KI baut. Das erste Mal, als ich sie an den Webserver angeschlossen lief (ich spielte also effektiv dagegen), brauchte sie 15 sehr lange Sekunden, um einen Zug auszuwählen, und als ich sah, wie der Server sich von selbst bewegte, drehte ich durch und machte möglicherweise einen kleinen Tanz. Bin mir nicht sicher.
Phase 2, GOFAI C
So wurde die C/C++-Version der KI, die erste für eine produktive Umgebung, meine geliebte GOFAI-Engine, aus der Asche von PHP geboren. Sie führt 29 Analysealgorithmen über Tausende von Positionen in Nanosekunden aus und funktioniert so:
- Gegeben eine Brettposition und ein Würfelpaar.
- Berechne einen Zustand
- Ermittle jede mögliche Bewegung.
- Analysiere jede Bewegung und gib ihr eine Bewertung.
- Wähle die 'beste' Bewertung.
Hier ist ein Diagramm des Prozesses.
Sie besteht aus vier Hauptfunktionen:
- Aktionen ermitteln (Gültige Bewegungen berechnen):
Gegeben eine Brettposition und einen Würfelwurf, berechnet sie jede gültige Bewegung.
Gültige Bewegungen können von 0 bis Zehntausende reichen.
In jeder Sprache, in der ich dies geschrieben habe, habe ich einen unnötigen rekursiven Ansatz gewählt, der den Code so schwer zu debuggen macht, aber er ist so schön. Er hat ein paar hundert Zeilen Code, aber ich brauchte Wochen, um ihn zu schreiben, und dann weitere Wochen, um ihn nach C zu übersetzen.
- Zustand ermitteln (Brettzustand berechnen):
Gegeben eine Brettposition, berechnet sie einen semantischen Zustand, die sind ziemlich selbsterklärend:
- Startphase
- Mittelspiel
- Laufen ohne Hoffnung
- Laufen mit Hoffnung
- Endspiel
- Heimfeld betreten
-
Bewegung analysieren (Bewertungen für eine Brettposition berechnen):
Dies ist bei weitem der umfangreichste Algorithmus von allen. Er analysiert die Brett-Merkmale, wobei jedes eine Bewertung zurückgibt, und wendet dann, basierend auf dem zuvor berechneten Zustand, Faktoren darauf an, sodass man verschiedenen Aspekten der Analyse je nach Spielzustand unterschiedliche Bedeutung geben kann.
Die KI begann mit 8 Algorithmen und endete mit 29, ein Auszug:
- Spaltenhöhe
- Risiko, geschlagen zu werden
- Risiko, gefangen zu werden
- Heimfeldstärke
- Fluchtpunkte
- Spielsteine auf der Leiste
- Sichere Spielsteine
Viele dieser Algorithmen waren anfangs sehr einfach oder existierten gar nicht.
Im Laufe der Zeit arbeitete ich an ihnen, fügte Funktionen hinzu und optimierte Faktoren.
-
Aktion auswählen ("Beste" Bewegung auswählen):
Dieser Algorithmus ist relativ trivial, wenn man nur die höchste Bewertung will (wie es die fortgeschrittene Stufe tut).
Für die normale und einfache Stufe wählt er zufällig eine Bewegung aus einer Liste der besten Aktionen; die Größe dieser Liste (oder ihre Toleranz gegenüber schlechten Bewegungen) wird durch die Stufe bestimmt.
Dank C ist diese Engine blitzschnell, daher werde ich sie immer als primäre Aktionen-Ermittlungsfunktion verwenden.
Phase 3, GOFAI C Feinabstimmung
Um diese Engine zu debuggen, zu troubleshooten und fein abzustimmen, musste ich viele Tools bauen, um den Entscheidungsprozess zu überwachen. Im Gegensatz zum Neuronalen Netzwerk ist jede Entscheidung hier überprüfbar, das hatte man zumindest.
Der Prozess war unterhaltsam, aber schmerzhaft langsam. Ich spielte viel gegen die CPU, und immer wenn ich einen schlechten Zug sah, kam ich zu diesen Tools, um zu überprüfen, was schiefgelaufen war. Manchmal schickte mich das auf den Weg, einen Algorithmus zu reparieren, einen Faktor abzustimmen oder einfach ein neues Analysemodell zu bauen. Manchmal, und das war wunderschön, brachte es mich dazu, meine Abak Evolution-Strategien zu überdenken.
Mit der Zeit hatte ich eine ziemlich solide KI, aber sie weiter zu perfektionieren wurde zunehmend schwierig. Es gab so viele Codezeilen, so viele Szenarien, so massive Operationen, dass das Debuggen auf Code-Ebene eine schwere Aufgabe war, und das manuelle Feinabstimmen von Faktoren brachte keine Ergebnisse mehr.
Phase 4, Verzweiflung
Aber ich wollte mehr, denn ich spiele Abak, und ich brauchte einen soliden Spieler, um Spaß zu haben, und es gab zu der Zeit nicht viele Menschen, die es spielten (und selbst als ich dies schreibe).
Und dieser Ansatz hat viele Nachteile:
- Er berechnet den Zustand des Bretts anhand seiner aktuellen Position, und dieser Zustand wird verwendet, um die Faktoren der Analysealgorithmen für jede gültige Aktion zu ändern. Diese Aktion könnte jedoch den Zustand verändert haben, aber die Engine berücksichtigt das nicht.
- Manuelles Feinabstimmen der Faktoren erforderte eine enorme Menge an Zeit. Lustige Zeiten allerdings, aber trotzdem Unmengen.
- Der Zustand ist brutal schwer zu berechnen, angesichts der Anzahl möglicher Szenarien. Es war immer ein fehlerhafter Algorithmus.
- Die Spielequity ist unmöglich mit Präzision zu berechnen, weil diese Engine ein willkürliches Bewertungssystem für jeden Analysealgorithmus hat, und die Endbewertung keine Gewinnwahrscheinlichkeit widerspiegelt, sie funktioniert nur als vergleichbare Bewertung zwischen verschiedenen Brettpositionen. Man kann sagen, sie hat einen relativen Wert statt eines absoluten.
Phase 5, Das Erwachen
Und dann, eines Tages im Jahr 2018, besiegte Google den GO-Weltmeister mit seinem AlphaGo Neuronalen Netzwerk, und es gab so viel Aufregung, und neue großartige Open-Source-Machine-Learning-Bibliotheken wurden verfügbar und nutzten Heim-GPUs, um den Trainingsprozess zu beschleunigen.
Natürlich wusste ich bereits ein wenig über Neuronale Netzwerke, aber ich hatte noch nie eines gebaut, und ehrlich gesagt sah ich sie als eine Aufgabe jenseits meiner Fähigkeiten.
Also konnte ich nicht widerstehen, und die Expertenstufe läuft nicht mehr auf der GOFAI-Engine, abgesehen vom Aktionen-Ermittlungsteil.
Aber diese Geschichte endet hier.
Wenn Sie bis hierher alles gelesen haben, bin ich erstaunt.
Dieser Text wurde für SEO-Zwecke vom ehrlichen Abak Evolution-Team geschrieben,
Auch bekannt als Samy Garib.