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.01 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.