Entwickler-Ecke

Freeware Projekte - Schachprogramm


Mathematiker - Mo 22.10.12 11:30
Titel: Schachprogramm
Hallo,
bevor ich in 3 Stunden zu einem Kurzurlaub verschwinde :wave: , gibt's von mir noch ein weiteres Programm, da kaum jemand mein Digger [http://www.entwickler-ecke.de/viewtopic.php?t=110420] und schon gar nicht meinen Addiator [http://www.entwickler-ecke.de/topic_Addiator++Rechenmaschine_110396.html] mag. :bawling:

Jetzt ist es ein Schachprogramm.
An diesem arbeite ich schon seit mehreren Jahren und bin daher etwas egoistisch: Dieses Mal nur als Freeware und ohne den Quelltext.
Während ich mich von dem anstrengenden Programmieren erhole, dürft Ihr gern mein Programm mit konstruktiven, kritischen Anmerkungen versehen. :lol:

Gezogen werden die Figuren mit der Maus, wie sonst.
Man kann gegen den Computer spielen, was ganz gut geht. Die Wahl der Spielstufe gibt an, wie viele Halbzüge der Computer voraus denkt. Da mit jeder höheren Spielstufe der Berechnungsaufwand für den Computer exponentiell steigt, wird die "Denkzeit" des PCs auch schnell größer.
Auf einem hinreichend schnellen Computer dürfte Stufe = schwer noch machbar sein. Darüber hinaus braucht man schon viel Geduld, bis das Programm den nächsten Zug macht.
Um ein Spiel nachzuverfolgen, kann man in der Zugliste einen Halbzug auswählen, so dass die Figuren auf diese Spielsituation positioniert werden. Durch Auswahl des nächsten Listeneintrags oder über die Schalter kann dann die Partie weiter verfolgt werden.

Wichtig ist noch, dass in meinem Schachprogramm keine Eröffnungsbibliothek enthalten ist. Alle Züge werden je nach Situation vom Computer berechnet. Durch einen meiner Schüler (Elo-Zahl 1840, ist das viel?) wurde mir gesagt, dass mein Programm am Anfang daher schwächelt.

Verrückt ist, dass ich trotzdem gegen mein eigenes Programm (Stufe: normal) nur noch verliere. Aber unter Euch wird es ja bessere Schachspieler als mich geben. :think:

Beste Grüße
Mathematiker

Rev 1: Die Zugliste wird jetzt in besserer Notation, d.h. mit Figur und evtl. Schlagen angegeben.
Rev 2: Auch die Rochade und Schachgebote werden notiert. Die Zugliste kann als Txt gespeichert werden.
Rev 3: Der Spielstand einer Partie kann gespeichert und später wieder geladen werden.
Rev 4: Mit Möglichkeit eines Zugvorschlages, außerdem verbesserte Speichermöglichkeit.
Rev 5: In der Zugliste wird immer zum letzten Zug gescrollt.
Rev 6: Anfangs- und Zielfeld des Zugvorschlages werden mit einem Rahmen markiert.
Rev 7/8: Auf Wunsch Tonausgabe bei einem Computerzug.
Rev 9: Der letzte Zug der Partie kann hervorgehoben werden. (Voreinstellung)
Rev 10: Grundeinstellungen werden gespeichert und wieder geladen.
Rev 11: Verschiedene Änderungen an der Oberfläche, besserer Zugvorschlag und 2 neue Varianten.
Rev 12: Über das Menü können im Moment 15 verschiedene Standarderöffnungen geladen werden.
Rev 13: mit 26 Eröffnungsvarianten.
Rev 0: schach2.zip enthält zusätzlich Programmteil zum Problemschach, siehe entsprechenden Beitrag
Rev 1: in schach2.zip Verzeichnisfehler beseitigt.
Rev 2: schach2.zip: application.processmessages stark reduziert, beim Programmstart wird die Zugsuche nicht sofort gestartet.


Dr. Hallo - Mo 22.10.12 13:50

Hi, ich bin kein großer Schachspieler. Soweit ich das aber nach bischen testen beurteile, funktionierts sehr gut.

Was mich (im Computermodus) wundert: Die CPU-Auslastung ist auf meinem Rechner ständig um 30%-45%, obwohl ich an der Reihe bin (da könnte der Computer sich doch eigendlich mal ausruhen). Laufen da Berechnungen? Aber was soll berechnet werden, wenn ich doch noch garnicht gezogen hab?

Gruß!


jaenicke - Mo 22.10.12 14:00

Auch wenn ich nicht weiß wie es hier ist: In meinem Schachprogramm mache ich in der Zeit Vorausberechnungen, das macht durchaus Sinn.

Was ein wenig schade ist, ist, dass nur ein Kern benutzt wird, so dass der größte Teil der Rechnerleistung brach liegt. ;-)


gerd8888 - Mo 22.10.12 15:44

Habe gerade eine Partie gespielt. Dass keine Eroeffnungsbibliothek eingebaut ist, habe ich schnell nach Se7 statt Sg6 in der Aljechin Verteidigung gemerkt.
Das Brett ist schön gross und positiv aufgefallen ist mir ausserdem, dass wenn man eine Figur ziehen will z.B. auf ein falsches Feld, man ein Verbotsschild in dem Mauszeiger bekommt. Der Gesamteindruck ist, wenn man das mit Fritz und Rybka vergleicht, eher bescheiden. Da ist man Variantenangabe (die Züge, die er gerade berechnet usw.) und Datenbanken gewohnt. Aber der Vergleich ist bei so einem absichtlich einfachen Programm auch schlecht. Gerade für Schachanfänger ist es glaube ich das richtige Schachprogramm.


Mathematiker - Mo 22.10.12 15:47

Hallo,
ich bin schon fast im Auto und weg ...
Deshalb noch ganz kurz:
user profile iconDr. Hallo hat folgendes geschrieben Zum zitierten Posting springen:
Die CPU-Auslastung ist auf meinem Rechner ständig um 30%-45%, obwohl ich an der Reihe bin (da könnte der Computer sich doch eigendlich mal ausruhen).

Die Berechnung des Computerzuges läuft in einem eigenen Thread. Ständig wird die Situation analysiert. Das ist auch fair, da der Spieler ja auch weiter denkt, während sein Gegner nach einem Zug sucht.
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Was ein wenig schade ist, ist, dass nur ein Kern benutzt wird, so dass der größte Teil der Rechnerleistung brach liegt. ;-)

Mit meinem Delphi 5 wüsste ich gar nicht, wie man zwei oder mehr Kerne ansprechen kann.

Beste Grüße und jetzt im Urlaub
Mathematiker


Narses - Mo 22.10.12 16:16

Moin!

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Mit meinem Delphi 5 wüsste ich gar nicht, wie man zwei oder mehr Kerne ansprechen kann.
Wenn ich mal kurz dazwischen grätschen darf: mehrere Threads? :zwinker: :idea: Wenn du es nicht explizit verbietest (in den PE-Flags des EXE-Images), dann werden Threads immer möglichst automatisch auf verschiedene Kerne verteilt.

cu
Narses


Delphi-Laie - Mo 22.10.12 18:43

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
mehrere Threads? :zwinker: :idea: Wenn du es nicht explizit verbietest (in den PE-Flags des EXE-Images), dann werden Threads immer möglichst automatisch auf verschiedene Kerne verteilt.


Ja, und zwar von Windows selbst. Damit hat Delphi, mit dem man die Threads programmiert, überhaupt nichts zu tun. Der Zugriff auf einzelne Prozessoren bzw. Prozessorkerne ist ja ein Hardwarezugriff. Derlei Zugriffe werden unter Windows NTx jedoch aus gutem Grunde weitgehend unterbunden.

Einfach mal zwei Threads dauerbeschäftigen, und schon geht bei beiden Prozessor(kern)en die Auslastung (im sog. Taskmanager) auf maximal.


Mathematiker - Mo 22.10.12 19:24

Hallo,
ich bin im Urlaub und kann nicht aufhören, ins Forum zu sehen?! Ich brauche Urlaub! :nut:
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich mal kurz dazwischen grätschen darf: mehrere Threads? :zwinker:

Keine Ahnung, warum es nicht auf zwei Kerne verteilt wird. Zum "Beweis", dass es zwei Threads sind, füge ich den Kommentar des Prozess-Explorers an.

So, morgen gehe ich wandern durch die schöne Sächsische Schweiz. Und dann ignoriere ich die EE! Versprochen! :zustimm:

Beste Grüße aus Königstein mit einem wunderschönen Blick auf die Elbe
Mathematiker

Nachtrag: Abbildung des Prozess-Explorers gelöscht, da sie nichts aussagt, wie ich jetzt weiß. :wink:


Narses - Mo 22.10.12 20:45

Moin!

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich mal kurz dazwischen grätschen darf: mehrere Threads? :zwinker:

Keine Ahnung, warum es nicht auf zwei Kerne verteilt wird. Zum "Beweis", dass es zwei Threads sind, füge ich den Kommentar des Prozess-Explorers an.
Was soll der Screeenshot beweisen? :gruebel: Du hast den Main- und einen Worker-Thread. :nixweiss: Der Witz an user profile iconjaenickes (An-)Frage/Hinweis dürfte aber doch wohl sein, mehrere Worker-Threads zu haben (was voraussetzt, dass der Algorithmus parallelisierbar ist, OK)! ;)

cu
Narses


Delphi-Laie - Mo 22.10.12 21:42

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
(was voraussetzt, dass der Algorithmus parallelisierbar ist, OK)! ;)


Ist er. Um mal im Modus zu bleiben, daß man auf den Gegenzug wartet: Wenn z.B. x Gegenzüge möglich sind (sehr wahrscheinlich deutlich mehr, als Prozessoren bzw. Prozessorkerne vorhanden), so sind dazu schon x Threads (jeder berechnet einen Baum an Zugmöglichkeiten) eröffnenbar, die alle nach der Minimaxstrategie bewertbar sind. Zudem erlaubt jeder der x Gegenzüge soundsoviele eigene Züge, für je ein weiterer Thread eröffnet werden könnte (sicher nicht sinnvoll).


Mathematiker - Di 23.10.12 00:01

Hallo Gerd8888,
user profile icongerd8888 hat folgendes geschrieben Zum zitierten Posting springen:
Der Gesamteindruck ist, wenn man das mit Fritz und Rybka vergleicht, eher bescheiden.

Ich hätte nie vermutet, dass mein kleines Programm mit diesen Schachgrößen verglichen wird. Allein der Vergleich ist ja schon fast ein Ritterschlag. Danke. An diese Superprogramme werde ich nie herankommen.
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Du hast den Main- und einen Worker-Thread. :nixweiss: Der Witz an user profile iconjaenickes (An-)Frage/Hinweis dürfte aber doch wohl sein, mehrere Worker-Threads zu haben (was voraussetzt, dass der Algorithmus parallelisierbar ist, OK)! ;)

Ebenfalls Danke. Wieder etwas gelernt. Als Freizeitprogrammierer habe ich von so etwas keine Ahnung. Ich war schon froh einen zusätzlichen Thread hinbekommen zu haben. Für mich waren das zwei "parallele" Threads. Da das falsch ist, war der Stolz auf mein Ergebnis wohl verfrüht.
user profile iconDelphi-Laie hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
(was voraussetzt, dass der Algorithmus parallelisierbar ist, OK)! ;)

Ist er.

Stimme ich Dir zu. Das wird aber meine Fähigkeiten überschreiten. Es war schon schwierig, die wahrscheinlich schlechten Halbzüge schnell auszusortieren und die besseren vernünftig zu bewerten. Wie das mit zwei parallelen Prozessen, die sich nicht behindern dürfen, gehen soll, ist mir schleierhaft. Ich habe noch viel zu lernen. :o

Beste Grüße
Mathematiker


jaenicke - Di 23.10.12 06:11

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Für mich waren das zwei "parallele" Threads. Da das falsch ist, war der Stolz auf mein Ergebnis wohl verfrüht.
Das war ja auch schon wichtig, denn sonst würden die Berechnungen die GUI blockieren. Und dass das so gut läuft, ist auch schon viel wert und nicht selbstverständlich. Auch nicht bei professionell entwickelten Programmen.

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Stimme ich Dir zu. Das wird aber meine Fähigkeiten überschreiten. Es war schon schwierig, die wahrscheinlich schlechten Halbzüge schnell auszusortieren und die besseren vernünftig zu bewerten. Wie das mit zwei parallelen Prozessen, die sich nicht behindern dürfen, gehen soll, ist mir schleierhaft.
Die Grundidee wäre, dass du nach den ersten Zugberechnungen die Verschachtelungen an weitere Threads auslagerst.

Dass das nicht einfach ist, ist sicher richtig. ;-) Tipps könnte ich/wir dir geben, wenn du uns (oder mir per PN) Teile des Quelltextes zeigst. Speziell den Teil, der die Rekursionen macht, und wie du dazu die Daten ablegst. Natürlich nur, wenn du das möchtest.


Mathematiker - Di 23.10.12 08:54

Hallo Jaenicke,
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Dass das nicht einfach ist, ist sicher richtig. ;-) Tipps könnte ich/wir dir geben, wenn du uns (oder mir per PN) Teile des Quelltextes zeigst.

Danke für das Angebot. Gegebenenfalls werde ich dies gern annehmen.
Allerdings müsste ich meinen Quelltext erst einmal auf ein lesbares Format bringen. In seiner jetzigen Form kann man ihn keinem zumuten.
Ich gestehe, dass ich zu den "Chaoten" gehöre, die nie Kommentare schreiben, Objekten und Variablen selten Bezeichnungen geben, die ihren Inhalt erkennen lassen, und die Formatierung der Quelltexte ... :motz:
Wenn ich in der EE Quelltexte veröffentliche, überarbeite ich sie jedes Mal. Andernfalls würden alle (berechtigterweise) meckern.

Ich weiß: Damit bin ich ein abschreckendes Beispiel. Ich versuche mich ja zu bessern. :D

Beste Grüße
Mathematiker


jaenicke - Di 23.10.12 13:53

Was die Formatierung angeht drücke ich ohnehin als erstes nach dem Öffnen fremder Quelltexte in der Regel Strg + D um den delphiinternen Codeformatter drüberlaufen zu lassen. (Ich selbst formatiere ohnehin in der Regel genauso wie der. ;-))


Mathematiker - Mi 24.10.12 13:18

Hallo,
ich habe erste Änderungen am Programm (Rev 1/2) vorgenommen.
Die Zugliste enthält jetzt auch die ziehende Figur. Außerdem wird angegeben, ob eine gegnerische Figur geschlagen wird. Eine Rochade und Schachdrohung wird auch notiert.
Ich bin verwundert, dass mir das erste heute aufgefallen ist. :roll:

Beste Grüße
Mathematiker


galagher - Mi 26.12.12 13:38

Hallo!

@user profile iconMathematiker: Kannst du vielleicht eine Zug-Tipp-Funktion einbauen? Vielleicht auch eine Möglichkeit, das laufende Spiel zu speichern, um es zu einem späteren Zeitpunkt wieder zu laden und weiter zu spielen!

Ich bin erst vor Kurzem auf das Schachprogramm gestossen und muss sagen: Hut ab! Habe gleich verloren!


Mathematiker - Mi 26.12.12 23:22

Hallo galagher,
user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
Kannst du vielleicht eine Zug-Tipp-Funktion einbauen? Vielleicht auch eine Möglichkeit, das laufende Spiel zu speichern, um es zu einem späteren Zeitpunkt wieder zu laden und weiter zu spielen!

Werde ich sehen. Das wird aber nicht so schnell, da ich mich erst wieder in den etwas komplexeren Quelltext hineindenken muss. Gib mir mal 1-2 Wochen Zeit. :o

Beste Grüße
Mathematiker

Nachtrag: Manches geht doch schneller.
In der Revision 3 kannst Du eine Partie speichern und zu einem späteren Zeitpunkt wieder laden. Allerdings werden nur vollständige Züge gespeichert, d.h. Weiß und Schwarz müssen beide gezogen haben.
Das Problem mit dem Zugvorschlag dauert aber doch einige Zeit.


galagher - Do 27.12.12 19:37

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
In der Revision 3 kannst Du eine Partie speichern und zu einem späteren Zeitpunkt wieder laden. Allerdings werden nur vollständige Züge gespeichert, d.h. Weiß und Schwarz müssen beide gezogen haben.
Das Problem mit dem Zugvorschlag dauert aber doch einige Zeit.
Danke! Da warte ich doch gerne drauf!


Delphi-Laie - Fr 28.12.12 15:05

user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
@user profile iconMathematiker: Kannst du vielleicht eine Zug-Tipp-Funktion einbauen?


Jeder gute oder zumindest sorgfältige Schachspieler schläft nicht, wenn er nicht am Zuge ist, sondern denkt mit. Tut sein Gegenüber (Gegner) den erwarteten Zug, ist er im Vorteil, sowohl zeitlich als auch in bezug auf den weiteren Spielverlauf. Jedes fortgeschrittene Schachprogramm verfährt genauso, insofern sind Zugvorschläge nur ein "Abfallprodukt" des Vorausdenkens.

Ob Mathematikers Programm dieses Mitdenken schon implementiert hat, weiß ich nicht, ich stelle mir aber nicht allzu schwierig vor, das "einzupflegen", weil grundsätzlich die gleiche Minimaxstrategie, als wenn man am Zuge wäre, angewandt werden muß (müßte). Nur finalisiert das eben nicht ein einen Zug.


Mathematiker - Fr 28.12.12 23:10

Hallo,
so, jetzt glaube ich auch den 2.galagher-Wunsch gelöst zu haben.
Das Programm gibt nun (bis auf den allerersten Zug) auf Wunsch auch einen Zugvorschlag. Dazu analysiert ein zweiter Thread die aktuelle Spielsituation. Dieser wird aber nur aktiv, wenn erstmals ein Zugvorschlag abgerufen wird.

Ich hoffe, dass es jetzt wirklich als zweiter "richtiger" Thread durchgeht. Wenn ja, habe ich das erste Mal so etwas geschafft und gebe zu, dass ich etwas stolz bin. :D Einfach die bisherige Zuganalyse zu nutzen, war nicht möglich, da diese ja gerade für den nächsten Computerzug rechnet.
Rätselhaft ist mir noch, ob nun tatsächlich zwei CPU-Kerne beschäftigt sind. Wie kann ich so etwas prüfen? Im Task-Manager sehe ich nur, dass die CPU-Auslastung steigt.

Der Zugvorschlag ist im Normalfall relativ gut, natürlich nicht immer optimal; aber mein Programm ist ja auch kein Profischachprogramm.
Bei den ersten Zügen der Partie sollte man sich aber nicht auf den Vorschlag verlassen (keine Eröffnungsbibliothek, wird auch nicht, da zuviel Aufwand). Mit fortschreitender Spielentwicklung wird der Zugvorschlag kontinuierlich besser. Ist man allerdings schon am Verlieren, kann der Tipp auch nicht mehr viel nutzen.
Schön ist, dass man in der Zugliste auch einen Zug auswählen kann, zu dem die Partie zurückspringt, sich einen Vorschlag holt und damit weiter spielen kann.

Geändert habe ich auch das Speichern und Laden der Spielstände von Partien. Auch wenn im letzten Zug Schwarz noch nicht gezogen hat, wird jetzt korrekt gespeichert und geladen. Nach dem Laden kann man, wie gewohnt, weiterspielen.

Beste Grüße
Mathematiker


FinnO - Sa 29.12.12 00:03

Moin,

Dein Programm nutzt zwei Kerne. Sehen kann man das im Taskmanager bzw. Ressourcenmonitor (Win8).

schach

LG


Delphi-Laie - Sa 29.12.12 00:40

Jetzt bin ich ein wenig verblüfft, ja geradezu irritiert.

Mathematiker, für Dich ist es tatsächlich eine Neuigkeit, daß Dein Programm (mindestens?) zwei Prozessoren / Prozessorkerne nutzt? Das müßtest Du doch am besten wissen, da Du der Programmierer bist und ohne explizites Ansprechen zweier Kerne (und sei es nur, daß zwei Threads vorhanden sind, aber jeden Thread extra muß man ja auch mehr oder minder mühsam programmieren) immer nur ein Prozessor(kern) benutzt wird (werden kann)!

Edit: Oder ist das eine Eigenheit des neuen Windows?


Mathematiker - Sa 29.12.12 09:27

Hallo Delphi-Laie,
ganz habe ich Dich nicht verstanden, tut mir leid.
Mein Problem war, dass ich mit zwei Threads bisher nichts zu tun hatte. Zwar ist mir weiter oben erklärt worden, dass Windows automatisch verteilt, aber Wissen ist nicht Sehen.
Dazu kommt, dass ich auch jetzt die ganze Problematik mit diesen Threads noch nicht richtig verstanden habe. Vor wenigen Wochen war ich noch felsenfest der Meinung, dass mit meinem Delphi 5 niemals zwei CPUs beschäftigt werden könnten. So kann man sich täuschen. Ich muss noch viel lernen.

Meine Frage war, wo ich überprüfen kann, dass tatsächlich zwei Kerne angesprochen werden. Wahrscheinlich kann man es auch bei meinem Vista kontrollieren. Ich weiß nur nicht wie.
Wenn nicht zwei Kerne genutzt würden, wäre das ein Hinweis darauf gewesen, dass ich etwas falsch gemacht habe. Und das ist bei mir jeder Zeit möglich.

Beste Grüße
Mathematiker


Tilo - Sa 29.12.12 09:51

Hallo Mathematiker,

Ist zwar Off-Topic, aber um zu prüfen ob ein Programm mehrere Kerne nutzt kann man meiner Meinung nach folgendes Verfahren anwenden:
Dem Programm Last geben und in einem geeigneten Programm (z.B. Taskmanager) die CPU Last prüfen. Sobald diese mehr als 100%/Anzahl vorhandener Kerne ist nutzt das Programm definitiv mehrere Kerne. Solange die Last unter dieser Grenze bleibt kann keine Entscheidung getroffen werden, da das Betriebssystem die Last verteilt. Nachteil an dieser Methode ist, das ein Mehrkernsystem benötigt wird und eine Ausage ob mehr als 2 Kerne genutzt werden schwierig sind (Grenzwert entsprechend anpassen).

Guten Rutsch,
Tilo


Delphi-Laie - Sa 29.12.12 12:10

Hallo Mathematiker, dafür habe ich Dich verstanden: Dir war nicht klar, daß Dein Programm mehr als einen Thread benutzt, und für den Nachweis danktest Du. Dann sind es aber von Windows zusätzlich eingerichtete Threads. Delphi produziert, soweit mir bekannt, nur den VCL-Thread. Jeder weitere Thread muß extra programmiert werden, er ensteht nicht von allein. Und das kann man schon mit Delphi 2. Da Delphi 2 im wesentlichen die 32-Bit-Version von Delphi 1 ist, wird es wahrscheinlich auch schon Delphi 1 können. Hilfreich dazu sind [url=http://www.michael-puff.de/Programmierung/Delphi/Tutorials/Threads_mit_Delphi.pdf]Luckies Anleitung[/url] und ggf. auch [url=http://www.michael-puff.de/Programmierung/Delphi/Tutorials/Threads_mit_Delphi_Demos.zip]seine Beispielprogramme[/url].

Man kann die Threads (im Gegensatz zu Prozessen) auch einzelnen Prozessor(kern)en explizit zuordnen bzw. gegenüber einzelnen sperren. Dazu eignet sich z.B. mein Programm "Prozesse", das allerdings bezüglich der Prioritätensetzung der Threads noch fehlerhaft ist (in den nächsten Tagen werde ich die korrigierte Version hier veröffentlichen).


Delphi-Laie - So 30.12.12 00:32

Hallo Mathematiker, ich bitte um Nachsicht: Die Prozessoerenzuordnung gibt es sowohl für die Prozesse als auch für die Threads, allerdings ist die Prozessorenzuordnung die übergeordnete. Zusätzlich gibt es bei den Threads noch die Festlegung des Idealprozessors. Mit dem Verteilen der Rechenleistung des Prozesses und/oder seiner Threads kannst Du mit meinem schon erwähnten Programm experimentieren, das klappt sogar (wenigstens bei mir). Dennoch: Ein einzelner Thread wird nicht dadurch schneller, daß er auf zwei Prozessor(kern)en verteilt wird und mithin (scheinbar) gleichzeitig läuft, denn es gibt auch hierbei keine Gleichzeitigkeit.


galagher - So 30.12.12 12:52

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
so, jetzt glaube ich auch den 2.galagher-Wunsch gelöst zu haben.
Das Programm gibt nun (bis auf den allerersten Zug) auf Wunsch auch einen Zugvorschlag.
:D Vielen Dank!


Mathematiker - So 30.12.12 23:45

user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
:D Vielen Dank!

Gern geschehen. Wenn Du weitere Wünsche hast, immer her damit. Wenn ich es umsetzen kann, mache ich es gern.

In der Revision 5 habe ich noch eine kleine Änderung vorgenommen. In der Zugliste wird jetzt immer zum letzten Zug gescrollt.
Es hat mich von Anfang an gestört, dass nach jedem Zug immer wieder die ersten 4 1/2 Züge sichtbar angezeigt wurden. Warum ist das jetzt erst ändere, ich weiß es nicht. :nixweiss:

Übrigens habe ich heute nachmittag gegen Microsoft "Chess Titans" mein Programm antreten lassen. Bei der Einstellung Spielstufe 5 gegen die Voreinstellung 6 bei Microsoft hat meine "Kreation" von fünf Partien drei gewonnen, obwohl die Rechenzeit bei den "Schach-Titanen" länger war.
Natürlich fehlt meinem Programm die tolle grafische Umsetzung. Stolz bin ich aber trotzdem. :wink:

Beste Grüße
Mathematiker


galagher - Mo 31.12.12 11:03

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Gern geschehen. Wenn Du weitere Wünsche hast, immer her damit. Wenn ich es umsetzen kann, mache ich es gern.
Na, wenn du das schon extra ansprichst! :D Also, einen kleinen Wunsch hätte ich schon noch: Könntest du die Zug-Vorschläge neben der Anzeige als Schach-Notation auch grafisch auf dem Brett darstellen, zB. mit einem Rahmen um das Start- und das Zielfeld?

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Natürlich fehlt meinem Programm die tolle grafische Umsetzung. Stolz bin ich aber trotzdem. :wink:
1.: Mehr Grafik braucht ein Schachprogramm nicht, ich habe die 3D-Darstellungen des Brettes und die Ritter-, Pferde- und sonstigen mehr oder weniger naturalistischen Figuren bei anderen Schachprogrammen nie genutzt. Ich empfand das immer als ablenkend. Je nüchterner, desto übersichtlicher.
2. Stolz kannst du mit Recht sein!


Mathematiker - Mo 31.12.12 12:54

user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
Könntest du die Zug-Vorschläge neben der Anzeige als Schach-Notation auch grafisch auf dem Brett darstellen, zB. mit einem Rahmen um das Start- und das Zielfeld?

Ist in der Revision 6 jetzt vorhanden.
Ganz glücklich bin ich noch nicht, da es im Moment nur zwei schmale farbige Rahmen sind. Vielleicht reicht es ja.
Für eine deutlichere Markierung muss ich an die Darstellungsroutine 'ran, und diese erheblich umbauen. Da muss ich mir noch etwas einfallen lassen.

Beste Grüße und einen guten Rutsch
Mathematiker


Mathematiker - Di 01.01.13 17:02

Hallo,
nachdem ich in einer höheren Spielstufe mehrfach erst ziemlich spät gemerkt habe, dass der Computer einen Zug ausgeführt hatte, habe ich jetzt eine Tonausgabe eingebaut.
Über Spielsteuerung | Tonausgabe kann nun eingestellt werden, dass der PC sich akustisch meldet, wenn er gezogen hat.
Dies ist natürlich nur bei Spielstufen mit längeren Denkzeiten interessant. :D

Beste Grüße
Mathematiker


Th69 - Di 01.01.13 17:20

Hallo Mathematiker, frohes Neues Jahr.

Kannst du das auch visuell (wie bei dem Zugvorschlag) machen, so daß man Start und Zielpunkt des letzten Zugs sieht (ich habe bisher immer "Zug zurück", "Zug weiter" benutzt)?

P.S. Ich muß sagen, ein echt gutes Schachprogramm :zustimm:


Mathematiker - Di 01.01.13 17:46

Hallo Th69,
Danke. Ich wünsche Dir auch ein frohes Neues Jahr.
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Kannst du das auch visuell (wie bei dem Zugvorschlag) machen, so daß man Start und Zielpunkt des letzten Zugs sieht ... ?

Habe ich gerade in der Revision 9 geändert. Der letzte ausgeführte Zug wird mit einem hellgrünen Rahmen angezeigt.
Wen das stört, kann unter "Spielsteuerung | Letzten Zug markieren" dies ausschalten.

Beste Grüße
Mathematiker


Th69 - Di 01.01.13 18:04

Vielen Dank!


galagher - Di 01.01.13 22:14

Von mir ebenfalls vielen Dank!


Mathematiker - Do 03.01.13 17:24

Hallo,
die Revision 10 habe ich insofern verändert, dass die Grundeinstellungen (Züge markieren, Tonausgabe, Spielstufe) gespeichert und wieder geladen werden.
Damit ist man nicht gezwungen, meine Voreinstellungen immer auf die eigenen Bedürfnisse umzustellen.

Beste Grüße
Mathematiker


Mathematiker - So 13.01.13 11:17

Hallo,
ich habe noch einmal am Schachprogramm ein paar Änderungen vorgenommen.

Zum einen ist die Suchtiefe für den Zugvorschlag um eine Stufe erhöht worden, zum anderen habe ich Veränderungen an der Gestaltung des Eingabebereiches durchgeführt. Meiner Meinung nach ist es etwas übersichtlicher.
Entsprechend der Hinweise unter "Ergonomische Fensteraufteilung" [http://www.entwickler-ecke.de/viewtopic.php?t=110946] kann jeder jetzt auch den Einstellungsbereich über einen Menüpunkt dauerhaft nach links schieben.
Spielstand laden und speichern geht jetzt auch über das Menü; der Abbruch-Schalter wird nur noch angezeigt, wenn er von Bedeutung ist.
Außerdem gibt es zwei neue, interessante Varianten für die Anfangsaufstellung der Figuren.

Beste Grüße
Mathematiker


kaufmax - Di 12.03.13 00:07

Starke Leistung dein Programm.
Es hat heute 3mal gegen Freeware-Schach von Rolf Radtke gewonnen. Einmal nur 16 Züge!
Was für eine Schach-Engine steckt denn drin?

Max


Mathematiker - Di 12.03.13 15:45

Hallo,
da es scheinbar doch neue Nutzer des Schachprogramms gibt, habe ich noch eine Ergänzung vorgenommen.
Über das Menü können im Moment 26 verschiedene Standarderöffnungen (u.a. Sizilianische Verteidigung, Königsgambit, Schottische Partie, ...) geladen werden.
Wenn ich etwas mehr Zeit habe, werde ich die Liste noch erweitern.

Beste Grüße
Mathematiker


Mathematiker - Mi 05.02.14 19:59

Hallo,
angeregt durch user profile iconFietes Schachproblemprogramm http://www.entwickler-ecke.de/viewtopic.php?t=112526 habe ich im ersten Beitrag unter schach2.zip mein vollständiges Schachprogramm (ohne Hilfedatei) angehängt, d.h. auch mit den Routinen zum Problemschach.

Das Programm enthält neben der Möglichkeit, Schach zu spielen, auch ein Teilprogramm zur Analyse von Schachproblemen.
Über den Menüpunkt Problemschach/Schachprobleme werden diese ein- und ausgeschaltet. In der Liste befinden sich 500 Schachprobleme. Dazu muss die Datei mschach.c00 beim ersten Start im Ordner der Exe liegen. Diese wird dann in das Arbeitsverzeichnis kopiert.
Wählt man einen Listeneintrag aus, zeigt das Programm die Ausgangssituation und die Anzahl der Züge, bis wann das Matt für Schwarz erreicht werden muss.

Mit dem Schalter Lösung sucht das Programm nach dem Gewinnzug.
Das Programm zeigt den ersten Zug für Weiß an. Möchte man die vollständige Zugfolge bis zum Matt untersuchen, so zieht man den weißen Zug, antwortet für Schwarz und lässt erneut eine Lösung finden usw.

Eingabe eines neuen Schachproblems

Möchten man selbst ein neues Problem eingeben, klickt man zusätzlich auf den Menüpunkt Neues Problem eingeben.
In das angezeigte Spielfeld werden die Spielfiguren eingetragen:
· Weiße Figuren werden mit Großbuchstaben gekennzeichnet.
· Schwarze Figuren erhalten Kleinbuchstaben.
· Die Spielfiguren Bauer, Läufer, Springer, Turm, Dame und König werden mit ihren Anfangsbuchstaben bezeichnet.
Eine so schöne Eingabemethode wie in Fietes Programm habe ich nicht. Leider.
Zusätzlich wird die maximale Zugzahl eingegeben. Mit dem Schalter Speichern wird das neue Problem in die Liste aufgenommen.

Beste Grüße
Mathematiker


Horst_H - Mi 05.02.14 23:35

Hallo,

etwas erstaunt mich bei diesem Programm sehr.Vollast auf einem Kern vom wineserver unter Linux, nachdem ein Zug berechnet wurde, also eigentlich nichts zu tuen ist.Ich werde mal Win7 testen, denn unter WIn7 braucht Fietes Programm nur etwa 50..70% der Zeit.Unter Wine liegen bei gleichauf.

Kann es sein das irgendwelche Grafikausgaben gemacht werden, welche Figur bewegt wird? Bei mir erschienen oben rechts grüne Rahmen.
Das Programm erwartet die 500 Vorgaben in einem Unterverzeichnis /000/ (NULL NUll NUll) in dem die Exe liegt.
Die Info des Programmes spricht von einem Mathematik Lexikon ;-)

EDIT:
Unter Win7 100% Belastung eines Kernes, ohne das etwas passiert.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
Problem Alpha 1987 5-Züger

Programm       Mathematiker   Fiete

Laufzeit          0 min 06     0 min 27
unter Win7         

Laufzeit
unter wine        1 min 37    1 min 03


Also da ist ein Riesenwurm ( ständige Ausgaben oder application processmessages ( Bei Fietes Programm fallen unter Win7 nicht ins Gewicht ) drin, der die Rechenzeit für das eigentliche Problem unnötig einschränkt.

Gruß Horst


Mathematiker - Mi 05.02.14 23:51

Hallo,
user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:
Das Programm erwartet die 500 Vorgaben in einem Unterverzeichnis /000/ (NULL NUll NUll) in dem die Exe liegt.

War ja klar, wenn ich ein Programm aus seinem ursprünglichen Zusammenhang löse. :autsch:
Der Ordner ist natürlich falsch. In Revision 1 müsste es jetzt korrekt sein.

user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:
Vollast auf einem Kern vom wineserver unter Linux, nachdem ein Zug berechnet wurde, also eigentlich nichts zu tuen ist.

Es läuft schon die Routine des Schachprogramms. Und die wartet auf den ersten Zug bzw. stellt schon Berechnungen an, wenn sie die Partie beginnen soll. Da ich keine Eröffnungsbibliothek habe und jeder Zug wirklich berechnet wird, geht das Programm sofort auf Volllast und sucht nach einem möglichst guten Anfangszug.
Der 2.Kern wird aktiviert, sobald man im Hauptprogramm eine Zugempfehlung wünscht.
Es ist nicht optimal, aber im Moment meine beste Lösung. :nixweiss:

user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:
Die Info des Programmes spricht von einem Mathematik Lexikon ;-)

siehe PM ;-)

Beste Grüße
Mathematiker

Nachtrag: In der Revision 2 habe ich jetzt die application.processmessages stark reduziert. Nur aller 0,5s wird nun auf Abbruch getestet. Damit wird die Zugsuche auch unter Win noch etwas schneller.
Beim Programmstart wird die Zugsuche nun nicht sofort gestartet. Erst wenn der Computer als Spieler ausgewählt wird bzw. man selbst einen Zug macht, startet der Berechnunggsthread.
alpha5 braucht nun noch 8s, loyd5 nur noch 48s.


Lakeri - Di 19.08.14 15:42

Oh prima, liebe Schach! Werd es gleich mal testen!


C# - Do 21.08.14 00:39

Hast mal einer beide Farben auf "Computer" gestellt? Da gehts richtig ab :mrgreen: aber das Ergebnis ist immer das gleiche: Remi. Und das Spiel geht laut der erinprogrammierten Stoppuhr 4 Sekunden pro Farbe :D
Auf "Profi 6" wird richtig lange gerechnet da habe ich nicht bis zum Ende gewartet.

Evtl kleiner Bug: Wenn man das Fenster maximiert oder verkleinert startet die Partie neu.

Sonst cooles Ding *Respekt*


Daniel_DT - Di 25.04.17 10:23

@Mathematiker großen Respekt von meiner Seite! ich liebe deine Software in diesem Thread