Not logged inCSS-Forum
Forum CSS-Online Help Search Login
CSS-Shop Impressum Datenschutz
Up Topic Hauptforen / Schachprogrammierung / Einbeziehung von Eröffnungsbücher
- By Lothar Jung Date 2021-09-17 15:17
/*
*  BOOK.C
*  Tom Kerrigan's Simple Chess Program (TSCP)
*
*  Copyright 1997 Tom Kerrigan
*/

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include "defs.h"
#include "data.h"
#include "protos.h"

/* the opening book file, declared here so we don't have to include stdio.h in
   a header file */
FILE *book_file;

/* open_book() opens the opening book file and initializes the random number
   generator so we play random book moves. */

void open_book()
{
  srand(time(NULL));
  book_file = fopen("book.txt", "r");
  if (!book_file)
    printf("Opening book missing.\n");
}

/* close_book() closes the book file. This is called when the program exits. */

void close_book()
{
  if (book_file)
    fclose(book_file);
  book_file = NULL;
}

/* book_move() returns a book move (in integer format) or -1 if there is no
   book move. */

int book_move()
{
  char line[256];
  char book_line[256];
  int i, j, m;
  int move[50];  /* the possible book moves */
  int count[50];  /* the number of occurrences of each move */
  int moves = 0;
  int total_count = 0;

  if (!book_file || hply > 25)
    return -1;

  /* line is a string with the current line, e.g., "e2e4 e7e5 g1f3 " */
  line[0] = '\0';
  j = 0;
  for (i = 0; i < hply; ++i)
    j += sprintf(line + j, "%s ", move_str(hist_dat.m.b));

  /* compare line to each line in the opening book */
  fseek(book_file, 0, SEEK_SET);
  while (fgets(book_line, 256, book_file)) {
    if (book_match(line, book_line)) {

      /* parse the book move that continues the line */
      m = parse_move(&book_line[strlen(line)]);
      if (m == -1)
        continue;
      m = gen_dat[m].m.u;

      /* add the book move to the move list, or update the move's
         count */
      for (j = 0; j < moves; ++j)
        if (move[j] == m) {
          ++count[j];
          break;
        }
      if (j == moves) {
        move[moves] = m;
        count[moves] = 1;
        ++moves;
      }
      ++total_count;
    }
  }

  /* no book moves? */
  if (moves == 0)
    return -1;

  /* Think of total_count as the set of matching book lines.
     Randomly pick one of those lines (j) and figure out which
     move j "corresponds" to. */
  j = rand() % total_count;
  for (i = 0; i < moves; ++i) {
    j -= count;
    if (j < 0)
      return move;
  }
  return -1;  /* shouldn't get here */
}

/* book_match() returns TRUE if the first part of s2 matches s1. */

BOOL book_match(char *s1, char *s2)
{
  int i;

  for (i = 0; i < (signed int)strlen(s1); ++i)
    if (s2 == '\0' || s2 != s1)
      return FALSE;
  return TRUE;
}
- By Lothar Jung Date 2021-11-17 07:57
Eröffnungsbücher zur Entwicklung von Stockfish:

https://github.com/official-stockfish/books
- By Lothar Jung Date 2022-03-16 18:51
Eröffnungs-Bücher für Engines verfolgen verschiedene Zwecke:

1. Ganz ohne Buch, um auch die Fähigkeiten der Engines in der Eröffnungsphase, nicht außen vorzulassen.
BTW Lc0 spielt ohne Buch auch sehr gut. Das Netz wird von dem Beginn an ohne Buchhilfe trainiert.

2. Mit einem kurzen Buch, z.B. bis zum 3. bis 5. Doppelzug. Damit wird die Breite der Eröffnungsvarianten beeinflusst.

3. Kurze oder längere Bücher, die ausgeglichen oder nicht (ganz) ausgeglichen sind.
Damit wird geprüft, ob eine Engine mit schwierigen Eröffnungspositionen gut oder weniger gut zurecht kommt.

4. Anti-Remis-Bücher, wie z.B. HERT, um die Remishäufigkeit einzugrenzen.

5. Vorgenerierte Bücher für Stockfish und/oder Lc0, wie z.B. Cerebellum.
Sie decken das optimierte Zugverhalten einer Engine bis ins späte Mittelspiel ab.

6. Spezielle Bücher für eine bestimmte Engine mit einem bestimmten Netz/NNUE. Dazu wird eine große Menge an Testpartien benötigt.

7. Positionelle Bücher, die halb- und/oder geschlossene Varianten bevorzugen.

8. GUI-Bücher, die mit der GUI erworben werden, z.B. Fritz, Sdredder oder Hiarcs.

9. Umfangreiche Eröffnungsbibliotheken oder -Datenbanken für das Training oder zum Recherchieren.

10. FRC-Eröffnungen, deren Partien nicht auf das theoretische Eröffnungswissen basieren.

Immer geht es um die Frage, will man Testen, eine Rangliste erstellen oder mit der Engine an einem Turnier teilnehmen.
- By Lothar Jung Date 2022-04-03 11:16 Edited 2022-04-03 11:49
Hier ein umfangreiches englischsprachiges Buch zur Eröffnungstheorie: “Fundamental Chess Openings”:

https://ia601001.us.archive.org/21/items/fundamentalchessopenings/FCO%20Fundamental%20Chess%20Openings.pdf

Hier eine Beschreibung zur Erstellung eigener Eröffnungsbücher unter der Fritz-GUI:

http://help.chessbase.com/Fritz/15/Deu/index.html?own_book.htm

Hier eine Beschreibung für Scid als Eröffnungstraining:

https://sourceforge.net/p/scid/wiki/TheOpeningTrainer/

Hier einige Threads auf Chess.com zu Scid zur Erstellung eines Eröffnungsrepertoire:

https://www.chess.com/clubs/forum/view/using-scid-to-develop-an-opening-repertoire

Hier drei YouTube Videos zu Scid zum Eröffnungstraining und zur Eröffnungserstellung:

https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&ved=2ahUKEwjMmaC3y_f2AhURi_0HHdDfAu8QwqsBegQIAhAB&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D7_ZPltcSyjo&usg=AOvVaw3znPFH6mwZprqqgsostqhu

https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&ved=2ahUKEwjMmaC3y_f2AhURi_0HHdDfAu8QwqsBegQIGBAB&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DNNfw27knJrI&usg=AOvVaw14TveIWGe2Pr6_wV2d8guk

https://www.youtube.com/watch?v=7_ZPltcSyjo&index=6&list=PLC53505mbsT6zSPQcUAZpCa2_JOV2XBNg
- By Lothar Jung Date 2022-04-06 13:35
Für die Erstellung von Eröffnungsbücher sind Schachdatenbanken unerlässlich.

Hier der Wikipedia Beitrag zu „Schachdatenbanken“:

https://de.wikipedia.org/wiki/Schachdatenbank?wprov=sfti1
- - By Lothar Jung Date 2022-04-07 14:31 Edited 2022-04-07 15:21
Die Webseite von Stefan Pohl bietet eine vielfältige Auswahl von Eröffnungen, Tools und Tests zum Download an:

https://www.sp-cc.de/downloads--links.htm

Die Webseite von Frank Quisinsky weist auch eine große Auswahl von Eröffnungsbücher auf:

https://www.amateurschach.de/

Hier die Dokumentation zum FEOBOS Projekt:
https://www.amateurschach.de/download/book/documentation-feobos.pdf

Auch Thomas Zipproth verfolgt mit Cerebellum und Brainfish zwei interessante Projekte:

https://zipproth.de/Brainfish/

Beim Einsatz von SpitzenCPUHardware oder dem Einsatz von neuronalen Netzen (z.B. LC0) ist zu bedenken, dass die Engine durch Berechnung und/oder Netzzugriff die gleichen oder in manchen Positionen bessere Züge finden als ein Eröffnungsbuch.

Hervorzuheben ist besonders die Eröffnungs-Enzyklopädie von Chessbase:

https://en.chessbase.com/post/new-opening-encyclopaedia-2021

Nicht zuletzt ist 365chess.com mit seinem „Opening Explorer“ zu erwähnen:

https://www.365chess.com/eco.php
Parent - By Frank Quisinsky Date 2022-04-18 14:11 Edited 2022-04-18 14:28
Hallo Lothar,

es gibt noch eine nette Idee:

Muss bei den Büchern wirklich unterscheiden zwischen:

1. Spezielles Engines-Buch
2. Buch für Testzwecke z. B. für die Ermittlung von Ratings

Kurz zu Punkt 2:
Schilderte kürzlich, dass die Zugumstellungen ein wirkliches Problem sind und auch unerheblich für den Test von Engines.
Je mehr Zugumstellungen im Buch sind, desto höher die Wahrscheinlichkeit doppelter Partien bzw. werden durch viele Zugumstellungen verschiedene ECO Codes zu oft ausgespielt und dies läßt sich in einem Buch mit vorhandenen Ausspielwahrscheinlichkeiten nicht mehr händeln.

Bei FEOBOS 2, also bei meinem kommenden Projekt, werde ich anders vorgehen.

Die bekannten Linien die zu den 500 ECO Codes führen sind sehr übersichtlich in den 5 Mamutwerken vom Informator Verlag aufgeführt.
Im Grunde ja jetzt 6 weil kürzlich der B00-B99 in zwei Werken unterteilt wurde.

Ich erfasse die kompletten Hauptlinie von Hand in einem neuen Buch.
Allerdings nicht direkt in einem Buch sondern Linie für Linie in einzelnen PGN Files.

Derartige Arbeiten gibt es aber meist nur oberflächlich bis zum Beginn der ECO-Code Bildung.
Das wird sehr lange dauern aber ich kann verschiedene ehemalige Arbeiten besser dabei überprüfen bzw. habe hier schon sehr viel editiert.

Nun der daraus resultierende Vorteil:
Ich schneide pro Partie die kompletten ersten Zügen weg, da diese ja nach der erwähnten Arbeit im Buch sind bzw. ich alle Hauptvarianten als PGN habe.

Vorteil: Es sind keine Zugumstellungen mehr drin, immer nur die Hauptvarianten!
Dann füge ich x Züge nach ECO-Code Bildung, die um die ersten Züge abgeschnittenen Partien hinzu.

Die werden natürlich wieder von x Engines auf Fehler geprüft.

Also, wenn z. B.
E68 sich nach Zug 9. Dc2 bildet, schneide ich aus der Datenbank der E68 Partien die Züge 1-8 weg.

Wenn ich sage:
Buchtiefe = 5 Züge nach ECO-Code Bildung
habe ich in den E68 Daten also nur die Varianten von Zugnummer 9-13.

Bei dieser Vorgehensweise können im Vorfeld viele Problemkonstellationen umgangen werden.
Es entsteht ein Buch ohne Zugumstellungen deren Zugfolen immer getreue der Hauptlinie gehen.
Mithin lassen sich Buchprioritäten nach Beliebtheit der Varianten recht einfach setzen.

Viele Grüße
Frank

Problematisch ist nur:
Es macht keinen Sinn sich an GUI ECO-Code Informationen zu halten weil die oft falsch sind.
Egal welche GUI, fast alle sind betroffen und der Grund sind leider die Zugumstellungen.
Up Topic Hauptforen / Schachprogrammierung / Einbeziehung von Eröffnungsbücher

Powered by mwForum 2.29.3 © 1999-2014 Markus Wichitill