Henk wrote:Alternative is a search factory that creates a search for a robot with an evaluation state using an evaluation strategy (composite) that updates its behavior depending on the position.
I want two robots playing chess with different evaluation strategies and see which one plays best.
So you need two evaluations.
I'm not sure what you mean. If you mean that the engine creates two different robots evaluating the same position from the same player's point of view, using the same minimax search routine for both robots, just with different static evaluation functions, and then chooses one of the two moves that the robots report, this strategy has already been implemented by Ed Schroder in
ProDeo 2.2. It results in a more entertaining
style of play if one of the robots is set to be very aggressive. However, this approach doubles the search time and I doubt that it gives better results in terms of the playing
strength than just searching twice more nodes with one robot.
If you mean that one of the robots analyses the game tree from White's point of view while the other analyses the game tree from Black's viewpoint, this might give an improvement, but you have to change the principle that the side to move uses to select the best move. A typical chess engine assumes that the opponent uses the same evaluation function, thus every position that the opponent evaluates as good is necessarily evaluated as bad for the acting engine, e.g. a position that the Black opponent evaluates as equivalent to being a pawn up, the White agent automatically considers equivalent to being a pawn down.
Whereas if different evaluation functions are used, it's sometimes better to make a move which would be worse if the opponent used the same function but which, in fact, creates a complicated position and prompts the weak opponent with inferior evaluation to play bad moves, than to make a perfect move that would allow the opponent to play perfectly too because the position would be easy for the opponent to analyse. Such a provocative style of play takes extra time to calculate too, but this time is probably well spent. The difficulty is that it's hard to estimate the probability of an imperfect opponent making a mistake. So most (if not all) chess engines take a safe approach and make Nash equilibrium moves, assuming that the opponent will always play the best moves.
I suspect that the static evaluation function of Fizbo 1.9 is tuned in a fashion that encourages it to make speculative moves creating a situation where its opponent will start making even worse moves, though we can't tell it for sure as Fizbo's source code is closed.
Fizbo seems to deliberately try to steer the game towards position types where most usual chess engines tend to make mistakes but Fizbo itself excels. (That's what human masters do.) For example, it likes exchanges resulting in material or positional imbalances, sometimes makes the pawn structure closed so that the opponent evaluates the position as drawn, while Fizbo itself is ready to open the position with a sacrifice at a convenient moment.
Another example is that Fizbo likes to play into variations where it can sacrifice a piece by putting it en prise and the reason for that sacrifice is revealed a lot of moves later. Putting a piece en prise (as opposed to capturing a less valuable piece or pawn) is Fizbo's favourite method of sacrifice, for a good reason: if the position that arises after taking that hanging piece is at a leaf of the opponent's search tree, the opponent typically evaluates the position as quiescent and won due to the material advantage and is too 'lazy' to search such a variation deeper and try to find out if putting that piece en prise makes sense for Fizbo or not. Whereas if the sacrifice was a capture (of a less valuable piece or pawn), the opponent would make a
recapture extension, search a bit deeper into that variation and detect that the sacrifice is correct and the variation should be avoided.
I'm not a programmer, though. I don't understand the computational costs well enough.