Title: AG Schachprogrammierung FUSC
1AG SchachprogrammierungFUSC april 2005
FUSC project group
2Content
Overview Introduction to the AG
Schachprogrammierung How does FUSc
represent the chessboard ? FUSc goes
internet / the future of FUSc
Schachprogrammier AG
april 2005
3Foundation of the AG
Foundation of the AG C, OpenSource first
version (V 1.03) quiescent search,
killermoves, hashtables, heuristics,
iterative search first version playing on the
internet (V 1.06) better evaluation first
official online-tournament first
victory Lange Nacht der Wissenschaften (V
1.07) documentation DarkFUSc, version
1.0 rotated bitboards DarkFUSc new evaluation
(including an automatic classification of
different types of chess positions)
14.Oktober 2002 1.März 2003 1.Juni
2003 11.Juni 2003 14.Juni 2003 january
2004 july 2004
Schachprogrammier AG
april 2005
4Foundation of the AG
Table of results 1.Dauth, Benjamin 2290
2.Düster, Christian 2100 3.Domingo,
Miguel 2038 4.Lane, Robin
1300 5.Steffen, Rico 1971 6.Kuprat,
Thomas 1975 7.Burghardt, Michael
1975 8.Martin, Mario 1900 9.Trösch,
Thomas 2166 10.FUSC V1.07
1400 11.Kärcher, David 1368 12.Minski,
Martin 2024 13.Rauch, Felix
1350 14.Schaller, Peter 1750 15.Wölter,
Ulrich 1300 16.Remmo, Abdulrahim 1300
Schachprogrammier AG
april 2005
5Foundation of the AG
Schachprogrammier AG
april 2005
6Foundation of the AG
Table of results
Schachprogrammier AG
april 2005
7Project group
homepage http//page.mi.fu-berlin.de/fusch/ m
embership all students (even from other
universities) are invited to participate, a
mailing list is used for
co-ordination some pictures
Maro Bader, Andre Rauschenbach, Johannes Buchner,
Andreas Gropp, Christian Düster (HU), Falko
Krause, Christian Ehrlich, Ben-Fillippo
Krippendorff und Marco Block
Schachprogrammier AG
april 2005
8Project group
developing enviroment
- - MS Visual Studio 2003
- .NET V1.1
- CVS
Schachprogrammier AG
april 2005
9Inside the chess engine
Schachprogrammier AG
april 2005
10FUSc board represenation
Schachprogrammier AG
april 2005
11BitBoards
the board as bitboard
very fast and efficient move generation
evaluation parameters can easily be translated
in matrices of bitboards (e.g. king safety) -
no official standards
Schachprogrammier AG
april 2005
12BitBoards
example knightmovesd3 AND opponent-pieces
00000000 00000000 00000000
00000000 00000000 00000000
00000000 00000000 00000000
00101000 00000000 00000000
01000100 00000000 gt 00000000
000X0000 00000000 000X0000
01000100 11111111 01000100
00101000 00000000 00000000
- concretly
- idea compute all possible knight moves from
field d3 and save them in a bitboard - knightmovesd3 AND emptyFields
- enhanchement knightmovesd3 AND
opponentPieces generates capturing moves - problem the (simple) bitboard representation is
limited to non-sliding pieces like knight, king
etc.
Schachprogrammier AG
april 2005
13Rotated BitBoards
Flipped board (90 to the right)
- idea 1 compute the moves for sliding pieces
depending on the relevant line/diagonal in
advance - Idee 2 saving flipped representations of the
board as rotated bitboards in order for the
lines/diagonals to be located sequentially in
one single byte
Schachprogrammier AG
april 2005
14Bitboards
Generating pawn captures
// WHITE PAWNS (captures right) tos (
(board.pawns NOT_RIGHT_EDGE from_squares) ltlt
9) board.b_occ froms tos gtgt 9 while (from
GET_LSB(froms)) board.w_attacks
from movelistmovenr.from
from movelistmovenr.to GET_LSB(tos)
movelistmovenr.det.ll
0 movelistmovenr.det.ail.piece
PAWN movelistmovenr.det.ail.flags
NORMAL_CAPTURE movenr CLEAR_LSB(tos)
CLEAR_LSB(froms)
Schachprogrammier AG
april 2005
15Bitboards
Generating knight moves
// WHITE KNIGHT froms board.knights
from_squares while (from GET_LSB(froms))
from_nr get_LSB_nr(from) tos
knight_movesfrom_nr to_squares while (to
GET_LSB(tos)) board.w_attacks
from movelistmovenr.from
from movelistmovenr.to to
movelistmovenr.det.ll 0 movelistmove
nr.det.ail.piece KNIGHT movelistmovenr.de
t.ail.from_nr from_nr if (board.b_occ to)
movelistmovenr.det.ail.flags
NORMAL_CAPTURE movenr CLEAR_LSB(tos
) CLEAR_LSB(froms)
Schachprogrammier AG
april 2005
16Bitboards
Generating rook moves
// WHITE ROOK froms board.rooks
from_squares while (from GET_LSB(froms))
from_nr get_LSB_nr(from) rank_pattern
board.occ.bytefrom_nr gtgt 3 file_pattern
board.occ_l90.bytel90_to_normalfrom_nr gtgt
3 tos (rank_movesfrom_nrrank_pattern
file_movesfrom_nrfile_pattern)
to_squares while (to GET_LSB(tos))
board.w_attacks from movelistmovenr.
from from movelistmovenr.to to
movelistmovenr.det.ll
0 movelistmovenr.det.ail.piece
ROOK movelistmovenr.det.ail.from_nr
from_nr if (board.b_occ to)
movelistmovenr.det.ail.flags
NORMAL_CAPTURE movenr CLEAR_LSB(tos
) CLEAR_LSB(froms)
Schachprogrammier AG
april 2005
17Research ideas
planning in computer chess prefer moves that
correspond to a strategic plan application of
neuronal networks prediction of moves,
evaluation gt development of plans reinforcement
learning recalibration of the evaluation
vector gt learning of plans FUSc goes linux and
64bit porting to linux with mono, optimizing
for AMD64 FUSc goes pocket pc porting to
.NET compact edition
Schachprogrammier AG
april 2005
18The end
thanks for listening ...
Schachprogrammier AG
april 2005