Page 1 of 1

BlackMamba 1.0

Posted: Wed Apr 11, 2012 3:27 pm
by Jeremy Bernstein
https://sites.google.com/site/mdannib/home

Anyone know anything about this one?

I don't think this is a hex-edited anything, but I assume that it's probably an Ippo. 'strings' didn't reveal anything obvious.

jb

Re: BlackMamba 1.0

Posted: Wed Apr 11, 2012 7:27 pm
by User923005
Black Mamba is definitely an Ivanhoe clone.
It even has this table embedded in it:
char BENCHMARK_POS[16][128]=
{"rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1",
"rnbqkb1r/pppp1ppp/4pn2/8/2PP4/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 3",
"rnbqkb1r/pp2pppp/1n1p4/8/2PP4/8/PP3PPP/RNBQKBNR w KQkq - 0 6",
"r1bq1rk1/pppp1ppp/5n2/4n3/2P5/1PN3P1/P2PPKBP/R1BQ3R b - - 0 8",
"r4rk1/ppqbbppp/2nppn2/8/4PP2/1NN1B3/PPP1B1PP/R2Q1RK1 w - - 1 11",
"r2q1rk1/1pp2ppp/p1pbb3/4P3/4NB2/8/PPP2PPP/R2QR1K1 b - - 0 13",
"r4rk1/3np1bp/pq1p2p1/2pP3n/6P1/2N1Bp2/PPQ1BPP1/R4RK1 w - - 0 16",
"rnb2r2/p1p2pk1/1p1pqn1p/P7/Q1PPp1pP/2P3P1/4PPB1/1RB1K1NR b K - 3 18",
"4rk1r/1b2pNbp/pq2Bn1p/1ppP4/P1p2Q2/2N4P/1P3PP1/R3K2R w KQ - 8 21",
"r3r1k1/2p1np1p/1p2p1pB/p1q1P3/P1P1Q3/3R3P/1P3PP1/5RK1 b - - 2 23",
"r2q1r1k/6np/1p1p1pp1/pNpPn3/P1P1P1P1/1PB1Q2P/5R2/5R1K w - - 0 26",
"2kn4/ppN1R3/3p4/6rp/2NP3n/2P5/PP5r/4KR2 b - - 4 28",
"r1br2k1/pp4p1/4p1Bp/4P3/2Rp3N/4n1P1/PP2P2P/R5K1 w - - 8 31",
"6k1/1p3pp1/p2p4/3P1P2/P1Bpn3/1P2q3/2P4P/5Q1K b - - 0 33",
"4q3/r4pkp/1p1P4/2n1P1p1/2Q2b2/7P/2R1B1P1/5R1K w - - 0 36",
"3rr1k1/p4pbp/2bN1p2/8/2B3P1/2P3Bn/P2N4/3R1K2 b - - 1 38"};

See:
http://ivanhoebuilds.googlecode.com/svn ... enchmark.c

To see for yourself, just run strings.exe against the blackmamba binary. It's at the end.

To be fair, he does mention Fire, Ivanhoe and Robbolito in his page:
https://sites.google.com/site/mdannib/ringraziamenti
And Ivanhoe was released as public domain.
So, you get what you pay for.

Re: BlackMamba 1.0

Posted: Wed Apr 11, 2012 7:43 pm
by Jeremy Bernstein
User923005 wrote:Black Mamba is definitely an Ivanhoe clone.
It even has this table embedded in it:
char BENCHMARK_POS[16][128]=
{"rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1",
"rnbqkb1r/pppp1ppp/4pn2/8/2PP4/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 3",
"rnbqkb1r/pp2pppp/1n1p4/8/2PP4/8/PP3PPP/RNBQKBNR w KQkq - 0 6",
"r1bq1rk1/pppp1ppp/5n2/4n3/2P5/1PN3P1/P2PPKBP/R1BQ3R b - - 0 8",
"r4rk1/ppqbbppp/2nppn2/8/4PP2/1NN1B3/PPP1B1PP/R2Q1RK1 w - - 1 11",
"r2q1rk1/1pp2ppp/p1pbb3/4P3/4NB2/8/PPP2PPP/R2QR1K1 b - - 0 13",
"r4rk1/3np1bp/pq1p2p1/2pP3n/6P1/2N1Bp2/PPQ1BPP1/R4RK1 w - - 0 16",
"rnb2r2/p1p2pk1/1p1pqn1p/P7/Q1PPp1pP/2P3P1/4PPB1/1RB1K1NR b K - 3 18",
"4rk1r/1b2pNbp/pq2Bn1p/1ppP4/P1p2Q2/2N4P/1P3PP1/R3K2R w KQ - 8 21",
"r3r1k1/2p1np1p/1p2p1pB/p1q1P3/P1P1Q3/3R3P/1P3PP1/5RK1 b - - 2 23",
"r2q1r1k/6np/1p1p1pp1/pNpPn3/P1P1P1P1/1PB1Q2P/5R2/5R1K w - - 0 26",
"2kn4/ppN1R3/3p4/6rp/2NP3n/2P5/PP5r/4KR2 b - - 4 28",
"r1br2k1/pp4p1/4p1Bp/4P3/2Rp3N/4n1P1/PP2P2P/R5K1 w - - 8 31",
"6k1/1p3pp1/p2p4/3P1P2/P1Bpn3/1P2q3/2P4P/5Q1K b - - 0 33",
"4q3/r4pkp/1p1P4/2n1P1p1/2Q2b2/7P/2R1B1P1/5R1K w - - 0 36",
"3rr1k1/p4pbp/2bN1p2/8/2B3P1/2P3Bn/P2N4/3R1K2 b - - 1 38"};

See:
http://ivanhoebuilds.googlecode.com/svn ... enchmark.c

To see for yourself, just run strings.exe against the blackmamba binary. It's at the end.

To be fair, he does mention Fire, Ivanhoe and Robbolito in his page:
https://sites.google.com/site/mdannib/ringraziamenti
And Ivanhoe was released as public domain.
So, you get what you pay for.
Good find -- I thought those FEN strings would turn something up -- I checked against the benchmark positions in Critter and Stockfish before I stopped looking. No surprise. Nice that he made an OSX version.

jb

Re: BlackMamba 1.0

Posted: Thu Apr 12, 2012 5:57 am
by kingliveson
There's an appropriate way of giving attribution if it turns out to be a derivative...

Re: BlackMamba 1.0

Posted: Thu Apr 12, 2012 9:41 am
by mdannib
Jeremy Bernstein wrote:
Good find -- I thought those FEN strings would turn something up -- I checked against the benchmark positions in Critter and Stockfish before I stopped looking. No surprise. Nice that he made an OSX version.

jb
The strings are used with the command "benchmark x" (x is the selectep depth) from the uci interface; this is used only for the PGO compile as Stockfish does.
The idea is from Stockfish (benchmark.cpp) and the position mainly from ivanhoe.

This code is never used in other ways.

The actual beta used more positions just because there are other areas in the eval that i want to optimized.

This is the new table.....yes, i'm the author....
char BenchmarkPositions[34][128] = {
"fen rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1",
"fen rnbqkb1r/pppp1ppp/4pn2/8/2PP4/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 3",
"fen rnbqkb1r/pp2pppp/1n1p4/8/2PP4/8/PP3PPP/RNBQKBNR w KQkq - 0 6",
"fen r1bq1rk1/pppp1ppp/5n2/4n3/2P5/1PN3P1/P2PPKBP/R1BQ3R b - - 0 8",
"fen r4rk1/ppqbbppp/2nppn2/8/4PP2/1NN1B3/PPP1B1PP/R2Q1RK1 w - - 1 11",
"fen r2q1rk1/1pp2ppp/p1pbb3/4P3/4NB2/8/PPP2PPP/R2QR1K1 b - - 0 13",
"fen r4rk1/3np1bp/pq1p2p1/2pP3n/6P1/2N1Bp2/PPQ1BPP1/R4RK1 w - - 0 16",
"fen rnb2r2/p1p2pk1/1p1pqn1p/P7/Q1PPp1pP/2P3P1/4PPB1/1RB1K1NR b K - 3 18",
"fen 4rk1r/1b2pNbp/pq2Bn1p/1ppP4/P1p2Q2/2N4P/1P3PP1/R3K2R w KQ - 8 21",
"fen r3r1k1/2p1np1p/1p2p1pB/p1q1P3/P1P1Q3/3R3P/1P3PP1/5RK1 b - - 2 23",
"fen r2q1r1k/6np/1p1p1pp1/pNpPn3/P1P1P1P1/1PB1Q2P/5R2/5R1K w - - 0 26",
"fen 2kn4/ppN1R3/3p4/6rp/2NP3n/2P5/PP5r/4KR2 b - - 4 28",
"fen r1br2k1/pp4p1/4p1Bp/4P3/2Rp3N/4n1P1/PP2P2P/R5K1 w - - 8 31",
"fen 6k1/1p3pp1/p2p4/3P1P2/P1Bpn3/1P2q3/2P4P/5Q1K b - - 0 33",
"fen 4q3/r4pkp/1p1P4/2n1P1p1/2Q2b2/7P/2R1B1P1/5R1K w - - 0 36",
"fen 3rr1k1/p4pbp/2bN1p2/8/2B3P1/2P3Bn/P2N4/3R1K2 b - - 1 38",
"fen rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1",
"fen r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - 0 10",
"fen 8/2p5/3p4/KP5r/1R3p1k/8/4P1P1/8 w - - 0 11",
"fen 4rrk1/pp1n3p/3q2pQ/2p1pb2/2PP4/2P3N1/P2B2PP/4RRK1 b - - 7 19",
"fen rq3rk1/ppp2ppp/1bnpb3/3N2B1/3NP3/7P/PPPQ1PP1/2KR3R w - - 7 14",
"fen r1bq1r1k/1pp1n1pp/1p1p4/4p2Q/4Pp2/1BNP4/PPP2PPP/3R1RK1 w - - 2 14",
"fen r3r1k1/2p2ppp/p1p1bn2/8/1q2P3/2NPQN2/PPP3PP/R4RK1 b - - 2 15",
"fen r1bbk1nr/pp3p1p/2n5/1N4p1/2Np1B2/8/PPP2PPP/2KR1B1R w kq - 0 13",
"fen r1bq1rk1/ppp1nppp/4n3/3p3Q/3P4/1BP1B3/PP1N2PP/R4RK1 w - - 1 16",
"fen 4r1k1/r1q2ppp/ppp2n2/4P3/5Rb1/1N1BQ3/PPP3PP/R5K1 w - - 1 17",
"fen 2rqkb1r/ppp2p2/2npb1p1/1N1Nn2p/2P1PP2/8/PP2B1PP/R1BQK2R b KQ - 0 11",
"fen r1bq1r1k/b1p1npp1/p2p3p/1p6/3PP3/1B2NN2/PP3PPP/R2Q1RK1 w - - 1 16",
"fen 3r1rk1/p5pp/bpp1pp2/8/q1PP1P2/b3P3/P2NQRPP/1R2B1K1 b - - 6 22",
"fen r1q2rk1/2p1bppp/2Pp4/p6b/Q1PNp3/4B3/PP1R1PPP/2K4R w - - 2 18",
"fen 4k2r/1pb2ppp/1p2p3/1R1p4/3P4/2r1PN2/P4PPP/1R4K1 b - - 3 22",
"fen 3q2k1/pb3p1p/4pbp1/2r5/PpN2N2/1P2P2P/5PP1/Q2R2K1 b - - 4 26",
"fen 3B4/1r2p3/r2p1p2/bkp1P1p1/1p1P1PPp/p1P4P/PP1K4/3B4 w - - 0 1",
"fen 2r4k/1b1q3n/3p1ppN/1p1Pp1Bp/1P2P3/7P/2B1QPP1/R5K1 b - - 0 26"
};

/Matteo

Re: BlackMamba 1.0

Posted: Thu Apr 12, 2012 11:06 am
by velmarin
compared to program Similarity_3,

60% with Ivanhoe and Fire


http://i35.fastpic.ru/big/2012/0411/12/ ... 527012.png

Re: BlackMamba 1.0

Posted: Thu Apr 12, 2012 11:43 am
by mdannib
velmarin wrote:compared to program Similarity_3,

60% with Ivanhoe and Fire


http://i35.fastpic.ru/big/2012/0411/12/ ... 527012.png
Velmarim, i m just saying that the fen used for the optimization fase during the compile is not a "concrete evidence".
This is the piece of code that retrieve the material value during the eval....it's almost identical to Ippolit, IvanHoe, Robbolito and Fire.

Code: Select all

    w_undeveloped = b_undeveloped = 0;
    dev_val = 0;
    DYNAMIC->threat = 0;
    DYNAMIC->eval_hash_hit = 0;
    index = (DYNAMIC->material >> 8) & 0x7ffff;
    SIGN = MATERIAL[index].sign;
    DYNAMIC->flags = MATERIAL[index].flags;
    if (!(DYNAMIC->material & 0x80000000)) {
                Material_value = MATERIAL[index].value;
                Material_value *= (int)((MATERIAL_WEIGHTING << 10) / 100);
                Material_value >>= 10;
        }
    else
    {
        if (POPCNT_M15(bWq) > 1
                || POPCNT_M15(bBq) > 1
                || POPCNT_M15(bWr) > 2
                || POPCNT_M15(bBr) > 2
                || POPCNT_M15(bWl) > 1
                || POPCNT_M15(bBl) > 1
                || POPCNT_M15(bWd) > 1
                || POPCNT_M15(bBd) > 1
                || POPCNT_M15(bWn) > 2
                || POPCNT_M15(bBn) > 2)
        {
            SIGN = 128;
            Material_value = value_material();
            DYNAMIC->flags = 0;
            if (bWq | bWr | bWb | bWn)
                DYNAMIC->flags |= 2;
            if (bBq | bBr | bBb | bBn)
                DYNAMIC->flags |= 1;
        }
        else
        {
            Material_value = MATERIAL[index].value;
            DYNAMIC->material &= 0x7fffffff;
        }
    }
But there are a lot more different things in the eval

Code: Select all

        
        /////////////////////
        // Eternal Knight 
        /////////////////////
    U = bWn;
    while (U)
    {
        b = LSB(U);
        bit_free(b, U); 
                if ((b == D5 || b == E5) 
                        && !(attacked_by_black_knight & U)
                        && !(attacked_by_black_bishop & U))
                        value += eternal_knight;
        }
    U = bBn;
    while (U)
    {
        b = LSB(U);
        bit_free(b, U); 
                if ((b == D5 || b == E5) 
                        && !(attacked_by_white_knight & U)
                        && !(attacked_by_white_bishop & U))
                        value -= eternal_knight;
        }
...and another one...

Code: Select all

                // controllo se e' un pedone che puo attaccare il re nemico
                if (rank >= R4) {
                        f_bk = FILE(black_king_square);
                        if ((rank == R4) && (file == f_bk || file == (f_bk + 1) || file == (f_bk -1)))
                                value += pawn_storm_R4;
                        else if ((rank == R5) && (file == f_bk || file == (f_bk + 1) || file == (f_bk -1)))
                                value += pawn_storm_R5;
                        else if ((rank == R6) && (file == f_bk || file == (f_bk + 1) || file == (f_bk -1)))
                                value += pawn_storm_R6;
                }
...and another one...

Code: Select all

        /////////////////////
        // Interaction 
        /////////////////////
        // WHITE
        // two minors
        U = ((interaction_wn_1 | interaction_wn_2) & interaction_wb) | (interaction_wn_1 & interaction_wn_2);
        U &= (~bitboard_occupied_white);
        if (U) {
                if (U & bBk)
                        value += 5 * POPCNT(U)* two_minors;
                else
                        value += POPCNT(U)* two_minors;
        }
        // minor and rook
        U = interaction_wr & ((interaction_wn_1 | interaction_wn_2) | interaction_wb);
        U &= (~bitboard_occupied_white);
        if (U) {
                if (U & bBk)
                        value += 5 * POPCNT(U)* minor_and_rook;
                else
                        value += POPCNT(U)* minor_and_rook;
        }

Re: BlackMamba 1.0

Posted: Thu Apr 12, 2012 12:34 pm
by velmarin
Sorry, I understood that you were the author.

The engine is free, I do not question its legality.
On the contrary, I congratulate you.
As is so, I'm available if something needs.

Greetings.