Kampf der Schachprogramme

Präsentation und Organisation von eigenen Projekten
Antworten
Benutzeravatar
Necip
Beiträge: 122
Registriert: Do Nov 17, 2011 12:03 pm
Kontaktdaten:

Kampf der Schachprogramme

Beitrag von Necip » Di Sep 27, 2016 7:38 pm

Hallo Freunde der Programmierkunst, ich bin gerade im Begriff ein kleines aber feines Schachprogramm zu kreiieren und suche nach Leuten, die ebenfalls ein solches entwickeln oder entwickelt haben, um herauszufinden welches der Programme in einem offenen und fairen Wettkampf obsiegt.

Wer nimmt die Herausforderung an?










https://necips8.wordpress.com/

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Kampf der Schachprogramme

Beitrag von Xin » Di Sep 27, 2016 9:43 pm

Necip hat geschrieben:Hallo Freunde der Programmierkunst, ich bin gerade im Begriff ein kleines aber feines Schachprogramm zu kreiieren und suche nach Leuten, die ebenfalls ein solches entwickeln oder entwickelt haben, um herauszufinden welches der Programme in einem offenen und fairen Wettkampf obsiegt.
Prinzipiell finde ich das Projekt interessant und hätte da wohl auch Spaß dran. Allerdings ist das Dein persönliches Projekt, in das Du viel Zeit investierst, die Dir beispielsweise fehlt, um mit mir in den Wettkampf um eine Programmiersprache zu gehen.

Solche Wettkämpfe finde ich eigentlich recht spaßig, allerdings müssen die Aufgaben so klein sein, dass man das auch in ein paar Stunden oder wenigen Tagen auf die Reihe bekommt.

Ein Schachspiel ist ein kombinatorisches Optimierungsproblem. Da würde ich mich gerne nochmal aktiver mit beschäftigen, aber das Problem müsste dann kleiner sein.

Aber es ist natürlich nicht ausgeschlossen, dass Du hier jemanden findest, der sich mit der Problematik auch beschäftigen möchte. Oder eben auch, die Bewertung eines Schachspiels hier zu diskutieren.


Ich habe Dein Posting in "Projekte" verschoben, da es sich nicht um ein C++-spezifisches Problem handelt.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Necip
Beiträge: 122
Registriert: Do Nov 17, 2011 12:03 pm
Kontaktdaten:

Re: Kampf der Schachprogramme

Beitrag von Necip » Do Sep 29, 2016 5:47 pm

@Xin, für eine anständige Rauferei habe ich noch immer Zeit über! ^^

Überraschenderweise war die Programmierung des Prototypes einfacher als ich dachte. Der Algorithmus hat sich zum Schluß seiner Entwicklung als eine Art Matrizenkalkulation herauskristalisiert. Im Prinzip ist die Grundlogik für ein Brettspiel implementiert und kann von jedem Teilnehmer genutzt werden, die da lautet: Es gibt eine Ausgangssituation. Es gibt mehrere Zugmöglichkeiten. Es gibt Bewertungen. Es gibt ein oder mehrere K.O.-Kriterien.

Um ein Spiel zu haben gibt es zudem noch Begrenzungen, wie die Zeit. Jedes Schachprogramm mit genügender Zeit könnte alle Spielkombinationen durchrechnen, bis zu einem sicheren Tod des Königs (Schach matt). Das wäre aber nicht im Sinne eines Spieles. Zu einem Spiel gehört der Faktor der Unvorhersehbarkeit, denn würde man vorab wissen, dass man verlieren wird, würde man sich nicht die Mühe machen eine Figur zu bewegen.

Natürlich werden wir das Projekt langsam angehen und schnell nachlassen! ^^ (Spaß) Ok, wir werden anfangs die Spielfiguren dezimieren, auf sagen wir je 2 Türme, 2 Pferde, 2 Läufer, 1 König. Sonderregelungen, wie die Rochade werden vernachlässigt.

Es müssten zwei Programme laufen, die miteinander kommunizieren. Vielleicht hat hier der/die eine oder andere eine Komponente dafür.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Kampf der Schachprogramme

Beitrag von Xin » Do Sep 29, 2016 9:54 pm

Necip hat geschrieben:@Xin, für eine anständige Rauferei habe ich noch immer Zeit über! ^^
:D

Wir hatten mal einen Wettbewerb gemacht, wer am schnellsten Wörter in einem String zählt.
Das kann man schnell schreiben, aber man kann sich auch drei Gedanken dazu machen.
Necip hat geschrieben:Überraschenderweise war die Programmierung des Prototypes einfacher als ich dachte. Der Algorithmus hat sich zum Schluß seiner Entwicklung als eine Art Matrizenkalkulation herauskristalisiert. Im Prinzip ist die Grundlogik für ein Brettspiel implementiert und kann von jedem Teilnehmer genutzt werden, die da lautet: Es gibt eine Ausgangssituation. Es gibt mehrere Zugmöglichkeiten. Es gibt Bewertungen. Es gibt ein oder mehrere K.O.-Kriterien.
Naja, ein Wettbewerb könnte das natürlich nicht als Kriterium nehmen, denn das Ziel sollte ja sein, den Gegner fertig zu machen. :)

Man müsste also auch überlegen, was für den Gegner ein sinnvoller Zug sein könnte - oder man programmiert Kamikaze-Schach.
Necip hat geschrieben:Um ein Spiel zu haben gibt es zudem noch Begrenzungen, wie die Zeit. Jedes Schachprogramm mit genügender Zeit könnte alle Spielkombinationen durchrechnen, bis zu einem sicheren Tod des Königs (Schach matt). Das wäre aber nicht im Sinne eines Spieles.
Das Geheimnis ist, herauszufinden, was der Gegner vom eigenen Plan hält. ^^
Necip hat geschrieben:Natürlich werden wir das Projekt langsam angehen und schnell nachlassen! ^^ (Spaß) Ok, wir werden anfangs die Spielfiguren dezimieren, auf sagen wir je 2 Türme, 2 Pferde, 2 Läufer, 1 König. Sonderregelungen, wie die Rochade werden vernachlässigt.
hehehe, wenn Du mir Ableitungen für meine Sprache schreibst... ^^
Necip hat geschrieben:Es müssten zwei Programme laufen, die miteinander kommunizieren. Vielleicht hat hier der/die eine oder andere eine Komponente dafür.
Das dürfte sich doch durch Pipes klären lassen.
Ein Programm startet beide Programme und piped "start white" an den einen und "start black" an den anderen und "Weiß" liefert "move A2 A4" zurück, was man dann zum nächsten durchreicht, der entsprechend "move A7 A5" antworten könnte. Ich denke, man käme mit einem einfachen Befehlssatz aus und könnte das einfach mitloggen.
Die Schachprogramme müssten dann je eine Zeile und ihre Antwort dann mit printf() raushauen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Necip
Beiträge: 122
Registriert: Do Nov 17, 2011 12:03 pm
Kontaktdaten:

Re: Kampf der Schachprogramme

Beitrag von Necip » Fr Sep 30, 2016 7:48 pm

Hi Xin, wenn Du den Film "Revolver" noch nicht kennst, solltest Du ihn reinziehen. Da geht es auch um Schach. Hier ein Paar Filmzitate

Regel Nr. 1: Du wirst nur schlauer, wenn du gegen schlauerer Gegner spielst! ^^

Ich weiß nicht, ob Du mein Prototyp ein wenig studiert hast. Die Strategie der Schachzüge ist nicht auf Sieg ausgelegt, sondern auf Harmonie oder Gleichgewicht. Jede kleinste Unausgeglichenheit kann zukünftig fatale Folgen haben. (siehe Schmetterlingseffekt). Aus diesem Grund versuche ich zumindest meinem Schützling beizubringen, was Ethik ist. Ethik berücksichtigt auch die Gewinne und Verluste des Gegners. Abgesehen davon, wie langweilig oder kurzweilig kann es sein, wenn man ständig gewinnt oder verliert. Spannender ist es doch die Spannung aufrechtzuhalten, soweit es geht...

Nun gut, ich komme Euch einen Schritt näher. Wir reduzieren die Anzahl der Spielfiguren und damit auch die Anzahl an Kombinationen auf die Könige und je 2 Türme.

Ich denke, es wäre gut, wenn jeder für sich sein Programm mit vorgegebenen lösbaren Aufgaben testet. Irgendwo im Netz müssten sicherlich Schachkonstellationen vorhanden sein, wie "Lösen Sie die Aufgabe Schachmatt in 5 Zügen". Kann sich da jemand schlau machen. ^^

Die Kommunikation mit Pipes finde ich gut.... aaaber, mir schwebt da etwas anderes durch den Geist. Was hälst Du von dieser Idee: Wir benutzen eine Datenbank für den Kommunikationsaustausch! Mit einem ausgefeiltem Protokoll dürfte der Dialog reibungslos über die Bühne laufen und wir hätte zudem noch ein Protokoll, wie der bisherige Spielverlauf war.

Das Programm, das zuerst startet fügt einen neuen Datensatz in die Datenbank und ist per Definition "weiß". Beispiel: 30.09.2016 20:00, IP 128.0.0.1, A2-A4.
Nun wartet das Programm auf den nächsten Datensatz, das älter ist als sein eigenes. Das zweite Programm startet, holt den letzten Satz, den er finden kann, berechnet seinen Zug und fügt einen neuen Datensatz in die Datenbank: 30.09.2016 20:02, IP 128.0.0.2, A6-A5 und wartet ebenfalls auf den nächsten Datensatz, dass älter ist als sein eigenes usw. -- nur so mal angedacht.

Benutzeravatar
Necip
Beiträge: 122
Registriert: Do Nov 17, 2011 12:03 pm
Kontaktdaten:

Re: Kampf der Schachprogramme

Beitrag von Necip » Fr Okt 07, 2016 6:58 pm

Ist doch mal ein anderer Ansatz, ein Schachprogramm zu schreiben, der wie die Natur ein möglichst großes Gleichgewicht mit allem anderen einzugehen. Wenn man den Algorithmus abstrakt beschreibt, könnte man sie für Roboter einsetzen, die genauso harmonisch Bewegungen durchführen kann, wie ein Tier. Die Signale der linken Körperseite stehen "in Konkurrenz" zu den Signalen der rechten Körperseite. Das Ziel ist eine Patt-Situation auszuarbeiten, wenn das System in Ungleichgewicht kommt, weil ein Bein vorbewegt wurde...

Antworten