Henk wrote:
[edit] Correction: futility pruning does improve my program significantly. I think I tested the wrong versions yesterday.
how do you actually test the engine for improvements?
if you use a tournament, tell us how many games and the result
Don't be too serious about my testing. It used to be very,very bad. Currently it is less bad. First I do not have an engine but a chess program. It doesn't have a UCI interface or so. I test by self play which is not good. At the moment I use 10- 100 milliseconds per move. So I can't even test effects of deep (or less shallow) searches.
So my remark about futility pruning holds only for two, three or perhaps four plies.
I only test a few hundred games. So to be serious it's bitter than guessing. If I would test with thousands of games with longer thinking time per move it costs to much time and electricity. Getting worse if you don't know much about the right value of a parameter.
If there is a big score difference, testing less games might be enough.
I doubt if I am not testing identical games. I have no opening book too.
I think you can try some match at 1'+0.05. you should get near 6 games per minute.
in 2 hours you'll have 700-1000 games. it's not enough to test an engine but it's a starting point
elcabesa wrote:I think you can try some match at 1'+0.05. you should get near 6 games per minute.
in 2 hours you'll have 700-1000 games. it's not enough to test an engine but it's a starting point
At this moment my chess program only supports N milliseconds per move. So I would have to change that. 2 hours is still quite long when you just want to do some experimenting. But for serious testing surely thousands of games are required.
For instance when testing futility pruning using 10 milliseconds per move:
In my first test of 300 games I got a score of 126 wins and 75 losses.
But in my second 300 games test I got 106 wins and 97 losses.
So at first you think futility is a win, but the second test shows it is not that clear. So I have to test many more games. By the way this result may not be valid for longer time controls. For instance R is depth dependent and may be the cause of skipping last few plies.
By the way if there are bugs in the program results may not be valid at all.
And when you change something that is correlated tuning has to start again.
Henk wrote:I don't know how to improve tactical play. Game below is a typical game of Skipper. Totally blown away by tactics. I don't reduce captures and checks when LMR. Can you prune captures when razoring/futility pruning ?
Try to improve your speed more depth is better without sacrificing much the quality of move. You can reduce captures and checks with some conditions like how late it is in your move list. But first go over your move ordering methods, debug it completely. Always improve it whenever you can. You can prune captures in futility just guard it with some conditions, like bad captures, late in the move list, node type, not a hash move, bad capture history, and many others.
Move 13. Nd4 appears to be bad, perhaps you have to recheck your mobility code as well, there could be bugs there.
My chess program doesn't have mobility code. Only values in piece square table contain extra mobility points. Computing real mobility seemed to be too expensive for you have to generate all moves.
Just found out that my futility pruning doesn't help at all. Maybe the margins are not OK. It doesn't improve speed, so I might as well remove it.
Move ordering of my Chess program needs to be improved. But how ? Currently I use killers and piece square table for that.
Just try mobility, don't worry about the cost you will gain it later with good quality moves. Pawns, knights and king should not be costly. For sliding pieces, B/R/Q, if you are not using bitboard, just try to scan the first 3 squares in every direction from initial piece location. The most important thing at the moment is if you can detect a piece with less than 4 mobility, that piece should get penalized. You may count like this, if sq is empty or occupied by enemy and that sq is not defended by opponent's pawn then mobility++.
Henk wrote:I don't know how to improve tactical play. Game below is a typical game of Skipper. Totally blown away by tactics. I don't reduce captures and checks when LMR. Can you prune captures when razoring/futility pruning ?
Try to improve your speed more depth is better without sacrificing much the quality of move. You can reduce captures and checks with some conditions like how late it is in your move list. But first go over your move ordering methods, debug it completely. Always improve it whenever you can. You can prune captures in futility just guard it with some conditions, like bad captures, late in the move list, node type, not a hash move, bad capture history, and many others.
Move 13. Nd4 appears to be bad, perhaps you have to recheck your mobility code as well, there could be bugs there.
My chess program doesn't have mobility code. Only values in piece square table contain extra mobility points. Computing real mobility seemed to be too expensive for you have to generate all moves.
Just found out that my futility pruning doesn't help at all. Maybe the margins are not OK. It doesn't improve speed, so I might as well remove it.
Move ordering of my Chess program needs to be improved. But how ? Currently I use killers and piece square table for that.
Just try mobility, don't worry about the cost you will gain it later with good quality moves. Pawns, knights and king should not be costly. For sliding pieces, B/R/Q, if you are not using bitboard, just try to scan the first 3 squares in every direction from initial piece location. The most important thing at the moment is if you can detect a piece with less than 4 mobility, that piece should get penalized. You may count like this, if sq is empty or occupied by enemy and that sq is not defended by opponent's pawn then mobility++.
Ok I have to try again. Won't be easy for I already have mobility points in piece square tables. I also have to determine rights mobility weights for different pieces. For instance mobility weight for knight differs from weight for Queen. Are you sure adding only bad bishop detection is not enough ?
Henk wrote:I don't know how to improve tactical play. Game below is a typical game of Skipper. Totally blown away by tactics. I don't reduce captures and checks when LMR. Can you prune captures when razoring/futility pruning ?
Try to improve your speed more depth is better without sacrificing much the quality of move. You can reduce captures and checks with some conditions like how late it is in your move list. But first go over your move ordering methods, debug it completely. Always improve it whenever you can. You can prune captures in futility just guard it with some conditions, like bad captures, late in the move list, node type, not a hash move, bad capture history, and many others.
Move 13. Nd4 appears to be bad, perhaps you have to recheck your mobility code as well, there could be bugs there.
My chess program doesn't have mobility code. Only values in piece square table contain extra mobility points. Computing real mobility seemed to be too expensive for you have to generate all moves.
Just found out that my futility pruning doesn't help at all. Maybe the margins are not OK. It doesn't improve speed, so I might as well remove it.
Move ordering of my Chess program needs to be improved. But how ? Currently I use killers and piece square table for that.
Just try mobility, don't worry about the cost you will gain it later with good quality moves. Pawns, knights and king should not be costly. For sliding pieces, B/R/Q, if you are not using bitboard, just try to scan the first 3 squares in every direction from initial piece location. The most important thing at the moment is if you can detect a piece with less than 4 mobility, that piece should get penalized. You may count like this, if sq is empty or occupied by enemy and that sq is not defended by opponent's pawn then mobility++.
Ok I have to try again. Won't be easy for I already have mobility points in piece square tables. I also have to determine rights mobility weights for different pieces. For instance mobility weight for knight differs from weight for Queen. Are you sure adding only bad bishop detection is not enough ?
May I know how you implement a mobility points in pc sq tables?
Yes I am sure detection of bad bishop only is not enough.
Henk wrote:I don't know how to improve tactical play. Game below is a typical game of Skipper. Totally blown away by tactics. I don't reduce captures and checks when LMR. Can you prune captures when razoring/futility pruning ?
Try to improve your speed more depth is better without sacrificing much the quality of move. You can reduce captures and checks with some conditions like how late it is in your move list. But first go over your move ordering methods, debug it completely. Always improve it whenever you can. You can prune captures in futility just guard it with some conditions, like bad captures, late in the move list, node type, not a hash move, bad capture history, and many others.
Move 13. Nd4 appears to be bad, perhaps you have to recheck your mobility code as well, there could be bugs there.
My chess program doesn't have mobility code. Only values in piece square table contain extra mobility points. Computing real mobility seemed to be too expensive for you have to generate all moves.
Just found out that my futility pruning doesn't help at all. Maybe the margins are not OK. It doesn't improve speed, so I might as well remove it.
Move ordering of my Chess program needs to be improved. But how ? Currently I use killers and piece square table for that.
Just try mobility, don't worry about the cost you will gain it later with good quality moves. Pawns, knights and king should not be costly. For sliding pieces, B/R/Q, if you are not using bitboard, just try to scan the first 3 squares in every direction from initial piece location. The most important thing at the moment is if you can detect a piece with less than 4 mobility, that piece should get penalized. You may count like this, if sq is empty or occupied by enemy and that sq is not defended by opponent's pawn then mobility++.
Ok I have to try again. Won't be easy for I already have mobility points in piece square tables. I also have to determine rights mobility weights for different pieces. For instance mobility weight for knight differs from weight for Queen. Are you sure adding only bad bishop detection is not enough ?
May I know how you implement a mobility points in pc sq tables?
Yes I am sure detection of bad bishop only is not enough.
For instance for a knight its just an all moves count when board would be empty. I copied it from chess programming website (simple evaluation function). So actually its stolen. I have modified it a bit but I did not get far with that. I at least have to use piece square table for move ordering for everything you do in late move ordering seem to cost too much. And piece square table is cheapest.
[At this moment I have a bad problem that white's score is about 15-20% better than black. But it could be because of 10 millisecond per move testing. So I have to find out]