Bi dimensional statis evaluation
Posted: Sat Apr 21, 2012 1:31 am
The static score of a position is just a number. The major purpose of this number is to establish a preference order of the positions we encounter during the search.
But when doing futility pruning we misuse this number to decide if it makes sense to search further on some (perhaps hopeless) variant or we can safely stop the search on that tree part. Some margins are considered which we subtract from alpha (or beta) and if we are below, we consider the position not to be promising enough compared to what we already have. I can imagine this works very well in a lot of positions, but it seems to me to be an unnecessary constraint.
I propose to static evaluate 2 numbers per position:
- the score - what we do now, perhaps with less components
- the tension - a number which express somehow the potential of the position, kind of unquietness.
We will use the score just normal in the alpha-beta search, but when we ponder about pruning the tree under some position we would use the sum score+tension and compare with the current alpha. If we are below, we decide it will not pay off to continue search on that way.
What is the advantage? Well, first we make the "margin" (which is the tension) actually depending on the position (and is not fix, like now). And second, we can tune the evaluation of tension differently from score - which for me is the most promising issue!
In the tension there will be terms like "attacked pieces" - which, for themselves are not directly an advantage, but could make the continuation interesting enough. Those terms of course would disappear from the score. Perhaps this will even avoid parts of the quiescent search, if we are lucky (let's say we just lost the queen but are attacking one knight - the last move we don't need to make anymore).
But when doing futility pruning we misuse this number to decide if it makes sense to search further on some (perhaps hopeless) variant or we can safely stop the search on that tree part. Some margins are considered which we subtract from alpha (or beta) and if we are below, we consider the position not to be promising enough compared to what we already have. I can imagine this works very well in a lot of positions, but it seems to me to be an unnecessary constraint.
I propose to static evaluate 2 numbers per position:
- the score - what we do now, perhaps with less components
- the tension - a number which express somehow the potential of the position, kind of unquietness.
We will use the score just normal in the alpha-beta search, but when we ponder about pruning the tree under some position we would use the sum score+tension and compare with the current alpha. If we are below, we decide it will not pay off to continue search on that way.
What is the advantage? Well, first we make the "margin" (which is the tension) actually depending on the position (and is not fix, like now). And second, we can tune the evaluation of tension differently from score - which for me is the most promising issue!
In the tension there will be terms like "attacked pieces" - which, for themselves are not directly an advantage, but could make the continuation interesting enough. Those terms of course would disappear from the score. Perhaps this will even avoid parts of the quiescent search, if we are lucky (let's say we just lost the queen but are attacking one knight - the last move we don't need to make anymore).