Version 2
14.09.2009 11:35:47
Dies ist die aktuelle Version
Oh Gott, ein weites Feld, da darfst Du hier keine erschöpfende Behandlung erwarten. Natürlich haben meine Vorredner recht, erst einmal Wikipedia und Google zu befragen. Trotzdem ein paar konkrete Hinweise:
(1) Schachprogramme die z.B. acht Halbzüge vorausrechnen, schauen nicht alle möglichen Zugfolgen an, um zu einer Bewertung zu kommen, sondern nur die dazu nötigen. Viele Zugfolgen kann man vorher abbrechen, ohne dass hier Heuristik oder KI ins Spiel kommt. Der Kerngedanke ist, dass man nicht nach weiteren Widerlegungen eines Zugs suchen muss, wenn man schon eine gefunden hat, die zu einem schlechteren Resultat führt als die bisher beste Wahl des Ausgangszug. Diese äußerst wichtige Erkenntnis wird konkret z.B. in der
Alpha-Beta-Suche umgesetzt. Du solltest so etwas mal übungshalber selbst implementieren, vielleicht für ein einfacheres Spiel wie Mühle oder Othello.
(2) Les Dir mal ein existierendes Schachprogramm durch. Zum Beispiel Toga II, nicht sehr groß, nicht sehr kompliziert und in lesbarem C++ geschrieben:
www.superchessengine.com/toga_ii.htm.
(3) Wenn Du ein selbstgeschriebenes oder übernommenes Grundgerüst hast, gibt es drei naheliegende "Schrauben" an denen Du drehen kannst:
(a) Die Bewertungsfunktion: Wie soll eine Position auf dem Brett statisch bewertet werden? Wieviel Schachwissen willst Du hier reinstecken? Oder vielleicht doch etwas ganz simples, um Rechenzeit zu sparen und zwei Halbzüge tiefer rechnen zu können?
(b) Die "quiescence analysis", die Kriterien wann das Berechnen von weiteren Zügen abgebrochen werden soll und die Stellung guten Gewissens der Bewertungsfunktion übergeben werden kann. Offensichtlich ist eine feste Berechnungstiefe ganz schlecht, zumindest das Schlagen hängender Figuren und Schachgebote sollten weiter verfolgt werden als ruhige Züge.
(c) Die Vorsortierung für die Alpha-Beta-Suche. Je wahrscheinlicher die besten Züge als erstes betrachtet werden, um so mehr unnötige Berechnungen kann die Alpha-Beta-Suche abschneiden.