Trouble Spotter
Posted: Thu Jul 19, 2007 5:57 pm
I am designing a proper evaluation, and one of the terms I want to include is mobility (global and per piece). As a side effect of counting the moves, I can detect soft-pins and hanging pieces comparatively cheaply. Which is good, as I want to include those features of the position too. A position where the stm has a hanging piece can recieve a small positional penalty, (or a reduction of the stm bonus) in anticipation of the fact that his more restricted move choice wil on the average not improve his score as much as when he has the initiative.
When scoring such features, you occasionally encounter positions where the stm has two hanging pieces (e.g. a fork) or a hanging pinned piece. Such motifs are more often than no insolvable threats, so it seems logically to assume here that material will be lost, and declare the node non-quiet.
The problem is what to do next. Should I give an extension to see what can be salvaged? Or should I use a null-move score to figure out how bad it is exactly, and return that score (which will likely mean a fail low, where a fail high was needed). Searching all moves is likely to come up with a delaying tactic to push the problem over the horizon. Two ply later the problem will then still exist, and I will still recognize it, but I will have the same problem again, unless I keep extending until I used up all delay moves.
Of course in some cases there might be an unexpected tactical solution to the problem. But in most cases extended searching will just confirm what I don't really want to know: that the node fails low. That means that the move two ply earlier will fail low, and that the search will have to find an alternative cut move. Actually this seems the most sensible recourse anyway: it is in general much easier to prevent, say, a fork, than it is to wrestle yourself out of one. So failing low without further ado might not be so crazy at all. Only if there is no solution there, it becomes attractive to re-examine the evasion possibilities from the fork in the end leave.
A similar argument could apply to null moves. If your initial evaluation of the node tells you there is a bad problem like a fork in a 'cut-node', not only will the null move fail low, but the very much more expensive search of the real moves will have a very high probability of failing low too. It might be cheaper to avoid this position altogether two ply earlier, by picking another move as cut-move there. If you originally played a null-move there, the alternative will also be more expensive. But it has a much higher probability for success to fight off the threat.
Has anyone any ideas on this matter?
When scoring such features, you occasionally encounter positions where the stm has two hanging pieces (e.g. a fork) or a hanging pinned piece. Such motifs are more often than no insolvable threats, so it seems logically to assume here that material will be lost, and declare the node non-quiet.
The problem is what to do next. Should I give an extension to see what can be salvaged? Or should I use a null-move score to figure out how bad it is exactly, and return that score (which will likely mean a fail low, where a fail high was needed). Searching all moves is likely to come up with a delaying tactic to push the problem over the horizon. Two ply later the problem will then still exist, and I will still recognize it, but I will have the same problem again, unless I keep extending until I used up all delay moves.
Of course in some cases there might be an unexpected tactical solution to the problem. But in most cases extended searching will just confirm what I don't really want to know: that the node fails low. That means that the move two ply earlier will fail low, and that the search will have to find an alternative cut move. Actually this seems the most sensible recourse anyway: it is in general much easier to prevent, say, a fork, than it is to wrestle yourself out of one. So failing low without further ado might not be so crazy at all. Only if there is no solution there, it becomes attractive to re-examine the evasion possibilities from the fork in the end leave.
A similar argument could apply to null moves. If your initial evaluation of the node tells you there is a bad problem like a fork in a 'cut-node', not only will the null move fail low, but the very much more expensive search of the real moves will have a very high probability of failing low too. It might be cheaper to avoid this position altogether two ply earlier, by picking another move as cut-move there. If you originally played a null-move there, the alternative will also be more expensive. But it has a much higher probability for success to fight off the threat.
Has anyone any ideas on this matter?