2010-05-02 12 views
13

Weg zurück (denke über 20 Jahre) Ich habe einen Gomoku-Spielquellcode in einem Magazin gefunden, das ich für meinen Computer eintippte und mit dem ich eine Menge Spaß hatte.Gomoku Array-basierter AI-Algorithmus?

Das Spiel war schwer zu gewinnen, aber der Kernalgorithmus für die Computer-KI war wirklich einfach und machte nicht viel Code aus. Ich frage mich, ob jemand diesen Algorithmus kennt und einige Links zu einer Quelle oder Theorie dazu hat.

Die Dinge, an die ich mich erinnere, waren, dass es im Grunde ein Array zugewiesen wurde, das die gesamte Platine abdeckte. Dann, wenn ich, oder es, ein Stück legte, würde es eine Anzahl von Gewichten zu allen Stellen auf dem Brett hinzufügen, die das Stück möglicherweise beeinflussen würde.

Zum Beispiel (beachten Sie, dass die Gewichte definitiv falsch sind, wie ich erinnere mich diese nicht):

1 1 1 
2 2 2 
    3 3 3 
    444 
1234X4321 
    3 3 3 
2 2 2 
1 1 1 

dann gescannt es einfach das Array für eine offene Stelle mit dem niedrigsten oder höchsten Wert.

Dinge, die ich bin fuzzy auf:

  • Vielleicht hatte es zwei Reihen, eine für mich und eine für sich und es gab eine min/max Gewichtung?
  • Es könnte mehr auf den Algorithmus ist, aber es war im Grunde ein Array und gewichtete Zahlen

Ist dieser Ring eine Glocke mit jemandem überhaupt in seinem Kern? Hat jemand etwas, das helfen könnte? Meine Vermutung wäre eine Form der Minimax algorithm

+0

Bitte meine Antwort auf eine ähnliche Frage prüfen http://stackoverflow.com/questions/ 2438231 # 6000643 Ich teile meine Implementierung einer ziemlich einfachen, aber starken Gomoku AI – amartynov

Antwort

5

Lese Ihre Beschreibung, und das Denken ein wenig darüber sein, ich denke, es wahrscheinlich mit einem einzigen Array

2

Ich habe den Artikel nicht gelesen, sondern aus der Beschreibung funktioniert, genau wie du es beschrieben hast.

Um das Ziel zu erreichen, fünf in einer Reihe zu bekommen, müssen Sie (a) den Gegner daran hindern, erfolgreich zu sein und (b) sich selbst erfolgreich zu sein.

Um erfolgreich zu sein, müssen Sie Steine ​​in die Nähe anderer Steine ​​legen, die Sie bereits auf dem Spielbrett haben. Daher ist es sinnvoll, eine positive Punktzahl für Felder neben Ihren Steinen hinzuzufügen, die an einer Reihe teilnehmen können. Entweder das lineare Beispiel, das du gabst, oder etwas Quadratisches würde wahrscheinlich gut funktionieren. neben seine/ihre Steine ​​

Um dein Gegner erfolgreich verläuft zu verhindern, haben Sie Steine ​​zu platzieren. Es ist besonders gut, wenn du zwei Vögel mit einem einzigen Stein schlägst, also sollten gegnerische Steine ​​den Wert der umliegenden Felder auf die gleiche Weise erhöhen wie du - je mehr Steine ​​er bereits aufgereiht hat, desto höher ist der Punktestand und desto wahrscheinlicher der Der Algorithmus wird versuchen, den Gegner auszuschalten.

Das wichtigste ist hier die Gewichtung der verschiedenen Felder, und ob die Steine ​​des Gegners anders gewichtet sind als deine. Leider kann ich damit nicht weiterhelfen, aber die Werte sollten relativ einfach sein, um es durch Versuch und Irrtum herauszufinden, sobald das Spiel selbst geschrieben ist.

Dies ist jedoch ein sehr grundlegender Ansatz und würde von einem Baumsuchalgorithmus übertroffen werden. Auf der Suche nach Google gibt es eine ähnliche paper on Threat search, die anscheinend gut für Gomoku funktioniert.Das Papier ist jedoch hinter einer Pay-Wall:/

1

Es ist ein altes Spiel - Ich fand den Code auf Planet Source Code. Ich spielte dieses Spiel während des College und in 286 Tagen hatte eine BASIC-Version davon.

2

Ich habe diesen Algorithmus gesehen, den du erwähnt hast - er war ziemlich einfach und schnell (kein Backtracking :-)) und er spielte sehr gut :-) Ich muss die Quelle irgendwo haben, aber es ist viele Jahre her ... Es gab Gewichte für Ihre Steine ​​abhängig davon, wie viele andere Steine ​​in der Nähe waren, und Gewichte der Gegnersteine. Diese waren niedriger, daher bevorzugte der Algorithmus die Angriffsstrategie.

Aber das ist natürlich sehr trivial Algorithmus. Die Gewinnstrategie wurde bereits gefunden. Siehe dieses Papier: L. Victor Allis, H. J. van den Herik, M. P. H. Huntjens. Go-Moku and Threat-Space Search. Es hat mir sehr geholfen, als ich mein eigenes Programm geschrieben habe. Auf diese Weise können Sie Programme schreiben, die sehr gut darin sind, den Gegner anzugreifen und Gewinnkombinationen zu finden.