Tony's positional test suite

Discussion of chess software programming and technical issues.

Moderators: hgm, Rebel, chrisw

Dann Corbit
Posts: 12537
Joined: Wed Mar 08, 2006 8:57 pm
Location: Redmond, WA USA

Tony's positional test suite

Post by Dann Corbit »

Considering this ancient positional test:
http://privat.bahnhof.se/wb432434/fentest.htm

I decided to examine the human judgements by comparison with extreme brute force analysis.

I have a linux machine with 64 cores in it, and so I though I would have a run at verification of the positional test suite.

I took the programs Asmfish (an optimized stockfish), Komodo, and DeepShredder and analyzed each position for an hour with multi-pv set to 1 and again with multi-pv set to 3, using 60 CPU cores.

I also ran Houdini 5 Tactical on a Windows machine for one hour with 12 cores to search of any surprising tactical shots.

I combined the results with this program:

Code: Select all

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <string>
#include <iostream>
using namespace std;

struct trec &#123;
    const char *Epd;
    const char *bmtag;
    const char *bm;
    const char *acdtag;
    int acd;
    const char *cetag;
    int ce;
    const char *c0tag;
    int offset;
&#125; reclist&#91;&#93; =
&#123;
    &#123;"r4rk1/p2qn1bp/1pnp2p1/2p2p2/4PP1N/2PPB3/PP2QN1P/R4RK1 b - -", "bm", "Rae8", "acd", 43, "ce", 68, "c0", 0&#125;,
    &#123;"r4rk1/p2qn1bp/1pnp2p1/2p2p2/4PP1N/2PPB3/PP2QN1P/R4RK1 b - -", "bm", "Qe6", "acd", 31, "ce", 60, "c0", 0&#125;,
    &#123;"r4rk1/p2qn1bp/1pnp2p1/2p2p2/4PP1N/2PPB3/PP2QN1P/R4RK1 b - -", "bm", "Rad8", "acd", 31, "ce", 56, "c0", 0&#125;,
    &#123;"r4rk1/p2qn1bp/1pnp2p1/2p2p2/4PP1N/2PPB3/PP2QN1P/R4RK1 b - -", "bm", "b5", "acd", 36, "ce", 54, "c0", 0&#125;,
    &#123;"r4rk1/p2qn1bp/1pnp2p1/2p2p2/4PP1N/2PPB3/PP2QN1P/R4RK1 b - -", "bm", "Bf6", "acd", 31, "ce", 52, "c0", 0&#125;,
    &#123;"r4rk1/p2qn1bp/1pnp2p1/2p2p2/4PP1N/2PPB3/PP2QN1P/R4RK1 b - -", "bm", "Kh8", "acd", 31, "ce", 52, "c0", 0&#125;,
    &#123;"r4rk1/p2qn1bp/1pnp2p1/2p2p2/4PP1N/2PPB3/PP2QN1P/R4RK1 b - -", "bm", "d5", "acd", 36, "ce", 52, "c0", 0&#125;,
    &#123;"r4rk1/p2qn1bp/1pnp2p1/2p2p2/4PP1N/2PPB3/PP2QN1P/R4RK1 b - -", "bm", "a5", "acd", 35, "ce", 52, "c0", 0&#125;,
    &#123;"r4rk1/p2qn1bp/1pnp2p1/2p2p2/4PP1N/2PPB3/PP2QN1P/R4RK1 b - -", "bm", "Rab8", "acd", 31, "ce", 48, "c0", 0&#125;,
    &#123;"r4rk1/p2qn1bp/1pnp2p1/2p2p2/4PP1N/2PPB3/PP2QN1P/R4RK1 b - -", "bm", "Rac8", "acd", 31, "ce", 48, "c0", 0&#125;,
    &#123;"r4rk1/p2qn1bp/1pnp2p1/2p2p2/4PP1N/2PPB3/PP2QN1P/R4RK1 b - -", "bm", "Rf7", "acd", 31, "ce", 44, "c0", 0&#125;,
    &#123;"r3r1k1/ppqbbpp1/2pp1nnp/3Pp3/2P1P3/5N1P/PPBN1PP1/R1BQR1K1 w - -", "bm", "a4", "acd", 41, "ce", 26, "c0", 0&#125;,
    &#123;"r3r1k1/ppqbbpp1/2pp1nnp/3Pp3/2P1P3/5N1P/PPBN1PP1/R1BQR1K1 w - -", "bm", "Bd3", "acd", 36, "ce", 14, "c0", 0&#125;,
    &#123;"r3r1k1/ppqbbpp1/2pp1nnp/3Pp3/2P1P3/5N1P/PPBN1PP1/R1BQR1K1 w - -", "bm", "Nb1", "acd", 36, "ce", 0, "c0", 0&#125;,
    &#123;"r3r1k1/1b1n1p2/1q1p1n1p/2p1p2P/p1P3p1/P1QNPPB1/1P2B1P1/2KR3R w - -", "bm", "Rh4", "acd", 45, "ce", 79, "c0", 0&#125;,
    &#123;"r3r1k1/1b1n1p2/1q1p1n1p/2p1p2P/p1P3p1/P1QNPPB1/1P2B1P1/2KR3R w - -", "bm", "Nf2", "acd", 39, "ce", 65, "c0", 0&#125;,
    &#123;"r3r1k1/1b1n1p2/1q1p1n1p/2p1p2P/p1P3p1/P1QNPPB1/1P2B1P1/2KR3R w - -", "bm", "Kb1", "acd", 39, "ce", 40, "c0", 0&#125;,
    &#123;"r3r1k1/1b1n1p2/1q1p1n1p/2p1p2P/p1P3p1/P1QNPPB1/1P2B1P1/2KR3R w - -", "bm", "Bh2", "acd", 31, "ce", 36, "c0", 0&#125;,
    &#123;"r3r1k1/1b1n1p2/1q1p1n1p/2p1p2P/p1P3p1/P1QNPPB1/1P2B1P1/2KR3R w - -", "bm", "Qd2", "acd", 31, "ce", 24, "c0", 0&#125;,
    &#123;"r2r2k1/p3ppbp/1p4p1/3p4/3P4/2P1P2P/P3BPP1/2R2RK1 w - -", "bm", "f4", "acd", 54, "ce", 36, "c0", 0&#125;,
    &#123;"r2r2k1/p3ppbp/1p4p1/3p4/3P4/2P1P2P/P3BPP1/2R2RK1 w - -", "bm", "Ba6", "acd", 47, "ce", 33, "c0", 0&#125;,
    &#123;"r2r2k1/p3ppbp/1p4p1/3p4/3P4/2P1P2P/P3BPP1/2R2RK1 w - -", "bm", "c4", "acd", 44, "ce", 25, "c0", 0&#125;,
    &#123;"r2r2k1/p3ppbp/1p4p1/3p4/3P4/2P1P2P/P3BPP1/2R2RK1 w - -", "bm", "g4", "acd", 46, "ce", 22, "c0", 0&#125;,
    &#123;"r2r2k1/p3ppbp/1p4p1/3p4/3P4/2P1P2P/P3BPP1/2R2RK1 w - -", "bm", "a4", "acd", 45, "ce", 14, "c0", 0&#125;,
    &#123;"r2r2k1/p3ppbp/1p4p1/3p4/3P4/2P1P2P/P3BPP1/2R2RK1 w - -", "bm", "Rfd1", "acd", 36, "ce", 12, "c0", 0&#125;,
    &#123;"r2r2k1/p3ppbp/1p4p1/3p4/3P4/2P1P2P/P3BPP1/2R2RK1 w - -", "bm", "g3", "acd", 36, "ce", 12, "c0", 0&#125;,
    &#123;"r2r2k1/p3ppbp/1p4p1/3p4/3P4/2P1P2P/P3BPP1/2R2RK1 w - -", "bm", "Bb5", "acd", 36, "ce", 12, "c0", 0&#125;,
    &#123;"r2r2k1/p3ppbp/1p4p1/3p4/3P4/2P1P2P/P3BPP1/2R2RK1 w - -", "bm", "Bd3", "acd", 36, "ce", 8, "c0", 0&#125;,
    &#123;"r2r2k1/p3ppbp/1p4p1/3p4/3P4/2P1P2P/P3BPP1/2R2RK1 w - -", "bm", "f3", "acd", 36, "ce", 8, "c0", 0&#125;,
    &#123;"r2r2k1/p3ppbp/1p4p1/3p4/3P4/2P1P2P/P3BPP1/2R2RK1 w - -", "bm", "Rc2", "acd", 30, "ce", 3, "c0", 0&#125;,
    &#123;"r1bk1bnr/ppp2ppp/8/4n3/2P5/P3B3/1P3PPP/RN2KBNR w KQ - -", "bm", "Nd2", "acd", 40, "ce", 42, "c0", 0&#125;,
    &#123;"r1bk1bnr/ppp2ppp/8/4n3/2P5/P3B3/1P3PPP/RN2KBNR w KQ - -", "bm", "h3", "acd", 37, "ce", 30, "c0", 0&#125;,
    &#123;"r1bk1bnr/ppp2ppp/8/4n3/2P5/P3B3/1P3PPP/RN2KBNR w KQ - -", "bm", "Be2", "acd", 40, "ce", 27, "c0", 0&#125;,
    &#123;"r1b1r1k1/1p1n1pbp/2p1n1p1/q1P1p3/4P3/1PN1BNPP/2Q2PB1/1R1R2K1 w - -", "bm", "Na4", "acd", 44, "ce", 113, "c0", 0&#125;,
    &#123;"r1b1r1k1/1p1n1pbp/2p1n1p1/q1P1p3/4P3/1PN1BNPP/2Q2PB1/1R1R2K1 w - -", "bm", "b4", "acd", 40, "ce", 89, "c0", 0&#125;,
    &#123;"r1b1r1k1/1p1n1pbp/2p1n1p1/q1P1p3/4P3/1PN1BNPP/2Q2PB1/1R1R2K1 w - -", "bm", "Kh2", "acd", 36, "ce", 81, "c0", 0&#125;,
    &#123;"r1b1r1k1/1p1n1pbp/2p1n1p1/q1P1p3/4P3/1PN1BNPP/2Q2PB1/1R1R2K1 w - -", "bm", "Rb2", "acd", 32, "ce", 76, "c0", 0&#125;,
    &#123;"r1b1r1k1/1p1n1pbp/2p1n1p1/q1P1p3/4P3/1PN1BNPP/2Q2PB1/1R1R2K1 w - -", "bm", "Bf1", "acd", 37, "ce", 72, "c0", 0&#125;,
    &#123;"r1b1r1k1/1p1n1pbp/2p1n1p1/q1P1p3/4P3/1PN1BNPP/2Q2PB1/1R1R2K1 w - -", "bm", "Rd3", "acd", 32, "ce", 48, "c0", 0&#125;,
    &#123;"r1b1r1k1/1p1n1pbp/2p1n1p1/q1P1p3/4P3/1PN1BNPP/2Q2PB1/1R1R2K1 w - -", "bm", "g4", "acd", 32, "ce", 36, "c0", 0&#125;,
    &#123;"r1b1r1k1/1p1n1pbp/2p1n1p1/q1P1p3/4P3/1PN1BNPP/2Q2PB1/1R1R2K1 w - -", "bm", "Ne1", "acd", 32, "ce", 16, "c0", 0&#125;,
    &#123;"8/7p/3k2p1/6P1/4KP2/8/7P/8 w - -", "bm", "h4", "acd", 106, "ce", 12847, "c0", 0&#125;,
    &#123;"8/7p/3k2p1/6P1/4KP2/8/7P/8 w - -", "bm", "Kf3", "acd", 42, "ce", 194, "c0", 0&#125;,
    &#123;"8/7p/3k2p1/6P1/4KP2/8/7P/8 w - -", "bm", "Ke3", "acd", 42, "ce", 194, "c0", 0&#125;,
    &#123;"8/7p/3k2p1/6P1/4KP2/8/7P/8 w - -", "bm", "h3", "acd", 42, "ce", 194, "c0", 0&#125;,
    &#123;"8/7p/3k2p1/6P1/4KP2/8/7P/8 w - -", "bm", "f5", "acd", 42, "ce", 194, "c0", 0&#125;,
    &#123;"5r1k/1q2rnpp/p4p2/1pp5/6Q1/1P3P2/PBP3PP/3RR1K1 w - -", "bm", "Kf2", "acd", 47, "ce", 55, "c0", 0&#125;,
    &#123;"5r1k/1q2rnpp/p4p2/1pp5/6Q1/1P3P2/PBP3PP/3RR1K1 w - -", "bm", "a4", "acd", 33, "ce", 44, "c0", 0&#125;,
    &#123;"5r1k/1q2rnpp/p4p2/1pp5/6Q1/1P3P2/PBP3PP/3RR1K1 w - -", "bm", "h3", "acd", 44, "ce", 41, "c0", 0&#125;,
    &#123;"5r1k/1q2rnpp/p4p2/1pp5/6Q1/1P3P2/PBP3PP/3RR1K1 w - -", "bm", "h4", "acd", 33, "ce", 36, "c0", 0&#125;,
    &#123;"5r1k/1q2rnpp/p4p2/1pp5/6Q1/1P3P2/PBP3PP/3RR1K1 w - -", "bm", "c4", "acd", 33, "ce", 36, "c0", 0&#125;,
    &#123;"5r1k/1q2rnpp/p4p2/1pp5/6Q1/1P3P2/PBP3PP/3RR1K1 w - -", "bm", "Qf5", "acd", 43, "ce", 33, "c0", 0&#125;,
    &#123;"5r1k/1q2rnpp/p4p2/1pp5/6Q1/1P3P2/PBP3PP/3RR1K1 w - -", "bm", "Kf1", "acd", 33, "ce", 32, "c0", 0&#125;,
    &#123;"5r1k/1q2rnpp/p4p2/1pp5/6Q1/1P3P2/PBP3PP/3RR1K1 w - -", "bm", "Rxe7", "acd", 33, "ce", 32, "c0", 0&#125;,
    &#123;"5r1k/1q2rnpp/p4p2/1pp5/6Q1/1P3P2/PBP3PP/3RR1K1 w - -", "bm", "Bc3", "acd", 39, "ce", 28, "c0", 0&#125;,
    &#123;"5r1k/1q2rnpp/p4p2/1pp5/6Q1/1P3P2/PBP3PP/3RR1K1 w - -", "bm", "Re6", "acd", 40, "ce", 25, "c0", 0&#125;,
    &#123;"3r2k1/2p2ppp/1p1br3/pPn5/3PP3/P7/1B1N2PP/R3R1K1 w - -", "bm", "Re2", "acd", 46, "ce", -79, "c0", +165&#125;,
    &#123;"3r2k1/2p2ppp/1p1br3/pPn5/3PP3/P7/1B1N2PP/R3R1K1 w - -", "bm", "Rab1", "acd", 42, "ce", -124, "c0", 165&#125;,
    &#123;"3r2k1/2p2ppp/1p1br3/pPn5/3PP3/P7/1B1N2PP/R3R1K1 w - -", "bm", "Bc1", "acd", 40, "ce", -136, "c0", 165&#125;,
    &#123;"3r2k1/2p2ppp/1p1br3/pPn5/3PP3/P7/1B1N2PP/R3R1K1 w - -", "bm", "g3", "acd", 34, "ce", -165, "c0", 165&#125;,
    &#123;"3r1rk1/p1q2pbp/1np1p1p1/1p2P3/5P2/2N2Q1P/PPP3P1/3RRBK1 b - -", "bm", "Rxd1", "acd", 44, "ce", 8, "c0", 0&#125;,
    &#123;"3r1rk1/p1q2pbp/1np1p1p1/1p2P3/5P2/2N2Q1P/PPP3P1/3RRBK1 b - -", "bm", "Kh8", "acd", 33, "ce", 0, "c0", 0&#125;,
    &#123;"3r1rk1/p1q2pbp/1np1p1p1/1p2P3/5P2/2N2Q1P/PPP3P1/3RRBK1 b - -", "bm", "h5", "acd", 41, "ce", 0, "c0", 0&#125;,
    &#123;"3r1rk1/p1q2pbp/1np1p1p1/1p2P3/5P2/2N2Q1P/PPP3P1/3RRBK1 b - -", "bm", "g5", "acd", 33, "ce", 0, "c0", 0&#125;,
    &#123;"3r1rk1/p1q2pbp/1np1p1p1/1p2P3/5P2/2N2Q1P/PPP3P1/3RRBK1 b - -", "bm", "f5", "acd", 33, "ce", 0, "c0", 0&#125;,
    &#123;"3r1rk1/p1q2pbp/1np1p1p1/1p2P3/5P2/2N2Q1P/PPP3P1/3RRBK1 b - -", "bm", "Nd5", "acd", 41, "ce", 0, "c0", 0&#125;,
    &#123;"2rq3r/pb1pbkpp/1p2pp2/n1P5/2P5/QP2BNPB/P3PP1P/3R1RK1 w - -", "bm", "b4", "acd", 43, "ce", 257, "c0", 0&#125;,
    &#123;"2rq3r/pb1pbkpp/1p2pp2/n1P5/2P5/QP2BNPB/P3PP1P/3R1RK1 w - -", "bm", "Rd3", "acd", 31, "ce", 96, "c0", 0&#125;,
    &#123;"2rq3r/pb1pbkpp/1p2pp2/n1P5/2P5/QP2BNPB/P3PP1P/3R1RK1 w - -", "bm", "Nd4", "acd", 39, "ce", 93, "c0", 0&#125;,
    &#123;"2rq3r/pb1pbkpp/1p2pp2/n1P5/2P5/QP2BNPB/P3PP1P/3R1RK1 w - -", "bm", "Qc1", "acd", 31, "ce", 84, "c0", 0&#125;,
    &#123;"2rq3r/pb1pbkpp/1p2pp2/n1P5/2P5/QP2BNPB/P3PP1P/3R1RK1 w - -", "bm", "Qb4", "acd", 31, "ce", 84, "c0", 0&#125;,
    &#123;"2rq3r/pb1pbkpp/1p2pp2/n1P5/2P5/QP2BNPB/P3PP1P/3R1RK1 w - -", "bm", "Qb2", "acd", 31, "ce", 84, "c0", 0&#125;,
    &#123;"2rq3r/pb1pbkpp/1p2pp2/n1P5/2P5/QP2BNPB/P3PP1P/3R1RK1 w - -", "bm", "Rfe1", "acd", 31, "ce", 80, "c0", 0&#125;,
    &#123;"2rq3r/pb1pbkpp/1p2pp2/n1P5/2P5/QP2BNPB/P3PP1P/3R1RK1 w - -", "bm", "Bf4", "acd", 31, "ce", 80, "c0", 0&#125;,
    &#123;"2rq3r/pb1pbkpp/1p2pp2/n1P5/2P5/QP2BNPB/P3PP1P/3R1RK1 w - -", "bm", "Bd2", "acd", 38, "ce", 59, "c0", 0&#125;,
    &#123;"2rq3r/pb1pbkpp/1p2pp2/n1P5/2P5/QP2BNPB/P3PP1P/3R1RK1 w - -", "bm", "Ne1", "acd", 31, "ce", 56, "c0", 0&#125;,
    &#123;"2r2k2/5p2/2Bp1b1r/2qPp1pp/PpN1P3/1P2Q3/5PPP/4R1K1 w - -", "bm", "Qxc5", "acd", 49, "ce", 457, "c0", 0&#125;,
    &#123;"2r2k2/5p2/2Bp1b1r/2qPp1pp/PpN1P3/1P2Q3/5PPP/4R1K1 w - -", "bm", "a5", "acd", 43, "ce", 331, "c0", 0&#125;,
    &#123;"2r2k2/5p2/2Bp1b1r/2qPp1pp/PpN1P3/1P2Q3/5PPP/4R1K1 w - -", "bm", "Ra1", "acd", 42, "ce", 315, "c0", 0&#125;,
    &#123;"2r2k2/5p2/2Bp1b1r/2qPp1pp/PpN1P3/1P2Q3/5PPP/4R1K1 w - -", "bm", "Qd2", "acd", 35, "ce", 185, "c0", 0&#125;,
    &#123;"2r2k2/5p2/2Bp1b1r/2qPp1pp/PpN1P3/1P2Q3/5PPP/4R1K1 w - -", "bm", "Rf1", "acd", 35, "ce", 161, "c0", 0&#125;,
    &#123;"2r2k2/5p2/2Bp1b1r/2qPp1pp/PpN1P3/1P2Q3/5PPP/4R1K1 w - -", "bm", "Rb1", "acd", 35, "ce", 161, "c0", 0&#125;,
    &#123;"2r2k2/5p2/2Bp1b1r/2qPp1pp/PpN1P3/1P2Q3/5PPP/4R1K1 w - -", "bm", "Rd1", "acd", 35, "ce", 161, "c0", 0&#125;,
    &#123;"2r2k2/5p2/2Bp1b1r/2qPp1pp/PpN1P3/1P2Q3/5PPP/4R1K1 w - -", "bm", "Rc1", "acd", 35, "ce", 161, "c0", 0&#125;,
    &#123;"2r2k2/5p2/2Bp1b1r/2qPp1pp/PpN1P3/1P2Q3/5PPP/4R1K1 w - -", "bm", "Kf1", "acd", 35, "ce", 153, "c0", 0&#125;,
    &#123;"2r2k2/5p2/2Bp1b1r/2qPp1pp/PpN1P3/1P2Q3/5PPP/4R1K1 w - -", "bm", "h3", "acd", 35, "ce", 149, "c0", 0&#125;,
    &#123;"2r2k2/5p2/2Bp1b1r/2qPp1pp/PpN1P3/1P2Q3/5PPP/4R1K1 w - -", "bm", "Re2", "acd", 31, "ce", 141, "c0", 0&#125;,
    &#123;"1rb1nrk1/2q1bppp/p1n1p3/2p1P3/2Pp1PP1/3P1NN1/P5BP/R1BQ1RK1 w - -", "bm", "Qe2", "acd", 44, "ce", 144, "c0", 0&#125;,
    &#123;"1rb1nrk1/2q1bppp/p1n1p3/2p1P3/2Pp1PP1/3P1NN1/P5BP/R1BQ1RK1 w - -", "bm", "h4", "acd", 36, "ce", 70, "c0", 0&#125;,
    &#123;"1rb1nrk1/2q1bppp/p1n1p3/2p1P3/2Pp1PP1/3P1NN1/P5BP/R1BQ1RK1 w - -", "bm", "g5", "acd", 36, "ce", 68, "c0", 0&#125;,
    &#123;"1rb1nrk1/2q1bppp/p1n1p3/2p1P3/2Pp1PP1/3P1NN1/P5BP/R1BQ1RK1 w - -", "bm", "Bd2", "acd", 32, "ce", 52, "c0", 0&#125;,
    &#123;"1rb1nrk1/2q1bppp/p1n1p3/2p1P3/2Pp1PP1/3P1NN1/P5BP/R1BQ1RK1 w - -", "bm", "Qd2", "acd", 31, "ce", 44, "c0", 0&#125;,
    &#123;"1rb1nrk1/2q1bppp/p1n1p3/2p1P3/2Pp1PP1/3P1NN1/P5BP/R1BQ1RK1 w - -", "bm", "Re1", "acd", 31, "ce", 44, "c0", 0&#125;,
    &#123;"1rb1nrk1/2q1bppp/p1n1p3/2p1P3/2Pp1PP1/3P1NN1/P5BP/R1BQ1RK1 w - -", "bm", "Nd2", "acd", 31, "ce", 40, "c0", 0&#125;,
    &#123;"1rb1nrk1/2q1bppp/p1n1p3/2p1P3/2Pp1PP1/3P1NN1/P5BP/R1BQ1RK1 w - -", "bm", "Rf2", "acd", 31, "ce", 36, "c0", 0&#125;,
    &#123;"1rb1nrk1/2q1bppp/p1n1p3/2p1P3/2Pp1PP1/3P1NN1/P5BP/R1BQ1RK1 w - -", "bm", "Qe1", "acd", 31, "ce", 32, "c0", 0&#125;,
    &#123;"1rb1nrk1/2q1bppp/p1n1p3/2p1P3/2Pp1PP1/3P1NN1/P5BP/R1BQ1RK1 w - -", "bm", "Qc2", "acd", 31, "ce", 32, "c0", 0&#125;,
    &#123;"1rb1nrk1/2q1bppp/p1n1p3/2p1P3/2Pp1PP1/3P1NN1/P5BP/R1BQ1RK1 w - -", "bm", "f5", "acd", 31, "ce", 28, "c0", 0&#125;,
    &#123;"1rb1nrk1/2q1bppp/p1n1p3/2p1P3/2Pp1PP1/3P1NN1/P5BP/R1BQ1RK1 w - -", "bm", "Ne4", "acd", 31, "ce", 20, "c0", 0&#125;,
    &#123;"1rN1r1k1/1pq2pp1/2p1nn1p/p2p1B2/3P4/4P2P/PPQ1NPP1/2R2RK1 b - -", "bm", "Rbxc8", "acd", 46, "ce", -15, "c0", +60&#125;,
    &#123;"1rN1r1k1/1pq2pp1/2p1nn1p/p2p1B2/3P4/4P2P/PPQ1NPP1/2R2RK1 b - -", "bm", "Rexc8", "acd", 40, "ce", -18, "c0", 60&#125;,
    &#123;"1rN1r1k1/1pq2pp1/2p1nn1p/p2p1B2/3P4/4P2P/PPQ1NPP1/2R2RK1 b - -", "bm", "Ra8", "acd", 40, "ce", -41, "c0", 60&#125;,
    &#123;"1rN1r1k1/1pq2pp1/2p1nn1p/p2p1B2/3P4/4P2P/PPQ1NPP1/2R2RK1 b - -", "bm", "Qxc8", "acd", 33, "ce", -60, "c0", 60&#125;,
    &#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Rbc8", "acd", 46, "ce", 0, "c0", +44&#125;,
    &#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "h6", "acd", 40, "ce", 0, "c0", 44&#125;,
    &#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "exf4", "acd", 40, "ce", -6, "c0", 44&#125;,
    &#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Qc4", "acd", 32, "ce", 0, "c0", 44&#125;,
    &#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Kh8", "acd", 31, "ce", -4, "c0", 44&#125;,
    &#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Bc6", "acd", 31, "ce", -12, "c0", 44&#125;,
    &#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Ra8", "acd", 31, "ce", -20, "c0", 44&#125;,
    &#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Qc6", "acd", 31, "ce", -20, "c0", 44&#125;,
    &#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Qc8", "acd", 31, "ce", -32, "c0", 44&#125;,
    &#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Be6", "acd", 31, "ce", -40, "c0", 44&#125;,
    &#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Rec8", "acd", 31, "ce", -44, "c0", 44&#125;,
    &#123;"1r1q1rk1/pp1bbppp/2n1p1n1/4P3/2BpN3/3P1N2/PP2QPPP/R1B1R1K1 b - -", "bm", "b5", "acd", 42, "ce", 53, "c0", 0&#125;,
    &#123;"1r1q1rk1/pp1bbppp/2n1p1n1/4P3/2BpN3/3P1N2/PP2QPPP/R1B1R1K1 b - -", "bm", "a5", "acd", 38, "ce", 46, "c0", 0&#125;,
    &#123;"1r1q1rk1/pp1bbppp/2n1p1n1/4P3/2BpN3/3P1N2/PP2QPPP/R1B1R1K1 b - -", "bm", "h6", "acd", 37, "ce", 30, "c0", 0&#125;,
    &#123;"1r1q1rk1/pp1bbppp/2n1p1n1/4P3/2BpN3/3P1N2/PP2QPPP/R1B1R1K1 b - -", "bm", "Qb6", "acd", 32, "ce", 64, "c0", 0&#125;,
    &#123;"1r1q1rk1/pp1bbppp/2n1p1n1/4P3/2BpN3/3P1N2/PP2QPPP/R1B1R1K1 b - -", "bm", "Qc7", "acd", 32, "ce", 60, "c0", 0&#125;,
    &#123;"1r1q1rk1/pp1bbppp/2n1p1n1/4P3/2BpN3/3P1N2/PP2QPPP/R1B1R1K1 b - -", "bm", "Rc8", "acd", 32, "ce", 56, "c0", 0&#125;,
    &#123;"1r1q1rk1/pp1bbppp/2n1p1n1/4P3/2BpN3/3P1N2/PP2QPPP/R1B1R1K1 b - -", "bm", "Ra8", "acd", 32, "ce", 52, "c0", 0&#125;,
    &#123;"1r1q1rk1/pp1bbppp/2n1p1n1/4P3/2BpN3/3P1N2/PP2QPPP/R1B1R1K1 b - -", "bm", "b6", "acd", 32, "ce", 52, "c0", 0&#125;,
    &#123;"1r1q1rk1/pp1bbppp/2n1p1n1/4P3/2BpN3/3P1N2/PP2QPPP/R1B1R1K1 b - -", "bm", "a6", "acd", 32, "ce", 52, "c0", 0&#125;,
    &#123;"1r1q1rk1/pp1bbppp/2n1p1n1/4P3/2BpN3/3P1N2/PP2QPPP/R1B1R1K1 b - -", "bm", "Be8", "acd", 32, "ce", 40, "c0", 0&#125;,
    &#123;"1r1q1rk1/pp1bbppp/2n1p1n1/4P3/2BpN3/3P1N2/PP2QPPP/R1B1R1K1 b - -", "bm", "Ncxe5", "acd", 32, "ce", 36, "c0", 0&#125;,
    &#123;0,0,0,0,0,0,0,0,0&#125;
&#125;;

int main&#40;void&#41;
&#123;
    std&#58;&#58;string Epd, PreviousEpd = "";
    int index;
    double hiDepth = 0;
    double hiScore = 0;
    double Offset;
    double Score;
    for &#40;index = 0; reclist&#91;index&#93;.Epd; index++)
    &#123;
        Epd = reclist&#91;index&#93;.Epd;
        if &#40;index == 0&#41;
        &#123;
            hiDepth = reclist&#91;index&#93;.acd;
            Offset =  reclist&#91;index&#93;.offset;
         hiScore = reclist&#91;index&#93;.ce + Offset;
      &#125;
        else if &#40;strcmp&#40;reclist&#91;index&#93;.Epd, reclist&#91;index-1&#93;.Epd&#41; != 0&#41;
        &#123;
         PreviousEpd = reclist&#91;index - 1&#93;.Epd;
         hiDepth = reclist&#91;index&#93;.acd;
            Offset =  reclist&#91;index&#93;.offset;
         hiScore = reclist&#91;index&#93;.ce + Offset;
      &#125;
      double ScoreRatio = &#40;reclist&#91;index&#93;.ce + Offset&#41; / hiScore;
      double DepthRatio = reclist&#91;index&#93;.acd / hiDepth;
      Score = floor&#40;10.0 * ScoreRatio *  DepthRatio + 0.5&#41;;
      if &#40;Score > 0&#41;
         std&#58;&#58;cout << reclist&#91;index&#93;.Epd << " " << reclist&#91;index&#93;.bm << "="  << Score << std&#58;&#58;endl;
    &#125;
    return 0;
&#125;

// Here is the output generated by the program&#58;

/*
r4rk1/p2qn1bp/1pnp2p1/2p2p2/4PP1N/2PPB3/PP2QN1P/R4RK1 b - - Rae8=10
r4rk1/p2qn1bp/1pnp2p1/2p2p2/4PP1N/2PPB3/PP2QN1P/R4RK1 b - - Qe6=6
r4rk1/p2qn1bp/1pnp2p1/2p2p2/4PP1N/2PPB3/PP2QN1P/R4RK1 b - - Rad8=6
r4rk1/p2qn1bp/1pnp2p1/2p2p2/4PP1N/2PPB3/PP2QN1P/R4RK1 b - - b5=7
r4rk1/p2qn1bp/1pnp2p1/2p2p2/4PP1N/2PPB3/PP2QN1P/R4RK1 b - - Bf6=6
r4rk1/p2qn1bp/1pnp2p1/2p2p2/4PP1N/2PPB3/PP2QN1P/R4RK1 b - - Kh8=6
r4rk1/p2qn1bp/1pnp2p1/2p2p2/4PP1N/2PPB3/PP2QN1P/R4RK1 b - - d5=6
r4rk1/p2qn1bp/1pnp2p1/2p2p2/4PP1N/2PPB3/PP2QN1P/R4RK1 b - - a5=6
r4rk1/p2qn1bp/1pnp2p1/2p2p2/4PP1N/2PPB3/PP2QN1P/R4RK1 b - - Rab8=5
r4rk1/p2qn1bp/1pnp2p1/2p2p2/4PP1N/2PPB3/PP2QN1P/R4RK1 b - - Rac8=5
r4rk1/p2qn1bp/1pnp2p1/2p2p2/4PP1N/2PPB3/PP2QN1P/R4RK1 b - - Rf7=5
r3r1k1/ppqbbpp1/2pp1nnp/3Pp3/2P1P3/5N1P/PPBN1PP1/R1BQR1K1 w - - a4=10
r3r1k1/ppqbbpp1/2pp1nnp/3Pp3/2P1P3/5N1P/PPBN1PP1/R1BQR1K1 w - - Bd3=5
r3r1k1/1b1n1p2/1q1p1n1p/2p1p2P/p1P3p1/P1QNPPB1/1P2B1P1/2KR3R w - - Rh4=10
r3r1k1/1b1n1p2/1q1p1n1p/2p1p2P/p1P3p1/P1QNPPB1/1P2B1P1/2KR3R w - - Nf2=7
r3r1k1/1b1n1p2/1q1p1n1p/2p1p2P/p1P3p1/P1QNPPB1/1P2B1P1/2KR3R w - - Kb1=4
r3r1k1/1b1n1p2/1q1p1n1p/2p1p2P/p1P3p1/P1QNPPB1/1P2B1P1/2KR3R w - - Bh2=3
r3r1k1/1b1n1p2/1q1p1n1p/2p1p2P/p1P3p1/P1QNPPB1/1P2B1P1/2KR3R w - - Qd2=2
r2r2k1/p3ppbp/1p4p1/3p4/3P4/2P1P2P/P3BPP1/2R2RK1 w - - f4=10
r2r2k1/p3ppbp/1p4p1/3p4/3P4/2P1P2P/P3BPP1/2R2RK1 w - - Ba6=8
r2r2k1/p3ppbp/1p4p1/3p4/3P4/2P1P2P/P3BPP1/2R2RK1 w - - c4=6
r2r2k1/p3ppbp/1p4p1/3p4/3P4/2P1P2P/P3BPP1/2R2RK1 w - - g4=5
r2r2k1/p3ppbp/1p4p1/3p4/3P4/2P1P2P/P3BPP1/2R2RK1 w - - a4=3
r2r2k1/p3ppbp/1p4p1/3p4/3P4/2P1P2P/P3BPP1/2R2RK1 w - - Rfd1=2
r2r2k1/p3ppbp/1p4p1/3p4/3P4/2P1P2P/P3BPP1/2R2RK1 w - - g3=2
r2r2k1/p3ppbp/1p4p1/3p4/3P4/2P1P2P/P3BPP1/2R2RK1 w - - Bb5=2
r2r2k1/p3ppbp/1p4p1/3p4/3P4/2P1P2P/P3BPP1/2R2RK1 w - - Bd3=1
r2r2k1/p3ppbp/1p4p1/3p4/3P4/2P1P2P/P3BPP1/2R2RK1 w - - f3=1
r1bk1bnr/ppp2ppp/8/4n3/2P5/P3B3/1P3PPP/RN2KBNR w KQ - - Nd2=10
r1bk1bnr/ppp2ppp/8/4n3/2P5/P3B3/1P3PPP/RN2KBNR w KQ - - h3=7
r1bk1bnr/ppp2ppp/8/4n3/2P5/P3B3/1P3PPP/RN2KBNR w KQ - - Be2=6
r1b1r1k1/1p1n1pbp/2p1n1p1/q1P1p3/4P3/1PN1BNPP/2Q2PB1/1R1R2K1 w - - Na4=10
r1b1r1k1/1p1n1pbp/2p1n1p1/q1P1p3/4P3/1PN1BNPP/2Q2PB1/1R1R2K1 w - - b4=7
r1b1r1k1/1p1n1pbp/2p1n1p1/q1P1p3/4P3/1PN1BNPP/2Q2PB1/1R1R2K1 w - - Kh2=6
r1b1r1k1/1p1n1pbp/2p1n1p1/q1P1p3/4P3/1PN1BNPP/2Q2PB1/1R1R2K1 w - - Rb2=5
r1b1r1k1/1p1n1pbp/2p1n1p1/q1P1p3/4P3/1PN1BNPP/2Q2PB1/1R1R2K1 w - - Bf1=5
r1b1r1k1/1p1n1pbp/2p1n1p1/q1P1p3/4P3/1PN1BNPP/2Q2PB1/1R1R2K1 w - - Rd3=3
r1b1r1k1/1p1n1pbp/2p1n1p1/q1P1p3/4P3/1PN1BNPP/2Q2PB1/1R1R2K1 w - - g4=2
r1b1r1k1/1p1n1pbp/2p1n1p1/q1P1p3/4P3/1PN1BNPP/2Q2PB1/1R1R2K1 w - - Ne1=1
8/7p/3k2p1/6P1/4KP2/8/7P/8 w - - h4=10
5r1k/1q2rnpp/p4p2/1pp5/6Q1/1P3P2/PBP3PP/3RR1K1 w - - Kf2=10
5r1k/1q2rnpp/p4p2/1pp5/6Q1/1P3P2/PBP3PP/3RR1K1 w - - a4=6
5r1k/1q2rnpp/p4p2/1pp5/6Q1/1P3P2/PBP3PP/3RR1K1 w - - h3=7
5r1k/1q2rnpp/p4p2/1pp5/6Q1/1P3P2/PBP3PP/3RR1K1 w - - h4=5
5r1k/1q2rnpp/p4p2/1pp5/6Q1/1P3P2/PBP3PP/3RR1K1 w - - c4=5
5r1k/1q2rnpp/p4p2/1pp5/6Q1/1P3P2/PBP3PP/3RR1K1 w - - Qf5=5
5r1k/1q2rnpp/p4p2/1pp5/6Q1/1P3P2/PBP3PP/3RR1K1 w - - Kf1=4
5r1k/1q2rnpp/p4p2/1pp5/6Q1/1P3P2/PBP3PP/3RR1K1 w - - Rxe7=4
5r1k/1q2rnpp/p4p2/1pp5/6Q1/1P3P2/PBP3PP/3RR1K1 w - - Bc3=4
5r1k/1q2rnpp/p4p2/1pp5/6Q1/1P3P2/PBP3PP/3RR1K1 w - - Re6=4
3r2k1/2p2ppp/1p1br3/pPn5/3PP3/P7/1B1N2PP/R3R1K1 w - - Re2=10
3r2k1/2p2ppp/1p1br3/pPn5/3PP3/P7/1B1N2PP/R3R1K1 w - - Rab1=4
3r2k1/2p2ppp/1p1br3/pPn5/3PP3/P7/1B1N2PP/R3R1K1 w - - Bc1=3
3r1rk1/p1q2pbp/1np1p1p1/1p2P3/5P2/2N2Q1P/PPP3P1/3RRBK1 b - - Rxd1=10
2rq3r/pb1pbkpp/1p2pp2/n1P5/2P5/QP2BNPB/P3PP1P/3R1RK1 w - - b4=10
2rq3r/pb1pbkpp/1p2pp2/n1P5/2P5/QP2BNPB/P3PP1P/3R1RK1 w - - Rd3=3
2rq3r/pb1pbkpp/1p2pp2/n1P5/2P5/QP2BNPB/P3PP1P/3R1RK1 w - - Nd4=3
2rq3r/pb1pbkpp/1p2pp2/n1P5/2P5/QP2BNPB/P3PP1P/3R1RK1 w - - Qc1=2
2rq3r/pb1pbkpp/1p2pp2/n1P5/2P5/QP2BNPB/P3PP1P/3R1RK1 w - - Qb4=2
2rq3r/pb1pbkpp/1p2pp2/n1P5/2P5/QP2BNPB/P3PP1P/3R1RK1 w - - Qb2=2
2rq3r/pb1pbkpp/1p2pp2/n1P5/2P5/QP2BNPB/P3PP1P/3R1RK1 w - - Rfe1=2
2rq3r/pb1pbkpp/1p2pp2/n1P5/2P5/QP2BNPB/P3PP1P/3R1RK1 w - - Bf4=2
2rq3r/pb1pbkpp/1p2pp2/n1P5/2P5/QP2BNPB/P3PP1P/3R1RK1 w - - Bd2=2
2rq3r/pb1pbkpp/1p2pp2/n1P5/2P5/QP2BNPB/P3PP1P/3R1RK1 w - - Ne1=2
2r2k2/5p2/2Bp1b1r/2qPp1pp/PpN1P3/1P2Q3/5PPP/4R1K1 w - - Qxc5=10
2r2k2/5p2/2Bp1b1r/2qPp1pp/PpN1P3/1P2Q3/5PPP/4R1K1 w - - a5=6
2r2k2/5p2/2Bp1b1r/2qPp1pp/PpN1P3/1P2Q3/5PPP/4R1K1 w - - Ra1=6
2r2k2/5p2/2Bp1b1r/2qPp1pp/PpN1P3/1P2Q3/5PPP/4R1K1 w - - Qd2=3
2r2k2/5p2/2Bp1b1r/2qPp1pp/PpN1P3/1P2Q3/5PPP/4R1K1 w - - Rf1=3
2r2k2/5p2/2Bp1b1r/2qPp1pp/PpN1P3/1P2Q3/5PPP/4R1K1 w - - Rb1=3
2r2k2/5p2/2Bp1b1r/2qPp1pp/PpN1P3/1P2Q3/5PPP/4R1K1 w - - Rd1=3
2r2k2/5p2/2Bp1b1r/2qPp1pp/PpN1P3/1P2Q3/5PPP/4R1K1 w - - Rc1=3
2r2k2/5p2/2Bp1b1r/2qPp1pp/PpN1P3/1P2Q3/5PPP/4R1K1 w - - Kf1=2
2r2k2/5p2/2Bp1b1r/2qPp1pp/PpN1P3/1P2Q3/5PPP/4R1K1 w - - h3=2
2r2k2/5p2/2Bp1b1r/2qPp1pp/PpN1P3/1P2Q3/5PPP/4R1K1 w - - Re2=2
1rb1nrk1/2q1bppp/p1n1p3/2p1P3/2Pp1PP1/3P1NN1/P5BP/R1BQ1RK1 w - - Qe2=10
1rb1nrk1/2q1bppp/p1n1p3/2p1P3/2Pp1PP1/3P1NN1/P5BP/R1BQ1RK1 w - - h4=4
1rb1nrk1/2q1bppp/p1n1p3/2p1P3/2Pp1PP1/3P1NN1/P5BP/R1BQ1RK1 w - - g5=4
1rb1nrk1/2q1bppp/p1n1p3/2p1P3/2Pp1PP1/3P1NN1/P5BP/R1BQ1RK1 w - - Bd2=3
1rb1nrk1/2q1bppp/p1n1p3/2p1P3/2Pp1PP1/3P1NN1/P5BP/R1BQ1RK1 w - - Qd2=2
1rb1nrk1/2q1bppp/p1n1p3/2p1P3/2Pp1PP1/3P1NN1/P5BP/R1BQ1RK1 w - - Re1=2
1rb1nrk1/2q1bppp/p1n1p3/2p1P3/2Pp1PP1/3P1NN1/P5BP/R1BQ1RK1 w - - Nd2=2
1rb1nrk1/2q1bppp/p1n1p3/2p1P3/2Pp1PP1/3P1NN1/P5BP/R1BQ1RK1 w - - Rf2=2
1rb1nrk1/2q1bppp/p1n1p3/2p1P3/2Pp1PP1/3P1NN1/P5BP/R1BQ1RK1 w - - Qe1=2
1rb1nrk1/2q1bppp/p1n1p3/2p1P3/2Pp1PP1/3P1NN1/P5BP/R1BQ1RK1 w - - Qc2=2
1rb1nrk1/2q1bppp/p1n1p3/2p1P3/2Pp1PP1/3P1NN1/P5BP/R1BQ1RK1 w - - f5=1
1rb1nrk1/2q1bppp/p1n1p3/2p1P3/2Pp1PP1/3P1NN1/P5BP/R1BQ1RK1 w - - Ne4=1
1rN1r1k1/1pq2pp1/2p1nn1p/p2p1B2/3P4/4P2P/PPQ1NPP1/2R2RK1 b - - Rbxc8=10
1rN1r1k1/1pq2pp1/2p1nn1p/p2p1B2/3P4/4P2P/PPQ1NPP1/2R2RK1 b - - Rexc8=8
1rN1r1k1/1pq2pp1/2p1nn1p/p2p1B2/3P4/4P2P/PPQ1NPP1/2R2RK1 b - - Ra8=4
1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - - Rbc8=10
1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - - h6=9
1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - - exf4=8
1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - - Qc4=7
1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - - Kh8=6
1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - - Bc6=5
1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - - Ra8=4
1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - - Qc6=4
1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - - Qc8=2
1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - - Be6=1
1r1q1rk1/pp1bbppp/2n1p1n1/4P3/2BpN3/3P1N2/PP2QPPP/R1B1R1K1 b - - b5=10
1r1q1rk1/pp1bbppp/2n1p1n1/4P3/2BpN3/3P1N2/PP2QPPP/R1B1R1K1 b - - a5=8
1r1q1rk1/pp1bbppp/2n1p1n1/4P3/2BpN3/3P1N2/PP2QPPP/R1B1R1K1 b - - h6=5
1r1q1rk1/pp1bbppp/2n1p1n1/4P3/2BpN3/3P1N2/PP2QPPP/R1B1R1K1 b - - Qb6=9
1r1q1rk1/pp1bbppp/2n1p1n1/4P3/2BpN3/3P1N2/PP2QPPP/R1B1R1K1 b - - Qc7=9
1r1q1rk1/pp1bbppp/2n1p1n1/4P3/2BpN3/3P1N2/PP2QPPP/R1B1R1K1 b - - Rc8=8
1r1q1rk1/pp1bbppp/2n1p1n1/4P3/2BpN3/3P1N2/PP2QPPP/R1B1R1K1 b - - Ra8=7
1r1q1rk1/pp1bbppp/2n1p1n1/4P3/2BpN3/3P1N2/PP2QPPP/R1B1R1K1 b - - b6=7
1r1q1rk1/pp1bbppp/2n1p1n1/4P3/2BpN3/3P1N2/PP2QPPP/R1B1R1K1 b - - a6=7
1r1q1rk1/pp1bbppp/2n1p1n1/4P3/2BpN3/3P1N2/PP2QPPP/R1B1R1K1 b - - Be8=6
1r1q1rk1/pp1bbppp/2n1p1n1/4P3/2BpN3/3P1N2/PP2QPPP/R1B1R1K1 b - - Ncxe5=5
*/

Which produces the output seen at the bottom.

The purpose of the offset field is to simplify the math for positions for which the top score is negative. I take the most negative reasonable score from the position's analysis and use it negated as an offset.
Taking ideas is not a vice, it is a virtue. We have another word for this. It is called learning.
But sharing ideas is an even greater virtue. We have another word for this. It is called teaching.
User avatar
MikeB
Posts: 4889
Joined: Thu Mar 09, 2006 6:34 am
Location: Pen Argyl, Pennsylvania

Re: Tony's positional test suite

Post by MikeB »

Very cool Dann!
Ferdy
Posts: 4833
Joined: Sun Aug 10, 2008 3:15 pm
Location: Philippines

Re: Tony's positional test suite

Post by Ferdy »

Given id "tony.pos.01",

Code: Select all

1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -
I presume the following are the analyses.

Code: Select all

&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Rbc8", "acd", 46, "ce", 0, "c0", +44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "h6", "acd", 40, "ce", 0, "c0", 44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "exf4", "acd", 40, "ce", -6, "c0", 44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Qc4", "acd", 32, "ce", 0, "c0", 44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Kh8", "acd", 31, "ce", -4, "c0", 44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Bc6", "acd", 31, "ce", -12, "c0", 44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Ra8", "acd", 31, "ce", -20, "c0", 44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Qc6", "acd", 31, "ce", -20, "c0", 44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Qc8", "acd", 31, "ce", -32, "c0", 44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Be6", "acd", 31, "ce", -40, "c0", 44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Rec8", "acd", 31, "ce", -44, "c0", 44&#125;, 
What engine is used in the analysis of this epd?
What is the meaning of, "c0", +44}, ?
Dann Corbit
Posts: 12537
Joined: Wed Mar 08, 2006 8:57 pm
Location: Redmond, WA USA

Re: Tony's positional test suite

Post by Dann Corbit »

Ferdy wrote:Given id "tony.pos.01",

Code: Select all

1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -
I presume the following are the analyses.

Code: Select all

&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Rbc8", "acd", 46, "ce", 0, "c0", +44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "h6", "acd", 40, "ce", 0, "c0", 44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "exf4", "acd", 40, "ce", -6, "c0", 44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Qc4", "acd", 32, "ce", 0, "c0", 44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Kh8", "acd", 31, "ce", -4, "c0", 44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Bc6", "acd", 31, "ce", -12, "c0", 44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Ra8", "acd", 31, "ce", -20, "c0", 44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Qc6", "acd", 31, "ce", -20, "c0", 44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Qc8", "acd", 31, "ce", -32, "c0", 44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Be6", "acd", 31, "ce", -40, "c0", 44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Rec8", "acd", 31, "ce", -44, "c0", 44&#125;, 
What engine is used in the analysis of this epd?
I ran asmFishL_2017-05-22_base, Komodo 10 Linux version, and Deep Shredder 13. I used 60 cores for one hour with multi-pv set to 1 and then I ran the experiment again with multi-pv set to 3. I also ran Houdini 5 tactical on a 12 core Windows box at one hour per position, in case there were any tactical loopholes.

I merged that data with my older data (I have several thousand analyzed EPD records for this test set).
I threw out all EPD records with a depth under 30, and then sorted by EPD, pm, depth descending, ce descending to choose the top record for each chosen pm.
What is the meaning of, "c0", +44}, ?
Some of the positions have a very best score that is still negative, or very close to zero with most of the other scores negative. So I took the top N move choices and cut them off where I thought the scores were no longer reasonable. Then I added the negated worst score from the bunch. Notice that the last record from the bunch you quoted has ce of -44 centipawns. So I added 44 centipawns to all the scores in this cluster as a linear offset. It makes the math a lot easier. I used to have a REALLY complicated algorithm for scores close to zero, but I found the results very unsatisfying. So I switched to this method mostly because it is a lot easier, and the results seem a bit more sensible too.
Taking ideas is not a vice, it is a virtue. We have another word for this. It is called learning.
But sharing ideas is an even greater virtue. We have another word for this. It is called teaching.
Ferdy
Posts: 4833
Joined: Sun Aug 10, 2008 3:15 pm
Location: Philippines

Re: Tony's positional test suite

Post by Ferdy »

Dann Corbit wrote:
Ferdy wrote:Given id "tony.pos.01",

Code: Select all

1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -
I presume the following are the analyses.

Code: Select all

&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Rbc8", "acd", 46, "ce", 0, "c0", +44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "h6", "acd", 40, "ce", 0, "c0", 44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "exf4", "acd", 40, "ce", -6, "c0", 44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Qc4", "acd", 32, "ce", 0, "c0", 44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Kh8", "acd", 31, "ce", -4, "c0", 44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Bc6", "acd", 31, "ce", -12, "c0", 44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Ra8", "acd", 31, "ce", -20, "c0", 44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Qc6", "acd", 31, "ce", -20, "c0", 44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Qc8", "acd", 31, "ce", -32, "c0", 44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Be6", "acd", 31, "ce", -40, "c0", 44&#125;, 
&#123;"1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - -", "bm", "Rec8", "acd", 31, "ce", -44, "c0", 44&#125;, 
What engine is used in the analysis of this epd?
I ran asmFishL_2017-05-22_base, Komodo 10 Linux version, and Deep Shredder 13. I used 60 cores for one hour with multi-pv set to 1 and then I ran the experiment again with multi-pv set to 3. I also ran Houdini 5 tactical on a 12 core Windows box at one hour per position, in case there were any tactical loopholes.

I merged that data with my older data (I have several thousand analyzed EPD records for this test set).
I threw out all EPD records with a depth under 30, and then sorted by EPD, pm, depth descending, ce descending to choose the top record for each chosen pm.
What is the meaning of, "c0", +44}, ?
Some of the positions have a very best score that is still negative, or very close to zero with most of the other scores negative. So I took the top N move choices and cut them off where I thought the scores were no longer reasonable. Then I added the negated worst score from the bunch. Notice that the last record from the bunch you quoted has ce of -44 centipawns. So I added 44 centipawns to all the scores in this cluster as a linear offset. It makes the math a lot easier. I used to have a REALLY complicated algorithm for scores close to zero, but I found the results very unsatisfying. So I switched to this method mostly because it is a lot easier, and the results seem a bit more sensible too.
Ahh ok so we don't exactly knew which engine has analyzed a given line.

Here is a tony format epd based on your generated output.

tony-pos-dcc.epd

Code: Select all

1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - - bm Rbc8; c0 "positional scores are&#58; Rbc8=10, h6=9, exf4=8, Qc4=7, Kh8=6, Bc6=5, Ra8=4, Qc6=4, Qc8=2, Be6=1"; id "tony.pos.01";
r1bk1bnr/ppp2ppp/8/4n3/2P5/P3B3/1P3PPP/RN2KBNR w KQ - bm Nd2; c0 "positional scores are&#58; Nd2=10, h3=7, Be2=6"; id "tony.pos.02";
8/7p/3k2p1/6P1/4KP2/8/7P/8 w - - bm h4; c0 "positional scores are&#58; h4=10"; id "tony.pos.03";
r1b1r1k1/1p1n1pbp/2p1n1p1/q1P1p3/4P3/1PN1BNPP/2Q2PB1/1R1R2K1 w - - bm Na4; c0 "positional scores are&#58; Na4=10, b4=7, Kh2=6, Rb2=5, Bf1=5, Rd3=3, g4=2, Ne1=1"; id "tony.pos.04";
1rN1r1k1/1pq2pp1/2p1nn1p/p2p1B2/3P4/4P2P/PPQ1NPP1/2R2RK1 b - - bm Rbxc8; c0 "positional scores are&#58; Rbxc8=10, Rexc8=8, Ra8=4"; id "tony.pos.05";
3r1rk1/p1q2pbp/1np1p1p1/1p2P3/5P2/2N2Q1P/PPP3P1/3RRBK1 b - - bm Rxd1; c0 "positional scores are&#58; Rxd1=10"; id "tony.pos.06";
r2r2k1/p3ppbp/1p4p1/3p4/3P4/2P1P2P/P3BPP1/2R2RK1 w - - bm f4; c0 "positional scores are&#58; f4=10, Ba6=8, c4=6, g4=5, a4=3, Rfd1=2, g3=2, Bb5=2, Bd3=1, f3=1"; id "tony.pos.07";
2rq3r/pb1pbkpp/1p2pp2/n1P5/2P5/QP2BNPB/P3PP1P/3R1RK1 w - - bm b4; c0 "positional scores are&#58; b4=10, Rd3=3, Nd4=3, Qc1=2, Qb4=2, Qb2=2, Rfe1=2, Bf4=2, Bd2=2, Ne1=2"; id "tony.pos.08";
1r1q1rk1/pp1bbppp/2n1p1n1/4P3/2BpN3/3P1N2/PP2QPPP/R1B1R1K1 b - - bm b5; c0 "positional scores are&#58; b5=10, a5=8, h6=5, Qb6=9, Qc7=9, Rc8=8, Ra8=7, b6=7, a6=7, Be8=6, Ncxe5=5"; id "tony.pos.09";
3r2k1/2p2ppp/1p1br3/pPn5/3PP3/P7/1B1N2PP/R3R1K1 w - - bm Re2; c0 "positional scores are&#58; Re2=10, Rab1=4, Bc1=3"; id "tony.pos.10";
r4rk1/p2qn1bp/1pnp2p1/2p2p2/4PP1N/2PPB3/PP2QN1P/R4RK1 b - - bm Rae8; c0 "positional scores are&#58; Rae8=10, Qe6=6, Rad8=6, b5=7, Bf6=6, Kh8=6, d5=6, a5=6, Rab8=5, Rac8=5, Rf7=5"; id "tony.pos.11";
r3r1k1/1b1n1p2/1q1p1n1p/2p1p2P/p1P3p1/P1QNPPB1/1P2B1P1/2KR3R w - - bm Rh4; c0 "positional scores are&#58; Rh4=10, Nf2=7, Kb1=4, Bh2=3, Qd2=2"; id "tony.pos.12";
1rb1nrk1/2q1bppp/p1n1p3/2p1P3/2Pp1PP1/3P1NN1/P5BP/R1BQ1RK1 w - - bm Qe2; c0 "positional scores are&#58; Qe2=10, h4=4, g5=4, Bd2=3, Qd2=2, Re1=2, Nd2=2, Rf2=2, Qe1=2, Qc2=2, f5=1, Ne4=1"; id "tony.pos.13";
r3r1k1/ppqbbpp1/2pp1nnp/3Pp3/2P1P3/5N1P/PPBN1PP1/R1BQR1K1 w - - bm a4; c0 "positional scores are&#58; a4=10, Bd3=5"; id "tony.pos.14";
5r1k/1q2rnpp/p4p2/1pp5/6Q1/1P3P2/PBP3PP/3RR1K1 w - - bm Kf2; c0 "positional scores are&#58; Kf2=10, a4=6, h3=7, h4=5, c4=5, Qf5=5, Kf1=4, Rxe7=4, Bc3=4, Re6=4"; id "tony.pos.15";
2r2k2/5p2/2Bp1b1r/2qPp1pp/PpN1P3/1P2Q3/5PPP/4R1K1 w - - bm Qxc5; c0 "positional scores are&#58; Qxc5=10, a5=6, Ra1=6, Qd2=3, Rf1=3, Rb1=3, Rd1=3, Rc1=3, Kf1=2, h3=2, Re2=2"; id "tony.pos.16";
Dann Corbit
Posts: 12537
Joined: Wed Mar 08, 2006 8:57 pm
Location: Redmond, WA USA

Re: Tony's positional test suite

Post by Dann Corbit »

Thanks for reformatting my data into a nice EPD file.

I actually did this experiment because I am going to rescore the STS set.
I have already reanalyzed almost all of the positions that were of inferior depth.

The formation of the STS problem sets started so long ago I was using 32 bit chess engines because my OS was only 32 bit (mid 2008). I don't think Stockfish was even released yet.

My number one analysis engine at the time was Rybka 3 (32 bit) with 2 cores which according to CEGT was about 2930 Elo (probably 700 Elo or so behind ASMFISH on 60 cores).
Taking ideas is not a vice, it is a virtue. We have another word for this. It is called learning.
But sharing ideas is an even greater virtue. We have another word for this. It is called teaching.
Ferdy
Posts: 4833
Joined: Sun Aug 10, 2008 3:15 pm
Location: Philippines

Re: Tony's positional test suite

Post by Ferdy »

Would be great if you can make revisions to some STS positions.
first25plus5
Posts: 10
Joined: Sat Jul 22, 2017 2:50 am
Location: New Zealand

Re: Tony's positional test suite

Post by first25plus5 »

Many thanks Dann and Ferdy, this is excellent work. I really appreciate it.

Many years ago I had spent a lot of time going through the test suite and finding that eight positions had a positive correlation relating to the SSDF rating of the engines tested on Tony Hedlund's chart. The eight positions were #2 through to #8 and #13. In my view at the time, just these eight positions were excellent basis.

I would suggest a further improvement based on the the idea that not all of the sixteen positions are equally difficult/easy and some should therefore be worth more than others in a test suite. Such an example is position #3 compared to position #9.
So I think that the point scores of each position (of the excellent revised work) should be all lowered so that the lowest score of a position reaches 1 point.

So in this 'weighted' score scenario instead of 10 points being the maximum value for each position, adjustments to the scoring would be as follows:

#1 unchanged
#2 lower each score by 5
#3 lower each score by 9
#4 unchanged
#5 lower each score by 3
#6 lower each score by 9
#7 unchanged
#8 lower each score by 1
#9 lower each score by 4
#10 lower each score by 2
#11 lower each score by 4
#12 lower each score by 1
#13 unchanged
#14 lower each score by 4
#15 lower each score by 3
#16 lower each score by 1

In concluding I really am appreciative but feel a weighted score adjustment is necessary to get a fairer test suite so that each position has a weighting based on it's degree of importance.
User avatar
Rebel
Posts: 6991
Joined: Thu Aug 18, 2011 12:04 pm

Re: Tony's positional test suite

Post by Rebel »

Here is some more human analysis, snippet:

Code: Select all

&#91;Event ""&#93;
&#91;Site "C3E2=10 G2G4=06 F1D3=05 D2D6=02 D1E1=0"&#93;
&#91;Date "1994.05.05"&#93;
&#91;Round "1"&#93;
&#91;White "beat10  &#40;01&#41;"&#93;
&#91;Black "Ply &#58; 7"&#93;
&#91;Result "*"&#93;
&#91;BlackElo ""&#93;
&#91;WhiteElo ""&#93;
&#91;FEN "r3r1k1/1p3nqp/2pp4/p4p2/Pn3P1Q/2N4P/1PPR2P1/3R1BK1 w - - 0 1"&#93;

&#123; C3E2=10 G2G4=06 F1D3=05 D2D6=02 D1E1=02 H4H5=01 G1H2=01 F1E2=01  &#125; *

&#91;Event ""&#93;
&#91;Site "E1E8=10 F5E7=07 E1E3=06 F5D4=04       "&#93;
&#91;Date "1994.05.05"&#93;
&#91;Round "1"&#93;
&#91;White "beat10  &#40;02&#41;"&#93;
&#91;Black "Ply &#58; 7"&#93;
&#91;Result "*"&#93;
&#91;BlackElo ""&#93;
&#91;WhiteElo ""&#93;
&#91;FEN "4rrk1/pp1b2pp/5n2/3p1N2/8/2QB1qP1/PP3P1P/4RRK1 w - - 0 1"&#93;

&#123; E1E8=10 F5E7=07 E1E3=06 F5D4=04                                  &#125; *

&#91;Event ""&#93;
&#91;Site "B1B3=10 D1C2=07 H1H5=07 F1E2=07 F1D3=0"&#93;
&#91;Date "1994.05.05"&#93;
&#91;Round "1"&#93;
&#91;White "beat10  &#40;03&#41;"&#93;
&#91;Black "Ply &#58; 7"&#93;
&#91;Result "*"&#93;
&#91;BlackElo ""&#93;
&#91;WhiteElo ""&#93;
&#91;FEN "r6r/p6p/1pnpkn2/q1p2p1p/2P5/2P1P3/P4PP1/1RBQKB1R w K - 0 1"&#93;

&#123; B1B3=10 D1C2=07 H1H5=07 F1E2=07 F1D3=02 G2G4=02 E3E4=02 B1B5=01  &#125; *
About 700 of them, I all typed in myself from paper. No internet in those days.

http://www.top-5000.nl/misc.htm
Ferdy
Posts: 4833
Joined: Sun Aug 10, 2008 3:15 pm
Location: Philippines

Re: Tony's positional test suite

Post by Ferdy »

first25plus5 wrote:Many thanks Dann and Ferdy, this is excellent work. I really appreciate it.

Many years ago I had spent a lot of time going through the test suite and finding that eight positions had a positive correlation relating to the SSDF rating of the engines tested on Tony Hedlund's chart. The eight positions were #2 through to #8 and #13. In my view at the time, just these eight positions were excellent basis.

I would suggest a further improvement based on the the idea that not all of the sixteen positions are equally difficult/easy and some should therefore be worth more than others in a test suite. Such an example is position #3 compared to position #9.
So I think that the point scores of each position (of the excellent revised work) should be all lowered so that the lowest score of a position reaches 1 point.

So in this 'weighted' score scenario instead of 10 points being the maximum value for each position, adjustments to the scoring would be as follows:

#1 unchanged
#2 lower each score by 5
#3 lower each score by 9
#4 unchanged
#5 lower each score by 3
#6 lower each score by 9
#7 unchanged
#8 lower each score by 1
#9 lower each score by 4
#10 lower each score by 2
#11 lower each score by 4
#12 lower each score by 1
#13 unchanged
#14 lower each score by 4
#15 lower each score by 3
#16 lower each score by 1

In concluding I really am appreciative but feel a weighted score adjustment is necessary to get a fairer test suite so that each position has a weighting based on it's degree of importance.
Kindly check the following if they are right.
tony-dcc-caleb.epd

Code: Select all

1r2r1k1/1pqbbppp/p2p1n2/4p3/P3PP2/2N1BB2/1PP2QPP/R4R1K b - - bm Rbc8; c0 "positional scores are&#58; Rbc8=10, h6=9, exf4=8, Qc4=7, Kh8=6, Bc6=5, Ra8=4, Qc6=4, Qc8=2, Be6=1"; id "tony.pos.01";
r1bk1bnr/ppp2ppp/8/4n3/2P5/P3B3/1P3PPP/RN2KBNR w KQ - bm Nd2; c0 "positional scores are&#58; Nd2=5, h3=2, Be2=1"; id "tony.pos.02";
8/7p/3k2p1/6P1/4KP2/8/7P/8 w - - bm h4; c0 "positional scores are&#58; h4=1"; id "tony.pos.03";
r1b1r1k1/1p1n1pbp/2p1n1p1/q1P1p3/4P3/1PN1BNPP/2Q2PB1/1R1R2K1 w - - bm Na4; c0 "positional scores are&#58; Na4=10, b4=7, Kh2=6, Rb2=5, Bf1=5, Rd3=3, g4=2, Ne1=1"; id "tony.pos.04";
1rN1r1k1/1pq2pp1/2p1nn1p/p2p1B2/3P4/4P2P/PPQ1NPP1/2R2RK1 b - - bm Rbxc8; c0 "positional scores are&#58; Rbxc8=7, Rexc8=5, Ra8=1"; id "tony.pos.05";
3r1rk1/p1q2pbp/1np1p1p1/1p2P3/5P2/2N2Q1P/PPP3P1/3RRBK1 b - - bm Rxd1; c0 "positional scores are&#58; Rxd1=1"; id "tony.pos.06";
r2r2k1/p3ppbp/1p4p1/3p4/3P4/2P1P2P/P3BPP1/2R2RK1 w - - bm f4; c0 "positional scores are&#58; f4=10, Ba6=8, c4=6, g4=5, a4=3, Rfd1=2, g3=2, Bb5=2, Bd3=1, f3=1"; id "tony.pos.07";
2rq3r/pb1pbkpp/1p2pp2/n1P5/2P5/QP2BNPB/P3PP1P/3R1RK1 w - - bm b4; c0 "positional scores are&#58; b4=9, Rd3=2, Nd4=2, Qc1=1, Qb4=1, Qb2=1, Rfe1=1, Bf4=1, Bd2=1, Ne1=1"; id "tony.pos.08";
1r1q1rk1/pp1bbppp/2n1p1n1/4P3/2BpN3/3P1N2/PP2QPPP/R1B1R1K1 b - - bm b5; c0 "positional scores are&#58; b5=6, a5=4, h6=1, Qb6=5, Qc7=5, Rc8=4, Ra8=3, b6=3, a6=3, Be8=2, Ncxe5=1"; id "tony.pos.09";
3r2k1/2p2ppp/1p1br3/pPn5/3PP3/P7/1B1N2PP/R3R1K1 w - - bm Re2; c0 "positional scores are&#58; Re2=8, Rab1=2, Bc1=1"; id "tony.pos.10";
r4rk1/p2qn1bp/1pnp2p1/2p2p2/4PP1N/2PPB3/PP2QN1P/R4RK1 b - - bm Rae8; c0 "positional scores are&#58; Rae8=6, Qe6=2, Rad8=2, b5=3, Bf6=2, Kh8=2, d5=2, a5=2, Rab8=1, Rac8=1, Rf7=1"; id "tony.pos.11";
r3r1k1/1b1n1p2/1q1p1n1p/2p1p2P/p1P3p1/P1QNPPB1/1P2B1P1/2KR3R w - - bm Rh4; c0 "positional scores are&#58; Rh4=9, Nf2=6, Kb1=3, Bh2=2, Qd2=1"; id "tony.pos.12";
1rb1nrk1/2q1bppp/p1n1p3/2p1P3/2Pp1PP1/3P1NN1/P5BP/R1BQ1RK1 w - - bm Qe2; c0 "positional scores are&#58; Qe2=10, h4=4, g5=4, Bd2=3, Qd2=2, Re1=2, Nd2=2, Rf2=2, Qe1=2, Qc2=2, f5=1, Ne4=1"; id "tony.pos.13";
r3r1k1/ppqbbpp1/2pp1nnp/3Pp3/2P1P3/5N1P/PPBN1PP1/R1BQR1K1 w - - bm a4; c0 "positional scores are&#58; a4=6, Bd3=1"; id "tony.pos.14";
5r1k/1q2rnpp/p4p2/1pp5/6Q1/1P3P2/PBP3PP/3RR1K1 w - - bm Kf2; c0 "positional scores are&#58; Kf2=7, a4=3, h3=4, h4=2, c4=2, Qf5=2, Kf1=1, Rxe7=1, Bc3=1, Re6=1"; id "tony.pos.15";
2r2k2/5p2/2Bp1b1r/2qPp1pp/PpN1P3/1P2Q3/5PPP/4R1K1 w - - bm Qxc5; c0 "positional scores are&#58; Qxc5=9, a5=5, Ra1=5, Qd2=2, Rf1=2, Rb1=2, Rd1=2, Rc1=2, Kf1=1, h3=1, Re2=1"; id "tony.pos.16";