From the mirror universe: Barracuda 2.3

Discussion of anything and everything relating to chess playing software and machines.

Moderators: hgm, Rebel, chrisw

User avatar
Eelco de Groot
Posts: 4561
Joined: Sun Mar 12, 2006 2:40 am
Full name:   

From the mirror universe: Barracuda 2.3

Post by Eelco de Groot »

This one is bad, real bad. I was even thinking of making an avatar for it from the picture of Ed's bulldog, but actually I think that is a very sweet dog. And she is called Marie, that really would't be a good name for an engine from the other side of the looking glass.

I can't make a very fast compile of it, it is only 32 bit but that should be enough for a fun engine. The changes are also small so maybe they could be merged in some way if they would turn out not to be bad, but I already said the thing is bad...

I only made it because I wanted to try out some new idea in nullmove and test if it could be built into the new Stockfish. But by itself I don't think the first idea, that was just more or less dreamt up for the occasion, will ever be worth incorporating into other programs. The idea was that if the nullmove follows a threat, the threat can be carried out without resistance because the opponent passed. Then you can not reduce the node, it is too tactical. But maybe if there would be only one threatmove and you then exclude that move from the possible 'free' moves, and when the other moves do not refute the nullmove, it would still be okay to reduce. The drawback is that you need an exclusion search in addition to the normal nullmove search, and you know there is at least one threat in the position. The first implemention I had was wrong, the exclusion search was never triggered and the search was identical to Stockfish 2.3, but much slower because the compile is not as fast as Jim's 8-) After a few corrections it was at least different, but not really as fast as Stockfish, not counting the compilation. I wanted it to be a bit like Ferrarifish, but then with a different search, so the futility pruning is a bit tightened, maybe with a little more risk. This change actually has a more visible impact than my change in nullmove, which is actually also an attempt at more positional play, especially in the verification search or a slight help with Zugzwang situations (I use a PV search there, so that is partially not using nullmove anymore, and the search tries to improve previous results of the verification in that node, so very extravagant for nodes that are likely to be pruned. But maybe in a few cases it will pay off, that's what I'm counting on.)

As a final change I also copied most of the material imbalance table from Rainbow Serpent, but I think that is more or less pink noise :lol: or something like that. A bit like the changed uniforms Spock and Kirk were wearing in the wrong universe.

Image

That's it. Only three changes to Stockfish from the other universe. This is the change in nullmove.

Stockfish's nullmove:

Code: Select all

    // Step 8. Null move search with verification search (is omitted in PV nodes)
    if (   !PvNode
        && !ss->skipNullMove
        &&  depth > ONE_PLY
        && !inCheck
        &&  refinedValue >= beta
        &&  abs&#40;beta&#41; < VALUE_MATE_IN_MAX_PLY
        &&  pos.non_pawn_material&#40;pos.side_to_move&#40;)))
    &#123;
        ss->currentMove = MOVE_NULL;

        // Null move dynamic reduction based on depth
        Depth R = 3 * ONE_PLY + depth / 4;

        // Null move dynamic reduction based on value
        if &#40;refinedValue - PawnValueMg > beta&#41;
            R += ONE_PLY;

        pos.do_null_move<true>&#40;st&#41;;
        &#40;ss+1&#41;->skipNullMove = true;
        nullValue = depth-R < ONE_PLY ? -qsearch<NonPV>&#40;pos, ss+1, -beta, -alpha, DEPTH_ZERO&#41;
                                      &#58; - search<NonPV>&#40;pos, ss+1, -beta, -alpha, depth-R&#41;;
        &#40;ss+1&#41;->skipNullMove = false;
        pos.do_null_move<false>&#40;st&#41;;

        if &#40;nullValue >= beta&#41;
        &#123;
            // Do not return unproven mate scores
            if &#40;nullValue >= VALUE_MATE_IN_MAX_PLY&#41;
                nullValue = beta;

            if &#40;depth < 6 * ONE_PLY&#41;
                return nullValue;

            // Do verification search at high depths
            ss->skipNullMove = true;
            Value v = search<NonPV>&#40;pos, ss, alpha, beta, depth-R&#41;;
            ss->skipNullMove = false;

            if &#40;v >= beta&#41;
                return nullValue;
        &#125;
        else
        &#123;
            // The null move failed low, which means that we may be faced with
            // some kind of threat. If the previous move was reduced, check if
            // the move that refuted the null move was somehow connected to the
            // move which was reduced. If a connection is found, return a fail
            // low score &#40;which will cause the reduced move to fail high in the
            // parent node, which will trigger a re-search with full depth&#41;.
            threatMove = &#40;ss+1&#41;->currentMove;

            if (   depth < ThreatDepth
                && &#40;ss-1&#41;->reduction
                && threatMove != MOVE_NONE
                && connected_moves&#40;pos, &#40;ss-1&#41;->currentMove, threatMove&#41;)
                return beta - 1;
        &#125;
    &#125;
In Barracuda:

Code: Select all

    // Step 8. Null move search with verification search &#40;is omitted in PV nodes&#41;
    if (   !PvNode
        && !ss->skipNullMove
        &&  depth > ONE_PLY
        && !inCheck
        &&  refinedValue >= beta
        &&  abs&#40;beta&#41; < VALUE_MATE_IN_MAX_PLY
        &&  pos.non_pawn_material&#40;pos.side_to_move&#40;)))
    &#123;
        ss->currentMove = MOVE_NULL;

        // Null move dynamic reduction based on depth
        Depth R = 3 * ONE_PLY + depth / 4;

        // Null move dynamic reduction based on value
        if &#40;refinedValue - PawnValueMg > beta&#41;
            R += ONE_PLY;

        pos.do_null_move<true>&#40;st&#41;;
        &#40;ss+1&#41;->skipNullMove = true;
        nullValue = depth-R < ONE_PLY ? -qsearch<NonPV>&#40;pos, ss+1, -beta, -alpha, DEPTH_ZERO&#41;
                                      &#58; - search<NonPV>&#40;pos, ss+1, -beta, -alpha, depth-R&#41;;        

        if &#40;nullValue < beta&#41;
        &#123;// 'Nullexclusion Search'
             threatMove = &#40;ss&#41;->currentMove;
             CheckInfo ci&#40;pos&#41;;
              if (    threatMove != MOVE_NONE
                  &&  pos.pl_move_is_legal&#40;threatMove, ci.pinned&#41;
                  &&  depth-R >= SingularExtensionDepth&#91;false&#93;
                  && !excludedMove // Recursive singular search is not allowed
                  &&  connected_moves&#40;pos, &#40;ss-2&#41;->currentMove, threatMove&#41;
                  &&  tte
                  &&  ttMove != MOVE_NONE
                  &&  can_return_tt&#40;tte, depth-R-ONE_PLY, ttValue, beta&#41;)
              &#123;
                   nullExclusionsearch = true;
                   ss->excludedMove = threatMove;
                   nullValue = -search<NonPV>&#40;pos, ss+1, -beta, -alpha, depth-R&#41;;
                 ss->excludedMove = MOVE_NONE;
               &#125;
          &#125; // Nullexclusion Search

          &#40;ss+1&#41;->skipNullMove = false;
          pos.do_null_move<false>&#40;st&#41;;

          if &#40;nullValue >= beta&#41;
          &#123;
            // Do not return unproven mate scores
            if &#40;nullValue >= VALUE_MATE_IN_MAX_PLY&#41;
                nullValue = beta;

            if (    depth < 6 * ONE_PLY
                && !nullExclusionsearch&#41;
                return nullValue;

            // Do verification search at high depths
            // &#91;In case of a 'Nullexclusion search'
            // we try to extend the hashresult&#93;
            
            CheckInfo ci&#40;pos&#41;;
            if (   &#40;nullExclusionsearch || &#40;tte && ttMove != MOVE_NONE && can_return_tt&#40;tte, depth-R-ONE_PLY, ttValue, beta&#41;))
                &&  pos.pl_move_is_legal&#40;ttMove, ci.pinned&#41;)
            &#123;
                 pos.do_move&#40;ttMove, st, ci, pos.move_gives_check&#40;ttMove, ci&#41;);
                 verificationValue = - search<PV>&#40;pos, ss+1, -&#40;ttValue&#41;, -&#40;ttValue - 1&#41;, depth-R&#41;;
                 if &#40;verificationValue < ttValue&#41;
                     verificationValue = - search<PV>&#40;pos, ss+1, -beta, -alpha, depth-R&#41;;
                  pos.undo_move&#40;ttMove&#41;;
                  if &#40;verificationValue >= beta&#41;
                      TT.store&#40;posKey, value_to_tt&#40;verificationValue, ss->ply&#41;, BOUND_LOWER, depth-R, ttMove, tte->static_value&#40;), tte->static_value_margin&#40;));
             &#125;
             if &#40;verificationValue < beta&#41;
             &#123;
                  ss->skipNullMove = true;
                  verificationValue = search<NonPV>&#40;pos, ss, alpha, beta, depth-R&#41;;
                  ss->skipNullMove = false;
                  if &#40;verificationValue >= beta&#41;
                      TT.store&#40;posKey, value_to_tt&#40;verificationValue, ss->ply&#41;, BOUND_LOWER, depth-R, &#40;ss&#41;->currentMove, ss->eval, ss->evalMargin&#41;;
              &#125;
              if &#40;verificationValue >= beta&#41;
                  return nullValue;
        &#125;
        else
        &#123;
            // The null move failed low, which means that we may be faced with
            // some kind of threat. If the previous move was reduced, check if
            // the move that refuted the null move was somehow connected to the
            // move which was reduced. If a connection is found, return a fail
            // low score &#40;which will cause the reduced move to fail high in the
            // parent node, which will trigger a re-search with full depth&#41;.

            if (   depth < ThreatDepth
                && &#40;ss-1&#41;->reduction
                && threatMove != MOVE_NONE
                && connected_moves&#40;pos, &#40;ss-1&#41;->currentMove, threatMove&#41;)
                return beta - 1;
        &#125;
    &#125;
Eelco

A link to the source will follow shortly, but a post for it has not been created yet.
Debugging is twice as hard as writing the code in the first
place. Therefore, if you write the code as cleverly as possible, you
are, by definition, not smart enough to debug it.
-- Brian W. Kernighan
mcostalba
Posts: 2684
Joined: Sat Jun 14, 2008 9:17 pm

Re: From the mirror universe: Barracuda 2.3

Post by mcostalba »

Are you sure

Code: Select all

threatMove = &#40;ss&#41;->currentMove; 
is correct? Ot it should be

Code: Select all

threatMove = &#40;ss+1&#41;->currentMove; 
User avatar
Eelco de Groot
Posts: 4561
Joined: Sun Mar 12, 2006 2:40 am
Full name:   

Re: From the mirror universe: Barracuda 2.3

Post by Eelco de Groot »

Hi Marco, thanks, I think you must be right! My thought was that I am calling here after I have made a nullmove, not taken that move back, so the position has changed when I determine the threatmove. But search is still called with ss+1 in that case so I should not change the index for the search stack. Now I don't know if that is not what I tried the first time when output was still identical with Stockfish from Jim. Sorry, I will investigate through the looking glass. Later today. Thanks!

Eelco
Debugging is twice as hard as writing the code in the first
place. Therefore, if you write the code as cleverly as possible, you
are, by definition, not smart enough to debug it.
-- Brian W. Kernighan
peter
Posts: 3185
Joined: Sat Feb 16, 2008 7:38 am
Full name: Peter Martan

Re: From the mirror universe: Barracuda 2.3

Post by peter »

Go, Eelco, go!
:)
I don't understand anything of the details of code you are talking about, but nullmove and Stockfish seem to me the theme of the time.

If you could code in Nalimov's usage too, that could become one more great analysis- tool of its own, cause Stockfish being the best one in this respect anyhow in most endgame positions, these are, as for my pov, the two "weaknesses" remaining in some of them: nullmove and tablebase- usage.
There are Stockfishes using Gaviaota's, but Gaviota's are 5mob only.
Go, Eelco, go
Peter.
User avatar
Eelco de Groot
Posts: 4561
Joined: Sun Mar 12, 2006 2:40 am
Full name:   

Re: From the mirror universe: Barracuda 2.3

Post by Eelco de Groot »

Hi Peter,

I'm not sure I would find Mr. Nalimov to ask him for permission to use his sources. And probably I would fail miserably trying to understand any of that code. It also does not really appeal to me, incorporating tablebases, because I think the engine should be able to play endgames by itself. I could try adding some more endgame code in Stockfish but wouldn't know where to start :oops:

It took some time, apparently there is serious jetlag associated with travelling through the looking glass :) my biological clock was a bit derailed after that. There is now a 32 bit compile, slow MSVC 2005, see the Stockfish 2.3 thread for a link, I posted it on TBDD but I don't think many people will be interested in that, most power users have a 64-bit operating system these days... But thanks for the encouragement! I was thinking of switching the eval of Stockfish with that of Rainbow Serpent but decided to just leave that as is. I am sure some new version of Rainbow Serpent will come along these lines that could use a different eval and there are already too many names that I used, so there will probably be no updated version of this Stockfish 'Barracuda'.

Eelco

Here a run on just some average position -not with knights though, I really should test them too because I changed the material imbalance table to give knights a larger weight but not yet tested- with the previous to last version, that does not include Marco's Chess960 fix and some very minor changes in the aspiration windows only triggered if the eval goes below the value of a draw.



[Event "?"]
[Site "?"]
[Date "2012.09.17"]
[Round "?"]
[White "?"]
[Black "?"]
[Result "*"]

1. e4 e6 2. d4 d5 3. Nd2 Nc6 4. Ngf3 Nf6 5. e5 Nd7 6. Nb3
a5 7. a4 Be7 8. c3 b6 9. Ng1 {?!? Houdini novelty} Ndxe5 {? This should lose I think, at least White gets a big advantage after this move, 9... f6 or 9... O-O Rainbow Serpent only finds later} 10. dxe5 Nxe5 11. Bb5+ Bd7 12. Nd4 O-O 13. Ngf3 f6 14. Nxe5 fxe5 15. Nc6 Bxc6
16. Bxc6 Rb8 *

[D]1r1q1rk1/2p1b1pp/1pB1p3/p2pp3/P7/2P5/1P3PPP/R1BQK2R w KQ -

Engine: Barracuda 2.3 Build 008 (Athlon 2009 MHz, single thread, 256 MB)
by Tord Romstad, Marco Costalba and Joona Kiiski

1/02 0:00 +1.94 17.O-O Qd6 (168) 168

2/03 0:00 +1.94 17.O-O Qd6 18.Bb5 (638) 39

3/04 0:00 +1.73 17.O-O Qd6 18.Bb5 c6 (1.266) 79

4/05 0:00 +1.90 17.O-O Qd6 18.Bb5 c6 19.Bd3 (1.658) 103

5/06 0:00 +1.51 17.O-O Qd6 18.Bb5 c6 19.Be2 e4 (2.776) 173

6/10 0:00 +1.98 17.O-O Qd6 18.Bb5 c6 19.Be2 e4
20.Be3 (3.996) 249

7/13 0:00 +1.78 17.O-O Bc5 18.Bb5 Qh4 19.Qe2 e4
20.Bd7 Rf6 21.Be3 Bxe3 22.fxe3 (20.023) 417

8/15 0:00 +1.95 17.O-O Bc5 18.Qg4 Qd6 19.Bb5 c6
20.Be2 e4 21.Bh6 Rf7 22.Be3 Bxe3
23.fxe3 (31.504) 398

9/17 0:00 +2.24 17.Qg4 Qd6 18.Bb5 c6 19.Be2 e4
20.Be3 Rf6 21.Qg3 Rf5 22.Bd4 (62.382) 442

10/21 0:00 +2.07 17.Qg4 Qd6 18.Bb5 Rf6 19.O-O e4
20.Be3 Rbf8 21.Qh3 R6f7 22.Kh1 e5
23.Qg4 c6 (109.295) 435

11/21 0:00 +2.20 17.Qg4 Qd6 18.Bb5 Rf6 19.O-O Rbf8
20.Be2 e4 21.Be3 e5 22.Qh3 Qe6
23.Bg4 (146.769) 446

12/21 0:00 +2.28 17.Qg4 Qd6 18.Bb5 Rf6 19.O-O Rbf8
20.Be2 e4 21.Be3 e5 22.Qh3 Qc6
23.Bg5 R6f7 24.Bb5 (199.315) 455

13/21 0:00 +2.21 17.Qg4 Qd6 18.Bb5 Rf6 19.O-O Rbf8
20.Be2 e4 21.Be3 Qc6 22.Bb5 Qd6
23.Qh3 Rg6 24.Be2 Rf7 25.Bg4 (249.592) 469

14/21 0:00 +2.17 17.Qg4 Rf6 18.O-O Rg6 19.Qh3 Bc5
20.Bb5 Qf6 21.Be3 Rf8 22.Kh1 Qf5
23.Qxf5 exf5 24.Rfe1 Bxe3 25.Rxe3 (369.400) 472

15/23 0:01 +2.07 17.Qg4 Rf6 18.O-O Rg6 19.Qe2 e4
20.Be3 Bc5 21.Qb5 Qd6 22.Be8 Rf6
23.Qd7 Qxd7 24.Bxd7 Rd8 25.Bb5 Kf7
26.Bd2 (819.731) 485

16/23 0:01 +2.07 17.Qg4 Rf6 18.O-O Rg6 19.Qe2 e4
20.Be3 Bc5 21.Qb5 Qd6 22.Be8 Rf6
23.Qd7 Qxd7 24.Bxd7 Rd8 25.Bb5 Kf7
26.Bd2 (888.244) 489

17/23 0:02 +2.07 17.Qg4 Rf6 18.O-O Rg6 19.Qe2 e4
20.Be3 Bc5 21.Qb5 Qd6 22.Be8 Rf6
23.Qd7 Qxd7 24.Bxd7 Rd8 25.Bb5 Kf7
26.Bd2 (1.087.490) 500

18/28 0:03 +2.15++ 17.Qg4 Rf6 18.O-O Rg6 19.Qh5 Qd6
20.Bb5 Rf8 21.Be2 e4 22.Qh3 e5
23.Be3 Qe6 24.Qxe6+ Rxe6 25.Rad1 (1.715.481) 494

18/32 0:04 +2.23++ 17.Qg4 Rf6 18.O-O Rg6 19.Qh5 Qd6
20.Bb5 Rf8 21.Be2 e4 22.Qh3 e5
23.Be3 Qe6 24.Qxe6+ Rxe6 25.Rad1 (2.193.146) 490

18/32 0:04 +2.17 17.Qg4 Rf6 18.O-O Rg6 19.Qh5 Qd6
20.Bb5 Rf8 21.Be2 e4 22.Be3 Qc6
23.Bg4 Bc5 24.Bg5 Qd6 25.Rad1 Qe5
26.Be3 Qf6 27.Bxc5 bxc5 (2.456.297) 497

19/32 0:05 +2.17 17.Qg4 Rf6 18.O-O Rg6 19.Qh5 Qd6
20.Bb5 Rf8 21.Be2 e4 22.Be3 Qc6
23.Bg4 Bc5 24.Bg5 Qd6 25.Rad1 Qe5
26.Be3 Qf6 27.Bxc5 bxc5 (3.023.239) 505

20/32 0:07 +2.25++ 17.Qg4 Rf6 18.O-O Rg6 19.Qh5 Qd6
20.Bb5 Rf8 21.Be2 e4 22.Be3 Qc6
23.c4 Bc5 24.cxd5 exd5 25.Rad1 (3.818.725) 500

20/32 0:11 +2.17 17.Qg4 Rf6 18.O-O Qf8 19.Bb5 Bc5
20.Qg3 e4 21.Be3 Bd6 22.Qh4 Bc5
23.Bg5 Rf5 24.Be2 h6 25.Be3 Bxe3
26.fxe3 Rxf1+ 27.Rxf1 Qc5 (5.819.339) 502

21/32 0:14 +2.09-- 17.Qg4 Rf6 18.O-O Qf8 19.Bb5 Bc5
20.Qg3 e4 21.Be3 Bd6 22.Qh4 Bc5
23.Bg5 Rg6 24.Be2 h6 25.Be3 Qd6
26.Bf4 e5 27.Be3 Bxe3 28.fxe3 Qc5 (7.488.662) 506

21/32 0:24 +2.07 17.Qg4 Rf5 18.Bh6 Bf6 19.O-O Qd6
20.Bb5 e4 21.Be3 Be5 22.g3 Rbf8
23.Be2 c5 24.Bb5 R8f6 25.Rad1 Rf7
26.Bg5 Rf8 27.Rde1 R8f7 28.h4 g6
29.Bh6 (11.972.281) 498

22/35 0:25 +2.15++ 17.Qg4 Rf5 18.Bh6 Bf6 19.O-O Qd6
20.Bb5 e4 21.Be3 Be5 22.g3 Rbf8
23.Be2 c5 24.Rad1 h5 25.Qh3 g6
26.Bb5 Bg7 27.Qg2 (12.795.085) 498

22/35 0:32 +2.23++ 17.Qg4 Rf5 18.Bh6 Bf6 19.O-O Qd6
20.Bb5 e4 21.Be3 Be5 22.g3 Rbf8
23.Be2 c5 24.Rad1 h5 25.Qh3 g6
26.Bb5 Bg7 27.Qg2 (15.898.539) 494

22/35 0:45 +2.20 17.Qg4 Qd6 18.Bb5 e4 19.Be3 Bf6
20.O-O Be5 21.g3 Rf5 22.Be2 Rbf8
23.Rad1 c5 24.Qh3 R5f6 25.Bb5 Rf5
26.Qh4 R5f7 27.Qg4 Rf5 28.Rfe1 Qe7
29.Re2 Qf6 30.Red2 (22.294.671) 485

23/35 0:51 +2.20 17.Qg4 Qd6 18.Bb5 e4 19.Be3 Bf6
20.O-O Be5 21.g3 Rf5 22.Be2 Rbf8
23.Rad1 c5 24.Qh4 R5f7 25.Qh3 Rf6
26.Bb5 Rf5 27.Qh4 R5f7 28.Qg4 Rf5
29.Rfe1 Qe7 30.Re2 (24.813.280) 486

24/35 0:58 +2.20 17.Qg4 Qd6 18.Bb5 e4 19.Be3 Bf6
20.O-O Be5 21.g3 Rf5 22.Be2 Rbf8
23.Rad1 c5 24.Qh4 R5f7 25.Qh3 Rf6
26.Bb5 Rf5 27.Qh4 R5f7 28.Qg4 Rf5
29.Rfe1 Qe7 30.Re2 (28.894.257) 491

25/36 1:10 +2.20 17.Qg4 Qd6 18.Bb5 e4 19.Be3 Bf6
20.O-O Be5 21.g3 Rf5 22.Be2 Rbf8
23.Rad1 c5 24.Qh4 R5f7 25.Qh3 Rf6
26.Bb5 R8f7 27.Qh4 Rf8 28.Kh1 R6f7
29.Qg4 Rf5 30.Be2 (35.054.120) 498

26/37 1:23 +2.28++ 17.Qg4 Qd6 18.Bb5 e4 19.Be3 Bf6
20.O-O Be5 21.g3 Rf5 22.Be2 Rbf8
23.Qh3 c5 24.Bg4 R5f6 25.Bg5 Rg6
26.Bd2 Rgf6 27.Rae1 (41.307.546) 495

26/44 1:53 +2.12-- 17.Qg4 Qd6 18.Bb5 e4 19.Be3 Rf6
20.O-O-O Rbf8 21.h4 Rxf2 (55.669.635) 491

26/47 2:06 +2.12 17.Qg4 Qd6 18.Bb5 e4 19.Be3 Rf6
20.O-O c6 21.Be2 Qc7 22.Qh3 e5
23.Bg4 Rbf8 24.f3 exf3 25.Rxf3 Bc5
26.Bxc5 Rxf3 27.gxf3 bxc5 28.Bd7 Qb6
29.Qe6+ Kh8 30.Qe7 (62.064.563) 492

27/47 2:33 +2.11 17.Qg4 Qd6 18.Bb5 e4 19.Be3 Rf6
20.O-O c6 21.Be2 Qc7 22.Qh3 e5
23.Bg4 Rbf8 24.Rad1 h6 25.f3 exf3
26.Rxf3 Bc5 27.Bxc5 bxc5 28.Be6+ Kh7
29.Rdf1 Rxf3 30.Rxf3 (75.989.258) 494

28/47 3:24 +2.11 17.Qg4 Qd6 18.Bb5 e4 19.Be3 Rf6
20.O-O c6 21.Be2 Qc7 22.Qh3 e5
23.Bg4 Rbf8 24.Rad1 h6 25.f3 exf3
26.Rxf3 Bc5 27.Bxc5 bxc5 28.Be6+ Kh7
29.Rdf1 Rxf3 30.Rxf3 (101.201.234) 494

29/52 4:12 +2.19++ 17.Qg4 Qd6 18.Bb5 e4 19.Be3 Rf6
20.O-O (124.875.541) 493

29/52 6:02 +2.03-- 17.Qg4 Qd6 18.Bb5 e4 19.Be3 Rf6
20.O-O Rbf8 21.Qg3 Qxg3 22.hxg3 Bc5 (178.578.772) 492

29/52 6:36 +2.07 17.Qg4 Qd6 18.Bb5 e4 19.Be3 Rf6
20.O-O Rbf8 21.Qh3 c6 22.Be2 e5
23.Bg5 Rf5 24.Bd2 Qc7 25.Bg4 R5f6
26.Be6+ Kh8 27.b4 axb4 28.cxb4 Qd6
29.Bg4 Qc7 30.Qb3 (195.511.481) 493

30/52 10:48 +2.07 17.Qg4 Rf6 18.O-O e4 19.Be3 Qd6
20.Bb5 Rbf8 21.Qh3 c6 22.Be2 e5
23.Bg5 Rf5 24.Bd2 Qc7 25.Bg4 R5f6
26.Be6+ Kh8 27.b4 axb4 28.cxb4 Qd6
29.Bg4 Qc7 30.Qb3 (317.956.799) 490

31/52 15:12 +2.07 17.Qg4 Qd6 18.Bb5 e4 19.Qg3 Rf6
20.Qxd6 Bxd6 21.O-O Rbf8 22.Bg5 R6f7
23.Be3 Bc5 24.Rad1 Bxe3 25.fxe3 Rxf1+
26.Rxf1 Rxf1+ (445.805.075) 488

32/52 20:34 +2.15++ 17.Qg4 Qd6 18.Bb5 e4 19.Be3 Rf6
20.O-O Rbf8 21.Qh3 c6 22.Be2 Rf5 (607.623.475) 492

32/52 26:26 +2.07 17.Qg4 Qd6 18.Bb5 e4 19.Qg3 Rf6
20.Qxd6 Bxd6 21.O-O Kf7 22.Bc6 Bc5
23.Be3 Rf8 24.Rad1 Bxe3 25.fxe3 Rxf1+
26.Rxf1+ Ke7 (774.203.837) 488

33/52 35:47 +1.99-- 17.Qg4 Qd6 18.Bb5 Rf6 19.Bg5 Rg6
20.h4 c6 21.Be2 Bxg5 22.hxg5 h6 (1.049.569.267) 488

33/59 42:09 +2.11 17.Qg4 Qd6 18.Bh6 Rf7 19.Bb5 e4
20.Be3 Rbf8 21.O-O Rf6 22.Qh3 c6
23.Be2 e5 24.Bg4 Qc7 25.f3 exf3
26.Rxf3 Rxf3 27.Bxf3 Bc5 28.Bxc5 bxc5
29.Rf1 Qe7 30.Bg4 (1.230.529.171) 486

34/59 47:15 +2.11 17.Qg4 Qd6 18.Bh6 Rf7 19.Bb5 e4
20.Be3 Rbf8 21.O-O Rf6 22.Qh3 c6
23.Be2 e5 24.Bg4 Qc7 25.f3 exf3
26.Rxf3 Rxf3 27.Bxf3 Bc5 28.Bxc5 bxc5
29.Rf1 Qe7 30.Bg4 (1.377.426.571) 485

35/59 58:19 +2.03-- 17.Qg4 Qd6 18.Bh6 Rf7 19.Bb5 e4
20.Be3 Rbf8 21.Be2 Rf6 22.O-O Qc6
23.Qh3 Bc5 24.Qg3 Bd6 25.Bb5 Qb7
26.Qh3 c6 27.Be2 Bc5 28.Bg4 Qd7
29.Bxc5 bxc5 (1.711.270.359) 489

35/59 82:17 +2.19++ 17.Qg4 Qd6 18.Bb5 e4 19.Be3 Rf5
20.O-O (2.366.072.831) 479

35/59 120:32 +2.20 17.Qg4 Qd6 18.Bb5 e4 19.Be3 Rf6
20.O-O Rbf8 21.Qh3 c6 22.Be2 e5
23.Rae1 Qc7 24.f3 exf3 25.Rxf3 e4
26.Rxf6 Rxf6 27.Rf1 Bc5 28.Rxf6 gxf6
29.Qh6 Bxe3+ 30.Qxe3 (3.423.629.979) 473

36/59 126:41 +2.12-- 17.Qg4 Qd6 18.Bb5 e4 19.Be3 Rf6
20.O-O Rbf8 21.Be2 Qc6 22.Bd4 Rg6
23.Qh3 Bc5 24.Bh5 Rh6 25.Qg4 g6
26.Bxc5 bxc5 (3.599.619.526) 473

36/59 132:28 +2.04-- 17.Qg4 Qd6 18.Bb5 e4 19.Be3 Rf6
20.O-O Rbf8 21.f3 exf3 22.Rxf3 Rxf3
23.gxf3 Qe5 24.Qd4 Qxd4 25.Bxd4 Rxf3 (3.770.615.319) 474

36/59 142:54 +2.13 17.Qg4 Qd6 18.Bb5 e4 19.Be3 Rf6
20.O-O Rbf8 21.Qh3 c6 22.Be2 e5
23.Rad1 Qb8 24.Bg5 R6f7 25.Bxe7 Rxe7
26.Bg4 g6 27.Qe3 Qd8 28.Bh3 Rf4
29.b3 Re8 30.Rd2 (4.076.799.228) 475

best move: Qd1-g4 time: 151:20.656 min n/s: 475.458 nodes: 4.076.799.228
Debugging is twice as hard as writing the code in the first
place. Therefore, if you write the code as cleverly as possible, you
are, by definition, not smart enough to debug it.
-- Brian W. Kernighan
User avatar
Eelco de Groot
Posts: 4561
Joined: Sun Mar 12, 2006 2:40 am
Full name:   

Re: From the mirror universe: Barracuda 2.3

Post by Eelco de Groot »

I'm not totally happy with this version after all. SMP seems okay and goes through the plies quickly enough though maybe not so fast as Ferrarifish, but it for one thing is not different enough from Stockfish itself. So for the five proud owners of the first version maybe I will make an update after all :!: It would be almost trivial to put in the Rainbow Serpent evaluation, just to make it more different. Well, I don't know maybe I will encounter some problems because I did not synchonize anymore with versions after 10e64e0509 That was Stockfish Master from March 28 2012. Some things after that were included, but not everything. But it should be possible.

Eelco
Debugging is twice as hard as writing the code in the first
place. Therefore, if you write the code as cleverly as possible, you
are, by definition, not smart enough to debug it.
-- Brian W. Kernighan
User avatar
hgm
Posts: 27789
Joined: Fri Mar 10, 2006 10:06 am
Location: Amsterdam
Full name: H G Muller

Re: From the mirror universe: Barracuda 2.3

Post by hgm »

Entirely off topic:
Debugging is twice as hard as writing the code in the first
place. Therefore, if you write the code as cleverly as possible, you
are, by definition, not smart enough to debug it.
-- Brian W. Kernighan
This seems to express the same fallacy as that led people believe for ages that a machine to produce something must necessarily be more complex than that something, so that self-reproduction violated natural law, and life could only be explained as a devine miracle.

In reality, of course, it just means that debugging the code takes you twice as long. Or whichever other finite factor, depending on your model of how smartness increases with thinking time. (Which would only be logarithmical if you were really dumb and used tree search, like an engine...)
gladius
Posts: 568
Joined: Tue Dec 12, 2006 10:10 am
Full name: Gary Linscott

Re: From the mirror universe: Barracuda 2.3

Post by gladius »

hgm wrote:In reality, of course, it just means that debugging the code takes you twice as long. Or whichever other finite factor, depending on your model of how smartness increases with thinking time. (Which would only be logarithmical if you were really dumb and used tree search, like an engine...)
Hehe. Well, the number of programs that don't work is infinitely larger than those that do work. So, that tree search is going to have a rough go of it :).

I think it's a pretty reasonable statement. At least for me, the outcome of writing code I don't fully understand is the code getting rewritten. Debugging into a solution rarely works.
User avatar
hgm
Posts: 27789
Joined: Fri Mar 10, 2006 10:06 am
Location: Amsterdam
Full name: H G Muller

Re: From the mirror universe: Barracuda 2.3

Post by hgm »

gladius wrote:Hehe. Well, the number of programs that don't work is infinitely larger than those that do work. So, that tree search is going to have a rough go of it :).
Sure, I did not guarantee the factor two. But the number of programs is countably infinite, so an exhaustive search will always find the right one in a finite time.

I am thinking more about it in the terms of a Turing machine. Once you have reached the 'smartness' of a Turing machine, you can compute anything that is computable, without exception. It just takes more time when the task is more complex, but it can never be 'too difficult'.
karger
Posts: 218
Joined: Tue Feb 02, 2010 2:27 am
Full name: John Karger

Re: From the mirror universe: Barracuda 2.3

Post by karger »

Stockfish-Barracuda x64.... http://www.mediafire.com/?2dp5of6hfardl03