I now cooked up a method to guestimate piece values (as a function of their location, so really piece-square tables). It is based on the idea that the instantaneous value is proportional to the number of squares the piece can move/capture to, plus a factor alpha (<1) times the value it will on average have after its next move (calculated the same way). This averaging does not take any account of the fact that a player would prefer moves to locations where the piece is most valuable, as these are also the moves that the opponent will try most vehemently to prevent. So all moves are weighted equally. In a formula:
value(fromSqr) = nr_of_moves(fromSqr) + alpha * (SUM value(toSqr))/nr_of_moves(fromSqr)
where the SUM runs over all toSqr reachable from fromSqr. This system of equations (one for each board square) can be solved by just starting with the value set to 0 everywhere, and applying the formula repeatedly until the values do not change anymore. (The fact that alpha < 1 ensures that this will converge.)
For sliders it is not obvious what the nr_of_moves is, as the distant moves can be blocked. For this reason I use a second parameter beta, which basically represents the fraction of the board that is empty; for each square we have to pass through to reach the toSqr, we pick up a factor beta. And the average over moves is similarly weighted.
As an example, with beta=0.7 (an early middle-game value) and alpha=0.8 (arbitrarily chosen; this would be an obvious choice for something to tune in games, with an engine that uses the generated PST), I get the following for the orthodox pieces on an 8x8 board:
Code: Select all
Knight
25.24 26.44 27.31 27.87 27.87 27.31 26.44 25.24
26.44 27.74 29.13 29.66 29.66 29.13 27.74 26.44
27.31 29.13 31.18 31.66 31.66 31.18 29.13 27.31
27.87 29.66 31.66 32.26 32.26 31.66 29.66 27.87
27.87 29.66 31.66 32.26 32.26 31.66 29.66 27.87
27.31 29.13 31.18 31.66 31.66 31.18 29.13 27.31
26.44 27.74 29.13 29.66 29.66 29.13 27.74 26.44
25.24 26.44 27.31 27.87 27.87 27.31 26.44 25.24
Bishop
29.13 29.39 29.82 30.04 30.04 29.82 29.39 29.13
29.39 31.07 31.67 32.04 32.04 31.67 31.07 29.39
29.82 31.67 33.27 33.63 33.63 33.27 31.67 29.82
30.04 32.04 33.63 34.78 34.78 33.63 32.04 30.04
30.04 32.04 33.63 34.78 34.78 33.63 32.04 30.04
29.82 31.67 33.27 33.63 33.63 33.27 31.67 29.82
29.39 31.07 31.67 32.04 32.04 31.67 31.07 29.39
29.13 29.39 29.82 30.04 30.04 29.82 29.39 29.13
Rook
37.28 38.56 39.35 39.73 39.73 39.35 38.56 37.28
38.56 39.99 40.86 41.28 41.28 40.86 39.99 38.56
39.35 40.86 41.78 42.21 42.21 41.78 40.86 39.35
39.73 41.28 42.21 42.66 42.66 42.21 41.28 39.73
39.73 41.28 42.21 42.66 42.66 42.21 41.28 39.73
39.35 40.86 41.78 42.21 42.21 41.78 40.86 39.35
38.56 39.99 40.86 41.28 41.28 40.86 39.99 38.56
37.28 38.56 39.35 39.73 39.73 39.35 38.56 37.28
My main reason for doing this was to get an idea for the piece values in Kyoto Shogi. This is a weird game (but popular in Japan), where pieces do not have the same move always, but alternate identity on each move. E.g. a Rook after moving becomes a Pawn, and a Pawn after moving then becomes a Rook. The calculation can handle this, by calculating Rook values from future Pawn values, and vice versa.
The value in Kyoto Shogi can be very different from square to square, because pieces can get stuck: a Rook moving to last rank, turning into a Pawn, would leave that Pawn without moves, and presumably thus without value. There are even pieces that must get stuck: a Gold General alternates with a Knight, and the latter in Shogi only has its two forward-most moves. So each time the Knight moves it advances two ranks, and a Gold General can at most retreat 1 step. So in the end you will be stuck with a Knight on one of the last two ranks, where it cannot move. Such pieces thus have an 'expiration date'. This makes their value decrease sharply as they advance towards the point where they become dead wood.
For example (again with beta = 0.7, and alpha = 0.6, again rather arbitrary, but chosen lower than with the Chess pieces, because in games with drops pieces tend to live quite short before they are captured) I get the following:
Code: Select all
Silver General (alternating with Bishop)
7.48 8.08 8.48 8.08 7.48
8.90 11.00 11.07 11.00 8.90
9.19 11.20 11.55 11.20 9.19
9.03 11.25 11.46 11.25 9.03
8.06 9.31 9.65 9.31 8.06
Bishop (alternating with Silver General)
9.02 9.25 9.55 9.25 9.02
9.18 10.80 11.09 10.80 9.18
9.57 11.25 12.65 11.25 9.57
9.25 10.95 11.34 10.95 9.25
9.00 9.34 9.64 9.34 9.00
Gold General (alternating with (Shogi-)Knight)
2.00 3.00 3.00 3.00 2.00
4.42 6.35 6.38 6.35 4.42
5.25 7.18 7.28 7.18 5.25
6.53 8.65 8.76 8.65 6.53
6.16 8.30 8.34 8.30 6.16
(Shogi-)Knight (alternating with Gold General)
0.00 0.00 0.00 0.00 0.00
0.00 0.00 0.00 0.00 0.00
2.80 3.50 3.80 3.50 2.80
4.81 5.24 5.81 5.24 4.81
5.31 5.76 6.31 5.76 5.31