Quite a change in behaviour! The engine no longer ignores capture opportunities,
but our method has
made it greedy. dbacl is now so greedy that there is no tension left in the game, and
since it doesn't know the value of each piece, it often makes bad bargains.
Unfortunately, there isn't enough data in the PGN format to let dbacl
read off easily the value of an exchange. If you look at the full training
game listed earlier, you'll see many moves marked with an 'x', such as
"cxd4" "Nxd4" "Bxg2" "Kxg2", but none of these moves identifies the
type of the captured piece, only the piece doing the capturing. It's certainly possible to deduce
the relevant piece by replaying all the moves on an imaginary board,
but then our chess engine would no longer act like a spam
filter. Keeping an imaginary board is roughly the equivalent of
understanding the actual meaning of an email.
So dbacl, as a chess-playing-spam-filter, is limited to two things:
it can limit the risk of an exchange, and limit the frequency of exchanges.
To limit risk, if there are several capture scenarios available, it can
always prefer to capture with the least valued piece (since the type of the piece
doing the capturing is known by looking at the move), but note that this doesn't help
when there is exactly one capture move possible.
Limiting the frequency of exchanges would make dbacl less greedy and
refuse to capture pieces all the time. As we noted earlier, dbacl doesn't naturally
tend to capture pieces, so we must find a balance.
We can force a capture when there are two or more capture opportunities. Together
with the risk limitation idea, these types of captures are then performed by
lower value pieces in relative terms.
Clearly, there are endless other things we can try, but there is a price to pay.
As capture rules become heavier and more complex, the original patterns learned by
dbacl from the training games lose their importance. The dbacl chess engine becomes
a hybrid, part ordinary chess engine and part Bayesian text classifier.
I've implemented the two rules above in dce-3.sh. Try it out now.
% chmod +x dce-3.sh
% xboard -fcp ./dce-3.sh