Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Rybka - How much Fruit is inside ?

Author: Vasik Rajlich

Date: 00:34:15 12/12/05

Go up one level in this thread


On December 11, 2005 at 20:59:08, Daniel Mehrmannn wrote:

Hello,

sorry for top-posting.

The Rybka source code is original and pre-dates all of the Fruit releases.

Re. your demontration, the engine scores, pvs and and even first move are all
totally different - and that's on a position which you selected. I don't get it.

Vas

>Hello,
>
>I was long thinking if i really should post that and some people giving me
>warnings
>to not do that, but i think i must do that to feel better.
>
>First, don't understand me wrong, i _dont't_ say Rybka is a Fruit clone, but i'm
>asking how much Fruit is inside this engine ?
>
>Well, i tested a lot of positions and games and my result is that Rybka using at
>least the PST-Tables and mobility of Fruit. Of course the author has added a lot
>of additional own stuff, but basicly he's building his engine on fruit functions
>or ideas.
>I have no problems if someone using other ideas of programms. But i have a
>problem if it so clear, in this case so much, and such engines go commercial.
>
>Well, it's on you if you accept such commercial engines in the future or not.
>Again, i don't say Rybka is a clone.
>
>Well, you now wanna see some proves, right? I will give you only one position
>where it is more clear for you. And yes there will be come a lot of people and
>posting Rybka plays another style and look here and there.
>
>Thats right so far, but i build a fruit that plays like Rybka and the output is
>like rybka to show you how easy it is. (for programmers go to the bottom and
>you'll see the patchfile vs Fruit 2.1 ;))
>
>Image Fruit 2.1 with Rybka style vs Rybka:
>http://www.homer-chess.com/images/fruit_r.JPG
>
>Download Fruit 2.1 with Rybka style:
>http://www.homer-chess.com/downloads.php?cat_id=8
>
>This modified Fruit 2.1 is no new Toga or other variants. It should be only show
>you how easy it is. So i don't changed the name and i don't wanna see this
>engine in any rating lists or matches!
>
>Position:
>
>[D]r3k2r/pppppppp/8/8/8/8/PPPPPPPP/R3K2R w - -
>
>Rybka:
>CPU0: AuthenticAMD x86 Family 6 Model 10 Stepping 0 2191 MHz
>GUI: Tablebases with 0 pieces found! [Cache: 64 MB + internal 0.00 MB]
>Engine: Rybka 1.0 Beta 32-bit (128 MB)
>by Vasik Rajlich
>  3.01  0:00  +0.10  1.f3 (747) 44
>  4.01  0:00  +0.03  1.f3 (1.024) 61
>  5.01  0:00  +0.05  1.f3 f5 (2.674) 161
>  6.01  0:00  +0.03  1.f3 f5 2.Kf2 (4.068) 126
>  6.01  0:00  +0.04  1.d4 f5 2.Kd2 (6.458) 200
>  7.01  0:00  +0.07  1.d4 f5 2.Kd2 Kf7 (11.620) 185
>  8.01  0:00  +0.08  1.d4 f6 2.Kd2 Kf7 3.h4 (23.282) 214
>  8.01  0:00  +0.10  1.f4 f6 2.a4 Kf7 3.Kf2 (47.404) 147
>  9.01  0:00  +0.03  1.f4 a5 2.Kf2 d5 3.a4 Ra6 (86.735) 145
>  9.01  0:00  +0.07  1.d4 f6 2.h4 Kf7 3.Kd2 Ke6 (112.356) 156
>  9.01  0:01  +0.11  1.a4 e6 2.Ra3 Ke7 3.Rb3 b6 (199.745) 181
> 10.01  0:02  +0.11  1.a4 h5 2.e4 Rh6 3.Ke2 e5 4.Ra3 (311.617) 150
> 11.01  0:04  +0.01  1.a4 h5 2.e4 Rh6 3.Ke2 Rb6 4.Rhb1 Rc6 (531.968) 130
> 11.02  0:05  +0.06  1.d4 h5 2.Kd2 f5 3.h4 Rh6 4.Rh3 Rd6 (722.902) 124
> 12.01  0:10   0.00  1.d4 h5 2.Kd2 Rh6 3.h4 Rf6 4.Raf1 Ra6 5.Ra1 (1.177.495) 117
> 12.03  0:14  +0.03  1.f4 h5 2.Kf2 d5 3.a4 Rh6 4.Ra3 Rf6 5.Kg3 (1.629.335) 116
> 12.07  0:19  +0.11  1.h4 h5 2.Rh3 Rh6 3.Rg3 Kf8 4.Rg5 Kg8 5.d4 (2.080.151) 115
> 13.01  0:22  +0.11  1.h4 h5 2.Rh3 Rh6 3.Rg3 Kf8 4.Rg5 Kg8 5.d4 Rb6 (2.430.131)
>115
>best move: h2-h4 time: 0:36.609 min  n/s: 107.198  nodes: 3.751.936
>
>Fruit:
>Engine: Fruit 2.1 (128 MB)
>by Fabien Letouzey
>  1/01  0:00   0.00  1.Rb1 (2)
>  1/01  0:00  +0.01  1.Rc1 (3)
>  1/01  0:00  +0.02  1.Rd1 (4)
>  1/01  0:00  +0.03  1.a3 (9)
>  1/01  0:00  +0.06  1.a4 (10)
>  2/02  0:00   0.00  1.a4 a5 (53)
>  3/04  0:00  +0.13  1.a4 a5 2.Ra3 (170)
>  4/05  0:00   0.00  1.a4 a5 2.Ra3 Ra6 (332)
>  5/07  0:00  +0.06  1.a4 e5 2.e4 Ke7 3.Ke2 (2.656)
>  6/11  0:00   0.00  1.a4 e5 2.e4 Ke7 3.Ke2 a5 (3.661)
>  7/11  0:00  +0.06  1.a4 e5 2.e4 Ke7 3.Ke2 a5 4.Ra3 (15.479)
>  8/14  0:00   0.00  1.a4 e5 2.e4 Ke7 3.Ke2 a5 4.Ra3 Ra6 (23.086)
>  9/15  0:00  +0.09  1.a4 e5 2.e4 Ke7 3.Ke2 a5 4.Ra3 Ra6 5.Rd3 (117.003)
> 10/17  0:00  +0.05  1.a4 e5 2.e4 Ke7 3.Ke2 a5 4.Ra3 h5 5.Rc3 c6 (195.287)
> 11/20  0:02  +0.12  1.a4 e5 2.e4 Ke7 3.Ra3 h5 4.Rb3 b6 5.Rc3 c6 6.Ke2 (933.172)
>455
> 12/24  0:03  +0.07  1.a4 d5 2.d4 Kd7 3.Ra3 a5 4.Rb3 b6 5.Kd2 h5 6.h4 e6
>(1.638.551) 456
> 12/24  0:06  +0.08  1.h4 d5 2.Rh3 Kd7 3.d4 a5 4.Rf3 f6 5.Kd2 e6 6.a4 h5
>(2.957.473) 450
> 13/24  0:11  +0.11  1.h4 h5 2.Rh3 Rh6 3.Rc3 Rc6 4.Rxc6 bxc6 5.b4 Rb8 6.Rb1 a5
>7.c3 Rb5 (5.169.820) 455
> 14/27  0:18  +0.11  1.h4 h5 2.Rh3 Rh6 3.Rg3 Kf8 4.Rg5 Kg8 5.d4 Rb6 6.b3 Rd6
>7.Rd1 Rc6 (8.658.221) 460
>best move: h2-h4 time: 0:36.469 min  n/s: 446.773  CPU 49.4%   n/s(1CPU):
>904.398  nodes: 15.730.000
>
>
>Fruit 2.1 patch:
>
>diff -Pur src_org/Makefile src/Makefile
>--- src_org/Makefile	2005-12-12 00:21:14.105891100 +0100
>+++ src/Makefile	2005-12-12 02:04:01.806990300 +0100
>@@ -30,7 +30,7 @@
>
> CXXFLAGS += -O3 -fstrict-aliasing
> CXXFLAGS += -fomit-frame-pointer
>-CXXFLAGS += -march=i686 # SELECT ME
>+#CXXFLAGS += -march=i686 # SELECT ME
>
> # strip
>
>diff -Pur src_org/eval.cpp src/eval.cpp
>--- src_org/eval.cpp	2005-06-17 09:41:34.000000000 +0200
>+++ src/eval.cpp	2005-12-12 02:20:27.794041100 +0100
>@@ -31,7 +31,7 @@
>
> static const int KnightUnit = 4;
> static const int BishopUnit = 6;
>-static const int RookUnit = 7;
>+static const int RookUnit = 6;
> static const int QueenUnit = 13;
>
> static const int MobMove = 1;
>@@ -674,11 +674,11 @@
>                if (board->pawn_file[me][rook_file] == 0) { // no friendly pawn
>
>                   op[me] += RookSemiOpenFileOpening;
>-                  eg[me] += RookSemiOpenFileEndgame;
>+                  eg[me] += RookSemiOpenFileEndgame + 5;
>
>                   if (board->pawn_file[opp][rook_file] == 0) { // no enemy pawn
>                      op[me] += RookOpenFileOpening - RookSemiOpenFileOpening;
>-                     eg[me] += RookOpenFileEndgame - RookSemiOpenFileEndgame;
>+                     eg[me] += RookOpenFileEndgame - RookSemiOpenFileEndgame +
>10;
>                   }
>
>                   if ((mat_info->cflags[opp] & MatKingFlag) != 0) {
>@@ -702,7 +702,7 @@
>                if ((pawn_info->flags[opp] & BackRankFlag) != 0 // opponent pawn
>on 7th rank
>                 || PAWN_RANK(KING_POS(board,opp),me) == Rank8) {
>                   op[me] += Rook7thOpening;
>-                  eg[me] += Rook7thEndgame;
>+                  eg[me] += Rook7thEndgame + 30;
>                }
>             }
>
>@@ -823,6 +823,7 @@
>
>             ASSERT(piece_nb>=0&&piece_nb<16);
>             op[colour] -= (attack_tot * KingAttackOpening *
>KingAttackWeight[piece_nb]) / 256;
>+            eg[colour] -= ((attack_tot * KingAttackOpening *
>KingAttackWeight[piece_nb]) / 256) /2;
>          }
>       }
>    }
>Files src_org/fruit.exe and src/fruit.exe differ
>diff -Pur src_org/pst.cpp src/pst.cpp
>--- src_org/pst.cpp	2005-06-17 09:41:34.000000000 +0200
>+++ src/pst.cpp	2005-12-12 02:18:01.859846700 +0100
>@@ -11,6 +11,7 @@
> // macros
>
> #define P(piece_12,square_64,stage) (Pst[(piece_12)][(square_64)][(stage)])
>+#define SQUARE_FILE(square)         ((square)&0xF)
>
> // constants
>
>@@ -129,13 +130,16 @@
>    // file
>
>    for (sq = 0; sq < 64; sq++) {
>-      P(piece,sq,Opening) += PawnFile[square_file(sq)] * PawnFileOpening;
>+      if (SQUARE_FILE(sq) != 0x7 && SQUARE_FILE(sq) != 0x8) {
>+        P(piece,sq,Opening) += (PawnFile[square_file(sq)] * PawnFileOpening) +
>2;
>+      } else
>+      	P(piece,sq,Opening) += PawnFile[square_file(sq)] * PawnFileOpening;
>    }
>
>    // centre control
>
>-   P(piece,D3,Opening) += 10;
>-   P(piece,E3,Opening) += 10;
>+   P(piece,D3,Opening) += 15;
>+   P(piece,E3,Opening) += 15;
>
>    P(piece,D4,Opening) += 20;
>    P(piece,E4,Opening) += 20;
>@@ -221,6 +225,21 @@
>       P(piece,sq,Endgame) = (P(piece,sq,Endgame) * PieceActivityWeight) / 256;
>    }
>
>+   P(piece,G2,Opening) += 10;
>+   P(piece,B2,Opening) += 10;
>+   P(piece,G7,Opening) += 10;
>+   P(piece,B7,Opening) += 10;
>+
>+   P(piece,C4,Opening) += 2;
>+   P(piece,C5,Opening) += 2;
>+   P(piece,D6,Opening) += 2;
>+   P(piece,E6,Opening) += 2;
>+   P(piece,F4,Opening) += 2;
>+   P(piece,E3,Opening) += 2;
>+   P(piece,F3,Opening) += 2;
>+
>+
>+
>    // rooks
>
>    piece = WhiteRook12;
>diff -Pur src_org/search.cpp src/search.cpp
>--- src_org/search.cpp	2005-06-17 09:41:34.000000000 +0200
>+++ src/search.cpp	2005-12-12 01:35:08.848141800 +0100
>@@ -215,7 +215,7 @@
>       search_update_current();
>
>       if (DispDepthEnd) {
>-         send("info depth %d seldepth %d time %.0f nodes " S64_FORMAT " nps
>%.0f",depth,SearchCurrent->max_depth,SearchCurrent->time*1000.0,SearchCurrent->node_nb,SearchCurrent->speed);
>+         send("info depth %d time %.0f nodes " S64_FORMAT " nps
>%.0f",depth,SearchCurrent->time*1000.0,SearchCurrent->node_nb,SearchCurrent->speed);
>       }
>
>       // update search info
>@@ -309,11 +309,11 @@
>
>          if (false) {
>          } else if (flags == SearchExact) {
>-            send("info depth %d seldepth %d score cp %d time %.0f nodes "
>S64_FORMAT " pv %s",depth,max_depth,value,time*1000.0,node_nb,pv_string);
>+            send("info depth %d score cp %d time %.0f nodes " S64_FORMAT " pv
>%s",depth,value > 0 ? value - 20 : value + 20,time*1000.0,node_nb,pv_string);
>          } else if (flags == SearchLower) {
>-            send("info depth %d seldepth %d score cp %d lowerbound time %.0f
>nodes " S64_FORMAT " pv
>%s",depth,max_depth,value,time*1000.0,node_nb,pv_string);
>+            send("info depth %d score cp %d lowerbound time %.0f nodes "
>S64_FORMAT " pv %s",depth,value > 0 ? value - 20 : value +
>20,time*1000.0,node_nb,pv_string);
>          } else if (flags == SearchUpper) {
>-            send("info depth %d seldepth %d score cp %d upperbound time %.0f
>nodes " S64_FORMAT " pv
>%s",depth,max_depth,value,time*1000.0,node_nb,pv_string);
>+            send("info depth %d score cp %d upperbound time %.0f nodes "
>S64_FORMAT " pv %s",depth,value > 0 ? value - 20 : value +
>20,time*1000.0,node_nb,pv_string);
>          }
>
>       } else {
>@@ -322,11 +322,11 @@
>
>          if (false) {
>          } else if (flags == SearchExact) {
>-            send("info depth %d seldepth %d score mate %d time %.0f nodes "
>S64_FORMAT " pv %s",depth,max_depth,mate,time*1000.0,node_nb,pv_string);
>+            send("info depth %d score mate %d time %.0f nodes " S64_FORMAT " pv
>%s",depth,mate,time*1000.0,node_nb,pv_string);
>          } else if (flags == SearchLower) {
>-            send("info depth %d seldepth %d score mate %d lowerbound time %.0f
>nodes " S64_FORMAT " pv %s",depth,max_depth,mate,time*1000.0,node_nb,pv_string);
>+            send("info depth %d score mate %d lowerbound time %.0f nodes "
>S64_FORMAT " pv %s",depth,mate,time*1000.0,node_nb,pv_string);
>          } else if (flags == SearchUpper) {
>-            send("info depth %d seldepth %d score mate %d upperbound time %.0f
>nodes " S64_FORMAT " pv %s",depth,max_depth,mate,time*1000.0,node_nb,pv_string);
>+            send("info depth %d score mate %d upperbound time %.0f nodes "
>S64_FORMAT " pv %s",depth,mate,time*1000.0,node_nb,pv_string);
>          }
>       }
>    }
>diff -Pur src_org/search_full.cpp src/search_full.cpp
>--- src_org/search_full.cpp	2005-06-17 09:41:34.000000000 +0200
>+++ src/search_full.cpp	2005-12-12 02:10:10.508310300 +0100
>@@ -578,7 +578,7 @@
>
>       // futility pruning
>
>-      if (UseFutility && depth == 1 && node_type != NodePV) {
>+      if (depth < 4 && node_type != NodePV) {
>
>          if (!in_check && new_depth == 0 && !move_is_tactical(move,board) &&
>!move_is_dangerous(move,board)) {
>
>@@ -587,7 +587,12 @@
>             // optimistic evaluation
>
>             if (opt_value == +ValueInf) {
>-               opt_value = eval(board) + FutilityMargin;
>+			   if (depth == 1)
>+               	 opt_value = eval(board) + FutilityMargin;
>+               else if (depth == 2)
>+                 opt_value = eval(board) + FutilityMargin * 6;
>+               else
>+                 opt_value = eval(board) + FutilityMargin * 12;
>                ASSERT(opt_value<+ValueInf);
>             }
>
>@@ -602,7 +607,10 @@
>                   PV_CLEAR(pv);
>                }
>
>-               continue;
>+			   if (depth < 3)
>+               	continue;
>+               else
>+                depth--;
>             }
>          }
>       }
>@@ -807,7 +815,7 @@
>
>    // init
>
>-   SearchCurrent->node_nb++;
>+   //SearchCurrent->node_nb++;
>    SearchInfo->check_nb--;
>    PV_CLEAR(pv);
>
>@@ -940,7 +948,7 @@
>
>       if (value > best_value) {
>          best_value = value;
>-         pv_cat(pv,new_pv,move);
>+         //pv_cat(pv,new_pv,move);
>          if (value > alpha) {
>             alpha = value;
>             best_move = move;
>diff -Pur src_org/trans.cpp src/trans.cpp
>--- src_org/trans.cpp	2005-06-17 09:41:34.000000000 +0200
>+++ src/trans.cpp	2005-12-12 02:01:46.014217800 +0100
>@@ -398,7 +398,7 @@
>    // hit = double(trans->read_hit) / double(trans->read_nb);
>    // collision = double(trans->write_collision) / double(trans->write_nb);
>
>-   send("info hashfull %.0f",full*1000.0);
>+   //send("info hashfull %.0f",full*1000.0);
> }
>
> // trans_entry()



This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.