Ich versuche ein Programm zu erstellen, das Entwürfe/Checker spielt. Im Moment versuche ich, die Funktion zu machen, die es dem Computer ermöglicht, Bewegungen zu machen und auszuwerten. Meine Idee ist, dass der Computer alle möglichen Moves betrachtet und für jeden dieser Moves die möglichen Moves des Gegners betrachtet und dann für jeden dieser Moves wieder eigene Moves betrachtet.Checkers-Algorithmus: Wie verschachtelte For-Loops zu reduzieren
Mit jeder Lage wird bewertet, ob die Bewegung gut oder schlecht für den Spieler ist und Punkte vergeben, am Ende werden die Züge mit den höchsten Punkten ausgewählt.
Bis jetzt habe ich es geschafft, eine Version von dieser Arbeit zu bekommen, aber beinhaltet eine Menge von verschachtelten For-Schleifen. Der Code ist eine Unordnung und im Moment nicht sehr lesbar, aber dies ist ein einfaches Modell des gleichen Konzepts. Anstatt mehr Listen zu bewerten und zu produzieren, multipliziert es sich einfach um zwei für die neue Liste.
counter = 0
for x in list:
counter += 1
list_2 = [x * 2 for x in list]
print 'list_2', list_2, counter
for x in list_2:
counter += 1
list_3 = [x * 2 for x in list_2]
print 'list_3',list_3, counter
for x in list_3:
counter += 1
list_4 = [x * 2 for x in list_3]
print 'list_4', list_4, counter
Wenn ich diesen Code ausführen, bekomme ich, was ich will, mit der Ausnahme, dass ich nicht einfach die Tiefe der Suche steuern kann für Schleifen in mehr ohne sie zu kopieren. Ich dachte, Rekursion wäre eine Möglichkeit, dies zu tun, aber ich kann nicht herausfinden, wie man die Rekursion nach x Ebenen der Suchtiefe stoppt.
Gibt es eine bessere Möglichkeit, die gleiche Ausgabe aus dem obigen Code zu erhalten, während alle For-Schleifen loswerden? Wenn ich das zur Arbeit bringen kann, denke ich, dass ich den Rest selbst machen kann.
Sie könnten möglicherweise in der Verwendung eines Stapels anstelle von Rekursion suchen, wenn das einfacher wäre. Auch die Verwendung einer [Alpha-Beta] (http://gamedev.stackexchange.com/a/30033) Spielbaumsuche und -verstehens würde wahrscheinlich sehr hilfreich bei der Erstellung Ihres Algorithmus sein. – Kupiakos
Wenn Sie eine beliebige Anzahl von Wiederholungen durchführen müssen, machen Sie diese Zahl zu einem Argument für Ihre rekursive Funktion. Wenn es 0 ist, ist das dein Basisszenario. – JETM
Sie können dies mit Rekursion tun. Werfen Sie einen Blick auf diese [Antwort] (http://stackoverflow.com/a/36645766/4014959), um zu sehen, wie die Rekursionstiefe begrenzt werden kann. Sie müssen aber auch die Rekursionsweite begrenzen, oder die Anzahl der zu bewertenden Boards wird bald groß; Hier ist Alpha-Beta-Beschneidung sinnvoll. –