Programmierprinzipien

Dennoch scheint es im allgemeinen so, das die, ich nenne es mal „Programmierphilosophien“ nicht nur sehr unterschiedlich sind, sondern auch bewirken können, das sich die Programme im direkten Vergleich miteinander manchmal etwas schwer tun. Das kann auch passieren, wenn die gleiche Hardware zugrunde liegt, denn Prog1 denkt beispielsweise schlicht positionell, vielleicht ganz entsprechend der Denkweise seines Programmierers. So ist das Programmwerk immer auch ein Spiegelbild dessen, der die Ideen in das Skript übertragen hat.

Dagegen geht Prog2 völlig anders, mit hoher taktischer Schlagkraft zu Werke, hat aber möglicherweise nur mangelhaftes Endspielwissen implementiert bekommen.

Abhängig davon, in welcher Partiephase die Ungenauigkeiten nun passieren, reihen sich die Fehler aneinander. Unterlaufen diese Fehler wechselseitig, so werden die Turniervergleiche in gewissen Sinne unberechenbar und korrelieren wenig mit den angegebenen Elowertungen. Da existiert dann einiges an Toleranz.

100-200 Elo +/- sind da locker möglich.

Prog1: erkennt in irgendeinem Stellungstyp die Komplexität der Position und analysiert diese entsprechend länger. Während Prog2: taktisch ausgerichtet, in Richtung schnellem Vorteil rechnet, wird es daher eher auf mögliche Kombinationen setzen, wobei allerdings wieder die Gefahr besteht, die Stellung oder die Partie zu überziehen und in der Folge der errechneten Möglichkeiten von Prog1 und dessen Schachwissen zur Strafe ausgekontert zu werden.

Die A-Strategie: wird im allgemeinen als „brute force“ Stil beschrieben. Hier werden vom Computer alle Möglichkeiten in Erwägung gezogen. Der erforderlichen Kapazitäten an Rechenleistung sind dabei immens. Deshalb werden abhängig von der Rechenzeit, einige Markierungen im Suchbaum tiefer verfolgt, doch wird vorher viel Zeit verwendet, in der Unsinniges aussortiert wird. Naturgemäß werden hier triviale Fehler nicht gemacht, weil gerade dieses präventiv verhindert wird. Der Nachteil liegt darin, das vielversprechende Varianten wiederum auf ein Minimum reduziert werden müssen, von denen nur einzelne tiefer untersucht werden können.

Die B-Strategie: ist eindeutig „selektiv“ ausgerichtet. Grundsätzlich ist sie sehr effektiv, weil diese im Suchbaum vertikal nach der Lösung sucht. Im Gegensatz zur „brute force“ Methode, wo die Verästelungen im Suchbaum in seiner Breite und Unerschöpflichkeit systematisch durchforstet werden, verschwendet das „selektive“ Programm wenig Zeit damit, unsinnige Zugfolgen überhaupt erst in Erwägung zu ziehen. Stattdessen werden Varianten ermittelt, die für die Stellungssituation als wahrscheinlich gut bewertet werden.

Diese werden dann sehr gründlich unter die Lupe genommen. Gleichzeitig bekommen ein paar weitere Äste noch Bedeutung, um weitere schlüssige Varianten mit einzubeziehen. Denn diese sollen bei der Bestmove-Suche nicht übersehen werden.

Das große Problem für den Programmierer ist natürlich die Bewertung in den einzelnen Ästen des Suchbaumes, an dessen Stellen Markierungen gesetzt werden. Sprich, das Festlegen von Entscheidungskriterien. Diese Differenzierungen sind vermutlich für das Schreiben eines starken Schachprogrammes eine der größten Herausforderungen.

Denn im Vergleich mit dem „brute force“ Prinzip können durch falsche Kriterien, entscheidende Zugfolgen ausgelassen werden.

Es existieren auch sogenannte „hochselektive“ Programme, die den Suchbaum vielerorts früh abschneiden und nur die am stärksten erscheinenden Varianten in Erwägung ziehen. Diese werden dann jedoch extrem tief untersucht (30, 40 Halbzüge u.m). Der Nachteil liegt hier am ehesten darin, das taktische Wendungen, aus nicht untersuchten Verästelungen unentdeckt bleiben.

Die C-Strategie: ist gedanklich irgendwie genial, aber wohl auch die schwierigste Form, dem Programm eine sinnvolle Struktur zu geben.

Statisch ist es einfacher, denn man kann durch Algorithmen in Zusammenarbeit mit Datenbanken, dem Programm Wissen mit auf den Weg geben (z.B. Bauernstrukturen, Isolani, Endspielprinzipien, Mattbilder, Freibauern, Quadratregel, u.v.m.).

Denn das passierte auch schon seit den Achtziger Jahren. Ein Mephisto III beherrscht das Mattsetzen mit Läufer und Springer. Für modernere Programme der Neunziger war das keine Selbstverständlichkeit, manche versagten darin kläglich, so z.B. auch das Modul Polgar, obwohl es hingegen Freibauern im Endspiel sehr gut behandelt.

Die Alten waren nicht in allem schlechter. Reines Wissen hatten diese manchmal sogar mehr. Was die C-Strategie so kompliziert macht: sie soll die Formen großmeisterlichen Denkens nachvollziehen. Also das System wie der Mensch denkt, das Prinzip der „Mustererkennung“.

Der Großmeister sieht eine Stellung und beginnt nicht in erster Linie zu rechnen, sondern sieht die Möglichkeiten intuitiv, ebenso die Kraft die hinter der Konstellation seiner Figuren steht. Exakt diese Denkweise sollte ein Programm dieser Art umsetzen. Über weite Strecken wird die Entwicklung eines solchen Schachprogramms am ehesten durch die KI-Programme abgedeckt.

Programmierer wie Ed Schröder oder Richard Lang setzten sehr auf positionelles Spiel, Strukuren von Bauern und Endspielwissen im allgemeinen. Frans Morsch hatte die Fähigkeiten, Programme, die er schrieb, auf sehr kleinen Hardwarebausteinen (ROM) unterzubringen. Die Ausrichtung der Morsch `is, salopp formuliert, war vor allem taktischer Natur.

Auch im großen Nachfolger Fritz, der späteren Software, die Frans Morsch kommerziell schrieb, war es die taktische Stärke, welche das Programm auszeichnete. Erst mit den späteren Versionen wurden auch die anderen Spielabschnitte stark verbessert, was dazu führte, das Fritz 13 eine doch sehr solide spielende Software wurde. Natürlich existieren inzwischen noch weitaus stärkere Programme, denn die Freilegung des Sourcecodes seitens vieler Programmierer hat für eine enorme Vielfalt und Kreativität wie auch Spielstärke gesorgt.

Dadurch entstanden Schachprogramme, die, obwohl frei erhältlich, unglaublich stark sind. Für den Normalverbraucher im allgemeinen nur zur Analyse interessant.

Paradebeispiel ist die Open Source Software Stockfish, inzwischen in der Version 14 angekommen, ist sie auf allen Plattformen Analyseengine Nr. 1 und ist neben der KI-Engine Lc0 nahezu unschlagbar.

Die Programmierung hat immense Fortschritte erzielt. Berücksichtigt man noch die Tablebases, z.B. Syzygy, die TB´s von Festplattenspeicher benötigen und das Endspiel bis auf mindestens 7-Figuren am Brett komplett errechnen können, so bleibt dem menschlichen Spieler wenig übrig, dieser Power, bzw. diesem statischen Wissen etwas Entscheidendes entgegenzusetzen.