tiger wrote:Sean Evans wrote:tiger wrote: OK, it deserves a try. Meanwhile, you are free to test it manually. One thing I will have to decide is this: if there is little material left, switching to the aggressive mode will not work anyway. Where should I draw the line? Maybe you can help by testing manually?// Christophe
One idea would be to have a combined formula for both Material Value (MV) and Eval Level (EL), example:
IF [(MV>15 points) and (EL<-2.00)] then [Goto GT]
Cordially,
Sean
I agree with the general formula.
Evaluation below -2 sounds about right.
I'm not so sure about the material value. I guess it must be done by breaking down the material into queens, major pieces and minor pieces.
Gambit Tiger cannot do much without its queen for example.
That's where I could use help from you, the users: here we are dealing with human opposition. I cannot do any automatic testing and would need to play all games myself, manually. This could take a long time and would maybe work just against me, not against other players.
An interesting feature, but that could be very tricky to implement well.
// Christophe
Hi guys, not my thread but just as a comment: Christophe maybe you could test it with engines anyway, when lacking the human guinea pigs on Guadeloupe? Gambit Tiger I remember was not weaker that much than the normal Tiger, I remember there was some list where it even did better than the classic Tiger. In engine games there probably is a higher eval treshold where the game is lost, assuming the engines make fewer mistakes. Then all you have to do is find a treshold where it does not matter much whether it is Gambit Tiger or Tiger playing. May be well above a lost position. And below that threshold you may get a surprise effect against humans. But you wonder if Gambit Tiger is not doing better against humans anyway, and you need to come up with a real suicidal mode to do even better against humans than Gambit Tiger. Possibly you could use the same treshold against humans but increase all the positional values for maximum surprise effect. And in engine play you would use the same treshold but only use Gambit Tiger below it.
Anyway, in Rainbow Serpent I was going in the other direction, trying not starting a King attack if this hurts other positional features. The idea is that it does not matter much if you own King Safety is lowered, as long as your opponent's King safety gets even worse. But if at the same time other positional features are also sacrificed, you create multiple weaknesses, that you can not repair anymore if the attack is too weak to succeed. You do something of the same in a Gambit Tiger setting if it is not just King Safety that is increased, you include other positional features. Also I think if an attack is not sufficient to mate the opponent, but material is invested, it is the endgame after the attack or aborted attack that is important so in some way it would be good to include more endgame features also. I have not yet figured out what is a good way to do that.
Not anything fancy, just making some terms dependant on each other instead of just adding them. At the moment it is just a few lines that I have changed in Rainbow Serpent, I store the King safety for both sides instead of adding them directly to the score and when the other eval terms have been collected I add a correction term/factor that simply is the sum of the other eval terms, from White's viewpoint, to counter the increased weight of King Safety, if the position suffers from choosing a King attack this correction factor should go down and hopefully the King attack would be aborted before too much damage is done.
Code: Select all
// Evaluate kings after all other pieces because we need complete attack
// information when computing the king safety evaluation.
bonus += evaluate_king<WHITE, HasPopCnt>(pos, ei, margins)
- evaluate_king<BLACK, HasPopCnt>(pos, ei, margins);
is changed to, after changing the return type of evaluate_king to Value instead of Score:
Code: Select all
// Evaluate kings after all other pieces because we need complete attack
// information when computing the king safety evaluation.
whiteKingSafety = evaluate_king<WHITE, HasPopCnt>(pos, ei, margins);
blackKingSafety = evaluate_king<BLACK, HasPopCnt>(pos, ei, margins);
And then at the end I have now something like this:
Code: Select all
// King safety is corrected with the rest of the evaluation and then added to the score.
if (whiteKingSafety || blackKingSafety)
{
Value evalCorrection = mg_value(bonus)/(10);
Value w = ((0x250 + evalCorrection - (blackKingSafety/0x30)) * whiteKingSafety)/0x100;
bonus += make_score(w, 0); //was: apply_weight(make_score(w, 0), Weights[KingDangerUs + WHITE]);
w = ((0x250 - evalCorrection - (whiteKingSafety/0x30)) * blackKingSafety)/0x100; // + (whiteKingSafety/0x30) introduces color-asymmetry
bonus -= make_score(w, 0); //apply_weight(make_score(w, 0), Weights[KingDangerUs + BLACK]);
bonus += make_score((mg_value(bonus)>>6) * (abs(eg_value(bonus))>>6),(eg_value(bonus)>>6) * (abs(eg_value(bonus))>>6)); // introduces side to move asymmetry, when eg_value is negative and mg_value positive the formula is wrong and not mirrored between the two sides, but maybe it is a feature, not a bug.
}
Eelco