0

Ich versuche, eine bessere heuristische Funktion für ein Brettspiel herauszufinden, deren Regeln ich nach dem Code angeben werde. Meine Bewertungsfunktion ist dies:Heuristische Funktion für ein Brettspiel AI

def evaluate(self, board): 
     score = 0 
     for i in range(board.LENGTH): 
      for j in range(board.WIDTH): 
       if board.board[i][j].token == "G": 
        score += 100 * (i+1) + 50 * (j + 1) 
       if board.board[i][j].token == "R": 
        score -= 100 * (i+1) + 50 * (j + 1) 
return score 

Board

Die Ausgangsplatte hält grüne und rote Token wie gezeigt. Die KI bewegt sich zuerst und spielt die Farbe, die deiner eigenen Farbe entspricht. Auf den schwarzen Zellen kann sich ein Token entweder orthogonal (links, rechts, oben, unten) oder diagonal bewegen. Wenn es sich um eine weiße Zelle handelt, können Sie sich nur orthogonal bewegen.

Wenn du deinen Spielstein neben den Spielstein des Gegners bewegst, entfernst du den Spielstein des Gegners in diese Richtung. Wenn ich beispielsweise den grünen Marker von C4 nach C5 verschiebe, töte ich alle R-Marker auf C-6 bis C-9. Dies wird als Vorwärtsangriff bezeichnet. Genauso kannst du, wenn du einen Token neben dem Token eines Gegners hast, von ihm entfernen und alle Token in dieser Linie entfernen.

Offensichtlich haben die Tokens auf den schwarzen Zellen mehr mögliche Bewegungen.

Was wäre eine gute heuristische Funktion für die KI? Was sollte ich in meiner jetzigen Funktion ändern?

+0

Ich denke nicht, dass das alle Regeln sein kann: Sie haben die Kriterien für den Sieg nicht gegeben. – Prune

+0

Die Kriterien für den Sieg sind, wenn alle gegnerischen Tokens fertig sind. Und es gibt ein Unentschieden, wenn es 5 aufeinanderfolgende erfolglose Züge von jeder Seite gibt. – Bob

+0

Wenn du in einer Linie von einem gegnerischen Spielstein zum anderen ziehst, entfernst du Spielsteine ​​an beiden Enden des Zuges? – Prune

Antwort

2

Die Funktion, die Sie haben, ist in der Tat ziemlich schlecht: Es bewertet die untere rechte Ecke und die Anzahl der Stücke. Ein einzelnes Stück bei D8 ist mehr als drei in der Mitte wert.

Ich schlage vor, dass Sie aktuelle Techniken in AI anwenden: anstatt uns zu bitten, Ihre Forschung für Sie zu tun, entwickeln Sie ein Programm, um den Raum zu erforschen. Entwickeln Sie eine breit angelegte Bewertungsfunktion und führen Sie eine genetische Suche durch, um die Parameter dieser Funktion zu optimieren.

So durchlaufen alle Stücke, aber anstatt Reihe & col Nummern verwenden Eigenschaften

  • schwarz besetzen Platz
  • benachbarte Feind Stücke
  • benachbartes Stück
  • auf oder nahe Ecke/Ecke
  • verfügbar Züge

Machen Sie nun Ihre Bewertungsfunktion zu einer linearen Kombination dieser Funktionen. Wählen Sie zum Beispiel 100 Parametersätze. Führen Sie diese Programme in einem Round-Robin-Turnier gegeneinander aus.

Behalten Sie die Top 20 Finisher. Machen Sie weitere 80 Parameter durch Mutation und Cross-Overs. Wiederhole das Turnier.

Setzen Sie diese Wiederholungen fort, bis die Programmstärke konvergiert oder mindestens ein Spielniveau erreicht, das Sie zufriedenstellt.

+0

Ich habe bereits einen Minimax und Suchalgorithmus, um über den Baum zu iterieren. Ich war mir nicht sicher, wie ich eine gute heuristische Funktion implementieren konnte, ohne die Effizienz des KI-Spielers zu beeinträchtigen.Ich dachte daran, die schwarzen Zellen ein wenig mehr zu gewichten, aber dann begannen die Token sich zu schwarz zu bewegen, selbst wenn sie eine bessere Option hatten, zu den weißen Zellen zu wechseln. – Bob

+1

Deshalb schlage ich diese Forschung vor, um den Algorithmus zu finden. Du lässt das nicht im Spiel; Sie führen dieses Experiment aus und verwenden dann den Gesamtsieger als neue Evaluierungsfunktion. – Prune

Verwandte Themen