Not logged inCSS-Forum
Forum CSS-Online Help Search Login
CSS-Shop Impressum Datenschutz
Up Topic Hauptforen / Schachprogrammierung / Einfache Eröffnungsbibliothek in Visual Basic
- - By Jens Hartmann Date 2023-03-14 10:21
Hallo,
Ich habe aus Spaß das alte Basic Minimax Programm nach Visual Basic 6 und Visual Basic 2008 mit GUI und einigen Erweiterungen portiert. Visual Basic NET liefert noch jede Menge Fehlermeldungen, die ich mir erst ansehen muss. Also bleibe ich vorerst bei den alten VB Versionen.
Nun würde ich gerne eine extrem einfache Eröffnungsbibliothek hinzufügen und suche nach Ideen.
Ich bin KEIN Programmierer, daher habe ich es mal sehr dilettantisch für den ersten Zug von Weiß so versucht:
Zufallszahlen von 1 bis 10 generieren, und dann mit select case die verschiedenen Eröffnungszüge ausspielen.
Also zB CASE 1,2,3: e2e4
CASE 4,5,6: d2d4
CASE 7 c2c4
Und so weiter.

Das wird aber im 2. Zug schon sehr aufwändig, an eine Tiefe von 3 oder mehr will ich gar nicht denken. Extrem verschachtelte IF-Then Abläufe.
Hat jemand eine Idee, wie das ein Laie zB 3 Züge tief hinbekommen kann, ohne einen Programmierkurs zu belegen?

Das Programm spielt übrigens auf heutigen Rechnern gar nicht sooo schlecht, scheitert aber bei deutlich besserer Stellung oft an der 3-Züge-Regel, die es nicht kennt.
Um Minimax diese Regel beizubringen, muss ich dazu immer alle bisherigen Stellungen speichern und das Programm prüfen lassen, ob es eine Wiederholung gibt und wenn ja, die Stellungsbewertung auf 0 setzen? Hat dafür jemand eine elegante Lösung?
Bei Interesse stelle ich die exe Datei online, sie ist ohne Installation lauffähig.
Danke
Jens
Parent - - By Thomas Plaschke Date 2023-03-14 17:49 Upvotes 1
Kennst Du die Implementation der Buchfunktion in TSCP? Tom Kerrigan hat seinem kleinen Programm eine Textdatei mit den Varianten in algebraischer Notation als Eröffnungsbibliothek beigefügt. Als Anregung für eine eigene Implementation sicher nicht schlecht.

In TSCP findest Du auch eine Funktion ("reps()"), die 3-fache Stellungswiederholungen erkennt. Sie benutzt dafür eine Hashtabelle. Ohne Hashtabelle arbeitet die entsprechende Funktion ("repetition()") im etwas angegrauten GNUChess 4.14.

Viele Grüße
Th. Plaschke
Parent - By Jens Hartmann Date 2023-03-14 21:19
Vielen Dank Thomas für Deine kompetente Hilfestellung, ich werde mir das mal ansehen, fürchte aber, dass das meine Programmierfähigkeiten ( die gegen null gehen   ) übersteigt.
Parent - - By Jens Hartmann Date 2023-04-02 16:43
Ich hab mich jetzt nochmal einige Stunden hingesetzt und mich unter anderem mit dem Einlesen und Vergleichen von Strings beschäftigt.
Es klappt jetzt bestens!
Gelöst habe ich es so:
In einer unsichtbaren Textbox des Programmes stehen analog zu TSCP die Eröffnugnszüge drinnen. Man könnte alles auch in eine txt Datei schreiben, aber ich wollte alles in der exe haben. Die tatsächlich durchgeführten Züge werden in eine andere Textbox geschrieben. Nach jedem Zug prüft das Programm, ob es in der Eröffnungsbibliothek eine Zeile gibt, die identisch beginnt wie die bisher gespielten Züge. Vorher wird der String, der in der Liste aller bisher gespielten Züge steht, entsprechend aufbereitet: Zugnummern entfernen, Figurensymbole entfernen, ggf. Schlagsymbole und Bindestriche entfernen so dass nur mehr die Notation überbleibt, wie sie in TSCPs Eröffnungsbuch steht. Dazu habe ich mich unter anderem mit Regular Expressions (RegEx) auseinandergesetzt, die ich aber am Ende doch nicht benötigte. Wenn eine passende Zeile gefunden wird, wird der entsprechende Zug ausgespielt ohne zu rechnen (je nachdem, wie viele Halbzüge bereits gepsielt sind, holt sich das Programm die entsprechende Stelle im String). Wenn es mehrere Zeilen gibt, die identisch sind (weil die Verzweigung erst später erfolgt), so wird per Zufallsgenerator eine der passenden Zeilen ausgewählt.
Wenn das einmal klappt, und das tut es seit heute Mittag, kann man die Eröffnungsbibliothek mit sehr geringem Aufwand beliebig erweitern. Jetzt suche ich noch nach einer Datei die mehr Züge enthält als die von TSCP.
Nochmals Danke für diesen wirklich guten Hinweis, Thomas.
Einen schönen Sonntag noch,
Jens
Parent - - By Thomas Plaschke Date 2023-04-02 17:57
Gratuliere! Aber jetzt kommen die Fleißaufgaben 
In der jetzigen Fassung spielt der Spielstatus (Anzugrecht, Rochaderechte, ep-Feld und Zugzähler) keine Rolle. Der nächste Schritt wäre die Bibliothekszüge zu differenzieren nach "guten" Zügen und Zügen, die das Programm nicht spielen soll, für die es aber die Widerlegung haben soll, falls der Gegner sie spielt ("passive" Bibliothek). Damit wird’s komplizierter …

Weiter viel Spaß!
Viele Grüße
Th. Plaschke
Parent - - By Jens Hartmann Date 2023-04-03 13:53
Ja, daran hab ich auch schon gedacht, aber schnell wieder verworfen. Das wäre in der Tat ein ziemlicher Aufwand.
Mit diesem Buch hier habe ich gefunden, wonach ich gesucht habe:

http://www.pvv.ntnu.no/~jacobbl/jacob/Sjakk/Openings.txt
Parent - By Thorsten Czub Date 2023-04-03 20:07
Ich habe mal eine routine in basic geschrieben die stellungen als hash und dazu züge abspeichert.
Mir war das mit den zugumstellungen bei normaler weise zu blöd.

Wichtig bei büchern ist unbedingt eine abfrage, keine illegalen und keine „schlechten“ züge zu spielen. Am besten die normale engine mitrevhnen lassen und das mit dem buchzug korrelieren. Sonst werden fehler im buch zum Verhängnis.
Up Topic Hauptforen / Schachprogrammierung / Einfache Eröffnungsbibliothek in Visual Basic

Powered by mwForum 2.29.3 © 1999-2014 Markus Wichitill