Page 1 of 3
Toga Knight Outpost
Posted: Mon Dec 10, 2012 11:49 pm
by Tennison
Please can I have your advice about this change :
Original Toga 1.4 beta 5c :
Code: Select all
// Knight Outpost
mob = 0;
if (me == White){
if (board->square[from-17] == WP)
mob += KnightOutpostMatrix[me][SquareTo64[from]];
if (board->square[from-15] == WP)
mob += KnightOutpostMatrix[me][SquareTo64[from]];
}
else{
if (board->square[from+17] == BP)
mob += KnightOutpostMatrix[me][SquareTo64[from]];
if (board->square[from+15] == BP)
mob += KnightOutpostMatrix[me][SquareTo64[from]];
}
op[me] += mob;
My new version :
Code: Select all
mob = 0;
defender=0;
attacker=0;
if (me == White){
if (board->square[from-17] == WP) defender+=1;
if (board->square[from-15] == WP) defender+=1;
if (defender==1) mob += KnightOutpostMatrix[me][SquareTo64[from]];
else if (defender==2) mob += KnightOutpostMatrix[me][SquareTo64[from]]*8/5;
if ((board->square[from+17] == BP) || ((board->square[from+33] == BP) && (board->square[from+17] != WP))) attacker+=1;
if ((board->square[from+15] == BP) || ((board->square[from+31] == BP) && (board->square[from+15] != WP))) attacker+=1;
if (attacker == 0) mob+= 4;
else
if (attacker == 1) mob-= 2;
else mob-= 4;
}
else{
if (board->square[from+17] == BP) defender+=1;
if (board->square[from+15] == BP) defender+=1;
if (defender==1) mob += KnightOutpostMatrix[me][SquareTo64[from]];
else if (defender==2) mob += KnightOutpostMatrix[me][SquareTo64[from]]*8/5;
if ((board->square[from-17] == WP) || ((board->square[from-33] == WP) && (board->square[from-17] != BP))) attacker+=1;
if ((board->square[from-15] == WP) || ((board->square[from-31] == WP) && (board->square[from-15] != BP))) attacker+=1;
if (attacker == 0) mob+= 4;
else
if (attacker == 1) mob-= 2;
else mob-= 4;
}
op[me] += mob;
I'm not a good programmer; I'm just a beginner so code is not yet optimized.
My goal is to understand a little bit chess engine programming ...
Thanks a lot
Re: Toga Knight Outpost
Posted: Tue Dec 11, 2012 12:33 am
by jd1
Hi Ben,
Welcome to computer chess programming!
As probably the only active developer of Toga II, here are my comments:
1. You have introduced a penalty for a knight attacked or attackable by a pawn. This is something which dan be improved and in the latest version, soon to be released, I do not score outposts attacked by a pawn. In your code, you however may have negative mob if the knight is not on an outpost and can be attacked. Did you intend this?
2. Personally I don't think it matters whether one or 2 pawns attacks a knight - you have a different penalty.
3. Use "defender++" rather than "defender += 1", it is more usual.
4. Your bonuses/penalties are quite small (2 or 4), so they will not change the engines play significantly, I think you will also have a measurable slowdown from the extra code. In particular the unattacked knight bonus could probably go up to 10. A similar idea is on my TODO list.
Lastly, test your changes. I would be interested to see your results.
All the best,
Jerry
Re: Toga Knight Outpost
Posted: Tue Dec 11, 2012 12:52 am
by Tennison
Thanks for your time,
I made two changes :
First,I add an "attacker bonus" as you said;
Second, if 2 defenders I don't do an "outpost bonus"X2 but an "outpost bonus"X1.6 because I think X2 is too much in my own OTB playing history.
On the first change, I put only little "bonus" because values aren't optimize now, I'm just verifying the ideas.
As you ask, maybe it's better to don't have negative mob if not an outpost ... I must try the two solutions.
As a beginner, I have problems to correctly compile : so to do my tests I have compiled a personal "original 1.4 beta 5c" and I test against it.
After some thousands ultra fasts games I have a +10/+25 elo gain.
Re: Toga Knight Outpost
Posted: Tue Dec 11, 2012 3:57 am
by jd1
Hi Ben,
Most interesting
I agree that 2x bonus for two defenders is too much. Thinking about it, I would suggest 1.5 (*3/2) as the difference is neglible and this may be slightly faster.
That is good - it always best to compare the same compiles. Do you think you could pm me the new code - I will try it in the latest Toga version. If you would like the latest Toga please also pm me - I will send it to you.
In the future, you are also welcome to post patches like this at the Toga forum
http://www.computerchess.info/tdbb/phpBB3/index.php
And one last question, how many games did you play, what was the score, and at what time control?
The current patch to beta5c is worth about +5 elo, so +10-25 elo would be an improvement.
Thanks,
Jerry
Re: Toga Knight Outpost
Posted: Tue Dec 11, 2012 8:10 am
by Tennison
Hi Jerry,
Here is a simplified version of the code (I hope a little bit easier to read and a little bit faster); I change the values from 8/5 to 3/2 as you said.
I'm now testing it ...
Code: Select all
mob = 0;
defender=0;
attacker=0;
KOM_multi=0;
if (me == White){
if (board->square[from-17] == WP) defender+=1;
if (board->square[from-15] == WP) defender+=1;
if (defender==1) KOM_multi+= 4;
else if (defender==2) KOM_multi+= 6;
if ((board->square[from+17] == BP) || ((board->square[from+33] == BP) && (board->square[from+17] != WP))) attacker+=1;
if ((board->square[from+15] == BP) || ((board->square[from+31] == BP) && (board->square[from+15] != WP))) attacker+=1;
if (defender>=1)
{
if (attacker == 0) KOM_multi+= 4;
else
if (attacker == 1) KOM_multi-= 1;
else KOM_multi-= 2;
}
}
else{
if (board->square[from+17] == BP) defender+=1;
if (board->square[from+15] == BP) defender+=1;
if (defender==1) KOM_multi+= 4;
else if (defender==2) KOM_multi+= 6;
if ((board->square[from-17] == WP) || ((board->square[from-33] == WP) && (board->square[from-17] != BP))) attacker+=1;
if ((board->square[from-15] == WP) || ((board->square[from-31] == WP) && (board->square[from-15] != BP))) attacker+=1;
if (defender>=1)
{
if (attacker == 0) KOM_multi+= 4;
else
if (attacker == 1) KOM_multi-= 1;
else KOM_multi-= 2;
}
}
mob+= KnightOutpostMatrix[me][SquareTo64[from]]*KOM_multi/4;
Re: Toga Knight Outpost
Posted: Tue Dec 11, 2012 9:26 am
by Tennison
Currently, with ultra fast games, here are the results :
Code: Select all
Games Completed = 2168 of 7420
Settings = Gauntlet/128MB/10ms per move/M 1000cp for 12 moves, D 150 moves/EPD:8moves.epd(3710)
1. Toga Returns Base 1047.0/2168 803-877-488 (L: m=877 t=0 i=0 a=0) (D: r=351 i=81 f=45 s=2 a=9) (tpm=23.0 d=6.2 nps=0)
2. Toga Returns Outpost 002 1121.0/2168 877-803-488 (L: m=803 t=0 i=0 a=0) (D: r=351 i=81 f=45 s=2 a=9) (tpm=23.0 d=6.2 nps=0)
--> 51,7 % (elo gain : +10/+12)
Re: Toga Knight Outpost
Posted: Tue Dec 11, 2012 10:37 am
by jd1
Hi Ben,
That is promising!
I wonder whether you could also test afterwards not giving a bonus at all to an attacked knight outpost? From my (~2100 elo) chess knowledge this would seem most logical. To do that just set KOM_multi = 0 if attacker > 0.
Also, could you test the current Toga II 1.9e knight outpost code against yours:
Code: Select all
// outpost
mob = 0;
if (me == White && (board->square[from+17] != BP && board->square[from+15] != BP)){// not attacked: idea from William H. Mowery
if (board->square[from-17] == WP)
mob += KnightOutpostMatrix[me][SquareTo64[from]];
if (board->square[from-15] == WP)
mob += KnightOutpostMatrix[me][SquareTo64[from]];
}
else if (me == Black && (board->square[from-17] != WP && board->square[from-15] != WP)){
if (board->square[from+17] == BP)
mob += KnightOutpostMatrix[me][SquareTo64[from]];
if (board->square[from+15] == BP)
mob += KnightOutpostMatrix[me][SquareTo64[from]];
}
op[me] += mob;
The current code still doubles the bonus for a twice defended outpost. I also feel that the value in the table KnightOutpostMatrix are rather small - also on my TODO list!
Whichever code is best will be used in the forthcoming release of Toga II 2.0, currently about 30-50 elo stronger than 1.4 beta 5c. Your contribution will of course be noted
Thanks a lot,
Jerry
Re: Toga Knight Outpost
Posted: Tue Dec 11, 2012 11:05 am
by Michel
Whichever code is best will be used in the forthcoming release of Toga II 2.0, currently about 30-50 elo stronger than 1.4 beta 5c.
Nice! It would be good if there were finally some real improvements in Toga, rather than just recompiles with slightly altered settings or trivial modifications.
Although the people who did that seemed to have all moved on to the Ippo family.
Re: Toga Knight Outpost
Posted: Tue Dec 11, 2012 11:44 am
by Rebel
jd1 wrote:Hi Ben,
Welcome to computer chess programming!
As probably the only active developer of Toga II, here are my comments:
1. You have introduced a penalty for a knight attacked or attackable by a pawn. This is something which dan be improved and in the latest version, soon to be released, I do not score outposts attacked by a pawn.
About the latter, if a knight
can be attacked by an enemy pawn it can't be called an outpost. YMMV. When there is a white knight on d5 and there is a black pawn on c6/c7 | e6/e7 I don't reward an outpost bonus.
Re: Toga Knight Outpost
Posted: Tue Dec 11, 2012 12:06 pm
by Gerd Isenberg
Rebel wrote:jd1 wrote:Hi Ben,
Welcome to computer chess programming!
As probably the only active developer of Toga II, here are my comments:
1. You have introduced a penalty for a knight attacked or attackable by a pawn. This is something which dan be improved and in the latest version, soon to be released, I do not score outposts attacked by a pawn.
About the latter, if a knight
can be attacked by an enemy pawn it can't be called an outpost. YMMV. When there is a white knight on d5 and there is a black pawn on c6/c7 | e6/e7 I don't reward an outpost bonus.
Hi Ed,
that seems the usual definition as implemented in computer chess, but see Nimzowitsch's classical definition of the Outpost, provoking to weaken an opponent pawn on a half-open file no longer "Biting on Granite".
https://chessprogramming.wikispaces.com/Outposts