Matroids Matheplanet Forum Index
Moderiert von matroid
Aktuelles und Interessantes » Schwarzes Brett » Schachprogramm
Druckversion
Druckversion
Antworten
Antworten
Autor
Kein bestimmter Bereich Schachprogramm
stpolster
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 27.03.2014
Mitteilungen: 1157
Aus: Chemnitz
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2018-08-03


Hallo,
da im Moment hier gerade wieder über Schach gesprochen wird, habe ich eine "Bitte".

Ich selbst bin ein grottenschlechter Schachspieler. Dennoch finde ich das Spiel faszinierend.
Aus diesem Grund habe ich mich vor ein paar Jahren an einer programmtechnischen Umsetzung versucht und ein kleines Windows-Schachprogramm produziert.
siehe

Es ist ein Hobbyprojekt und nicht wirklich ein richtiges Schachprogramm, da es dafür zu spielschwach ist.
Ich verliere gegen mein Programm ständig, da, wie gesagt, ich nur schlecht Schach spielen kann.
Bisher haben sich einige meiner Schüler daran versucht. Und die verlieren in der Spielstufe "normal" auch regelmäßig, bis auf einen, der allerdings erfolgreich Schachturniere absolvierte. Sein Kommentar war "niederschmetternd".

Meine Frage nun. Hat jemand von euch etwas Zeit (ich weiß, das ist unwahrscheinlich) und Lust, das Programm mal zu testen.
Über kritische Hinweise, die es mir vielleicht möglich machen das Programm zu optimieren, würde ich mich freuen.

Nach dem Herunterladen, müsste die ZIP-Datei in einen beliebigen Ordner entpackt werden, da die zweite Datei neben der Exe die Problemschachaufgaben enthält.
Bei der Spielstufe sollte man nicht so hoch gehen, da das Programm dann ewig rechnet; je nach Computer natürlich.

Nebenbei: Gibt es eigentlich eine Möglichkeit, die Spielstärke eines solchen Programms einigermaßen zu bewerten? Ich habe keine Ahnung.

Viel Spaß. Ich würde mich über Rückmeldungen sehr freuen.
LG Steffen



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Ex_Senior
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, eingetragen 2018-08-03


Hallo Steffen,

wenn dein Schach-Programm sich in eine GUI wie Arena einbinden lässt, könnte man dort automatisierte Turniere gegen andere Schachprogramme (z.B. frei verfügbare) laufen lassen und so die Spielstärke einschätzen/ ausrechnen. Dazu müssten sich Zugein- und -ausgabe an irgendwelche Protokolle halten, siehe auch verlinkte Seite.

Cyrix



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
gonz
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 16.02.2013
Mitteilungen: 3529
Aus: Harz
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.2, eingetragen 2018-08-03


Ich habs mir gerade heruntergeladen. Es sieht gut aus, spielt sich gut ( so von der Oberfläche her ) und wenn ich unkonzentriert ( Freitag morgens vor dem erreichen des notwendigen Kaffeepegels ) herumdaddle kann es mich auch schlagen ( voreingestellte Spielstufe 5, ich habe auch etwa mit Geschwindigkeit wie bei einer Blitzpartie gespielt ). Ich werde es mir bei Gelegenheit mal ausführlicher ansehen. Allerdings bin ich kein wirklicher Maßstab, ich war zu Schüler/Studentenzeiten mal ein "mittlerer" Vereinsspieler, allerdings jetzt natürlich etwas eingerostet.

Vielen Dank!
sagt schon einmal und winkt fröhlich aus dem Harz herüber

gonz


PS.: Wenn du Hinweise auf ggf. vorhandenes Verbesserungspotiential haben möchtest, es wäre einfacher, wenn als Voreinstellung ein Spieler, zB Schwarz auf "Computer" stehen würde, ich habe erstmal kurz gestutzt, warum es nicht zieht ( was natürlich nur zeigt, dass ich früh am Morgen nicht wirklich zu gebrauchen bin ).





Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
stpolster
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 27.03.2014
Mitteilungen: 1157
Aus: Chemnitz
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.3, vom Themenstarter, eingetragen 2018-08-03


Hallo cyrix,
Danke für den Hinweis. Das sehe ich mir einmal genauer an.

Hallo gonz,
Danke für den ersten Kommentar.
Das Umstellen auf Computer bei schwarz ist kein Problem.

LG Steffen



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
PrinzessinEinhorn
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 23.01.2017
Mitteilungen: 2458
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.4, eingetragen 2018-08-03


Ich habe mir das Programm gerade auch heruntergeladen und mal aus Spaß eine Partie auf höchster Stufe gespielt.

Ich weiß nicht, ob ich das Programm falsch bediene.
Wie mir scheint, muss man die Computerzüge ja manuell machen und dabei eben dem Zugvorschlag folgen.

Es scheint auch, dass es keine wirkliche Rolle spielt, wie viel Zeit man dem Programm lässt. Der Zugvorschlag ändert sich auch nach 5 Minuten Bedenkzeit nicht.
Am Anfang hatte ich dem Programm recht viel Zeit gelassen. Mindestens eine Minute pro Zug, aber schon nach 9 Zügen hatte das Programm einen Läufer und Springer aufgegeben.
Als ich dann gemerkt habe, dass die Bedenkzeit wohl ohnehin keine Rolle spielt, habe ich dann auch weniger Zeit gegeben.

Als ich das Programm geschlagen habe, hat der Computer für Weiß einen Zugvorschlag gegeben, der nicht einzügig Matt bedeutet hätte, sondern dann wohl in zwei Zügen zum Matt geführt hätte.
Das einzügige Matt wurde also nicht gefunden. Und das war nichts verrücktes/trickreiches.

Zuvor hatte ich dem Programm eine Figur als Opfer angeboten, was auch zu einem einzügigem Matt geführt hätte, aber das wurde von dem Programm wohl gesehen. Jedenfalls wurde das Opfer nicht akzeptiert und die Drohung verteidigt.


[Die Antwort wurde nach Beitrag No.2 begonnen.]



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
stpolster
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 27.03.2014
Mitteilungen: 1157
Aus: Chemnitz
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.5, vom Themenstarter, eingetragen 2018-08-03


Hallo,
2018-08-03 10:04 - PrinzessinEinhorn in Beitrag No. 4 schreibt:
Wie mir scheint, muss man die Computerzüge ja manuell machen und dabei eben dem Zugvorschlag folgen.
Danke für den ersten Hinweis. Das klingt nicht so gut.

Zumindest musst du rechts oben als Spieler (z.B. schwarz) den Computer auswählen. Dann müsste er eigentlich von sich aus ziehen.
Der Zugvorschlag ist normaler Weise nicht dafür vorgesehen.

Hmm, da habe ich wohl doch einiges zu verbessern.

LG Steffen



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
PrinzessinEinhorn
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 23.01.2017
Mitteilungen: 2458
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.6, eingetragen 2018-08-03



Zumindest musst du rechts oben als Spieler (z.B. schwarz) den Computer auswählen. Dann müsste er eigentlich von sich aus ziehen.
Der Zugvorschlag ist normaler Weise nicht dafür vorgesehen.

Das habe ich eigentlich getan.
Ich hatte gerade am Anfang recht lange auf den Computerzug gewartet.
Für den ersten Zug hatte ich dem Computer 6 Minuten gegeben, aber es ist nichts passiert.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
stpolster
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 27.03.2014
Mitteilungen: 1157
Aus: Chemnitz
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.7, vom Themenstarter, eingetragen 2018-08-03


Welche Spielstufe hast du eingestellt?
Je höher, desto mehr Zeit brauch er, exponentiell wachsend
In der Stufe "normal" müsste ein Zug sofort erscheinen.

Wenn es das nicht ist, kommt eigentlich nur die Laufumgebung in Frage. Lässt du das Programm direkt in Windows laufen oder in Windows-Umgebung bei Linux oder MacOS?

Das ist sehr schade und ich kann nur um Entschuldigung bitten.
LG Steffen



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
PrinzessinEinhorn
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 23.01.2017
Mitteilungen: 2458
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.8, eingetragen 2018-08-03



Das ist sehr schade und ich kann nur um Entschuldigung bitten.

Kein Problem. ^^

Es lag wohl tatsächlich daran, dass ich auf Stufe 15 gestellt hatte.
Ich habe jetzt gerade noch einmal auf Stufe 5 gespielt und da funktionierte es tadellos.
Auch war die Spielstärke deutlich höher, als die auf Stufe 15 (mit dem Zugvorschlag).

Am Anfang hat das Programm wirklich solide gespielt.
Dann auf einmal grundlos einen Turm geopfert.


Wenn es das nicht ist, kommt eigentlich nur die Laufumgebung in Frage. Lässt du das Programm direkt in Windows laufen oder in Windows-Umgebung bei Linux oder MacOS?

Öhm.... keine Ahnung. :)
Ich denke direkt über Windows.

Ich habe einen wirklich schlechten Laptop, der auch für sowas glaube ich nicht geeignet ist.
Ich habe deutlich gemerkt, wie sehr das Programm auf der Spielstufe 15 die Leistung von dem Laptop beansprucht.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
gonz
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 16.02.2013
Mitteilungen: 3529
Aus: Harz
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.9, eingetragen 2018-08-03


Hallo Steffen,

ich habe in der Mittagspause nochmal etwas rumprobiert ( das erinnerte mich an gute alte Zeiten, in denen ich die Mittagspause oft zu einer Partie gegen einen Kollegen genutzt habe... )

was ich auch vorschlagen würde wäre, dass man die gespielten Partien in einem Format exportiert bekommt wie PGN, denn dann kann man sie sich mit einem beliebigen Viewer später ansehen.

Kannst du nochmal sagen, wie der Algorithmus genauer funktioniert? Ich meine beobachtet zu haben, dass das Programm bei der Einstellung "5" für die Spielstufe eine Figur einfach so einzügig eingestellt hat, und das dürfte ja nicht sein bzw. eher auf einen Fehler in der Programmierung als auf eine algorithmische Schwäche deuten. Oder gibt es so schon irgendeine Möglichkeit, dass ich dir Partien zukommen lassen kann, um auch solche Situationen hinzuweisen und die du ggf. reproduzieren kannst?

Jedenfalls eine interessante Sache!

Grüsse
gonz



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
stpolster
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 27.03.2014
Mitteilungen: 1157
Aus: Chemnitz
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.10, vom Themenstarter, eingetragen 2018-08-03


Hallo gonz,
ich habe jetzt eine neue Variante abgespeichert, d.h. du müsstest nach einmal downloaden.
Unter dem Menupunkt "Spielsteuerung/Zugliste als Textdatei speichern" kannst du die rechts angezeigte Liste speichern.
Ich habe auch zwei Menüpunkte (Problemschach, Eröffnungen) erst einmal entfernt, da dazu noch weitere Dateien notwendig wären. Habe ich heute früh übersehen. Sorry.

Zum Algorithmus: Die Spielstufe gibt an, wie viele Halbzüge gerechnet werden, d.h. bei 5 nicht besonders viele.
Jede Figur wird nach Wertigkeit und Position auf dem Feld bewertet. Zusätzlich zählt evtl. Materialverlust oder -gewinn. D.h., nichts Besonderes.
Es gibt keine Eröffnungsbibliothek oder spezielle Endspielszenarien. Deshalb kann es manchmal zu merkwürdigen Zügen kommen.
Da es ein Delphi-Programm ist, dauert die Berechnung auch etwas.

LG Steffen



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
gonz
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 16.02.2013
Mitteilungen: 3529
Aus: Harz
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.11, eingetragen 2018-08-03


Beim Download über mathematikalpha.de/schach und den dortigen Download Schalter kriege ich noch die Version von 2014?

Nebenbei: Delphi ist cool :) Da habe ich auch gerne und viel mit programmiert.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
stpolster
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 27.03.2014
Mitteilungen: 1157
Aus: Chemnitz
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.12, vom Themenstarter, eingetragen 2018-08-03


2018-08-03 16:17 - gonz in Beitrag No. 11 schreibt:
Beim Download über mathematikalpha.de/schach und den dortigen Download Schalter kriege ich noch die Version von 2014?
Verstehe ich nicht. Ich habe es jetzt zwei Mal probiert und bekomme die neue Version.
Evtl. müsstest du den Cache im Browser löschen.

LG Steffen



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
gonz
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 16.02.2013
Mitteilungen: 3529
Aus: Harz
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.13, eingetragen 2018-08-03


Guter Hinweis :) Jetzt hat es geklappt!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
darkhelmet
Senior Letzter Besuch: im letzten Quartal
Dabei seit: 05.03.2007
Mitteilungen: 2652
Aus: Bayern
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.14, eingetragen 2018-08-04


2018-08-03 08:02 - stpolster im Themenstart schreibt:
Nebenbei: Gibt es eigentlich eine Möglichkeit, die Spielstärke eines solchen Programms einigermaßen zu bewerten? Ich habe keine Ahnung.

Zusätzlich zum Spielen gegen andere Programme gibt es Test Suites, z.B. hier:

Ich glaube nicht, dass die alle nach wissenschaftlichen Kriterien erstellt wurden, aber prinzipiell haben sie schon ihre Berechtigung, denn gegen andere Schachcomputer spielen ist nicht die einzige Einsatzmöglichkeit für einen PC, sondern insbesondere auch Partien analysieren. Dafür werden nicht exakt die gleichen Fähigkeiten benötigt.




Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
stpolster
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 27.03.2014
Mitteilungen: 1157
Aus: Chemnitz
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.15, vom Themenstarter, eingetragen 2018-08-04


Danke für den Hinweis

LG Steffen



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Delastelle
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 17.11.2006
Mitteilungen: 1489
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.16, eingetragen 2018-08-05


Hallo stpolster!

Falls Du Dein Schachprogramm noch verbessern möchtest, könntest Du auf das Buch "Schach am PC" mit CD-ROM zurückgreifen. Das Buch ist von 1998.
Dort ist ein einfaches Schachprogramm und der Quellcode von einem älteren guten Schachprogramm (ich glaube Nimzo Guernica oder ähnlich) auf der CD enthalten.
Weiterhin sind auf der CD auch ältere Schachprogramme wie "CYRUS" - ein Top Programm der 1980er Jahre - drauf. (dies aber ohne Quelltext)

Viele Grüße
Ronald

Edit:
Die folgenden 3 Ideen sind in guten Schachprogrammen eingearbeitet:
- alpha-beta-Suche
- Hashtabellen
- Null-Move-Heuristik
Diese Ideen sind auch relativ bekannt, so dass man auch genug
Erläuterungen dazu etwa im Internet findet.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Ex_Senior
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.17, eingetragen 2018-08-05


Man könnte auch mal MCTS - Monte Carlo Tree Search - als Suchverfahren ausprobieren. Könnte leichter zu implementieren sein als manch andere Heuristik, und zeigt keine schlechten Ergebnisse.

Mit einer modifizierten Version von MTCS arbeiten übrigens die gerade ganz gut gehypeten auf Neuronalen Netzen basierenden Spiele-Algorithmen wie AlphaZero oder LeelaChessZero.

(Nebenbei: Aktuell läuft gerade die Top Chess Engine Championchip TCEC, bei der neben den besten Standard-Schachprogrammen, die alle auf Alpha-Beta-Suche basieren, auch erstmals zwei auf Neuronalen Netzen basierende Programme dabei sind; eben lc0 und "DeusX", was auf lc0 basiert, aber andere Daten zum Training des verwendeten NNs verwendet hat: )

Cyrix



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
AnnaKath
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 18.12.2006
Mitteilungen: 3316
Aus: hier und dort (s. Beruf)
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.18, eingetragen 2018-08-07


Hallo Steffen,

ich habe Dein Schachprogramm gerade einmal ausprobiert und mir hat es gefallen; die Spielstärke ist zwar überschaubar, aber hinreichend für einen Hobbyspieler. Vor allem hast Du bewundernswert viel Mühe in das Spiel gesteckt und das sieht man an vielen kleinen Details. Klasse!

Tatsächlich haben wir* vor zwei Jahren ebenfalls ein Schachprogramm geschrieben; und auch wenn ich eine halbwegs erträgliche Schachspielerin bin und wir eine gewisse Vorstellung davon hatte, wie ein Schachprogramm funktioniert - ohne diese Ressource hätten wir** kaum ein spielstarkes Programm erstellen können.

Wenn Du magst, können wir gerne ein paar Details per PM austauschen (oder auch öffentlich diskutieren)!

lg, AK.

*) meine Frau und ich
**) ok, sie



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
stpolster
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 27.03.2014
Mitteilungen: 1157
Aus: Chemnitz
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.19, vom Themenstarter, eingetragen 2018-08-07


Hallo AnnaKath,
das Thema "Schach" ist sehr reizvoll.
Ich hatte mich 2000 versucht und nach den ersten kläglichen Ergebnissen bei Hilfe geholt.
Ich habe zwar nicht alles verstanden (C ist nicht meine Sprache), aber irgendwie wurde es dann doch.  

Meine Schwierigkeiten sind, dass ich die Threadprogrammierung unter Delphi bis heute nicht richtig in Griff habe (Hobbyprogrammierer!) und mein Programm deshalb nicht gerade schnell ist. Andernfalls könnte ich wohl tiefer rechnen und es würde leistungsstärker.
Ich werde in den nächsten Tagen mal wieder in den Quelltext hineinsehen.

LG Steffen
 



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
gonz
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 16.02.2013
Mitteilungen: 3529
Aus: Harz
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.20, eingetragen 2018-08-07


Hallo Steffen,

für die Benutzerschnittstelle ist Delphi aber eine gute Wahl, das sieht wirklich fein aus und bietet die gewünschte Funktionalität in übersichtlicher Form.

Eventuell könntest du den eigentlichen "Kern", der die Züge bewertet, ja auch als Modul einbinden und in einer anderen Sprache schreiben? Tatsächlich würde sich da für mich das gute alte C empfehlen. Einen Ansatz, unter Pascal multi-threaded zu programmieren, kann ich leider auch nicht anbieten.

Wenn man das Programm etwas kennengelernt hat, kann man sich natürlich auf seine Schwächen stürzen, zB schnell tauschen und versuchen in ein Endspiel zu gelangen. Man könnte dem Programm auch eine kleine Eröffnungsbibliothek mitgeben... Jedenfalls muss ich aufpassen, dass es mich nicht überlistet wenn ich unkonzentriert spiele. Jeder Patzer wird naturgemäß ja gnadenlos ausgenutzt...

Ach ja: Matroid hatte uns mal freundlicherweise eine PGN Viewer eingebaut, ich weiss nicht mehr, ob er mit den deutschen Figurenbezeichnern wie S und L zurecht kommt oder ob es N und B heissen muss, ich knoble das nochmal aus :) Dann könnte man Partien auch mal hier hochladen :)

Grüsse aus dem Harz
Gonz






Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Delastelle
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 17.11.2006
Mitteilungen: 1489
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.21, eingetragen 2018-08-08


Hallo,

ein besonders einfaches Schachspiel ist in Zillions-of-Games enthalten.
Zillions - eine Software von 1999 - enthält eine Spielengine für Brettspiele. Dazu kommt eine Datei mit den Spielparametern - im Fall von Schach nur die Zugmöglichkeiten der Steine und die Schlagmöglichkeiten und die Umwandlungsmöglichkeiten. Zillions berechnet selbstständig den Wert der Figuren - z.B. die Dame bekommt anhand ihrer Zugmöglichkeiten einen Wert von ca. 7 Bauern. Zillions spielt Schach nicht besonders gut, verwendet aber auch kein Schachwissen.

Noch etwas anderes:
vor Jahren hatte ich mal ein Neuronales Netz im Internet gefunden, dass für Poker-Spielen angelegt war. Die Studenten, die das Neuronale Netz geschaffen hatten, hatten mit ihm aber Schwierigkeiten, zulässige Züge beim Poker zu finden. Oder anders gesagt, das Netz spielte nicht immer korrekt.
Wenn ich mich jetzt im Internet umschaue, gibt es heute auf Neuronalen Netzen basierende Programme die Poker nahezu perfekt spielen - da geht die
Software-Entwicklung schnell voran.

Zum Test von Schach-Programmen kann mach auch Test-Probleme verwenden.
Einer von vielen möglichen Tests ist der LCT 2 Test:


Viele Grüße
Ronald

Edit: ein extra kleines Schachprogramm sieht so aus:
C
/***************************************************************************/
/*                               micro-Max,                                */
/* A chess program smaller than 2KB (of non-blank source), by H.G. Muller  */
/***************************************************************************/
/* version 3.2 (2000 characters) features:                                 */
/* - recursive negamax search                                              */
/* - quiescence search with recaptures                                     */
/* - recapture extensions                                                  */
/* - (internal) iterative deepening                                        */
/* - best-move-first 'sorting'                                             */
/* - a hash table storing score and best move                              */
/* - full FIDE rules (expt minor ptomotion) and move-legality checking     */
 
#define  F(I,S,N)  for(I=S;I<N;I++) 
#define  W(A)  while(A)
#define  K(A,B)  *(int*)(T+A+(B&8)+S*(B&7)) 
#define  J(A)  K(y+A,b[y])-K(x+A,u)-K(H+A,t) 
 
 #define  U  16777224 
struct  _  {int  K,V;char  X,Y,D;}  A[U];            /*  hash  table,  16M+8  entries*/
 
int V=112,M=136,S=128,I=8e4,C=799,Q,N,i;       /* V=0x70=rank mask, M=0x88 */
 
char O,K,L,
w[]={0,1,1,3,-1,3,5,9},                         /*  relative  piece  values     */
o[]={-16,-15,-17,0,1,16,0,1,16,15,17,0,14,18,31,33,0,  /*  step-vector  lists  */ 
      7,-1,11,6,8,3,6,                           /*  1st  dir.  in  o[]  per  piece*/
      6,3,5,7,4,5,3,6},                          /*  initial  piece  setup       */
b[129],                                         /*  board:  half  of  16x8+dummy*/
T[1035],                                        /*  hash  translation  table    */
 
n[]=".?+nkbrq?*?NKBRQ";                         /*  piece  symbols  on  printout*/
 
D(k,q,l,e,J,Z,E,z,n)    /* recursive minimax search, k=moving side, n=depth*/
int k,q,l,e,J,Z,E,z,n;  /* (q,l)=window, e=current eval. score, E=e.p. sqr.*/
{                       /* e=score, z=prev.dest; J,Z=hashkeys; return score*/
 int j,r,m,v,d,h,i=9,F,G;
 char t,p,u,x,y,X,Y,H,B;
  struct  _*a=A; 
                                                /*  lookup  pos.  in  hash  table*/ 
  j=(k*E^J)&U-9;                                 /*  try  8  consec.  locations   */ 
  W((h=A[++j].K)&&h-Z&&--i);                     /*  first  empty  or  match      */ 
  a+=i?j:0;                                      /*  dummy  A[0]  if  miss  &  full*/ 
  if(a->K)                                       /*  hit:  pos.  is  in  hash  tab  */ 
  {d=a->D;v=a->V;X=a->X;                         /*  examine  stored  data       */ 
   if(d>=n)                                      /*  if  depth  sufficient:      */ 
   {if(v>=l|X&S&&v<=q|X&8)return  v;              /*  use  if  window  compatible  */ 
    d=n-1;                                       /*  or  use  as  iter.  start     */ 
   }X&=~M;Y=a->Y;                                /*       with  best-move  hint  */ 
   Y=d?Y:0;                                      /*  don't  try  best  at  d=0     */ 
  }else  d=X=Y=0;                                 /*  start  iter.,  no  best  yet  */
  N++;                                           /*  node  count  (for  timing)   */ 
  W(d++<n|z==8&N<1e7&d<98)                       /*  iterative  deepening  loop  */
  {x=B=X;                                        /*  start  scan  at  prev.  best  */
   Y|=8&Y>>4;                                    /*  request  try  noncastl.  1st*/
   m=d>1?-I:e;                                   /*  unconsidered:static  eval  */
   do{u=b[x];                                    /*  scan  board  looking  for    */ 
    if(u&k)                                      /*   own  piece  (inefficient!)*/ 
    {r=p=u&7;                                    /*  p  =  piece  type  (set  r>0)  */ 
     j=o[p+16];                                  /*  first  step  vector  f.piece*/ 
     W(r=p>2&r<0?-r:-o[++j])                     /*  loop  over  directions  o[]  */ 
     {A:                                         /*  resume  normal  after  best  */ 
      y=x;F=G=S;                                 /*  (x,y)=move,  (F,G)=castl.R*/ 
      do{H=y+=r;                                 /*  y  traverses  ray           */
       if(Y&8)H=y=Y&~M;                          /*  sneak  in  prev.  best  move  */
       if(y&M)break;                             /*  board  edge  hit            */
       if(p<3&y==E)H=y^16;                       /*  shift  capt.sqr.  H  if  e.p.*/
       t=b[H];if(t&k|p<3&!(r&7)!=!t)break;       /*  capt.  own,  bad  pawn  mode  */
       i=99*w[t&7];                              /*  value  of  capt.  piece  t    */
       if(i<0||E-S&&b[E]&&y-E<2&E-y<2)m=I;       /*  K  capt.  or  bad  castling   */
       if(m>=l)goto  C;                           /*  abort  on  fail  high        */ 
 
       if(h=d-(y!=z))                            /*  remaining  depth(-recapt.)*/
       {v=p<6?b[x+8]-b[y+8]:0;                   /*  center  positional  pts.    */
        b[G]=b[H]=b[x]=0;b[y]=u&31;              /*  do  move,  strip  virgin-bit*/ 
        if(!(G&M)){b[F]=k+6;v+=30;}              /*  castling:  put  R  &  score   */ 
        if(p<3)                                  /*  pawns:                    */ 
        {v-=9*(((x-2)&M||b[x-2]!=u)+             /*  structure,  undefended     */ 
               ((x+2)&M||b[x+2]!=u)-1);          /*         squares  plus  bias  */
         if(y+r+1&S){b[y]|=7;i+=C;}              /*  promote  p  to  Q,  add  score*/ 
        }
        v=-D(24-k,-l-(l>e),m>q?-m:-q,-e-v-i,     /*  recursive  eval.  of  reply  */ 
             J+J(0),Z+J(8)+G-S,F,y,h);           /*  J,Z:  hash  keys            */
        v-=v>e;                                  /*  delayed-gain  penalty      */
        if(z==9)                                 /*  called  as  move-legality   */ 
        {if(v!=-I&x==K&y==L)                     /*    checker:  if  move  found  */ 
         {Q=-e-i;O=F;return  l;}                  /*    &  not  in  check,  signal  */ 
         v=m;                                    /*  (prevent  fail-lows  on     */ 
        }                                        /*    K-capt.  replies)        */
        b[G]=k+38;b[F]=b[y]=0;b[x]=u;b[H]=t;     /*  undo  move,G  can  be  dummy  */
        if(Y&8){m=v;Y&=~8;goto  A;}               /*  best=1st  done,redo  normal*/
        if(v>m){m=v;X=x;Y=y|S&G;}                /*  update  max,  mark  with  S   */
      }                                        /*          if non castling */
       t+=p<5;                                   /*  fake  capt.  for  nonsliding*/
       if(p<3&6*k+(y&V)==S                       /*  pawn  on  3rd/6th,  or       */
           ||(u&~24)==36&j==7&&                  /*  virgin  K  moving  sideways,*/ 
           G&M&&b[G=(x|7)-(r>>1&7)]&32           /*  1st,  virgin  R  in  corner  G*/ 
           &&!(b[G^1]|b[G^2])                    /*  2  empty  sqrs.  next  to  R   */ 
       ){F=y;t--;}                               /*  unfake  capt.,  enable  e.p.*/
      }W(!t);                                    /*  if  not  capt.  continue  ray*/ 
   }}}W((x=x+9&~M)-B);                           /*  next  sqr.  of  board,  wrap  */
C:if(m>I/4|m<-I/4)d=99;                         /*  mate  is  indep.  of  depth   */
   m=m+I?m:-D(24-k,-I,I,0,J,Z,S,z,1)/2;          /*  best  loses  K:  (stale)mate*/
   if(!a->K|(a->X&M)!=M|a->D<=d)                 /*  if  new/better  type/depth:*/ 
   {a->K=Z;a->V=m;a->D=d;A->K=0;                 /*  store  in  hash,dummy  stays*/ 
    a->X=X|8*(m>q)|S*(m<l);a->Y=Y;               /*  empty,  type  (limit/exact)*/ 
   }                                             /*     encoded  in  X  S,8  bits  */
/*if(z==8)printf("%2d ply, %9d searched, %6d by (%2x,%2x)\n",d-1,N,m,X,Y&0x77);*/
 }
  if(z&8){K=X;L=Y&~M;}
  return  m;                                      
}
 
main()
{
 int j,k=8,*p,c[9];
 
  F(i,0,8) 
  {b[i]=(b[i+V]=o[i+24]+40)+8;b[i+16]=18;b[i+96]=9;    /*  initial  board  setup*/
   F(j,0,8)b[16*j+i+8]=(i-4)*(i-4)+(j-3.5)*(j-3.5);    /*  center-pts  table    */ 
  }                                                    /*(in  unused  half  b[])*/
  F(i,M,1035)T[i]=random()>>9;
 
 W(1)                                                /* play loop          */
  {F(i,0,121)printf("  %c",i&8&&(i+=7)?10:n[b[i]&15]);  /*  print  board         */
   p=c;W((*p++=getchar())>10);                         /*  read  input  line     */ 
   N=0; 
   if(*c-10){K=c[0]-16*c[1]+C;L=c[2]-16*c[3]+C;}else   /*  parse  entered  move  */
   D(k,-I,I,Q,1,1,O,8,0);                            /* or think up one    */
   F(i,0,U)A[i].K=0;                                   /*  clear  hash  table    */
   if(D(k,-I,I,Q,1,1,O,9,2)==I)k^=24;                  /*  check  legality  &  do*/
 }
}



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
stpolster hat die Antworten auf ihre/seine Frage gesehen.
Neues Thema [Neues Thema] Antworten [Antworten]    Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2020 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]