Du bist nicht angemeldet.

Werbeanzeige

C--

Alter Hase

Beiträge: 465

Beruf: Schüler

  • Private Nachricht senden

11

09.01.2010, 22:36

Ich steig noch nicht ganz durch, wie man jetzt eine eigene KI da eibinden soll, und wann die aufgerufen wird. Könntest du nicht ein kleines Stückchen Code zeigen, wie man das genau aufbauen soll?
Ich spreche: C/C++, C++/CLI C#, VBA, VB.NET, Delphi, (HTML, Javascript(bisschen))
------------------------------------------------------------
Hier steht eventuell schon in ein paar Monaten der Link zu meiner Homepage!

return 0;
;)

Heiji Hakoda

unregistriert

12

09.01.2010, 22:58

@ Elmaron: Ich dachte immer , die Computer greifen auf Bibliotheken zu, das heißt es ist immer vordefieniert was sie in welcher lage machen. Das suchen kann viel rechenzeit beanspruchen, aber wenn die hier allein nur durch alleiniges berechnen gewinnen sollen, sollte eigentlich die zeit weniger werden (und natürlich auch die spielstärke des computers.

Käsekönig

1x Contest-Sieger

  • Private Nachricht senden

13

09.01.2010, 23:33

Zitat von »"C--"«

Ich steig noch nicht ganz durch, wie man jetzt eine eigene KI da eibinden soll, und wann die aufgerufen wird. Könntest du nicht ein kleines Stückchen Code zeigen, wie man das genau aufbauen soll?


Würd mich auch freuen, wenn du ein bisschen Code zur Verfügung stellst. Damit ich endlich mal bisschen proggen kann!^^

Elmaron

Treue Seele

  • »Elmaron« ist der Autor dieses Themas

Beiträge: 126

Beruf: Sofa

  • Private Nachricht senden

14

10.01.2010, 02:23

Teil dieses Contests ist, dass man sich das (im Übrigen nicht schwere) Protokoll selbst aneignet - wobei oben sich ja ein Beispiel befindet.

Vielen hier scheint nicht klar zu sein, was stdin / stdout ist - dabei ist das so ziemlich das einfachste, worüber man sich mit jemand anders austauschen kann:

- printf()/cout geht als stdout raus (das, was man, wenns normal als Konsolenfenster läuft (nicht als GUI-App), als Ausgabe als normaler Nutzer im Konsolenfenster lesen kann und was dann dort eben steht)
- gets()/getc()/... holt die Befehle stdin rein (genau wie bei einer Konsolenapp die Nutzereingaben zu holen! Jeder hier jat doch wohl mit simplen Konsolenprogrammen angefangen, oder? Ja? Klingelt's? :-) mehr steckt nicht dahinter!)

Im Grunde bedient xboard/winboard euer Programm genau als wenn ein normaler Nutzer es als Konsolenanwendung direkt öffnen würde und dort Klartextbefehle eintippen (stdin) würde und das, was euer Konsolenprogramm ausgiebt, lesen (stdout).
Wichtig ist dabei nur, dass xboard/winboard einem halt bestimmte Befehle sendet und daraufhin bestimmte erwartet. Ein Beispiel zum Beginn eines Spiels ist dabei oben beschrieben, ein Link zur Gesamtprotokollspezifikation ist oben.

Wichtig ist nur, dass printf()/cout() gebuffert wird, d.h. es wird verzögert weitergegeben, was ihr nicht wollt - ein einfaches fflush(stdout) bzw. cout.flush() (so heißt das doch in C++, oder?) nach jeder ausgegebenen Zeile schafft aber leichte Abhilfe.

Probieren geht über studieren, probiert es unbedingt einmal aus: Schreibt ein Programm, das einfach in eine Logdatei aufschreibt, was es über stdin() kriegt, und ladet es einfach mal in xboard/winboard als "KI" rein (was natürlich zu keinem sinnvollen Ergebnis führt, aber ihr könnt genau schauen, was xboard/winboard euch nun eigentlich sendet, um das mal selbst angeguckt zu haben). Dann einfach per printf/cout eigene Befehle raus und rumprobieren!

Ohne ein bisschen Zeit zu investieren kommt man hier nicht weiter. Nicht umsonst ist bis Ende März Zeit.

Crush

Alter Hase

Beiträge: 384

Wohnort: Stuttgart

Beruf: Softwareentwickler

  • Private Nachricht senden

15

10.01.2010, 05:15

Das Testen könnte aber etwas langwierig werden, wenn man immer erst das Schachprogramm neu starten muß um zu schauen, was passiert...
Das en passant ist mir vollkommen unbekannt gewesen. Wird das ernsthaft von den Schachprogrammen gespielt? Das würde mich aber übel aus dem Konzept werfen.

Wäre es nicht fair, wenn es verboten wäre eine Zuglibrary mit Eröffnungszügen und diversenen Spielstellungen zu implementieren, weil sonst ja nicht wirklich der Zug "berechnet" wird?

Elmaron

Treue Seele

  • »Elmaron« ist der Autor dieses Themas

Beiträge: 126

Beruf: Sofa

  • Private Nachricht senden

16

10.01.2010, 05:26

Du kannst selbstverständlich direkt deine Engine als Konsolenapp aufrufen und Befehle eintippen. Außerdem ist das Schachprogramm schnell gestartet. Es ist jedoch eine gewisse Herausforderung, stimmt schon.

Damit es nicht am Einbinden in xboard/winboard scheitert, wenn eure .exe fertig ist, hier nun das

Tutorial zum Einbinden eurer Engine in Winboard zum Austesten

Schritt 1: INSTALLATION

Winboard herunterladen: http://www.open-aurec.com/wbforum/WinBoa…Board-4.4.1.exe und installieren.

Schritt 2: STARTEN

Im Startmenü Winboard suchen, dort den "WinBoard Startup Dialog" öffnen.

Schritt 3: ENGINE ANGEBEN

Ihr solltet nun diesen Dialog vor euch sehen:

(Link)

Tragt nun in die obere der beiden Boxen von "Specify Chess Engines:" den absoluten Pfad zur .exe-Datei eurer Engine ein!

Weiter geht's mit einem Klick auf "OK".

Schritt 4: SPIELEN

Nun öffnet sich das Hauptfenster:

(Link)

Hier einfach einen beliebigen Zug ausführen, eure Engine wird dann sofort reingeladen und bekommt die nötigen Befehle, um dann ihren eigenen Zug auszuführen. Ab hier könnt ihr dann in der Praxis sehen, wie das Protokoll denn nun aussieht und wie sich euer Programm eingebunden in xboard/winboard schlägt.

So, ich hoffe das Tutorial gibt noch ein wenig nen Anstoß, sich die Sache einmal genauer anzuschauen.

Fred

Supermoderator

Beiträge: 2 132

Beruf: Softwareentwickler

  • Private Nachricht senden

17

10.01.2010, 11:31

Ich werde zwar wahrscheinlich keine Zeit haben, mitzumachen(ich weiß im Moment nicht wo mir der Kopf steht), aber ich finde das Programm an sich schon sehr interessant. Dass man da einfach KIs hinzufügen kann ist sehr cool. Das muss ich mir bei Gelegenheit mal näher ansehen.

E333

Alter Hase

Beiträge: 1 373

Beruf: Schüler

  • Private Nachricht senden

18

10.01.2010, 12:20

Gibts eigentlich irgendwas, damit man nicht immer eingeben muss, wo die Engine zu finden ist. Bei mir ist da jedesmal im eingabefeld wieder die Standard-Engine zu finden, und ich muss den Pfad neu eintragen.


EDIT:
Gibts eigentlich eine Möglichkeit, die Konsole anzeigen zu lassen, bzw. nicht nur dass, was die Engine an zügen ausgibt, sondern auch, dass, was ihr übergeben wird ?

Elmaron

Treue Seele

  • »Elmaron« ist der Autor dieses Themas

Beiträge: 126

Beruf: Sofa

  • Private Nachricht senden

19

10.01.2010, 15:17

Zitat

Gibts eigentlich irgendwas, damit man nicht immer eingeben muss, wo die Engine zu finden ist. Bei mir ist da jedesmal im eingabefeld wieder die Standard-Engine zu finden, und ich muss den Pfad neu eintragen.


Möglichkeit 1:
Dem kannst du abhelfen, in dem du eine eigene Verknüpfung zu winboard.exe machst und als Kommandozeilenparameter -fcp "C:\MeineEngine.exe" einträgst. Damit landet durch Start mit der Verknüpfung deine Engine immer im ersten Eintrag.

Möglichkeit 2:
In winboard.ini gibt es einen Eintrag "/firstChessProgramNames={", der die ganzen Listeneinträge enthält. Schreib deine Engine dort einfach an erste Stelle.

Zitat

Gibts eigentlich eine Möglichkeit, die Konsole anzeigen zu lassen, bzw. nicht nur dass, was die Engine an zügen ausgibt, sondern auch, dass, was ihr übergeben wird ?


Ich glaube das geht tatsächlich nicht, sorry :cry: wäre sehr nützlich, aber bisher bin ich noch nicht auf ein solches Fenster gestoßen. Ich kann nur sagen, wie ich es mache: Ich schreib einfach das ganze Eingehende/Ausgehende und Debugzeugs in ne Datei. Aber natürlich ist das etwas umständlich zum auswerten und man kann es schlecht angucken *während* die KI läuft.

Es gibt noch Befehle wie "tellopponent", womit du Nachrichten-Popups generieren kannst - darüber könnte man u.U. auch Debugmeldungen ausgeben, wenn du sie jetzt dringend während der Laufzeit brauchst.

Elmaron

Treue Seele

  • »Elmaron« ist der Autor dieses Themas

Beiträge: 126

Beruf: Sofa

  • Private Nachricht senden

20

10.01.2010, 15:21

Crush: Bezüglich Zuglibraries:

Alle spielstarken Engines kommen mit Eröffnungsbüchern. Die Sache ist die, dass Schach so komplex ist, dass du für gerade das mittlere Spiel (d.h. nicht für Eröffnung oder Endspiel) eh keine Bibliotheken gebrauchen kannst und für Eröffnung eben nur, wenn der Gegner zufällig eine Eröffnung aus deiner Bibliothek auch spielt.

Natürlich macht es dich schon deutlich spielstärker und gibt dir nen guten Schub am Anfang, wo du dann nicht so rumgurkst. Aber weil das auch unter den ganzen "guten" Engines üblich ist, wollte ich das nun nicht für unseren Contest verbieten.

Und wie gesagt, man muss sich die passenden Züge aus der Bibliothek, die man letztendlich benutzen will, immer noch selbst raussuchen (automatisches Raussuchen oder Bewerten ist nicht erlaubt).

Werbeanzeige