Appendix E: Example Number 1:
Consider this late opening/ early middlegame position, taken
from analysis of a famous correspondence game: Black to move, after the proposed continuation 12.Qe2 Be6 13.Qf2!? (diagram)
Position 1 |
|
Estrin-Berliner (1965-1968) after suggested moves 12.Qe2 Be6 13.Qf2 |
Black has sacrificed a piece for a strong attack, and White has problems
bringing pieces into the game - in fact, the evaluation of the chances in this position depends to some degree on how we score
the white pieces sitting on the back rank. Let's calculate what the data structure looks like for White's
queen bishop, which appears to be a non-contributing piece buried on the back rank. Let's number the squares on the chessboard
from 1 to 64, starting in the bottom left corner and moving from left to right, and then up to the top of the board. White's
Queen would be on square 14.
Earlier we have depicted piece mobility by using "maps". This works for the purpose of explaining
the concept, but a computer would benefit from using a data structure that is flexible and uses numbers rather than pictures
of pieces.
Unfortunately, the data structures used by computers are not easy to read by humans. Nevertheless,
the data structure we use in our evaluaiton function will be critically important, as indicated by these quotations:
the design of data structures is the central decision in the creation of a program. Once the data structures
are laid out, the algorithms tend to fall into place, and the coding is comparatively easy - Brian W. Kernighan and Rob Pike,
The Practice of Programming, p. 61
Much more often, strategic breakthrough will come from redoing the representation of the data or tables.
This is where the heart of a program lies. Show me your flowcharts and conceal your tables, and I shall continue to be mystified.
Show me your tables, and I won't usually need your flowcharts; they'll be obvious... Representation is the essence of programming.
- Frederick P. Brooks, Jr., The Mythical Man-Month, 1995 edition,
p.102-103
the representation that is used to represent a problem is very important.
In other words, the way in which the computer represents a problem, the variables it uses, and the operators it applies to
those variables can make the difference between an efficient algorithm and an algorithm that doesn't work at all. This is
true of all Artificial Intelligence problems, and as we see in the following chapters, it is vital for search...The more difficult
problem is to determine the data structure that will be used to represent the problem we are exploring... When applying Artificial
Intelligence to search problems, a useful, efficient, and meaningful representation is essential. In other words, the representation
should be such that the computer does not waste too much time on pointless computations, it should be such that the representation
really does relate to the problem that is being solved, and it should provide a means by which the computer can actually solve
the problem. - Ben Coppin , Artificial Intelligence Illuminated, p.28-29
1st order mobility table for White bishop at square c1 (for full 1st order piece mobility table,
see Experimental Results)
|
Queen bishop - 1st order mobility map |
#
|
direction
|
square
|
source
|
square contents
|
board
|
1
|
|
|
|
blocked by white pawn, moveable
|
current, create new board position A by moving pawn at square b2 out of the
way
|
2
|
upper right
|
square d2
|
root c1
|
blocked by white pawn, moveable
|
current, create new board position B by moving pawn at square d2 out of the way
|
Each potential move for the Bishop on square 3 generates more entries in the next higher order
mobility table, in a recursive fashion, until we reach a mobility level of 3. It would seem that the benefits from calculating
mobility deeper than 3 moves would be outweighed by the cost (in lost search time) of making the calculations.
Now, for the Bishop on square 3, if we move either of the 2 pawns blocking the bishop at squares
10 and 12, the Bishop is now free to move.
This is the 2nd order mobility table for white bishop at square 3
|
Queen bishop - 2nd order mobility map |
#
|
direction
|
square
|
source
|
square contents
|
board
|
1
|
upper left
|
square 10
|
root 3, 1st order line 1
|
empty after moving a white pawn
|
A
|
2
|
|
|
root 10, 1st order line 1
|
empty
|
A
|
3
|
upper right
|
square 12
|
root 3, 1st order line 2
|
empty after moving a white pawn
|
B
|
4
|
|
|
root 12, 1st order line 2
|
empty
|
B
|
5
|
|
|
root 21, 1st order line 2
|
empty
|
B
|
6
|
|
|
root 30, 1st order line 2
|
empty
|
B
|
7
|
|
|
root 39, 1st order line 2
|
empty
|
B
|
Likewise, each entry in the Bishop's 2nd order mobility table generates entries in the 3rd order
mobility table. Note that in this example we are only concerned with "new" mobility. In reality, we would have separate entries
for each way we can trace mobility - in case one way is blocked we would still be able to trace mobility through other
routes.
|
Queen bishop - 3rd order mobility map |
#
|
direction
|
square
|
source
|
square contents
|
board
|
1
|
|
|
root 10, 2nd order line 1
|
blocked by white rook, not moveable
|
A
|
2
|
|
|
root 10, 2nd order line 1
|
|
A
|
3
|
|
|
root 19, 2nd order line 1
|
blocked by white pawn, not moveable
|
A
|
4
|
|
|
root 17, 2nd order line 2
|
|
A
|
5
|
|
|
root 26, 2nd order line 2
|
|
A
|
6
|
upper right
|
square 44
|
root 35, 2nd order line 2
|
Black Bishop, capturable
|
A
|
7
|
upper left
|
square 19
|
root 12, 2nd order line 3
|
empty
|
B
|
8
|
upper left
|
square 26
|
root 19, 2nd order line 3
|
empty
|
B
|
9
|
upper left
|
square 33
|
root 26, 2nd order line 3
|
empty
|
B
|
10
|
lower right
|
square 5
|
root 12, 2nd order line 3
|
blocked by White King, moveable
|
B
|
11
|
upper left
|
square 28
|
root 21, 2nd order line 4
|
blocked by white pawn, not moveable
|
B
|
12
|
lower right
|
square 14
|
root 21, 2nd order line 4
|
Blocked by White Queen, moveable
|
B
|
13
|
upper left
|
square 37
|
root 30, 2nd order line 5
|
empty
|
B
|
14
|
upper left
|
square 44
|
root 37, 2nd order line 5
|
blocked by Black Bishop, capturable
|
B
|
15
|
lower right
|
square 23
|
root 30, 2nd order line 5
|
blocked by White Knight, moveable
|
B
|
16
|
upper left
|
square 46
|
root 39, 2nd order line 6
|
empty
|
B
|
17
|
upper left
|
square 53
|
root 39, 2nd order line 6
|
empty
|
B
|
18
|
upper left
|
square 60
|
root 39, 2nd order line 6
|
empty
|
B
|
19
|
lower right
|
square 32
|
root 39, 2nd order line 6
|
Blocked by Black Queen, capturable
|
B
|
20
|
upper left
|
square 55
|
root 48, 2nd order line 7
|
Blocked by Black pawn, capturable
|
B
|
So what is the purpose of generating a data structure like this?
We do this so we can better estimate the positional "pressure"
that the Bishop on square 3 is capable of producing in this position. Look at all the facts that we can gather from this
table:
The Bishop can move to squares 10 and 12 in 1 move. It can move
to squares 17,21, 30, 39 and 48 in 2 moves. It can move to squares 1, 19, 28, 26, 35, 44, 33, 5, 28, 14, 37, 23, 46, 53, 60,
32 and 55 in 3 moves.
The Bishop can attack the following enemy pieces in 3 moves:
Bishop on 44, Queen on 32, Pawn on 55.
The Bishop can defend the following friendly pieces in 1 move: pawn
on 10, pawn on 12. The Bishop can defend the following friendly pieces in 3 moves: Rook on 1, Queen on 14, pawn on 28, Knight
on 23. [We can calculate how many moves it takes a piece to "defend" ones own King, but this is pointless because once the
King is captured the game is over.]
The Bishop can, in 3 moves, attack these 2 squares near the enemy
King: squares 53 and 60.
The Bishop is buried on the back rank and presently cannot move.
This might cause a traditional chess program to severely penalize the piece, (it is agreed that this piece is not in the best
possible place on the board). But how much do we penalize it? We would need to see what it was capable of doing, and this
is the purpose of the data structure depicted above.
Experimental source code (October 5, 2007) produces this result, when we process the data to remove
redundant entries:
1st, 2nd & 3rd order mobility tables, automatically generated
for Bishop on c1:
5: root c1 w bishop UpperLeft (c1-b2: w pawn) move[b2-b3 0-0] BLOCKED-F-MOVEABLE-DIRECTIONAL_ISSUE 6:
root c1 w bishop UpperRight (c1-d2: w pawn) move[d2-d3 0-0] BLOCKED-F-MOVEABLE-DIRECTIONAL_ISSUE
18: root c1 w bishop UpperLeft (c1-b2: w pawn) move[b2-b3 0-0] EMPTYFORMOBILITY 19: root c1 w bishop UpperLeft
(c1-a3: empty) move[b2-b3 0-0] EMPTYFORMOBILITY 20: root c1 w bishop UpperRight (c1-d2: w pawn) move[d2-d3 0-0] EMPTYFORMOBILITY 21:
root c1 w bishop UpperRight (c1-e3: empty) move[d2-d3 0-0] EMPTYFORMOBILITY 22: root c1 w bishop UpperRight (c1-f4:
empty) move[d2-d3 0-0] EMPTYFORMOBILITY 23: root c1 w bishop UpperRight (c1-g5: empty) move[d2-d3 0-0] EMPTYFORMOBILITY 24:
root c1 w bishop UpperRight (c1-h6: empty) move[d2-d3 0-0] EMPTYFORMOBILITY
61: root c1 w bishop UpperRight (b2-c3: empty) move[b2-b3 0-0] EMPTYFORMOBILITY 62: root c1 w bishop UpperRight
(b2-d4: w pawn) move[b2-b3 0-0] BLOCKED-F-NOTMOVEABLE 63: root c1 w bishop LowerRight (b2-c1: empty) move[b2-b3 0-0]
EMPTYFORMOBILITY 64: root c1 w bishop LowerLeft (b2-a1: w rook) move[b2-b3 0-0] BLOCKED-F-NOTMOVEABLE 65:
root c1 w bishop UpperRight (a3-b4: empty) move[b2-b3 0-0] EMPTYFORMOBILITY 66: root c1 w bishop UpperRight (a3-c5:
empty) move[b2-b3 0-0] EMPTYFORMOBILITY 67: root c1 w bishop UpperRight (a3-d6: b bishop) move[b2-b3 0-0] BLOCKED-E-CAPTURABLE 68:
root c1 w bishop LowerRight (a3-c1: empty) move[b2-b3 0-0] EMPTYFORMOBILITY 69: root c1 w bishop UpperLeft (d2-c3:
empty) move[d2-d3 0-0] EMPTYFORMOBILITY 70: root c1 w bishop UpperLeft (d2-b4: empty) move[d2-d3 0-0] EMPTYFORMOBILITY 71:
root c1 w bishop UpperLeft (d2-a5: empty) move[d2-d3 0-0] EMPTYFORMOBILITY 72: root c1 w bishop LowerRight (d2-e1:
w king) move[d2-d3 0-0] BLOCKED-F-MOVEABLE 73: root c1 w bishop LowerLeft (d2-c1: empty) move[d2-d3 0-0] EMPTYFORMOBILITY 74:
root c1 w bishop UpperLeft (e3-d4: w pawn) move[d2-d3 0-0] BLOCKED-F-NOTMOVEABLE 75: root c1 w bishop LowerRight
(e3-f2: w queen) move[d2-d3 0-0] BLOCKED-F-MOVEABLE 76: root c1 w bishop LowerLeft (e3-c1: empty) move[d2-d3 0-0]
EMPTYFORMOBILITY 77: root c1 w bishop UpperLeft (f4-e5: empty) move[d2-d3 0-0] EMPTYFORMOBILITY 78: root
c1 w bishop UpperLeft (f4-d6: b bishop) move[d2-d3 0-0] BLOCKED-E-CAPTURABLE 79: root c1 w bishop LowerRight (f4-g3:
w knight) move[d2-d3 0-0] BLOCKED-F-MOVEABLE 80: root c1 w bishop LowerLeft (f4-c1: empty) move[d2-d3 0-0] EMPTYFORMOBILITY 81:
root c1 w bishop UpperLeft (g5-f6: empty) move[d2-d3 0-0] EMPTYFORMOBILITY 82: root c1 w bishop UpperLeft (g5-e7:
empty) move[d2-d3 0-0] EMPTYFORMOBILITY 83: root c1 w bishop UpperLeft (g5-d8: empty) move[d2-d3 0-0] EMPTYFORMOBILITY 84:
root c1 w bishop LowerRight (g5-h4: b queen) move[d2-d3 0-0] BLOCKED-E-CAPTURABLE 85: root c1 w bishop LowerLeft
(g5-c1: empty) move[d2-d3 0-0] EMPTYFORMOBILITY 86: root c1 w bishop UpperLeft (h6-g7: b pawn) move[d2-d3 0-0] BLOCKED-E-CAPTURABLE 87:
root c1 w bishop LowerLeft (h6-c1: empty) move[d2-d3 0-0] EMPTYFORMOBILITY
┌───┬───┬───┬───┬───┬───┬───┬───┐ │
│ │ │ . │ │ │ │
│ ├───┼───┼───┼───┼───┼───┼───┼───┤ │
│ │ │ │ . │ │ . │ │ ├───┼───┼───┼───┼───┼───┼───┼───┤ │
│ │ │ . │ │ . │ │ o │ ├───┼───┼───┼───┼───┼───┼───┼───┤ │
. │ │ . │ │ . │ │ o │ │ ├───┼───┼───┼───┼───┼───┼───┼───┤ │
│ . │ │ . │ │ o │ │ . │ ├───┼───┼───┼───┼───┼───┼───┼───┤ │
o │ │ . │ │ o │ │ . │ │ ├───┼───┼───┼───┼───┼───┼───┼───┤ │
│ ▒ │ │ ▒ │ │ . │ │
│ ├───┼───┼───┼───┼───┼───┼───┼───┤ │
. │ │ B │ │ . │ │ │
│ └───┴───┴───┴───┴───┴───┴───┴───┘ influence
diagram, w bishop on c1.
Our evaluation function might consider a small reward
for the Bishop for each square of potential mobility, possibly less for 2nd and 3rd order mobility. Neil McDonald cautions
in The Art of Planning in Chess that piece mobility in itself is 'often completely meaningless':
p.189"As so often, we need to remind ourselves that it isn't the fortune of the individual piece that
matters - it is how it functions with the other pieces. For this reason it is often completely meaningless to count the number
of squares, in the centre or otherwise, that a piece controls or attacks."
For the above reason, we should consider giving a mobility bonus only
for potential mobility directly traced to enemy pieces (offensive) and to friendly pieces (defensive) .
Additional points will be given if this potential mobility cannot
be constrained by the enemy pieces - we use the term limiting factors [see Systems Engineering and Analysis, 4th Edition, by Blanchard and Fabrycky p.144] to describe the ability of the enemy to constrain the activity of our pieces. Once we have calculated future mobility for the enemy pieces (in a similar fashion),
it can now be determined that the Queen bishop might not be safe on squares 44, 46 and 48 because these squares are attacked
by enemy pawns, and our mobility bonus for the Bishop should be reduced for mobility through these squares.
Position 2 |
|
a bishop with poor mobility |
If we take a look at the Bishop in the above diagram (position 2),
we see that not only is it blocked, but there is little chance that it can move in the near future. Our mobility tables will
recognize that this Bishop is in a far worse position than our Bishop in position 1. Our mobility tables for the Bishop in
position 2 will tell us that it is not possible to move this piece within 3 moves (unless a Black pawn moves away
on its own). A traditional chess program will not be able to make such a fine distinction, and will simply penalize the
Bishop for being on the back rank, possibly noticing in addition that it has no legal moves.
We return now to position 1, and the mobility tables we have generated
for the queen Bishop. As far as collaborative ability, we would need to generate the mobility tables for the other friendly
pieces and see where they overlap, especially if enemy pieces fall in the overlapped area. A friendly piece would be "vulnerable"
if multiple enemy pieces can trace mobility to it. Optionally, we can locate "fork squares" for the enemy pieces (squares
which would permit the simultaneous attack of two pieces by a single piece) and reward mobility to these squares.
Ok, so it is black to move in position 1 above. Black plays 13...Nb4.
Now, how do we update the mobility tables for the Bishop?
The knight is moving from square 36 to square 26. Square 36 does
not show up in the Bishop's mobility table. But square 26 does.
Line 8 of our 3rd order mobility table needs to show that square
26 is occupied by a Black Knight, capturable. Line 9 needs to be deleted because mobility to this square has been traced through
square 26, which now has a piece on it.
Likewise, line 4 of our 3rd order mobility table now shows a Black
Knight occupying square 26 (capturable). Lines 5 and 6 need to be deleted because the mobility to these squares has been traced
through square 26, which now has a piece on it.
And so it goes. Through a complicated process involving pointers
to squares, the mobility tables are dynamically updated when the pieces move, but only those portions of the tables that
are affected by the piece movement. In our example, we made adjustments to 5 lines out of a total of 29. This is much faster
than recalculating the entire mobility of all the pieces. It would appear that most of the mobility tables will remain the
same after a piece moves. This will result in an enormous savings of time and will allow for deeper or more thorough searches
when attempting to find lines of best play in a chess game.
Going back to position 1 above, if Black plays 13...exf3 there is
NO CHANGE in the mobility table for the White Bishop on square 3. The Black pawn moves from square 29 to square 22, which
do not show up at all in the Bishop mobility tables.
The other playable move that Black has in Position 1 is 13...Bxg3.
The mobility tables would change as follows:
Line 6 of the 3rd order mobility table will now show square 44 as
empty. New lines will be added to trace 3rd order mobility to squares 53 and 62 through the newly empty square 44. These squares
(53 and 62) are near the enemy King, and it would make sense to have a "King Safety" Heuristic which penalizes each side based
on the ability of the opponent to trace potential mobility to squares near the King.
Line 14 of the 3rd order table will show square 44 as empty. A new
line in the 3rd order mobility table will show mobility traced to square 51 through square 44.
Line 15 of the 3rd order table now shows square 23 as occupied by
a Black Bishop, capturable.
Now let us return to Position 1 and consider the mobility table
for the pawn at d4. This pawn is blocked by a Black Knight at d5, and cannot capture anything, and so it would seem that since
we have no piece mobility, the pawn has no positional pressure. However, for pawns mobility is not exactly the same
as positional pressure. There are other ways we can estimate the pressure that a pawn is capable of producing
in a particular position.
If a pawn is blocked by an enemy piece, we can increase the bonus
to attack this piece, hopefully making it move away and letting us advance the pawn.
Pawns can move diagonally forward only if there is an enemy piece
present. How can we measure a pawn's ability to threaten to attack an enemy piece if there isn't one there at the moment?
We could look at the enemy piece mobility tables and deduct points for mobility through "stopping points" on these particular
squares.
In our example with the Bishop, line 7 of our 2nd order mobility
table traces mobility of the Bishop to square 48, which is attacked by a Black pawn on square 55. While the Bishop could
move to this square, it is unlikely because the square is attacked by a pawn. The squares diagonally in front of a pawn, therefore,
are unlikely squares for our opponents pieces and we should therefore reduce the bonus awarded for the mobility of the opponent's
pieces through stopping points on the enemy pawns forward diagonal squares.
Pawns (blocked or otherwise) are also scored indirectly - they restrict
the mobility of the other pieces through them, and so their position on the board relative to the other pieces will determine,
to a large extent, the mobility of the pieces. Blocked pawns can become targets because they are unable to move away if attacked.
Once a pawn becomes blocked, we can increase the "defensive" score that rewards our pieces for "defensive behavior". A blocked
pawn is not too bad if it can be defended. It becomes a likely target if it is blocked, not easily defensible, and a remote
target of one or more enemy pieces.
Doubled and isolated pawns start to become true liabilities
when the opponent can attack them and we cannot defend them.
Pawns seem to need a bonus based on how advanced they are. There
seems to be a need for a heuristic which measures the pawn's ability to threaten to promote. Pawn mobility needs to be modified
by the advancement of the pawn and the mobility of a Queen or other piece that would result from a potential pawn promotion.
In example 1, consider the mobility table for the rook at square
8 (algebraic notation: h1)
|
1st order mobility table for Rook at h1 |
|
|
|
|
|
board
|
|
|
|
|
|
current
|
|
|
|
|
blocked by white bishop, moveable
|
current, create new board position A by moving bishop on square 6 out of the way
|
|
|
|
|
blocked by white pawn, moveable.
|
current, create new board position B by moving pawn at square 16 to square 24.
|
Here is the 2nd order mobility table for the White rook on square
8, algebraic h1:
|
|
|
|
|
|
|
|
|
|
Blocked by white pawn, not moveable
|
|
|
|
|
|
empty, White Bishop moved away
|
|
|
|
|
|
Blocked by White King, moveable
|
A, create position C by taking position A and moving King out of the way to square 13
|
|
|
|
|
|
position D - create position D by taking position A and perform kingside castling maneuver
|
5
|
up
|
square 16
|
root 8, 1st order line 3
|
empty, pawn has moved away
|
B
|
6
|
up
|
square 24
|
root 8, 1st order line 3
|
Blocked by white pawn, not moveable
|
B
|
Here is the 3rd order mobility table for the white rook on square
8, algebraic notation h1:
|
|
|
|
|
|
|
|
|
placeholder - no traceable mobility from 2nd order line 1
|
|
|
|
|
|
|
blocked by White queen, moveable
|
|
|
|
|
|
empty - White King moved out of the way
|
|
|
|
|
|
|
|
|
|
|
|
Blocked by White Bishop, not moveable
|
|
|
|
|
|
|
|
7
|
left
|
square 4
|
root 8, 2nd order line 4
|
empty
|
D
|
8
|
left
|
square 3
|
root 8, 2nd order line 4
|
Blocked by White Bishop, not moveable
|
D
|
9
|
up
|
square 15
|
root 7, 2nd order line 5
|
Blocked by white pawn, not moveable
|
B
|
10
|
-
|
-
|
placeholder - no traceable mobility from 2nd order line 6
|
-
|
B
|
Here are the mobility tables for the White King at square 5 (algebraic
notation: e1):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Blocked by white Bishop, moveable
|
current, create board A by moving Bishop out of the way
|
|
|
|
|
Blocked by White pawn, moveable
|
current. create board B by moving pawn out of the way
|
|
|
|
|
Blocked by White Queen, moveable
|
current, create board C by moving Queen out of the way
|
Here is the 2nd order mobility table for the White King. Note that for the King we "deny" mobility
to certain squares if the King would move in to check.
|
|
|
|
|
|
|
|
|
|
Blocked by White Bishop, not moveable
|
current, reconsider Bishop's movement IF pawns at 10 or 12 move.
|
|
|
|
|
|
|
|
|
|
root 13, 1st order line 2
|
empty, but denied by Black pawn at 29
|
current, reconsider denied mobility if pawn at 29 moves
|
|
|
|
root 13, 1st order line 2
|
empty, but denied by Black Knight at 36
|
current, reconsider denied mobility if Black Knight at 36 moves
|
|
|
|
root 13, 1st order line 2
|
Blocked by White pawn and denied by Black pawn at 29
|
current, reconsider denied mobility if Black pawn at 29 moves
|
|
|
|
|
|
|
|
|
|
|
|
position A, create position E by performing Kingside castle
|
|
|
|
|
|
|
|
|
|
|
|
|
Here is the 3rd order mobility table for the White King:
|
|
|
|
|
|
|
|
|
placeholder - no mobility from 2nd order line 1
|
|
|
|
|
|
root 11, 2nd order line 2
|
|
|
|
|
|
root 11, 2nd order line 2
|
blocked by white pawn, moveable
|
|
|
|
|
root 11, 2nd order line 2
|
blocked by white knight, moveable
|
|
|
|
|
placeholder - no mobility from 2nd order line 3
|
|
|
6
|
-
|
-
|
placeholder - no mobility from 2nd order line 4
|
-
|
-
|
7
|
-
|
-
|
placeholder - no mobility from 2nd order line 5
|
-
|
-
|
8
|
upper right
|
15
|
root 6, 2nd order line 6
|
blocked by white pawn, not moveable
|
A
|
9
|
right
|
7
|
root 6, 2nd order line 6
|
empty
|
A
|
10
|
upper right
|
16
|
root 7, 2nd order line 7
|
blocked by white pawn, moveable
|
E
|
11
|
right
|
8
|
root 7, 2nd order line 7
|
empty
|
E
|
12
|
-
|
-
|
placeholder - no new mobility traced from 2nd order line 8
|
-
|
-
|
13
|
upper right
|
23
|
root 14, 2nd order line 9
|
blocked by white knight, moveable, but denied by black queen at square 32
|
C
|
┌───┬───┬───┬───┬───┬───┬───┬───┐ │
│ . │ │ . │ . │ . │ . │ │ ├───┼───┼───┼───┼───┼───┼───┼───┤ │
. │ . │ . │ . │ . │ o │ . │ . │ ├───┼───┼───┼───┼───┼───┼───┼───┤ │
. │ . │ . │ . │ . │ o │ . │ o │ ├───┼───┼───┼───┼───┼───┼───┼───┤ │
. │ o │ . │ . │ . │ o │ o │ . │ ├───┼───┼───┼───┼───┼───┼───┼───┤ │
. │ . │ o │ ▒ │ o │ o │ . │ o │ ├───┼───┼───┼───┼───┼───┼───┼───┤ │
o │ o │ o │ o │ ▒ │ ▒ │ ▒ │ . │ ├───┼───┼───┼───┼───┼───┼───┼───┤ │
. │ o │ o │ ▒ │ ▒ │ Q │ ▒ │ o │ ├───┼───┼───┼───┼───┼───┼───┼───┤ │
│ . │ . │ o │ ▒ │ ▒ │ ▒ │ o │ └───┴───┴───┴───┴───┴───┴───┴───┘ influence
diagram, w queen on f2.
┌───┬───┬───┬───┬───┬───┬───┬───┐ │
│ │ . │ │ . │ │ . │ │ ├───┼───┼───┼───┼───┼───┼───┼───┤ │
│ . │ │ . │ o │ . │ o │ . │ ├───┼───┼───┼───┼───┼───┼───┼───┤ │
. │ │ . │ o │ . │ o │ . │ o │ ├───┼───┼───┼───┼───┼───┼───┼───┤ │
│ . │ o │ . │ │ ▒ │ o │ ▒ │ ├───┼───┼───┼───┼───┼───┼───┼───┤ │
. │ │ . │ o │ ▒ │ o │ . │ o │ ├───┼───┼───┼───┼───┼───┼───┼───┤ │
│ . │ o │ . │ o │ . │ N │ . │ ├───┼───┼───┼───┼───┼───┼───┼───┤ │
. │ │ . │ o │ ▒ │ o │ . │ . │ ├───┼───┼───┼───┼───┼───┼───┼───┤ │
│ . │ o │ . │ │ ▒ │ o │ ▒ │ └───┴───┴───┴───┴───┴───┴───┴───┘ influence
diagram, w knight on g3.
Look at all this information we can extract from the position of the pieces on the board.
Note that the Queen mobility to squares f5, f6 and f7 can be accomplished in 2 moves if we play
the capture move f3xe4 on move 1.
|