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
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?
Ich denke nicht, dass das alle Regeln sein kann: Sie haben die Kriterien für den Sieg nicht gegeben. – Prune
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
Wenn du in einer Linie von einem gegnerischen Spielstein zum anderen ziehst, entfernst du Spielsteine an beiden Enden des Zuges? – Prune