In reply to Bob and Richard,
I said, 'not so much so'. I did not say, 'not at all'.
It clearly does not pay the dividends that it used to when much slower hardware was used.
RomiChess rarely looses pure pawn race conditions and frequently wins positions pawns down due to pawn races. RomiChess has no pawn race code.
You might be amazed if you were to see the endleaf eval in RomiChess.
Code: Select all
s32 Eval()
{
s32 score;
s32 bonus;
s32 sq;
u64 pawns;
score = PawnLook();
if(score == NOHASH)
{
score = 0;
pawns = wPawns;
bonus = (computer == WHITE) ? 4 : 0;
while(pawns)
{
sq = FirstBit(pawns);
pawns &= clrBit[sq];
if(openFile[Col(sq)] & (wPawns & clrBit[sq]))
score -= (DOUBLED + bonus);
if(!(wPassed[sq] & bPawns)) score += (PASSED - bonus);
if(!(wIsolated[sq] & wPawns))
{
score -= (ISOLATED + bonus);
if(!(wFrontal[sq] & bPawns)) score -= (FRONTAL + bonus);
}
}
pawns = bPawns;
bonus = (computer == BLACK) ? 4 : 0;
while(pawns)
{
sq = LastBit(pawns);
pawns &= clrBit[sq];
if(openFile[Col(sq)] & (bPawns & clrBit[sq]))
score += (DOUBLED + bonus);
if(!(bPassed[sq] & wPawns)) score -= (PASSED - bonus);
if(!(bIsolated[sq] & bPawns))
{
score += (ISOLATED + bonus);
if(!(bFrontal[sq] & wPawns)) score += (FRONTAL + bonus);
}
}
PawnStore(score);
}
score += (wEvalBonus - bEvalBonus);
if(wBishopNum > 1) score += 32;
if(bBishopNum > 1) score -= 32;
score = score + wMat - bMat + wPos - bPos;
return wtm ? score : -score;
}
That's it. That is the whole RomiChess eval function!
wMat & bMat are computed on the fly in MakeMove().
wPos & bPos are also done on the fly in MakeMove() and come from the piece square tables that are set up at the beginning of every search.
Now a question if you will. How much elo can be added to RomiChess, just by rewritting the eval?
THANKS!