New Chess Module

Discussion in 'Python' started by shatranjchess@gmail.com, Mar 15, 2007.

  1. Guest

    I'm releasing a new python chess module called shatranj.
    You can get it from www.employees.org/~stannous/shatranj
    until I move the project to sourceforge or some other place.

    It's a text based (bitboard) chess engine that implements
    an alphabeta search with iterative deepening.
    It also has a small opening book and stores most of
    its information in dictionaries (hash tables). So for
    a python module, it should be fast.

    It currently has a very simple evaluation
    function so don't expect strong play. My goal was to
    implement a complete program using 64 bit numbers
    (bitboards) as the main data structures...sacrificing
    speed for code clarity. I'm hoping that non-programmers
    interested in AI or advanced chess players will be able
    to pick it up and add some intelligence to it. Being
    written in Python, it's not blazingly fast...but Kasparov
    doesn't even look at 2k nodes per second, does he? ;-)

    Some things I could use some help with: interface for
    xboard and winboard not to mention a better
    evaluation function.

    (comments and suggestions are welcome...
    please email shatranjchess at gmail dot com)

    Here's a small interactive session of how it works:

    ------------------
    >>> from shatranj import *

    ....reading startup data
    ....total time to read data 0.0774528980255
    ....found opening book shatranj-book.bin with 37848 positions
    >>> position = Position("r1bqk2r/pppp1ppp/2n5/5N2/2B1n3/8/PPP1QPPP/R1B1K2R")
    >>> all_pieces = position.piece_bb["b_occupied"] | position.piece_bb["w_occupied"]
    >>> other_pieces = position.piece_bb["b_occupied"]
    >>> from_square = c4
    >>> wtm = 1
    >>> mask = position.pinned(from_square,wtm)
    >>> ne_pieces = diag_mask_ne[from_square] & all_pieces
    >>> nw_pieces = diag_mask_nw[from_square] & all_pieces
    >>> moves = ((diag_attacks_ne[from_square][ne_pieces] & other_pieces) | \

    .... (diag_attacks_ne[from_square][ne_pieces] & ~all_pieces)
    | \
    .... (diag_attacks_nw[from_square][nw_pieces] & other_pieces)
    | \
    .... (diag_attacks_nw[from_square][nw_pieces] & ~all_pieces))
    & mask
    >>>
    >>> moves

    1275777090846720L
    >>>
    >>> tobase(moves,2)

    '100100010000101000000000000010100000000000000000000'
    >>> display(moves)


    +---+---+---+---+---+---+---+---+
    8 | | . | | . | | . | | . |
    +---+---+---+---+---+---+---+---+
    7 | . | | . | | . | 1 | . | |
    +---+---+---+---+---+---+---+---+
    6 | 1 | . | | . | 1 | . | | . |
    +---+---+---+---+---+---+---+---+
    5 | . | 1 | . | 1 | . | | . | |
    +---+---+---+---+---+---+---+---+
    4 | | . | | . | | . | | . |
    +---+---+---+---+---+---+---+---+
    3 | . | 1 | . | 1 | . | | . | |
    +---+---+---+---+---+---+---+---+
    2 | | . | | . | | . | | . |
    +---+---+---+---+---+---+---+---+
    1 | . | | . | | . | | . | |
    +---+---+---+---+---+---+---+---+
    a b c d e f g h

    >>> move_list = position.generate_moves(wtm)
    >>> moves,san_moves = position.get_move_list(move_list)
    >>> san_moves.values()

    ['Rg1', 'O-O', 'f3', 'a3', 'Rb1', 'f4', 'Ba6', 'Qe3', 'Bh6', 'Bd3',
    'Qg4', 'Ng3', 'Ne7', 'Be6', 'Nxg7', 'Qxe4', 'Ne3', 'b4', 'b3', 'Be3',
    'Bg5', 'g3', 'Kf1', 'Rf1', 'Nh6', 'a4', 'Nh4', 'Qh5', 'Kd1', 'h4',
    'h3',
    'c3', 'Bxf7', 'Nd6', 'Bb5', 'Nd4', 'Qf3', 'g4', 'Qf1', 'Bb3', 'Qd1',
    'Qd3', 'Qd2', 'Bd5', 'Bd2', 'Bf4']
    >>>
    >>> # now play a game!
    >>> play()

    Shatranj version 1.0
    g: switch sides m: show legal moves
    n: new game l: list game record
    d: display board b: show book moves
    sd: change search depth (2-16) default=5
    q: quit

    Shatranj: d

    +---+---+---+---+---+---+---+---+
    8 | r | n | b | q | k | b | n | r |
    +---+---+---+---+---+---+---+---+
    7 | p | p | p | p | p | p | p | p |
    +---+---+---+---+---+---+---+---+
    6 | | . | | . | | . | | . |
    +---+---+---+---+---+---+---+---+
    5 | . | | . | | . | | . | |
    +---+---+---+---+---+---+---+---+
    4 | | . | | . | | . | | . |
    +---+---+---+---+---+---+---+---+
    3 | . | | . | | . | | . | |
    +---+---+---+---+---+---+---+---+
    2 | P | P | P | P | P | P | P | P |
    +---+---+---+---+---+---+---+---+
    1 | R | N | B | Q | K | B | N | R |
    +---+---+---+---+---+---+---+---+
    a b c d e f g h



    Shatranj:
    -----------------------------------

    Enjoy,
    Sam
     
    , Mar 15, 2007
    #1
    1. Advertising

  2. Paul Rubin Guest

    writes:
    > written in Python, it's not blazingly fast...but Kasparov
    > doesn't even look at 2k nodes per second, does he? ;-)


    Wow, cool. Out of curiosity how many nodes per second does it look
    at?
     
    Paul Rubin, Mar 15, 2007
    #2
    1. Advertising

  3. Guest

    On Mar 15, 4:46 pm, Paul Rubin <http://> wrote:
    > writes:
    > > written in Python, it's not blazingly fast...but Kasparov
    > > doesn't even look at 2k nodes per second, does he? ;-)

    >
    > Wow, cool. Out of curiosity how many nodes per second does it look
    > at?


    depends on your processor speed...on a recent machine (~2.3GHz)
    I can get about 2k nps without the psyco boost...but my goal was not
    to beat the compiled programs with fast code. I'd like to develop a
    strong program with good evaluation and move ordering. And perhaps
    try search methods other than alphabeta. Using bitboards should
    make the first part easier and using python should help with the
    second
    part.

    --Sam
     
    , Mar 15, 2007
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. nick
    Replies:
    1
    Views:
    462
    bugbear
    Nov 19, 2004
  2. Tidds

    chess board

    Tidds, Nov 10, 2003, in forum: HTML
    Replies:
    18
    Views:
    8,696
    Greg Griffiths
    Nov 25, 2003
  3. Will McGugan

    New Python chess module

    Will McGugan, Sep 29, 2005, in forum: Python
    Replies:
    5
    Views:
    423
    Dave Hansen
    Sep 30, 2005
  4. Will McGugan

    Chess module blog

    Will McGugan, Jun 18, 2006, in forum: Python
    Replies:
    1
    Views:
    737
    faulkner
    Jun 19, 2006
  5. Varun Hiremath
    Replies:
    1
    Views:
    488
    Will McGugan
    Sep 18, 2006
Loading...

Share This Page