Hi,
I wrote a chess program in python.
Move-gen by the python-chess library.
It speaks UCI.
https://github.com/flok99/feeks
feeks
Moderators: hgm, Rebel, chrisw
Re: feeks
[pgn][Event "Computer Chess Game"]
[Site "lenovo"]
[Date "2017.12.29"]
[Round "-"]
[White "Feeks"]
[Black "GNU Chess"]
[Result "0-1"]
[TimeControl "300+12"]
[Annotator "1. +0.02 1... +0.12"]
1. Na3 {+0.02/8} Nc6 {+0.12/14 26} 2. Nf3 {+0.01/9 19} e5 {+0.25/14 0.1} 3.
Nxe5 {+0.60/8 19} Nxe5 {+1.89/12 6} 4. Rb1 {-1.03/8 10} Nf6 {+2.58/13 16}
5. Rg1 {-0.28/9 15} d5 {+3.11/12 26} 6. Nb5 {-0.32/8 12} a6 {+3.83/13 26}
7. Ra1 {-0.32/9 19} axb5 {+6.49/12 14} 8. f4 {-3.29/7 18} Nc4 {+7.12/13 28}
9. e4 {+2.82/7 18} Nxe4 {+9.28/13 21} 10. Qe2 {-3.99/7 12} Bc5
{+10.63/13 38} 11. Qxe4+ {+5.43/8 18} dxe4 {+18.26/10 23} 12. Be2
{-12.67/7 17} Bxg1 {+21.33/11 7} 13. d3 {-19.37/7 17} Qh4+ {+99.87/10 19}
14. g3 {-14.40/7 17} Qxh2 {+99.89/15 15} 15. dxc4 {-20.88/5 14} Bg4
{+99.91/49 2.9} 16. Bxg4 {-21.42/7 16} Qf2+ {+99.93/48 0.1} 17. Kd1
{-100.00/10 11} Rd8+ {+99.95/49 7} 18. Bd2 {-100.00/11 14} Qxd2#
{+99.99/49 19}
{Xboard adjudication: Checkmate} 0-1[/pgn]
[Site "lenovo"]
[Date "2017.12.29"]
[Round "-"]
[White "Feeks"]
[Black "GNU Chess"]
[Result "0-1"]
[TimeControl "300+12"]
[Annotator "1. +0.02 1... +0.12"]
1. Na3 {+0.02/8} Nc6 {+0.12/14 26} 2. Nf3 {+0.01/9 19} e5 {+0.25/14 0.1} 3.
Nxe5 {+0.60/8 19} Nxe5 {+1.89/12 6} 4. Rb1 {-1.03/8 10} Nf6 {+2.58/13 16}
5. Rg1 {-0.28/9 15} d5 {+3.11/12 26} 6. Nb5 {-0.32/8 12} a6 {+3.83/13 26}
7. Ra1 {-0.32/9 19} axb5 {+6.49/12 14} 8. f4 {-3.29/7 18} Nc4 {+7.12/13 28}
9. e4 {+2.82/7 18} Nxe4 {+9.28/13 21} 10. Qe2 {-3.99/7 12} Bc5
{+10.63/13 38} 11. Qxe4+ {+5.43/8 18} dxe4 {+18.26/10 23} 12. Be2
{-12.67/7 17} Bxg1 {+21.33/11 7} 13. d3 {-19.37/7 17} Qh4+ {+99.87/10 19}
14. g3 {-14.40/7 17} Qxh2 {+99.89/15 15} 15. dxc4 {-20.88/5 14} Bg4
{+99.91/49 2.9} 16. Bxg4 {-21.42/7 16} Qf2+ {+99.93/48 0.1} 17. Kd1
{-100.00/10 11} Rd8+ {+99.95/49 7} 18. Bd2 {-100.00/11 14} Qxd2#
{+99.99/49 19}
{Xboard adjudication: Checkmate} 0-1[/pgn]
-
- Posts: 45
- Joined: Sun Feb 07, 2010 7:35 pm
- Location: Spain
Re: feeks
You probably already know, but just in case, to make the use of your program by users (especially Windows users) more user-friendly, you could create executables very easily, using pyinstaller and running
Code: Select all
pyinstaller main.py -F
-
- Posts: 4606
- Joined: Wed Oct 01, 2008 6:33 am
- Location: Regensburg, Germany
- Full name: Guenther Simon
Re: feeks
Looks more like a (nearly) random mover? (similar to POS)
Guenther
Guenther
-
- Posts: 4606
- Joined: Wed Oct 01, 2008 6:33 am
- Location: Regensburg, Germany
- Full name: Guenther Simon
Re: feeks
Then it must have immense bugs. In your game example it blunders permanently pieces here and there?flok wrote:Not at all!
Fully a/b with psq, material, lmr, null move, tt
-
- Posts: 4052
- Joined: Thu May 15, 2008 9:57 pm
- Location: Berlin, Germany
- Full name: Sven Schüle
Re: feeks
The piece-square table implementation needs a fix. The table init code lists values for ranks 8 down to 1 but the psq() function uses it the other way round. So you might want to write this:
instead.
Next thing is I'm not sure whether en passant is handled correctly, both in your search (e.g. pc_to_list(), blind()) and in the python chess library. The latter is only a vague suspicion: when trying to fiddle around a bit with your engine I added a LegalCapturesGenerator class to the python chess library (based on the already existing function generate_legal_captures()) and used it in your qsearch - mainly by adding an is_qs flag to pc_to_list() - to see whether that would make things faster but then I noticed a reproducible crash after 1.d4 Nf6 2.d5 e5, and adding test code that prints some message if the current board allows a legal en passant capture crashed as well so there might be something wrong - could even be my fault of course.
Have you checked the move generator code with perft? Or has someone else already done that for the python chess library?
Also the engine is *really* slow. I have not found out yet whether that is caused by the python chess library or by your search code.
Code: Select all
if piece.color == chess.BLACK:
table_pos = pos
val -= psq_table[symbol][table_pos]
else:
pos_y = pos / 8
pos_x = pos % 8
table_pos = (7 - pos_y) * 8 + pos_x
val += psq_table[symbol][table_pos]
Next thing is I'm not sure whether en passant is handled correctly, both in your search (e.g. pc_to_list(), blind()) and in the python chess library. The latter is only a vague suspicion: when trying to fiddle around a bit with your engine I added a LegalCapturesGenerator class to the python chess library (based on the already existing function generate_legal_captures()) and used it in your qsearch - mainly by adding an is_qs flag to pc_to_list() - to see whether that would make things faster but then I noticed a reproducible crash after 1.d4 Nf6 2.d5 e5, and adding test code that prints some message if the current board allows a legal en passant capture crashed as well so there might be something wrong - could even be my fault of course.
Have you checked the move generator code with perft? Or has someone else already done that for the python chess library?
Also the engine is *really* slow. I have not found out yet whether that is caused by the python chess library or by your search code.
Re: feeks
Oh indeed! Oops!Sven wrote:The piece-square table implementation needs a fix. The table init code lists values for ranks 8 down to 1 but the psq() function uses it the other way round.
Some code was translated from Embla and I made some mistakes here and there. Earlier today there I found a sign-problem in null move.
I have not verified it no, I expected it to be correct. I'll add a perft.Next thing is I'm not sure whether en passant is handled correctly, both in your search (e.g. pc_to_list(), blind()) and in the python chess library. The latter is only a vague suspicion: when trying to fiddle around a bit with your engine I added a LegalCapturesGenerator class to the python chess library (based on the already existing function generate_legal_captures()) and used it in your qsearch - mainly by adding an is_qs flag to pc_to_list() - to see whether that would make things faster but then I noticed a reproducible crash after 1.d4 Nf6 2.d5 e5, and adding test code that prints some message if the current board allows a legal en passant capture crashed as well so there might be something wrong - could even be my fault of course.
Have you checked the move generator code with perft? Or has someone else already done that for the python chess library?
Well node count is low so I think it must be in move-gen.Also the engine is *really* slow. I have not found out yet whether that is caused by the python chess library or by your search code.