Seite 2 von 3

Verfasst: 03.06.2007 17:22
von THEEX
Ich sag ja nicht, daß PB besser dafür ist. Aber wenn man die Entwicklung der Leistungfähigen Schachcomputer verfolgt, dann sind es meist Spezialentwicklungen, die halt oft schon bei der Hardware an fängt.

Verfasst: 04.06.2007 01:53
von K.Putt
Hallo,
also
1. Ich will nicht den Deep Blue neuerfinden :-)
2. Ich spiele seit über 25 Jahren Schach, habe bestimmt 20-30.000 Partien hinter mir und würde mich durchaus als sehr guten Spieler bezeichnen, z.Z. spiele ich etwa 20 Partien pro Tag.
3. Ich mag auch keine Cheater, im Gegenteil, ich hasse Sie.
Im Gegensatz zu anderen bin ich aber der moralischen Überzeugung Auge um Auge und Zahn um Zahn, d.h. mit gleichen Mitteln bekämpfen und nicht zurückstecken, keinen Raum schenken.
Ich fange deshalb gründsätzlich in Spielen an zu betrügen, sobald ich merke, dass es ein anderer auch tut.
Ich habe sonst einfach keinen Spass mehr daran, wenn ich weiss, dass
ich Kanonenfutter für andere bin.
Wer dann nicht nachzieht hat einfach Pech gehabt. Ich kenne übrigens auch kein Spiel in dem nicht betrogen wird und man sieht ja heute am Radsport, überall wird gedopt ;-)
4. Wenn man es moralisch sieht, dürfest Du den Computer und das Inet nicht benutzen, das ganze dient in erster Linie dem Militär und somit der Vernichtung von Menschen.
Wofür die ersten Lochkartencomputer von IBM da waren, brauch ich ja wohl nicht erklären.


Aber zurück zu PB:
Also eine SchachEngine zu programmieren ist sicherlich aus vielerlei Gründen sehr interessant, zum einen Mal die komplexen Suchalghoritmen
und Positionierungen und Zugmöglichkeiten der Figuren.

Um eine Engine zu schreiben, die gut genug ist eine 2M Schnellpartie gegen einen Menschen zu gewinnen müsste das auch lange nicht so komplex sein, wie eine Profi-Engine, in den kurzen Partien stösst eben jeder schnell an seine Grenzen und es zählt nicht nur die gute Taktik sondern eben die Geschwindigkeit.

@Helle

Vielen dank für den Link. :allright:
Ich sehe Du hast ziemlich viel Assembler drin,
das übersteigt meine bisherigen Kenntnisse.
Ich sehe aber ein, dass es so wahrscheinlich viel schneller berechnet werden kann, eventuell müsste ich da mal nachholen.

Verfasst: 04.06.2007 08:02
von Kaeru Gaman
du hast hier im grunde zwei projekte:

- die schachengine selber.
das allein ist ein riesen-ding, vielleicht hilft dir ja der link von Helle,
NTQ hatte auch mal an nem schachgame rumgebastelt,
wie weit er ist, weiß ich nicht.

- das interface zum Java-Applet
das ist schon ein eigenständiges projekt, weil das doch recht aufwendig werden wird.
dein Interface muss schließlich in der Lage sein, die Browseranzeige zu interpretieren,
das an die schachengine zu schicken, und deren rückmeldung in die browser-
oberfläche einzugeben damit das Java-Applet die Eingabe bekommt,
und das eben auch noch wirklich performant und fehlerfrei.


@Subtopic
> Auge um Auge und Zahn um Zahn, d.h. mit gleichen Mitteln bekämpfen und nicht zurückstecken, keinen Raum schenken.

das können viele eben aufgrund ihrer erziehung nicht nachvollziehen.
das "christentum" ist eben immernoch staatsreligion,
wenn es auch nicht mehr so ausgiebig praktiziert wird wie früher.
es ist aber eine ebenso berechtigte moralische grundlage, wie die andere wange hinzuhalten.

Verfasst: 04.06.2007 11:06
von Xaby
http://de.wikipedia.org/wiki/Kategorie:Schach



Cheaten bei Schach?

Ich stelle mir das so vor:

- neuste Version von Fritz (irgendwo im Netz wird es das sicherlich geben)
- dann das Online-Spiel
- man stellt seine eigene Farbe beim Online-Spiel ein
>> und genau die entgegengesetzte bei Fritz

- die Sachen, die der Online-Fritze macht, die spielt man einfach nach bei Fritz

- Fritz reagiert und nun setzt man das, was Fritz gemacht hat gegen das Online-Porgramm

Man muss noch dabei stehen. Aber das kann man auch ändern.
http://www.purebasic.fr/german/viewtopi ... r++colours

Wie so eine eigene Schach-Engine aussehen muss, ja das ist dann schon schwieriger.

Du solltest eine Art-Online Schachspiel-System entwickeln.
20 Partien pro Tag über dein eigenes System abwickeln.
Und die Schachspiele aufzeichnen.

Du musst deine eigenen Partien auswerten und bewerten. Auch jeden Zug.

Durch vergleiche und Näherung kann dann der Rechner selbst bewerten, in dem er aus Erfahrungen von dir Schlüsse zieht.

Jeder einzelne Zug bekommt eine Wertung. Und wenn er 5 Züge in Voraus plant zum Beispiel:
werden die Wertungen vom Rechner und vom Gegner addiert.
Und wenn beide auf einem maximalen Wert sind, aber der Gegner gleichzeitig einen sehr geringen nahezu minimalen Wert erreicht, dann ist der Zug von Vorteil für dienen Rechner.

Wenn du nur minimale Züge vom Gegner zulässt, würdest dich selbst ja veralbern. Denn der Gegner wrd auch bestrebt sein, maximale Werte zu erreichen.

Du musst ebenfalls berücksichtigen, was wäre wenn, der Gegner mal nicht den besten Zug macht, aber danach eventuell bessere Resultieren.

Hat ein bisschen was von Wegfinderoutinen, die den schnellsten Weg suchen. Auch mit Hindernissen, die plötzlich auftauchen können oder Gegenständen, die eingesammelt werden müssen.
Felder, die Punkte geben und Felder, die Punkte nehmen.

Einzel-Feldbewertung würde die Sache sicherlich einfacher gestalten.

Wenn du eine erste Testversion hast, versuch auch deine beiden Computergegner gegen einander zu spielen.

Ein paar Eröffnungen musst du sicherlich vordefinieren.
Der Computer ist ja auch nur ein Mensch.

Und irgendwann wurde es dir ja auch beigebracht.

:roll:

@CSprengel
Naja, also Kasparow kannste nun nicht mit einem normalen Spieler vergleichen. Einen 3 Euro Schachcomputer darfst du auch nicht mit DeepBlue vergleichen.
Aber es gibt 7jährige, die selbst Profis (älter 30) in die Tasche stecken.
Wenn beide Parteien gleich stark sind, kann man auch ewig spielen und erst kurz vor dem Ende, ist klar, wer gewinnt.
Es reicht dann genau ein falscher Zug aus.

Ich glaube, ein normaler Spieler hat schon Probleme gegen Fritz 3 auf Diskette von 1995 zu gewinnen.
http://de.wikipedia.org/wiki/Fritz_%28Schach%29

Ob es Assembler oder PB ist, spielt eher weniger eine Rolle.
Wenn die Engine erstmal funktioniert, kann sie ja immer noch optimiert werden.

Und Blitzschach ist ja sicherlich auch möglich.
Bild

http://de.wikipedia.org/wiki/Schachbrett
http://de.wikipedia.org/wiki/Mieses-Er%C3%B6ffnung


Was ich mir noch vorstellen könnte wäre später, das man die Sache visuell cool gestaltet. Zum Beispiel auf einer Glasplatte Schachfiguren platziert und diese abfilmt und die Position der Figuren danach ins Rechner Programm überträgt und in einer 3D Umgebung proiziert.

Aber um selbst zu wissen, wie ein Gedanke oder eine Bewertung einer Situation erfolgt, ist es sicherlich eine gute Basis, wenn erstmal irgendwas funktioniert.

Etwas komplexer als TicTacToe ist es alle male.

Soll aber einfacher sein als GO.
http://de.wikipedia.org/wiki/Go_%28Brettspiel%29

:freak:

Verfasst: 04.06.2007 13:52
von K.Putt
Kaeru Gaman hat geschrieben:du hast hier im grunde zwei projekte:

- die schachengine selber.
das allein ist ein riesen-ding, vielleicht hilft dir ja der link von Helle,
NTQ hatte auch mal an nem schachgame rumgebastelt,
wie weit er ist, weiß ich nicht.

- das interface zum Java-Applet
das ist schon ein eigenständiges projekt, weil das doch recht aufwendig werden wird.
dein Interface muss schließlich in der Lage sein, die Browseranzeige zu interpretieren,
das an die schachengine zu schicken, und deren rückmeldung in die browser-
oberfläche einzugeben damit das Java-Applet die Eingabe bekommt,
und das eben auch noch wirklich performant und fehlerfrei.
Hallo,
Danke erstmal für die vielen Posts zum Thema :allright:

Ja, so eine Engine ist bestimmt eine sehr komplexe Sache,
einzige Erfahrung habe ich bisher aus einem "Dame" Spiel,
das allerdings wesentlich einfacher Strukturiert ist.

@ Kaeru Gaman
Zu der Interaktion mit dem Java:
Ich hatte mir das etwas einfacher vorgestellt, meine Engine hat keine Oberfläche und agiert mit dem Java-Applet nur über den
"gesteuerten" Mauszeiger.
Der Vorteil ist, dass ich gar nicht mit dem Applet selbst kommunizieren muss.
Die Figurenstellung ist ja am Anfang bekannt, das Koordinatensystem eindeutig, die Spielfeldgrösse, etc...
Daher erscheint es für mich als die einfachste Lösung, dass der Maus zu überlassen - theoretisch kann man natürlich immernoch eine GUI drumherumbasteln.

@ Xaby
Ja, die Engine von Fritz gegen das Applet zu setzen, daran hatte ich auch schon gedacht, Ich glaube aber Fritz lässt sich schlecht einstimmen auf so kurze Bedenkzeiten, bessere Efahrungen hatte ich mit dem Chessmaster,
der war fähig trotz so kurzer Bedenkzeiten recht gut zu spielen und sich an die Limits zu halten.
Theoretisch könnte man mit PB einfach die Züge des Applets mit denen des Schachprogramms "visuell" auswerten und umsetzen -> der einfachste Weg ohne Eigenleistung.
Zug vom Gegner vom Applet auf Schachprogramm übetragen, Reaktion abwarten, Reaktion zurück auf das Applet übertragen - fertig.
Ist aber nicht unbedingt das was ich mir vorgestellt hatte, etwas Eigenleistung möchte ich dann doch schon haben, um das Ergebnis auch "geniessen" zu können.

Dass Eröffnungen vorgegeben werden müssten sehe ich auch so,
allein die Einzuarbeiten ist schon immens, obwohl man nicht so umfangreiche benutzen muss wie theoretisch denkbar sind.

Zur Taktik für die Suchmuster könnte man sich auch auf ein bestimmtes Konzept festlegen, da es ja um Geschwindigkeit geht könnte man z.b.
rein auf "Ausweichen" spielen, d.h. das Schlagen von Figuren wo immer möglich zu vermeiden oder eben auf Räubern, d.h. gleiche Figuren immer sofort schlagen. Dass würde die Analyse schon erheblich verkürzen.

@ Zum Cheaten selbst:
Cheaten ist langweilig. Man ist einfach besser und tut wenig dafür,
es macht auf Dauer keinen Spass, wenn man keinen Gegner hat, d.h. keine Herausforderung.
Das Programm würde also nur hin und wieder bei wirklich verdächtigen Leuten zum Einsatz kommen, ich will ja auch spielen und dadurch wachsen, dass kann ich nicht, wenn ich nicht selbst spiele.

Verfasst: 04.06.2007 17:08
von THEEX
3. Ich mag auch keine Cheater, im Gegenteil, ich hasse Sie.
Im Gegensatz zu anderen bin ich aber der moralischen Überzeugung Auge um Auge und Zahn um Zahn, d.h. mit gleichen Mitteln bekämpfen und nicht zurückstecken, keinen Raum schenken.
Ich fange deshalb gründsätzlich in Spielen an zu betrügen, sobald ich merke, dass es ein anderer auch tut.
Ich habe sonst einfach keinen Spass mehr daran, wenn ich weiss, dass
ich Kanonenfutter für andere bin.
Wer dann nicht nachzieht hat einfach Pech gehabt. Ich kenne übrigens auch kein Spiel in dem nicht betrogen wird und man sieht ja heute am Radsport, überall wird gedopt Wink
Darüber hab ich 'ne andere Meinung, gegen Cheater sollte man Grundsätzlich nicht spielen, damit die seh'n, daß es nix bringt. Auge um Auge und ... , darüber hab ich auch 'ne andere Meinung. Ein Richter wird Dich auch nicht freisprechen, wenn Du sagt, der hat mich aber zuerst beklaut. Aber natürlich ist das alles Deine Sache! ^^
4. Wenn man es moralisch sieht, dürfest Du den Computer und das Inet nicht benutzen, das ganze dient in erster Linie dem Militär und somit der Vernichtung von Menschen.
Wofür die ersten Lochkartencomputer von IBM da waren, brauch ich ja wohl nicht erklären.
*Lach* Also bei der Moral dürfste ja fast gar nix mehr nutzen, denn es gibt fast gar nichts, daß man auf irgendeine Art militärisch genutzt werden kann. Aber sieh's doch mal so, ist doch gut, wenn das Militär auch mal was erfunden hat, was Zivil seinen nutzen findet. Wenn ich richtig informiert bin, waren Hubschrauber anfäglich auch fürs Militär gedacht und erst später kam der Zivile Einsatz. Also, flieg mir ja nie mit einem Hubschrauber und wenn mal einen Skiunfall hast, dann ja nicht fliegen! *grinst*

Aber jetzt mal Spaß beiseite, wenn so gut Schach spielst, dann reizt mich das ungemein. Ich spiele ca 30 Jahre, wobei ich die letzten Jahre leider nur noch gelegentlich spiele, trotzdem würde ich dich sehr gerne herausfordern.
Naja, also Kasparow kannste nun nicht mit einem normalen Spieler vergleichen. Einen 3 Euro Schachcomputer darfst du auch nicht mit DeepBlue vergleichen.
Genau das hab ich ja nicht getan, sondern eben vonander getrennt.

Verfasst: 04.06.2007 17:13
von ts-soft

Verfasst: 04.06.2007 17:47
von mull
Ich habe mal ein Schachprogramm geschrieben, was bei den Heutigen Rechnerleistungen schon Goßmeisterstärke hatte.

Habe mir damals das Buch Schach am PC besorgt, wo der Aufbau und die Programierung in Basic beschieben stand.
Must mal nach minimax im Net Suchen, da gibt es den Code aus dem Buch.

So kompliziert ist ein Schachprogramm nicht, grob gesagt brauch man das:

Einen Zuggenerator der alle legalen Züge in ein Liste hat, z.B bei 8x8 Brett Bauer E2E4 im Programm Brett(4) = 0 ; Brett(12) = 1 für weißer Bauer oder -1 für Schwarzen Bauer.

Eine Stellungsbewertung, nach jedem ausgeführen Zug muß die Stellung Bewertet werden.

MiniMax oder besser AlphaBeta Logoritmus, wo pro Tiefe der Stellungswert eingetragen wird.

Das war's schon im GROBEN, ist die Zugtiefe oder -Zeit erreicht wird der Zug mit der besten Bewertung gespielt.

Verfasst: 04.06.2007 18:09
von K.Putt
@ CSprengel
Also wir können gerne mal eine Partie spielen, ich muss nur das Programm vorher fertig haben (kleiner Scherz) :mrgreen:
Ich spiele täglich auf www.iwin.com ,kann man sich kostenlos registrieren.
Können wir uns gerne mal PM verabreden, arbeitstechnisch ist immer spät abends am Besten.

@ts-soft
Perfekt, da sind sogar 2 freie Engines dabei.
Da das ja nur für den privaten Einsatz ist, ist das natürlich eine super einfache Möglichkeit, danke für den Link. :allright:

@mull
Das klingt wirklich interessant, ich werde nachher mal danach recherchieren,
das das ganze in Basic erläutert ist, macht es natürlich noch besser :)

Verfasst: 04.06.2007 20:52
von Xaby
Was haltet ihr von einem Contest?

Vielleicht eine Schnittstelle, die über einen Server oder so funktioniert.

Request des letzten Zuges. Zug wohin.
Jeder überprüft selbst, ob es ein zugelassener Zug ist oder nicht.

Am Ende werden die Ergebnisse verglichen.

Im Idealfall bekommen beide Engines das selbe Ergebnis :mrgreen: