1
0
Fork 0

Add experimental contempt factor

This is very crude and very basic: simply in case
of a draw for repetition or 50 moves rule return
a negative score instead of zero according to the
contempt factor (in centipawns). If contempt is
positive engine will try to avoid draws (to use
with weaker opponents), if negative engine will
try to draw. If zero (default) there are no changes.

No functional change.
sf_3_base
Marco Costalba 2012-10-05 08:23:56 +02:00
parent bd7a0d4ce4
commit c9f9262a49
4 changed files with 7 additions and 2 deletions

View File

@ -268,6 +268,7 @@ namespace {
namespace Eval {
Color RootColor;
Value ValueDrawContempt;
/// evaluate() is the main evaluation function. It always computes two
/// values, an endgame score and a middle game score, and interpolates
@ -307,6 +308,8 @@ namespace Eval {
KingDangerTable[1][i] = apply_weight(make_score(t, 0), Weights[KingDangerUs]);
KingDangerTable[0][i] = apply_weight(make_score(t, 0), Weights[KingDangerThem]);
}
ValueDrawContempt = VALUE_DRAW - Options["Contempt Factor"] * PawnValueMg / 100;
}

View File

@ -27,6 +27,7 @@ class Position;
namespace Eval {
extern Color RootColor;
extern Value ValueDrawContempt;
extern void init();
extern Value evaluate(const Position& pos, Value& margin);

View File

@ -546,7 +546,7 @@ namespace {
{
// Step 2. Check for aborted search and immediate draw
if (Signals.stop || pos.is_draw<false>() || ss->ply > MAX_PLY)
return VALUE_DRAW;
return Eval::ValueDrawContempt;
// Step 3. Mate distance pruning. Even if we mate at the next move our score
// would be at best mate_in(ss->ply+1), but if alpha is already bigger because
@ -1101,7 +1101,7 @@ split_point_start: // At split points actual search starts from here
// Check for an instant draw or maximum ply reached
if (pos.is_draw<true>() || ss->ply > MAX_PLY)
return VALUE_DRAW;
return Eval::ValueDrawContempt;
// Decide whether or not to include checks, this fixes also the type of
// TT entry depth that we are going to use. Note that in qsearch we use

View File

@ -64,6 +64,7 @@ void init(OptionsMap& o) {
o["Search Log Filename"] = Option("SearchLog.txt");
o["Book File"] = Option("book.bin");
o["Best Book Move"] = Option(false);
o["Contempt Factor"] = Option(0, -50, 50, on_eval);
o["Mobility (Middle Game)"] = Option(100, 0, 200, on_eval);
o["Mobility (Endgame)"] = Option(100, 0, 200, on_eval);
o["Passed Pawns (Middle Game)"] = Option(100, 0, 200, on_eval);