Wednesday, May 25, 2011

Perft et débugage

Le chargement d'une position à partir d'une chaine FEN est fait !
Ca veut dire que je peux tester des positions comme je veux et j'ai fini de faire les tests (que j'aurais dû faire avant) et corrigé les bugs que j'avais.

J'ai aussi fait la fonction Perft (générateur et compteur de positions à une profondeur donnée pour voir si ya pas de bugs).

Là ça fait mal...
22 secondes pour aller au niveau 3 de profondeur (ply == 3). 20 secondes en améliorant la fonction elle même, mais c'est pas le but, le but c'est d'améliorer le moteur. Un moteur moyen met 20ms (milli !) pour 3 plis :)

Bah je suis juste 10 000 fois plus lent, rien de grave :)
Et en plus j'ai des bugs.

Normalement les valeurs de Perf sont:
perft(1) = 20
perft(2) = 400
perft(3) = 8902

et pour perft(3) je trouve 8906 au lieu de 8902...
Il y a 12 mises en échec possible au niveau 3. Peut-être que ma fonction de générateur de mouvements a un bug au niveau des mouvements légaux, et qu'il autorise une autre pièce à bouger pendant que le roi est en échec ? Hum, ça en ferait trop....

Il faut que ma suite de tests soit plus étoffée !
Et il faut que j'améliore les perfs ! J'ai une petite idée d'où ça vient: la vérification des mouvements légaux. En la virant, je fais le niveau 3 en 0.85 s (au lieu de 20 s) et je fais le niveau 4 en 18 secondes (198 030 déplacements... au lieu de 197 281 si je n'avais pas de bugs). 0.85 s au lieu de 0.002 c'est toujours mieux (425 fois plus lent)

Bon, ben... vive la chasse aux bugs d'abord :)

TODO

Voici (en anglais puisque c'est dans un fichier source) l'avancement du moteur.

Fini:
- Set up TDD (RSpec)
- choose a board representation
- write functions to update chessboard representation
- write utility function to translate FEN position into your chessboard representation (if not, no easy TDD for move generator)
- write moves generator
- write a Perft function

En cours:
- write a search function with simple evaluation function
- xboard interface
- play !
- optimisation (Quiescence search, etc...)
- play !
- FICS interface
- play and watch it play !
- DB to store moves evaluations
- ... and play more !

No comments: