ChessUSA.com TalkChess.com
Hosted by Your Move Chess & Games
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Stockfish 1.7
Post new topic    TalkChess.com Forum Index -> Computer Chess Club: General Topics Flat
View previous topic :: View next topic  
Author Message
Gary



Joined: 12 Dec 2006
Posts: 349

PostPost subject: Re: Stockfish 1.7    Posted: Fri Apr 09, 2010 5:40 am Reply to topic Reply with quote

Awesome work, it's really cool to see such well commented and readable chess source code.

One thing that would be cool to consider in the future is perhaps releasing the version of SF with the tunable eval (not necessarily the eval tuner itself). I realize it's extra work for you, but it would be really fun to experiment on such a strong program.

Anyhow, congrats on another strong release Smile.

Btw, I ported a slightly faster SEE over, which only gives boolean yes/no to Stockfish. The idea is from Strelka originally, but the code is original.

Code:

// This version of SEE does not calculate the exact material imbalance, it just returns true = winning or equal, false = losing
int Position::see_sign(Move m) const {

  assert(move_is_ok(m));

  static const int seeValues[18] = {
    0, PawnValueMidgame, BishopValueMidgame, BishopValueMidgame,
    RookValueMidgame, QueenValueMidgame, QueenValueMidgame*10, 0,
    0, PawnValueMidgame, BishopValueMidgame, BishopValueMidgame,
    RookValueMidgame, QueenValueMidgame, QueenValueMidgame*10, 0,
    0, 0
  };

  const Square from = move_from(m);
  const Square to = move_to(m);

  const Color us = (from != SQ_NONE ? color_of_piece_on(from) : opposite_color(color_of_piece_on(to)));
  const Color them = opposite_color(us);

  assert(piece_on(from) != NO_PIECE);
  assert(color_of_piece_on(from) == us);
  assert(piece_on(to) == NO_PIECE ||
    (color_of_piece_on(from) != color_of_piece_on(to)) ||
    move_is_castle(m));

  const int fromValue = seeValues[piece_on(from)];
  const int toValue = seeValues[piece_on(to)];

  if (fromValue <= toValue)
  {
    return 1;
  }

  if (st->epSquare == to && type_of_piece_on(from) == PAWN)
  {
    // e.p. captures are always pxp which is winning or equal.
    return 1;
  }

  if (move_is_castle(m))
  {
    // TODO: castles are always "good".
    // We would have to change the destination square to be the final location for the rook.
    return 1;
  }

  // We should only be making initially losing captures here
  //assert(fromValue > seeValues[PAWN] || GetMoveType(move) == MoveTypePromotion || toValue == 0);

  const Bitboard enemyPieces = pieces_of_color(them);

  // Pawn attacks
  // If any opponent pawns can capture back, this capture is probably not worthwhile (as we must be using knight or above).
  if (attacks_from<PAWN>(to, us) & pieces(PAWN) & enemyPieces)
  {
    return -1;
  }

  // Knight attacks
  Bitboard attackingPieces = attacks_from<KNIGHT>(to) & pieces(KNIGHT);
  const int captureDeficit = fromValue - toValue;
  // If any opponent knights can capture back, and the deficit we have to make up is greater than the knights value,
  // it's not worth it.  We can capture on this square again, and the opponent doesn't have to capture back.
  if (captureDeficit > seeValues[KNIGHT] && (attackingPieces & enemyPieces))
  {
    return -1;
  }

  // Bishop attacks
  Bitboard allPieces = pieces_of_color(us) | enemyPieces;
  clear_bit(&allPieces, from);

  attackingPieces |= bishop_attacks_bb(to, allPieces) & (pieces(BISHOP) | pieces(QUEEN));
  if (captureDeficit > seeValues[BISHOP] && (attackingPieces & pieces(BISHOP) & enemyPieces))
  {
    return -1;
  }

  // Pawn defenses
  // At this point, we are sure we are making a "losing" capture.  The opponent can not capture back with a
  // pawn.  They cannot capture back with a bishop/knight and stand pat either.  So, if we can capture with
  // a pawn, it's got to be a winning or equal capture.
  if (attacks_from<PAWN>(to, them) & pieces(PAWN) & pieces_of_color(us))
  {
    return 1;
  }

  // Rook attacks
  attackingPieces |= rook_attacks_bb(to, allPieces) & (pieces(ROOK) | pieces(QUEEN));
  if (captureDeficit > seeValues[ROOK] && (attackingPieces & pieces(ROOK) & enemyPieces))
  {
    return -1;
  }

  // King attacks
  attackingPieces |= attacks_from<KING>(to) & pieces(KING);

  // Make sure our original attacking piece is not included in the set of attacking pieces
  attackingPieces &= allPieces;

  if (!attackingPieces)
  {
    // No pieces attacking us, we have won
    return 1;
  }

  // At this point, we have built a bitboard of all the pieces attacking the "to" square.  This includes
  // potential x-ray attacks from removing the "from" square piece, which we used to do the capture.

  // We are currently winning the amount of material of the captured piece, time to see if the opponent
  // can get it back somehow.  We assume the opponent can capture our current piece in this score, which
  // simplifies the later code considerably.
  int seeValue = toValue - fromValue;

  for (;;)
  {
    int capturingPieceValue = -1;

    // Find the least valuable piece of the opponent that can attack the square
    for (PieceType capturingPiece = KNIGHT; capturingPiece <= KING; capturingPiece++)
    {
      const Bitboard attacks = pieces(capturingPiece) & attackingPieces & pieces_of_color(them);
      if (attacks)
      {
        // They can capture with a piece
        capturingPieceValue = seeValues[capturingPiece];

        const Square attackingSquare = first_1(attacks);
        clear_bit(&attackingPieces, attackingSquare);
        clear_bit(&allPieces, attackingSquare);
        break;
      }
    }

    if (capturingPieceValue == -1)
    {
      // The opponent can't capture back - we win
      return 1;
    }

    // Now, if seeValue < 0, the opponent is winning.  If even after we take their piece,
    // we can't bring it back to 0, then we have lost this battle.
    seeValue += capturingPieceValue;
    if (seeValue < 0)
    {
      return -1;
    }

    // Add any x-ray attackers
    attackingPieces |=
      ((bishop_attacks_bb(to, allPieces) & (pieces(BISHOP) | pieces(QUEEN))) |
      (rook_attacks_bb(to, allPieces) & (pieces(ROOK) | pieces(QUEEN)))) & allPieces;

    // Our turn to capture
    capturingPieceValue = -1;

    // Find the least valuable piece of the opponent that can attack the square
    for (PieceType capturingPiece = KNIGHT; capturingPiece <= KING; capturingPiece++)
    {
      const Bitboard attacks = pieces(capturingPiece) & attackingPieces & pieces_of_color(us);
      if (attacks)
      {
        // We can capture with a piece
        capturingPieceValue = seeValues[capturingPiece];

        const Square attackingSquare = first_1(attacks);
        clear_bit(&attackingPieces, attackingSquare);
        clear_bit(&allPieces, attackingSquare);
        break;
      }
    }

    if (capturingPieceValue == -1)
    {
      // We can't capture back, we lose :(
      return -1;
    }

    // Assume our opponent can capture us back, and if we are still winning, we can stand-pat
    // here, and assume we've won.
    seeValue -= capturingPieceValue;
    if (seeValue >= 0)
    {
      return 1;
    }

    // Add any x-ray attackers
    attackingPieces |=
      ((bishop_attacks_bb(to, allPieces) & (pieces(BISHOP) | pieces(QUEEN))) |
      (rook_attacks_bb(to, allPieces) & (pieces(ROOK) | pieces(QUEEN)))) & allPieces;
  }
}


With some unit tests here:
Code:

#include <cassert>

void CheckSee(const std::string &fen, const std::string &move, int expected)
{
  Position position(fen);

  Move captureMove = move_from_string(position, move);
  assert(move_is_ok(captureMove));
  assert(position.see_sign(captureMove) == expected);

  Position flipped;
  flipped.flipped_copy(position);

  std::string flippedMove(move);
  flippedMove[1] = '1' + ('8' - flippedMove[1]);
  flippedMove[3] = '1' + ('8' - flippedMove[3]);
  captureMove = move_from_string(flipped, flippedMove);
  assert(move_is_ok(captureMove));
  assert(flipped.see_sign(captureMove) == expected);
}

void SeeTests()
{
  // Winning pawn capture on rook
  CheckSee("2r3k1/2r4p/1PNqb1p1/3p1p2/4p3/2Q1P2P/5PP1/1R4K1 w - - 0 37", "b6c7", 1);

  // Winning rook/queen capture on pawn
  CheckSee("2r3k1/2P4p/2Nqb1p1/3p1p2/4p3/2Q1P2P/5PP1/1R4K1 b - - 0 37", "c8c7", 1);
  CheckSee("2r3k1/2P4p/2Nqb1p1/3p1p2/4p3/2Q1P2P/5PP1/1R4K1 b - - 0 37", "d6c7", 1);

  // Winning rook/queen capture on knight
  CheckSee("6k1/2r4p/2Nqb1p1/3p1p2/4p3/2Q1P2P/5PP1/1R4K1 b - - 0 38", "c7c6", 1);
  CheckSee("6k1/2r4p/2Nqb1p1/3p1p2/4p3/2Q1P2P/5PP1/1R4K1 b - - 0 38", "d6c6", 1);

  // Losing rook/queen capture on knight (revealed rook attack)
  CheckSee("6k1/2r4p/2Nqb1p1/3p1p2/4p3/2Q1P2P/5PP1/2R3K1 b - - 0 38", "c7c6", -1);
  CheckSee("6k1/2r4p/2Nqb1p1/3p1p2/4p3/2Q1P2P/5PP1/2R3K1 b - - 0 38", "d6c6", -1);

  // Winning rook/queen capture on knight (revealed bishop attack)
  CheckSee("4b1k1/2rq3p/2N3p1/3p1p2/4p3/2Q1P2P/5PP1/2R3K1 b - - 0 38", "c7c6", 1);
  CheckSee("4b1k1/2rq3p/2N3p1/3p1p2/4p3/2Q1P2P/5PP1/2R3K1 b - - 0 38", "d7c6", 1);

  // Winning pawn capture on pawn
  CheckSee("2r3k1/2pq3p/3P2p1/b4p2/4p3/2R1P2P/5PP1/2R3K1 w - - 0 38", "d6c7", 1);

  // Losing rook capture on pawn
  CheckSee("2r3k1/2pq3p/3P2p1/b4p2/4p3/2R1P2P/5PP1/2R3K1 w - - 0 38", "c3c7", -1);

  // Losing queen capture on rook
  CheckSee("2r3k1/2p4p/3P2p1/q4p2/4p3/2R1P2P/5PP1/2R3K1 b - - 0 38", "a5c3", -1);

  // Losing rook capture on pawn
  CheckSee("1br3k1/2p4p/3P2p1/q4p2/4p3/2R1P2P/5PP1/2R3K1 w - - 0 38", "c3c7", -1);

  // Winning Q promotion (non-capture)
  CheckSee("4rrk1/2P4p/6p1/5p2/4p3/2R1P2P/5PP1/2R3K1 w - - 0 38", "c7c8q", 1);

  // Losing Q promotion (non-capture)
  CheckSee("r3rrk1/2P4p/6p1/5p2/4p3/2R1P2P/5PP1/2R3K1 w - - 0 38", "c7c8q", -1);

  // Knight capturing pawn defended by pawn
  CheckSee("K7/8/2p5/3p4/8/4N3/8/7k w - - 0 1", "e3d5", -1);

  // Knight capturing undefended pawn
  CheckSee("K7/8/8/3p4/8/4N3/8/7k w - - 0 1", "e3d5", 1);

  // Rook capturing pawn defended by knight
  CheckSee("K7/4n3/8/3p4/8/3R4/3R4/7k w - - 0 1", "d3d5", -1);

  // Rook capturing pawn defended by bishop
  CheckSee("K7/5b2/8/3p4/8/3R4/3R4/7k w - - 0 1", "d3d5", -1);

  // Rook capturing knight defended by bishop
  CheckSee("K7/5b2/8/3n4/8/3R4/3R4/7k w - - 0 1", "d3d5", 1);

  // Rook capturing rook defended by bishop
  CheckSee("K7/5b2/8/3r4/8/3R4/3R4/7k w - - 0 1", "d3d5", 1);
}
Back to top
View user's profile Send private message
Display posts from previous:   
Subject Author Date/Time
Stockfish 1.7 Marco Costalba Thu Apr 08, 2010 5:29 am
      Re: Stockfish 1.7 Graham Banks Thu Apr 08, 2010 5:34 am
      Re: Stockfish 1.7 Aaron Becker Thu Apr 08, 2010 6:08 am
            Re: Stockfish 1.7 Gian-Carlo Pascutto Thu Apr 08, 2010 8:07 am
                  Re: Stockfish 1.7 Graham Banks Thu Apr 08, 2010 8:12 am
                        Re: Stockfish 1.7 Jeremy Bernstein Thu Apr 08, 2010 9:55 am
                        Re: Stockfish 1.7 Carl Bicknell Thu Apr 08, 2010 10:18 am
                  Re: Stockfish 1.7 Marco Costalba Thu Apr 08, 2010 11:11 am
                  Re: Stockfish 1.7 Gian-Carlo Pascutto Fri Apr 09, 2010 10:46 am
                        Re: Stockfish 1.7 Marco Costalba Fri Apr 09, 2010 10:51 am
                        Re: Stockfish 1.7 Tord Romstad Fri Apr 09, 2010 11:00 am
                        Re: Stockfish 1.7 Uri Blass Fri Apr 09, 2010 11:27 am
                              Re: Stockfish 1.7 mishmash Fri Apr 09, 2010 11:42 am
                        Re: Stockfish 1.7 Uri Blass Fri Apr 09, 2010 11:41 am
                        Re: Stockfish 1.7 Eelco de Groot Fri Apr 09, 2010 11:54 am
                              Re: Stockfish 1.7 Gian-Carlo Pascutto Fri Apr 09, 2010 2:04 pm
                                    Re: Stockfish 1.7 M ANSARI Fri Apr 09, 2010 2:59 pm
                                          Re: Stockfish 1.7 Gian-Carlo Pascutto Fri Apr 09, 2010 4:01 pm
                                          Re: Stockfish 1.7 Uri Blass Fri Apr 09, 2010 10:26 pm
                                                Re: Stockfish 1.7 john dalhem Sat Apr 10, 2010 12:12 am
                                                Re: Stockfish 1.7 M ANSARI Sat Apr 10, 2010 6:36 am
                                    Re: Stockfish 1.7 Marco Costalba Fri Apr 09, 2010 5:24 pm
      Re: Stockfish 1.7 Volker Pittlik Thu Apr 08, 2010 6:27 am
            Re: Stockfish 1.7 Norbert Raimund Leisner Thu Apr 08, 2010 6:36 am
                  Re: Stockfish 1.7 Marek Kwiatkowski Thu Apr 08, 2010 1:03 pm
      Re: Stockfish 1.7 Vael Jean-Paul Thu Apr 08, 2010 7:28 am
      Re: Stockfish 1.7 Frank Quisinsky Thu Apr 08, 2010 10:52 am
      Re: Stockfish 1.7 Uri Blass Thu Apr 08, 2010 5:42 pm
      Re: Stockfish 1.7 Horacio Montenegro Thu Apr 08, 2010 6:04 pm
            Re: Stockfish 1.7 Aaron Becker Thu Apr 08, 2010 7:57 pm
                  Re: Stockfish 1.7 Dann Corbit Thu Apr 08, 2010 9:22 pm
                        Re: Stockfish 1.7 Aaron Becker Thu Apr 08, 2010 9:56 pm
                              Re: Stockfish 1.7 Daniel Shawul Fri Apr 09, 2010 1:03 am
                        Re: Stockfish 1.7 Eelco de Groot Fri Apr 09, 2010 12:17 am
                              Re: Stockfish 1.7 Dann Corbit Fri Apr 09, 2010 12:38 am
      Re: Stockfish 1.7 James Constance Thu Apr 08, 2010 7:33 pm
            Re: Stockfish 1.7 BrandonSi Thu Apr 08, 2010 8:16 pm
                  Re: Stockfish 1.7 James Constance Fri Apr 09, 2010 1:42 pm
                        Re: Stockfish 1.7 Eelco de Groot Fri Apr 09, 2010 2:00 pm
                              Re: Stockfish 1.7 James Constance Fri Apr 09, 2010 6:00 pm
                                    Re: Stockfish 1.7 Marco Costalba Fri Apr 09, 2010 6:03 pm
                                          Re: Stockfish 1.7 James Constance Fri Apr 09, 2010 6:32 pm
                                                Re: Stockfish 1.7 Marco Costalba Fri Apr 09, 2010 6:39 pm
                                                      Re: Stockfish 1.7 James Constance Fri Apr 09, 2010 7:31 pm
      Re: Stockfish 1.7 john dalhem Thu Apr 08, 2010 7:49 pm
            Re: Stockfish 1.7 Louis Zulli Thu Apr 08, 2010 8:31 pm
                  Re: Stockfish 1.7 john dalhem Thu Apr 08, 2010 8:34 pm
                  Re: Stockfish 1.7 Tord Romstad Thu Apr 08, 2010 8:34 pm
                  Re: Stockfish 1.7 Peter C Thu Apr 08, 2010 8:37 pm
                        Re: Stockfish 1.7 Marco Costalba Thu Apr 08, 2010 9:05 pm
                              Re: Stockfish 1.7 Ted Summers Thu Apr 08, 2010 9:15 pm
                              Re: Stockfish 1.7 Christian Goralski Thu Apr 08, 2010 9:24 pm
                              Re: Stockfish 1.7 Benigno Hdez Bacallado Thu Apr 08, 2010 9:27 pm
                              Re: Stockfish 1.7 Werner Schüle Thu Apr 08, 2010 9:31 pm
                              Re: Stockfish 1.7 Louis Zulli Thu Apr 08, 2010 10:53 pm
                              Re: Stockfish 1.7 Miguel A. Ballicora Thu Apr 08, 2010 10:57 pm
                                    Re: Stockfish 1.7 Eelco de Groot Thu Apr 08, 2010 11:36 pm
                                    Re: Stockfish 1.7 Marco Costalba Fri Apr 09, 2010 5:36 am
                                          Re: Stockfish 1.7 Louis Zulli Fri Apr 09, 2010 6:32 am
                                          Re: Stockfish 1.7 Bigler Fri Apr 09, 2010 9:58 am
                                    Re: Stockfish 1.7 Tord Romstad Fri Apr 09, 2010 5:44 am
                              Re: Stockfish 1.7 Peter C Thu Apr 08, 2010 10:59 pm
                              Re: Stockfish 1.7 BrandonSi Fri Apr 09, 2010 12:26 am
                              Re: Stockfish 1.7 Paulo Soares Fri Apr 09, 2010 12:53 am
                              Re: Stockfish 1.7 Bigler Fri Apr 09, 2010 9:53 am
                              Re: Stockfish 1.7 Joerg Oster Fri Apr 09, 2010 6:39 pm
                                    Re: Stockfish 1.7 Marco Costalba Fri Apr 09, 2010 6:42 pm
                                          Re: Stockfish 1.7 Russell Murray Sat Apr 10, 2010 1:27 am
      Re: Stockfish 1.7 Benigno Hdez Bacallado Thu Apr 08, 2010 8:09 pm
            Re: Stockfish 1.7 Tord Romstad Thu Apr 08, 2010 8:14 pm
            Re: Stockfish 1.7 Louis Zulli Thu Apr 08, 2010 8:15 pm
            Re: Stockfish 1.7 Louis Zulli Thu Apr 08, 2010 8:21 pm
      Re: Stockfish 1.7 bigo Fri Apr 09, 2010 12:25 am
            Re: Stockfish 1.7 Uri Blass Fri Apr 09, 2010 12:57 am
      Re: Stockfish 1.7 Paulo Soares Fri Apr 09, 2010 12:28 am
      Re: Stockfish 1.7 john dalhem Fri Apr 09, 2010 1:24 am
            Re: Stockfish 1.7 john dalhem Fri Apr 09, 2010 4:03 am
                  Re: Stockfish 1.7 Marc MP Fri Apr 09, 2010 4:13 am
                  Re: Stockfish 1.7 Louis Zulli Fri Apr 09, 2010 6:13 am
      Re: Stockfish 1.7 Gary Fri Apr 09, 2010 5:40 am
            Re: Stockfish 1.7 Marco Costalba Fri Apr 09, 2010 6:01 am
                  Re: Stockfish 1.7 Gary Fri Apr 09, 2010 6:10 am
                        Re: Stockfish 1.7 Gary Fri Apr 09, 2010 6:48 am
                              Re: Stockfish 1.7 Josh Manion Fri Apr 09, 2010 7:08 am
                              Re: Stockfish 1.7 Gary Fri Apr 09, 2010 7:12 am
      Re: Stockfish 1.7 Alex Lobanov Fri Apr 09, 2010 7:23 am
            Re: Stockfish 1.7 Swaminathan Fri Apr 09, 2010 7:36 am
                  Re: Stockfish 1.7 Jeremy Bernstein Fri Apr 09, 2010 7:46 am
                        Re: Stockfish 1.7 sitwala mungunda Fri Apr 09, 2010 9:07 am
                              Re: Stockfish 1.7 Jeremy Bernstein Fri Apr 09, 2010 9:16 am
                                    Re: Stockfish 1.7 sitwala mungunda Fri Apr 09, 2010 9:43 am
                                          Re: Stockfish 1.7 Jeremy Bernstein Fri Apr 09, 2010 9:47 am
                                          Re: Stockfish 1.7 Dr.Wael Deeb Fri Apr 09, 2010 10:01 am
                                                Re: Stockfish 1.7 sitwala mungunda Fri Apr 09, 2010 12:12 pm
                                                      Re: Stockfish 1.7 BrandonSi Fri Apr 09, 2010 1:01 pm
                                                            Re: Stockfish 1.7 sitwala mungunda Fri Apr 09, 2010 1:24 pm
                                                      Re: Stockfish 1.7 Uri Blass Fri Apr 09, 2010 1:52 pm
                                                            Re: Stockfish 1.7 Milos Stanisavljevic Fri Apr 09, 2010 1:56 pm
                                                            Re: Stockfish 1.7 Swaminathan Fri Apr 09, 2010 3:33 pm
                                    Re: Stockfish 1.7 Uri Blass Fri Apr 09, 2010 10:26 am
                                          Re: Stockfish 1.7 Jeremy Bernstein Fri Apr 09, 2010 10:42 am
      Re: Stockfish 1.7 Osipov Jury Fri Apr 09, 2010 2:03 pm
            Re: Stockfish 1.7 Milos Stanisavljevic Fri Apr 09, 2010 2:45 pm
                  Re: Stockfish 1.7 Osipov Jury Fri Apr 09, 2010 3:01 pm
                        Re: Stockfish 1.7 Milos Stanisavljevic Fri Apr 09, 2010 3:29 pm
                              Re: Stockfish 1.7 Osipov Jury Fri Apr 09, 2010 4:46 pm
      Re: Stockfish 1.7 Ingo Bauer Fri Apr 09, 2010 7:32 pm
            Re: Stockfish 1.7 Marco Costalba Fri Apr 09, 2010 7:44 pm
                  Re: Stockfish 1.7 Dr.Wael Deeb Fri Apr 09, 2010 7:52 pm
                  Re: Stockfish 1.7 Ingo Bauer Fri Apr 09, 2010 7:52 pm
                  Re: Stockfish 1.7 Zagalo Martini Fri Apr 09, 2010 8:46 pm
                  Re: Stockfish 1.7 Gian-Carlo Pascutto Sat Apr 10, 2010 10:52 am
            Re: Stockfish 1.7 Tord Romstad Fri Apr 09, 2010 8:15 pm
                  Re: Stockfish 1.7 Uri Blass Fri Apr 09, 2010 8:25 pm
                  Re: Stockfish 1.7 Ingo Bauer Fri Apr 09, 2010 8:36 pm
            Re: Stockfish 1.7 Joona Kiiski Sat Apr 10, 2010 6:31 am
                  Re: Stockfish 1.7 Ingo Bauer Sat Apr 10, 2010 7:50 am
                  Re: Stockfish 1.7 Milos Stanisavljevic Sat Apr 10, 2010 11:00 am
      Re: Stockfish 1.7 Michael Golub Sat Apr 10, 2010 12:11 pm
            Re: Stockfish 1.7 Tord Romstad Sat Apr 10, 2010 12:19 pm
                  Re: Stockfish 1.7 Michael Golub Sat Apr 10, 2010 3:16 pm
                        Re: Stockfish 1.7 Milos Stanisavljevic Sat Apr 10, 2010 3:34 pm
                        Re: Stockfish 1.7 Joona Kiiski Sat Apr 10, 2010 4:36 pm
Post new topic    TalkChess.com Forum Index -> Computer Chess Club: General Topics

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum




Powered by phpBB © 2001, 2005 phpBB Group
Enhanced with Moby Threads