mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 08:43:09 +00:00
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.
This commit is contained in:
parent
bd7a0d4ce4
commit
c9f9262a49
4 changed files with 7 additions and 2 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue