Using Genetic Algorithms to Learn Weights for Simple King-Pawn Chess Endgames

Machine Learning, CS 6350, Final Project
Chris Wyman

Abstract

Chess is a complex game. Even in the endgame, a seemingly minor mistake can change the outcome of the game from a win or loss to a draw. In king-pawn endgames a single mistake can irrevocably change the position from won to drawn. In other types of endgames, numerous useless moves can be performed without affecting the outcome of the game. Thus, king-pawn endgames need to be carefully examined to determine which factors are most important in determining the best move. Most human players determine the best move from experience. Unfortunately, this is probably unrealistic for computer players, especially those with limited storage space. This paper describes a method using genetic algorithms whereby a program, by playing itself repeatedly, can learn weights for numerous board attributes. Numerous experiments using this algorithm show that this method can to some extent learn how to play these deceptively simple endgames.

1: Introduction

Much work in the AI community has been invested in computer chess programs. Part of the reason for this intense popularity in the research community is the difficulty of the problem of creating a good computer player and the popularity of the game in the public at large. The complexity of chess is on the order of 10120 unique games[1], which puts a complete search beyond the reach of any computer available anytime in the forseeable future. So, advanced heuristics and AI techniques are necessary to allow a computer to provide a challenge for a human player.

Even the specific king-pawn endgames discussed in this paper are not without their complexities. For example, the toughest king-pawn vs. king endgame requires 28 moves to win, with best play[2]. Furthermore, these endgames require very precise play. One misstep in these volitile endgames can change a win into a draw, or vice versa (see Figure 1). Even in such simple endgames, a brute force search is not very promising. With up to 9 legal moves per turn, and as many as 56 turns (28 per side), even this problem seems difficult.

So, after dismissing the brute force method, one must look for hueristics and use other AI techniques. Yet, for such a simple endgame, these can be deceptively complex. Thus, instead of trying to hand tweak these heuristics, using machine learning techniques could prove very valuable.

In this paper, a method of learning which endgame concepts are most important is presented. The goal is to learn how to win theoretically won positions when the computer plays the winning side, and to draw any positions possible when playing the losing side. The experiments show that this method looks promising, and learns strategies that most good chess players use on a regular basis.



2: Problem Decription

The problem described in this paper is a pared down chess endgame, aimed at testing the algorithm without getting bogged down by the complexities of chess. In a normal chess game, there are two players, white and black, both starting out with 16 pieces of 6 different types. In this paper, the focus is on specific positions that occur at the very end of games. In these positions, a subset of positions called king-pawn endgames, the player controlling the white pieces (referred to as the White Player) has one king and one pawn, while the black player has just a king (see Figure 1).


Figure 1: Even in simple king-pawn endgames, one move can often make the difference between a draw and a loss.

2.1: Piece Movement

The first important concept in chess is attacking. Piece A attacks piece B if A and B are different colors and B lies on a square to which A can legally move.

Second is the concept of a capture. If a white piece attacks a black piece, and black neglects to move the attacked piece, white may capture the piece on his next move. When capturing a piece, the attacked piece is removed from the game, and the attacking piece moves to the square previously inhabited by the captureded piece.

Next, a king can move to any of the squares immediately adjacent to it (as in Figure 2), unless the king would be attacked after moving. Thus, two kings can never be immediately adjacent to each other, because they would be mutually attacking each other.

Pawns have slightly more complicated movements, and are the exception to the attacking rule. They can move forward one space (or two if on their original position), but they do not attack these squares. Pawns attack squares diagonally in front of them, but cannot move diagonally unless they capture a piece in the process (see Figure 3). This means that a black king can legally move in front of a white pawn, but may not legally move diagonally in front of a white pawn. (See Appendix A for examples of legal moves in specific positions.) Once a pawn reaches the opposite side of the board from which is started on, it becomes a queen, the most powerful piece in the game. This is called queening a pawn.


Figure 2: Legal king moves on an open board


Figure 3a: Legal moves for a pawn on its original position.

Figure 3b: Legal moves for a pawn not on its original position.

2.2: Ending the Game

A player wins in chess when his opponent's king is attacked and has no legal moves. This is called a checkmate.

A game results in a draw if one of four conditions occurs:

  1. A player cannot legally make any move, and his king is not under attack.
  2. Neither player has enough pieces to force a win (for instance of both sides have only a king).
  3. There are no captures or pawn moves for 50 straight move pairs (one white move plus one black move).
  4. A position is repeated 3 times.

Noting a few things can help simplify implementation of these rules. First, since the computer will be playing itself, a position repeated 3 times will be repeated infinitely (since it will always do the same move in the same position), and thus will cause more than 50 moves without a capture or a pawn move. Second, since queen and king versus king endgames are trivial and a simple algorithm can be written to lead to a win, the goal of this paper focuses on obtaining a queen by queening the white pawn (or preventing this as black). Thus, in the implementation, queening a pawn is defined as a win as long as it cannot be immediately captured by black.

2.3: Project Goals

The goal of almost every game is to win. If it is no longer possible to win a game, then next goal becomes to tie the game. Thus, the goal of this project is to learn how to win when playing white, at least whenever it is possible to win. And when playing black, the goal is to hold out for a draw.

3: Method

The method described in this paper makes use of a common machine learning technique called Genetic Algorithms (or GA). Genetic algorithms try to imitate the real life Darwinism of "survival of the fittest". The basic concept behind a GA is a population is examined via a fitness function to determine the members who are most fit. Based upon their fitness values, population members are allowed to continue to the next generation alive and unchanged, reproduce with other members of the population, or to die out without leaving a legacy. Also, to avoid getting stuck in local maxima, mutation is also imitated.

3.1: Population and Fitness Function

The population used for this project consists of numerous chess players, each containing its own bitstream of DNA. Chunks of this bitstream represent weights determining the importance of various board attributes. Sixteen of these board attributes are used, and they should all be familiar to the avid chess player. They are described below in section 3.2.

To determine which of the chess players in the population is most "fit," a function to evaluate their fitness is required. The fitness function used for this paper depended on each player playing a number of games and examining the results, exactly like a chess tournament. However, unlike a tournament there are more than 3 outcomes for a game. For instance, a player never wants to lose, but when a player loses unexpectedly that is worse than losing a game that player was expected to lose. Furthermore, when black unexpectedly draws a game, that is good because he should have lost, whereas when white unexpectedly draws a game, that is bad because he should have won. Thus, this method takes into account eight different outcomes for a game. Each outcome has a different weight, taking into account how good or bad that outcome is. Thus, the fitness function is:

( EXPECTED_WIN_WEIGHT * # won games which were expected +
UNEXPECTED_WIN_WEIGHT * # games won unexpectedly +
GOOD_EXPECTED_DRAW_WEIGHT * # games drawn as black which were expected +
BAD_EXPECTED_DRAW_WEIGHT * # games drawn as white which were expected +
GOOD_UNEXPECTED_DRAW_WEIGHT * # games unexpectedly drawn as black +
BAD_UNEXPECTED_DRAW_WEIGHT * # games unexpectedly drawn as white +
EXPECTED_LOSS_WEIGHT * # lost games which were expected +
UNEXPECTED_LOSS_WEIGHT * # games lost unexpectedly ) ÷
# games played total

Notice that to normalize this value (in case different player play a different number of games), the total is divided by the number of games played. Also, to encourage quick wins for white and quick draws for black, a minor modification to this fitness function adds a small bonus depending on the length of the game (either positive or negative, depending on the outcome).

3.2: Board Attributes

A total of 16 attributes were used to describe the position to the computer. The idea is that the GA will learn weights for these 16 attributes to determine which are most important. To decide which move to take in any given position, the board is evaluated using these attributes, the results are multiplied by the weights determined by the GA, and the move with the highest score is chosen. Note that all attributes return values between 0 and 1 (inclusive).

The first attribute is a check if this move will lead to a drawn position. Obviously, if the black player sees this, it would be an excellent choice. If the white player notices a drawn position, he should avoid it at all costs. A similar attribute checks if a piece is captured. Once again, a captured piece would be good for black, and bad for white.

The next attribute deals with opposition. Opposition (see Figure 4) means that whoever moves next has highly restricted king movement in some directions. This restricted movement tends to be bad for whichever player must move next. Another attribute checks if by moving to a certain square you avoid the possibility of your opponent moving into opposition.

Figure 4: The two types of opposition

Staying in front of the pawn is important for both kings. If black's king is ever behind the pawn, he automatically loses, since white can just march the pawn forward without interference. If white is behind the pawn, black has a much higher chance of drawing.

A number of movement and protection attributes exist. For example, moving the white pawn forward, and moving towards the pawn are both important. Also, it is obvious that white wants to protect his pawn to avoid black from capturing it, but a number of squares are also valuable to protect, both for white and black. To control the queening square is a very important goal for instance, since control of this square allows white to protect a queened pawn, and potentially allows black to capture the new queen.

4: Experimentation

Due to the number of variables, a large number of experiments needed to be run. In fact, due to computing and time limitations, many of the later experiments were guided by examining the earlier experiments to determine which parameters needed to be tweaked. Some of the variables modified throughout the experiments were: population size, mutation rate, number of generations, number of attributes, number of bits per attribute, number of initial board configurations, and the tournament style used to determine which players compete. An example program trace appears in Appendix B.

In initial experiments, each generation consisted of 100 players with 4-bit attribute weights. These players played each other in a round robin fashion on a single starting board configuration. However, with only a single board the algorithm overfitted to the specifics of that position, and generally only played well against the computer generated opponents -- whenever playing human opponents, it played poorly.

So, the next experiment added additional boards. New board positions were determined by finding positions where all learned players played poorly. This worked well, up to the point where more than 10 boards were used. With 10 boards, each generation consisted of a around 100,000 games for a population with 100 players, which roughly correlates to 5 minutes of computation.

Next, instead of using a true round-robin tournament a random factor was introduced, and each game had some random chance of being played. This decreased the computation time per generation and allowed a further increase in the number of board positions to 21. With 21 board configurations, the learned players won some positions when playing white against human players, and hold a human to a draw sometimes as black.

Because of the time consumed by playing a round robin tournament each generation, a bootstrapping method was devised which took significantly less computation time. In this method, a default black player was hard coded, and in each generation every member of the population played this default player on the same 21 boards. This learned a white player which played optimally against the default black player. This white player was then used as an input to learn an optimal black player, and that black player to learn a new optimal white player. After repeating through a three iterations, this led to a perfect black player, which could hold a human to a draw in all drawn positions. The white player learned this way could only win 4 of the 14 won positions consistantly. However, in 2 of the other positions a human player could only force a draw by following a specific sequence of moves (though not necessarily the best moves).

Two different baselines can be considered as valid comparisons. Random moves get good results (a win as white or a draw as black) in about 0.5% of the games. A better baseline results from hard coding a player with some simple attribute weights. Doing this gives good results in about 20% of the games (4 of the 21 games -- 2 wins as white, and 2 draws as black).

Due to a lack of weights available in a 4-bit system, one potential improvement was to allow for a greater variety of weights values. Thus, the number of bits per weight was increased to 8 bits, with both positive and negative values allowed (-128 to 127). Unfortunately, this did not improve the performance of the system. Possible reasons for this are discussed below in section 6.

5: Results

One example of a learned player follows in Figure 5. This player was learned using the 4-bit bootstrapping method after 3 bootstrapping iterations. The player was trained on 18 boards using a mutation rate of 10%.


a) Initial position

b) White's first move

c) Black's first move

d) White's second move

e) Black's second move

f) White's third move

g) Black's third move

h) Final position
Figure 5: Example game played by learned player as white against a human black player.

A few behaviors to notice in the white player in Figure 5: his king remains immediately next to the pawn the entire game, the pawn is aggressively moved forward, and the king remains in front of or beside the pawn (never behind it).

Further examples are attached and discussed in Appendix C.

6: Conclusions and Further Work

Originally, it looked like the 4-bit weighting scheme might be too simple minded to usefully weight the attributes in order to capture all the behaviors necessary. Fortunately, this did not turn out to be the case, at least for the black player. However, neither the 4-bit nor the 8-bit scheme captured the ideal behavior for a white player.

Possibly, king pawn endgames are just too complicated to capture with a single "behavior" which would work in all circumstances. As mentioned previously, many chess players rely on experience to determine the best move in any given position. Potentially this means no single set of weights could accurately predict the best move in all situations.

Furthermore, dependancies were allowed in the attributes. For instance, both the attributes "capture a piece" and "is game a draw" would return true (a value of one) if black captured white's pawn. Similarly, other attributes have dependencies, some more obvious than others. It is possible that these dependancies intrinsically forced some attributes to be worth more than others, making it more difficult for the GA to discover the best player.

Still, it is impressive that this method can learn enough to hold a human player to a draw in all of the drawn test cases and that it can capitalize on mistakes to force a draw in other, theoretically lost positions. This result is defintely above the baseline of 20%. Even the result of 4 wins out of 14 possible wins as white is above the baseline. So it appears this method learns something, just not enough to play a "perfect" endgame.

An extention to this work which looks promising would be to extend this to more complicated king-pawn endgames like two pawns and a king versus a king or a king and a pawn versus a king and a pawn. Unfortunately, before pursuing such goals, a decent player needs to be learned to handle this simpler case as white.

7: References

[1] Computer Chess Develops. http://whyfiles.news.wisc.edu/040chess/main4.html

[2] The Sniper III Chess Program. http://www.infiniteloop.org/chess.html










Appendix A:


Examples of legal and illegal moves for white. Note how the kings cannot approach each other, and the pawn may only move straight, since it cannot capture a piece by moving diagonally.


Examples of legal and illegal moves for black. Once again, notice that the kings cannot approach each other, and the king cannot move diagonally in front of the pawn (but can move in front of the pawn and can capture the pawn).

Appendix B:

Below is a sample trace file generated by the GA program. All parameters are specified at the beginning of the file unless using the program defaults. In this case, a default mutation rate is used, which starts at 10%, is reduced by 0.95 each generation (i.e. second generation mutation rate is 9.5%), with the minimum mutation rate being 1%. The middle portion of the output is removed to save space.

The data displayed every 10 generation is of the form:
<rank> <internal name> <genetic code> <fitness> <win/draw/loss counters>
Population Size: 200
Print status every 10 generations.
Using 150 generations.
Using board file 'all.boards'.
Will write best player to file 'run.11.26.player4'...
Using a black player from file 'run.11.26.player3'...

Playing Games...
Generation 1..........
Generation 2..........
Generation 3..........
Generation 4..........
Generation 5..........
Generation 6..........
Generation 7..........
Generation 8..........
Generation 9..........
Generation 10..........
0) Pop10-141: (161aa391e91400da), Fit: 8.79 (w 12 0) (d 0 4 0 1) (l 0 0)
1) Pop10-121: (092bc1a6fd0351dc), Fit: 8.73 (w 12 0) (d 0 4 0 1) (l 0 0)
2) Pop10-12: (02fbc291fd4300de), Fit: 8.54 (w 12 0) (d 0 4 0 1) (l 0 0)
3) Pop10-168: (16cd74c6fd1300de), Fit: 8.36 (w 12 0) (d 0 4 0 1) (l 0 0)
4) Pop10-2: (001e6145e91452f0), Fit: 7.14 (w 11 0) (d 0 4 0 2) (l 0 0)
5) Pop10-17: (001e61c7d22f01de), Fit: 7.14 (w 11 0) (d 0 4 0 2) (l 0 0)
6) Pop10-115: (004f71c7d22f01de), Fit: 7.14 (w 11 0) (d 0 4 0 2) (l 0 0)
7) Pop10-151: (004ec15af21237f4), Fit: 7.14 (w 11 0) (d 0 4 0 2) (l 0 0)
8) Pop10-170: (1e1e61c6c51451fe), Fit: 7.14 (w 11 0) (d 0 4 0 2) (l 0 0)
9) Pop10-193: (001ec5baf21237ac), Fit: 7.14 (w 11 0) (d 0 4 0 2) (l 0 0)
10) Pop10-198: (0eafe5e6f21237ac), Fit: 7.14 (w 11 0) (d 0 4 0 2) (l 0 0)
11) Pop10-179: (7d2bc1a6fd1250da), Fit: 7.08 (w 11 0) (d 0 4 0 2) (l 0 0)
12) Pop10-0: (161ea391e91400da), Fit: 7.04 (w 11 0) (d 0 4 0 2) (l 0 0)
13) Pop10-25: (161dc5f1c22f00de), Fit: 7.04 (w 11 0) (d 0 4 0 2) (l 0 0)
14) Pop10-29: (101dc291e42f00de), Fit: 7.04 (w 11 0) (d 0 4 0 2) (l 0 0)
15) Pop10-33: (161e6151d21600de), Fit: 7.04 (w 11 0) (d 0 4 0 2) (l 0 0)
16) Pop10-34: (161e6151d21600de), Fit: 7.04 (w 11 0) (d 0 4 0 2) (l 0 0)
17) Pop10-48: (161a0291c21600de), Fit: 7.04 (w 11 0) (d 0 4 0 2) (l 0 0)
18) Pop10-49: (161dc5c5e94200de), Fit: 7.04 (w 11 0) (d 0 4 0 2) (l 0 0)
19) Pop10-50: (161a0291c22f00de), Fit: 7.04 (w 11 0) (d 0 4 0 2) (l 0 0)
20) Pop10-66: (301ec5caf21600d9), Fit: 7.04 (w 11 0) (d 0 4 0 2) (l 0 0)
21) Pop10-67: (101ea391c91400da), Fit: 7.04 (w 11 0) (d 0 4 0 2) (l 0 0)
22) Pop10-78: (161dc5c5e94600de), Fit: 7.04 (w 11 0) (d 0 4 0 2) (l 0 0)
23) Pop10-80: (001e6291c22f01de), Fit: 7.04 (w 11 0) (d 0 4 0 2) (l 0 0)
24) Pop10-110: (101ea326e91400da), Fit: 7.04 (w 11 0) (d 0 4 0 2) (l 0 0)
25) Pop10-113: (101dc291e42f00de), Fit: 7.04 (w 11 0) (d 0 4 0 2) (l 0 0)
26) Pop10-114: (101dc291e42f00de), Fit: 7.04 (w 11 0) (d 0 4 0 2) (l 0 0)
27) Pop10-122: (001dc291e94600dc), Fit: 7.04 (w 11 0) (d 0 4 0 2) (l 0 0)
28) Pop10-130: (161a0291c22f00de), Fit: 7.04 (w 11 0) (d 0 4 0 2) (l 0 0)
29) Pop10-131: (161dc5f1c22f00de), Fit: 7.04 (w 11 0) (d 0 4 0 2) (l 0 0)
30) Pop10-132: (161a02c7d21400de), Fit: 7.04 (w 11 0) (d 0 4 0 2) (l 0 0)
31) Pop10-135: (171e61c7d21f00de), Fit: 7.04 (w 11 0) (d 0 4 0 2) (l 0 0)
32) Pop10-140: (161e0291c21a00de), Fit: 7.04 (w 11 0) (d 0 4 0 2) (l 0 0)
33) Pop10-162: (361ec5b7d21400de), Fit: 7.04 (w 11 0) (d 0 4 0 2) (l 0 0)
34) Pop10-186: (004dc5c5e94601de), Fit: 7.04 (w 11 0) (d 0 4 0 2) (l 0 0)
35) Pop10-197: (2d1d75c5721600da), Fit: 7.04 (w 11 0) (d 0 4 0 2) (l 0 0)
36) Pop10-7: (161ec5caf21237ac), Fit: 7.03 (w 11 0) (d 0 4 0 2) (l 0 0)
37) Pop10-38: (261e615af24600d9), Fit: 7.03 (w 11 0) (d 0 4 0 2) (l 0 0)
38) Pop10-54: (004f61c7f22f01de), Fit: 7.03 (w 11 0) (d 0 4 0 2) (l 0 0)
39) Pop10-58: (120a0291f42f00de), Fit: 7.03 (w 11 0) (d 0 4 0 2) (l 0 0)
40) Pop10-90: (2e1e61caf21200d9), Fit: 7.03 (w 11 0) (d 0 4 0 2) (l 0 0)
41) Pop10-92: (021e61c7f21f01dc), Fit: 7.03 (w 11 0) (d 0 4 0 2) (l 0 0)
42) Pop10-96: (160e6175e94634de), Fit: 7.03 (w 11 0) (d 0 4 0 2) (l 0 0)
43) Pop10-108: (161e61b5e21200de), Fit: 7.03 (w 11 0) (d 0 4 0 2) (l 0 0)
44) Pop10-139: (091e615af21237ac), Fit: 7.03 (w 11 0) (d 0 4 0 2) (l 0 0)
45) Pop10-152: (120a0291f42f00d5), Fit: 7.03 (w 11 0) (d 0 4 0 2) (l 0 0)
46) Pop10-156: (167e6171e21400de), Fit: 7.03 (w 11 0) (d 0 4 0 2) (l 0 0)
47) Pop10-161: (101e61c5e92021de), Fit: 7.03 (w 11 0) (d 0 4 0 2) (l 0 0)
48) Pop10-172: (001a61c7d214245a), Fit: 7.03 (w 11 0) (d 0 4 0 2) (l 0 0)
49) Pop10-19: (064f11c7711200d8), Fit: 7.00 (w 11 0) (d 0 4 0 2) (l 0 0)
50) Pop10-6: (004ec15af24672f4), Fit: 6.92 (w 11 0) (d 0 4 0 2) (l 0 0)
51) Pop10-15: (095c517af21237ac), Fit: 6.92 (w 11 0) (d 0 4 0 2) (l 0 0)
52) Pop10-18: (10cdc5b5e21600de), Fit: 6.92 (w 11 0) (d 0 4 0 2) (l 0 0)
53) Pop10-21: (004ec1c7d21452f4), Fit: 6.92 (w 11 0) (d 0 4 0 2) (l 0 0)
54) Pop10-32: (00cdc5b5e21232ac), Fit: 6.92 (w 11 0) (d 0 4 0 2) (l 0 0)
55) Pop10-40: (12fac5caf21700de), Fit: 6.92 (w 11 0) (d 0 4 0 2) (l 0 0)
56) Pop10-71: (16fc7193c22f00de), Fit: 6.92 (w 11 0) (d 0 4 0 2) (l 0 0)
57) Pop10-73: (01cdc5c6c51451f0), Fit: 6.92 (w 11 0) (d 0 4 0 2) (l 0 0)
58) Pop10-88: (301e617ef21234d8), Fit: 6.92 (w 11 0) (d 0 4 0 2) (l 0 0)
59) Pop10-99: (02cd95caf21700de), Fit: 6.92 (w 11 0) (d 0 4 0 2) (l 0 0)
60) Pop10-127: (10cdc5b5e21434de), Fit: 6.92 (w 11 0) (d 0 4 0 2) (l 0 0)
61) Pop10-154: (16fc7193c22f00de), Fit: 6.92 (w 11 0) (d 0 4 0 2) (l 0 0)
62) Pop10-155: (004ec15af24672f4), Fit: 6.92 (w 11 0) (d 0 4 0 2) (l 0 0)
63) Pop10-173: (12fec5caf21700de), Fit: 6.92 (w 11 0) (d 0 4 0 2) (l 0 0)
64) Pop10-187: (00cf71c7d22f00dc), Fit: 6.92 (w 11 0) (d 0 4 0 2) (l 0 0)
65) Pop10-134: (02fc7193c22400de), Fit: 6.89 (w 11 0) (d 0 4 0 2) (l 0 0)
66) Pop10-1: (02cd91c6fd1921de), Fit: 6.82 (w 11 0) (d 0 4 0 2) (l 0 0)
67) Pop10-24: (064f117ef11211d8), Fit: 6.82 (w 11 0) (d 0 4 0 2) (l 0 0)
68) Pop10-60: (001e61c7d214d2a9), Fit: 6.82 (w 11 0) (d 0 4 0 2) (l 0 0)
69) Pop10-68: (001e61c7d2139125), Fit: 6.82 (w 11 0) (d 0 4 0 2) (l 0 0)
70) Pop10-106: (160e61f5e212d19a), Fit: 6.82 (w 11 0) (d 0 4 0 2) (l 0 0)
71) Pop10-126: (30ce61c7d21600d8), Fit: 6.82 (w 11 0) (d 0 4 0 2) (l 0 0)
72) Pop10-150: (001e61caf24672ac), Fit: 6.82 (w 11 0) (d 0 4 0 2) (l 0 0)
73) Pop10-163: (171e61c5e212d2ae), Fit: 6.82 (w 11 0) (d 0 4 0 2) (l 0 0)
74) Pop10-166: (161e65b5e212d19e), Fit: 6.82 (w 11 0) (d 0 4 0 2) (l 0 0)
75) Pop10-190: (02ce61c7d214245a), Fit: 6.82 (w 11 0) (d 0 4 0 2) (l 0 0)
76) Pop10-16: (32cd917ef23200d8), Fit: 6.75 (w 11 0) (d 0 4 0 2) (l 0 0)
77) Pop10-137: (2eafe5e6fd4350a9), Fit: 6.72 (w 11 0) (d 0 4 0 2) (l 0 0)
78) Pop10-51: (30ce61c7d21434d8), Fit: 6.71 (w 11 0) (d 0 4 0 2) (l 0 0)
79) Pop10-188: (02fcc2caf21237ac), Fit: 6.71 (w 11 0) (d 0 4 0 2) (l 0 0)
80) Pop10-118: (001e61c7d202d2a9), Fit: 6.69 (w 11 0) (d 0 4 0 2) (l 0 0)
81) Pop10-178: (00fcc5caf20337ae), Fit: 6.68 (w 11 0) (d 0 4 0 2) (l 0 0)
82) Pop10-8: (2eafe5e6fd439125), Fit: 6.65 (w 11 0) (d 0 4 0 2) (l 0 0)
83) Pop10-30: (2ebbc126f94201ba), Fit: 6.57 (w 11 0) (d 0 4 0 2) (l 0 0)
84) Pop10-4: (02cd917ef21237ac), Fit: 6.53 (w 11 0) (d 0 4 0 2) (l 0 0)
85) Pop10-65: (0ffd917ef21237ac), Fit: 6.53 (w 11 0) (d 0 4 0 2) (l 0 0)
86) Pop10-76: (02cd917ef21237ac), Fit: 6.53 (w 11 0) (d 0 4 0 2) (l 0 0)
87) Pop10-23: (161cc5caf21237de), Fit: 5.43 (w 10 0) (d 0 4 0 3) (l 0 0)
88) Pop10-82: (061cc5caf21237ac), Fit: 5.43 (w 10 0) (d 0 4 0 3) (l 0 0)
89) Pop10-89: (02cd91c7d22f01de), Fit: 5.38 (w 10 0) (d 0 4 0 3) (l 0 0)
90) Pop10-86: (361f63c7d22d01a9), Fit: 5.37 (w 10 0) (d 0 4 0 3) (l 0 0)
91) Pop10-101: (160ae2b1e94f00de), Fit: 5.26 (w 10 0) (d 0 4 0 3) (l 0 0)
92) Pop10-129: (20fc7193c22f219a), Fit: 5.19 (w 10 0) (d 0 4 0 3) (l 0 0)
93) Pop10-27: (02fcc5caf21237bc), Fit: 5.11 (w 10 0) (d 0 4 0 3) (l 0 0)
94) Pop10-109: (00cdc551d22f32ac), Fit: 5.05 (w 10 0) (d 0 4 0 3) (l 0 0)
95) Pop10-185: (10fa0291c22f00de), Fit: 5.05 (w 10 0) (d 0 4 0 3) (l 0 0)
96) Pop10-41: (32cd917ef21231d8), Fit: 5.04 (w 10 0) (d 0 4 0 3) (l 0 0)
97) Pop10-26: (6ffd74c6fd13507b), Fit: 5.01 (w 10 0) (d 0 4 0 3) (l 0 0)
98) Pop10-83: (1ffd917ef21237de), Fit: 5.00 (w 10 0) (d 0 4 0 3) (l 0 0)
99) Pop10-70: (001e65b7d202d2de), Fit: 4.99 (w 10 0) (d 0 4 0 3) (l 0 0)
100) Pop10-176: (001e61cac51396dc), Fit: 4.86 (w 10 0) (d 0 4 0 3) (l 0 0)
101) Pop10-125: (2ebbc126fd6300da), Fit: 4.81 (w 10 0) (d 0 4 0 3) (l 0 0)
102) Pop10-22: (2ebbc126fd43509a), Fit: 4.80 (w 10 0) (d 0 4 0 3) (l 0 0)
103) Pop10-174: (2ebbc124fd43509a), Fit: 4.80 (w 10 0) (d 0 4 0 3) (l 0 0)
104) Pop10-31: (361ec5b5e212d2ae), Fit: 4.68 (w 10 0) (d 0 4 0 3) (l 0 0)
105) Pop10-47: (361ec5b5e212d2ae), Fit: 4.68 (w 10 0) (d 0 4 0 3) (l 0 0)
106) Pop10-9: (792bc126fd1350da), Fit: 3.67 (w 9 0) (d 0 4 0 4) (l 0 0)
107) Pop10-123: (10cdc5c5e42f00de), Fit: 3.46 (w 9 0) (d 0 4 0 4) (l 0 0)
108) Pop10-147: (2ebe617ef23231d5), Fit: 3.44 (w 9 0) (d 0 4 0 4) (l 0 0)
109) Pop10-159: (2ebe617ef2323125), Fit: 3.44 (w 9 0) (d 0 4 0 4) (l 0 0)
110) Pop10-57: (02fbc126c514512c), Fit: 3.36 (w 9 0) (d 0 4 0 4) (l 0 0)
111) Pop10-116: (62cd74c6f942507b), Fit: 3.36 (w 9 0) (d 0 4 0 4) (l 0 0)
112) Pop10-43: (001e61548c1452f0), Fit: 3.34 (w 9 0) (d 0 4 0 4) (l 0 0)
113) Pop10-175: (001e61568c1452f0), Fit: 3.34 (w 9 0) (d 0 4 0 4) (l 0 0)
114) Pop10-164: (2ebbc126f9139125), Fit: 3.28 (w 9 0) (d 0 4 0 4) (l 0 0)
115) Pop10-77: (001e615afd439125), Fit: 3.23 (w 9 0) (d 0 4 0 4) (l 0 0)
116) Pop10-153: (2e8fe126fd13d0de), Fit: 3.23 (w 9 0) (d 0 4 0 4) (l 0 0)
117) Pop10-195: (2ebe61c5e942d0d5), Fit: 3.23 (w 9 0) (d 0 4 0 4) (l 0 0)
118) Pop10-75: (02fac5caf21237bc), Fit: 3.17 (w 9 0) (d 0 4 0 4) (l 0 0)
119) Pop10-157: (30cdc597d912d2a9), Fit: 2.63 (w 9 0) (d 0 4 0 4) (l 0 0)
120) Pop10-120: (721e21c7d22f00da), Fit: 2.25 (w 8 0) (d 0 4 0 5) (l 0 0)
121) Pop10-196: (00cdc8f6fc4452f0), Fit: 2.09 (w 8 0) (d 0 4 0 5) (l 0 0)
122) Pop10-46: (2ebbc126fd439225), Fit: 1.79 (w 8 0) (d 0 4 0 5) (l 0 0)
123) Pop10-136: (3ebbc126fd439125), Fit: 1.79 (w 8 0) (d 0 4 0 5) (l 0 0)
124) Pop10-53: (70bac126fd4350d7), Fit: 1.74 (w 8 0) (d 0 4 0 5) (l 0 0)
125) Pop10-117: (70be6156fd1350d7), Fit: 1.69 (w 8 0) (d 0 4 0 5) (l 0 0)
126) Pop10-74: (30fc68faf21452f0), Fit: 1.53 (w 8 0) (d 0 4 0 5) (l 0 0)
127) Pop10-10: (161e635ed34600de), Fit: 1.45 (w 8 0) (d 0 4 0 5) (l 0 0)
128) Pop10-119: (001e65b7d214d2de), Fit: 0.87 (w 8 0) (d 0 4 0 5) (l 0 0)
129) Pop10-55: (027e6171f41237ac), Fit: 0.69 (w 7 0) (d 0 4 0 6) (l 0 0)
130) Pop10-62: (3bdae071e21234cf), Fit: 0.69 (w 7 0) (d 0 4 0 6) (l 0 0)
131) Pop10-64: (02fcc291f41237ac), Fit: 0.69 (w 7 0) (d 0 4 0 6) (l 0 0)
132) Pop10-84: (2ebbc051d21610de), Fit: 0.69 (w 7 0) (d 0 4 0 6) (l 0 0)
133) Pop10-133: (004ec191c21652f4), Fit: 0.69 (w 7 0) (d 0 4 0 6) (l 0 0)
134) Pop10-184: (201dc291e42f00d9), Fit: 0.69 (w 7 0) (d 0 4 0 6) (l 0 0)
135) Pop10-189: (02fcc591f41237ac), Fit: 0.69 (w 7 0) (d 0 4 0 6) (l 0 0)
136) Pop10-160: (00f65091c21452f0), Fit: 0.62 (w 7 0) (d 0 4 0 6) (l 0 0)
137) Pop10-192: (02fcc5c5e21237ac), Fit: 0.62 (w 7 0) (d 0 4 0 6) (l 0 0)
138) Pop10-102: (00fc2293c22607ac), Fit: 0.34 (w 7 0) (d 0 4 0 6) (l 0 0)
139) Pop10-3: (0a1bc126fd4306ac), Fit: 0.24 (w 7 0) (d 0 4 0 6) (l 0 0)
140) Pop10-37: (001e6191c22237a9), Fit: 0.14 (w 7 0) (d 0 4 0 6) (l 0 0)
141) Pop10-39: (160e6171e91a34de), Fit: 0.14 (w 7 0) (d 0 4 0 6) (l 0 0)
142) Pop10-61: (161e6151d21611de), Fit: 0.14 (w 7 0) (d 0 4 0 6) (l 0 0)
143) Pop10-85: (161e6191c22001ba), Fit: 0.14 (w 7 0) (d 0 4 0 6) (l 0 0)
144) Pop10-94: (161e6154821237ac), Fit: 0.04 (w 7 0) (d 0 4 0 6) (l 0 0)
145) Pop10-95: (361ec5cafc1a34d8), Fit: 0.04 (w 7 0) (d 0 4 0 6) (l 0 0)
146) Pop10-87: (301e6191c22f00d9), Fit: 0.03 (w 7 0) (d 0 4 0 6) (l 0 0)
147) Pop10-149: (761e6151d24924cf), Fit: 0.03 (w 7 0) (d 0 4 0 6) (l 0 0)
148) Pop10-167: (201e6151d21611da), Fit: 0.03 (w 7 0) (d 0 4 0 6) (l 0 0)
149) Pop10-177: (160e6176f21237ae), Fit: 0.03 (w 7 0) (d 0 4 0 6) (l 0 0)
150) Pop10-191: (301d9151d21394d8), Fit: 0.03 (w 7 0) (d 0 4 0 6) (l 0 0)
151) Pop10-169: (621dc5f1c32f507b), Fit: -0.28 (w 7 0) (d 0 4 0 6) (l 0 0)
152) Pop10-79: (02fc7891c21237ac), Fit: -1.12 (w 6 0) (d 0 4 0 7) (l 0 0)
153) Pop10-20: (20fa0291c22f00d9), Fit: -1.26 (w 6 0) (d 0 4 0 7) (l 0 0)
154) Pop10-112: (160e61fefd4a00de), Fit: -1.29 (w 6 0) (d 0 4 0 7) (l 0 0)
155) Pop10-165: (2ebbc171ed1a00d5), Fit: -1.35 (w 6 0) (d 0 4 0 7) (l 0 0)
156) Pop10-138: (005c517afd439125), Fit: -1.52 (w 6 0) (d 0 4 0 7) (l 0 0)
157) Pop10-98: (12fac17ef21921de), Fit: -1.56 (w 6 0) (d 0 4 0 7) (l 0 0)
158) Pop10-143: (201e0291c22f10da), Fit: -1.92 (w 6 0) (d 0 4 0 7) (l 0 0)
159) Pop10-63: (d2e87871e9135191), Fit: -2.09 (w 6 0) (d 0 4 0 7) (l 0 0)
160) Pop10-69: (171e65f7e942d3bf), Fit: -2.09 (w 6 0) (d 0 4 0 7) (l 0 0)
161) Pop10-105: (171e65f7fd42d3bf), Fit: -2.22 (w 6 0) (d 0 4 0 7) (l 0 0)
162) Pop10-91: (16fcc55a721600de), Fit: -3.04 (w 5 0) (d 0 4 0 8) (l 0 0)
163) Pop10-171: (01cdc55a721600d0), Fit: -3.04 (w 5 0) (d 0 4 0 8) (l 0 0)
164) Pop10-111: (2ebbc191c5139125), Fit: -3.11 (w 5 0) (d 0 4 0 8) (l 0 0)
165) Pop10-97: (161dc5c1e91a00de), Fit: -3.67 (w 5 0) (d 0 4 0 8) (l 0 0)
166) Pop10-146: (16fc7193c22f002e), Fit: -3.73 (w 5 0) (d 0 4 0 8) (l 0 0)
167) Pop10-36: (701e61c5e942d2a9), Fit: -3.77 (w 5 0) (d 0 4 0 8) (l 0 0)
168) Pop10-14: (10f675f6f80007ae), Fit: -4.27 (w 4 0) (d 0 4 0 9) (l 0 0)
169) Pop10-181: (0a1ac12a721236ac), Fit: -4.49 (w 4 0) (d 0 4 0 9) (l 0 0)
170) Pop10-56: (021ac12a721237ac), Fit: -4.56 (w 4 0) (d 0 4 0 9) (l 0 0)
171) Pop10-72: (12fa65b5e210d2ae), Fit: -4.59 (w 4 0) (d 0 4 0 9) (l 0 0)
172) Pop10-93: (2ebcc5ca922237a5), Fit: -4.63 (w 4 0) (d 0 4 0 9) (l 0 0)
173) Pop10-142: (06fa6156c513960a), Fit: -4.83 (w 4 0) (d 0 4 0 9) (l 0 0)
174) Pop10-194: (701bc171e91a02a9), Fit: -5.56 (w 4 0) (d 0 4 0 9) (l 0 0)
175) Pop10-35: (001e6151e91a000a), Fit: -5.62 (w 4 0) (d 0 4 0 9) (l 0 0)
176) Pop10-180: (021bc126fd4307ac), Fit: -5.95 (w 3 0) (d 0 4 0 10) (l 0 0)
177) Pop10-5: (2d766aa7ed1004ed), Fit: -6.12 (w 3 0) (d 0 4 0 10) (l 0 0)
178) Pop10-13: (10fc0293721600de), Fit: -6.20 (w 3 0) (d 0 4 0 10) (l 0 0)
179) Pop10-11: (02fe615af24600ac), Fit: -6.30 (w 3 0) (d 0 4 0 10) (l 0 0)
180) Pop10-104: (70bbc12ee94922a9), Fit: -6.30 (w 3 0) (d 0 4 0 10) (l 0 0)
181) Pop10-28: (00fc2293c22f37ac), Fit: -6.44 (w 3 0) (d 0 4 0 10) (l 0 0)
182) Pop10-59: (16fc0293c22f00de), Fit: -6.48 (w 3 0) (d 0 4 0 10) (l 0 0)
183) Pop10-128: (16fc0293c22f00de), Fit: -6.48 (w 3 0) (d 0 4 0 10) (l 0 0)
184) Pop10-100: (2ebbc125c222d225), Fit: -6.59 (w 3 0) (d 0 4 0 10) (l 0 0)
185) Pop10-183: (301e61f0d3d2d2f0), Fit: -6.91 (w 3 0) (d 0 4 0 10) (l 0 0)
186) Pop10-124: (161e615a7216509e), Fit: -7.42 (w 3 0) (d 0 4 0 10) (l 0 0)
187) Pop10-144: (70bbc126fd4922a9), Fit: -7.59 (w 2 0) (d 0 4 0 11) (l 0 0)
188) Pop10-182: (2e8f05e67d4457a9), Fit: -7.90 (w 2 0) (d 0 4 0 11) (l 0 0)
189) Pop10-199: (22cd917efd439125), Fit: -8.10 (w 2 0) (d 0 4 0 11) (l 0 0)
190) Pop10-107: (201e65befd4a00de), Fit: -8.19 (w 2 0) (d 0 4 0 11) (l 0 0)
191) Pop10-52: (701e615a721453bf), Fit: -8.22 (w 2 0) (d 0 4 0 11) (l 0 0)
192) Pop10-81: (160ae1c7d22f00de), Fit: -8.30 (w 2 0) (d 0 4 0 11) (l 0 0)
193) Pop10-42: (2ebbc125e942d225), Fit: -8.38 (w 2 0) (d 0 4 0 11) (l 0 0)
194) Pop10-45: (6bfd24c7dc4acd78), Fit: -8.64 (w 2 0) (d 0 4 0 11) (l 0 0)
195) Pop10-145: (2ebbc12efd139125), Fit: -9.59 (w 1 0) (d 0 4 0 12) (l 0 0)
196) Pop10-158: (004e61fb7212d0de), Fit: -10.04 (w 1 0) (d 0 4 0 12) (l 0 0)
197) Pop10-148: (198f74ced32f00de), Fit: -10.16 (w 1 0) (d 0 4 0 12) (l 0 0)
198) Pop10-44: (161a0297d22f00de), Fit: -10.25 (w 1 0) (d 0 4 0 12) (l 0 0)
199) Pop10-103: (161e615a721f30de), Fit: -10.32 (w 1 0) (d 0 4 0 12) (l 0 0)
Generation 11..........
Generation 12..........
Generation 13..........
Generation 14..........
Generation 15..........

( continues for a while....)

Generation 146..........
Generation 147..........
Generation 148..........
Generation 149..........
Generation 150..........
0) P150-0: (061d61c7ed0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
1) P150-1: (161dc1b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
2) P150-2: (161d61c7fd0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
3) P150-3: (161dc1c7fd0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
4) P150-4: (161dc3b7ed0210dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
5) P150-5: (061dc1b7ed0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
6) P150-6: (161dc1b7fd0710de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
7) P150-7: (001d61c7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
8) P150-8: (161dc1b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
9) P150-9: (161d61c7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
10) P150-10: (161dc1b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
11) P150-11: (161d63c7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
12) P150-12: (061dc1b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
13) P150-13: (161dc1c7ed0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
14) P150-14: (001dc1b7fd0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
15) P150-15: (001dc1c7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
16) P150-16: (161dc1b7fd0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
17) P150-17: (061d63c7ed0710de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
18) P150-18: (161dc1b7fd0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
19) P150-19: (161dc1b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
20) P150-20: (161dc1b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
21) P150-21: (161dc1c7ed0530dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
22) P150-22: (161d61c7ed0500de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
23) P150-23: (161dc1c7fd0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
24) P150-24: (161dc1c7ed0530dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
25) P150-25: (465d61b7fd0610dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
26) P150-26: (161dc1b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
27) P150-27: (161dc3b7ed0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
28) P150-28: (161dc1b7fd0610dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
29) P150-29: (161dc1b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
30) P150-30: (161dc1b7fd0210dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
31) P150-31: (161dc1b7ed0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
32) P150-32: (561d81b7fd0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
33) P150-33: (161dc1b7fd0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
34) P150-34: (161dc1b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
35) P150-35: (161d61b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
36) P150-36: (161dc3c7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
37) P150-37: (161d63c7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
38) P150-38: (161dc1b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
39) P150-39: (161dc1b7fd0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
40) P150-40: (561d81b7fd0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
41) P150-41: (061dc1b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
42) P150-42: (001d61b7fd0610de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
43) P150-43: (161dc1c7fd0510d4), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
44) P150-44: (161dc1b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
45) P150-45: (161dc1b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
46) P150-46: (161d63c7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
47) P150-47: (161dc1b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
48) P150-48: (161dc1b7fd0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
49) P150-49: (165dc1b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
50) P150-50: (061dc1b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
51) P150-51: (161dc1c7fd0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
52) P150-52: (161dc1b7ed0510d4), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
53) P150-53: (161dc1b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
54) P150-54: (161dc1b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
55) P150-55: (161dc1b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
56) P150-56: (061dc1b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
57) P150-57: (161dc3c7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
58) P150-58: (161dc1b7fd0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
59) P150-59: (061dc1b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
60) P150-60: (161dc1b7fd0210dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
61) P150-61: (161dc1b7ed0210dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
62) P150-62: (165dc1b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
63) P150-63: (165dc1b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
64) P150-64: (161dc1b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
65) P150-65: (165dc1b7fd0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
66) P150-66: (165dc1b7ed0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
67) P150-67: (161dc1c7fd0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
68) P150-68: (161dc1b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
69) P150-69: (461dc1b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
70) P150-70: (061dc3b7fd0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
71) P150-71: (161dc1b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
72) P150-72: (161dc1b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
73) P150-73: (061dc1b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
74) P150-74: (001dc1c7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
75) P150-75: (065dc1b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
76) P150-76: (161d61b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
77) P150-77: (161dc1c7ed0500dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
78) P150-78: (165dc3c7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
79) P150-79: (061dc1b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
80) P150-80: (161dc1c7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
81) P150-81: (461dc1b7fd0610dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
82) P150-82: (161dc1b7ed0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
83) P150-83: (161dc1b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
84) P150-84: (161dc1b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
85) P150-85: (161dc1b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
86) P150-86: (161dc3c7ed0530dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
87) P150-87: (161dc1c7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
88) P150-88: (101dc1b7ed0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
89) P150-89: (101dc1b7ed0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
90) P150-90: (161dc3b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
91) P150-91: (161dc1b7ed0210dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
92) P150-92: (461dc1b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
93) P150-93: (161dc1b7fd0610dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
94) P150-94: (161dc1b7ed0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
95) P150-95: (161d61c7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
96) P150-96: (161dc1c7fd0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
97) P150-97: (161dc1b7ed0210dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
98) P150-98: (161d63c7ed0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
99) P150-99: (161dc1c7fd0500dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
100) P150-100: (061dc1b7fd0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
101) P150-101: (161dc3c7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
102) P150-102: (161dc1b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
103) P150-103: (161dc1b7ed0510d4), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
104) P150-104: (161dc3c7ed0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
105) P150-105: (061d61c7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
106) P150-106: (561d81b7fd0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
107) P150-107: (101dc1b7ed0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
108) P150-108: (161dc1c7fd0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
109) P150-109: (061dc1c7ed0210d4), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
110) P150-110: (161dc1c7fd0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
111) P150-111: (061dc1b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
112) P150-112: (465d61b7ed0610dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
113) P150-113: (061dc3c7fd0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
114) P150-114: (565dc1b7ed0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
115) P150-115: (161d81b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
116) P150-116: (061dc1b7fd0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
117) P150-117: (161dc1c7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
118) P150-118: (161dc3b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
119) P150-119: (061d61c7ed0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
120) P150-120: (161dc1b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
121) P150-121: (101dc1b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
122) P150-122: (165dc1b7fd0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
123) P150-123: (161dc1b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
124) P150-124: (161d63b7fd0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
125) P150-125: (161dc3c7ed0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
126) P150-126: (161dc1c7ed0530dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
127) P150-127: (161dc1b7fd0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
128) P150-128: (165dc1c7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
129) P150-129: (161dc1b7ed0510d4), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
130) P150-130: (161dc1c7fd0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
131) P150-131: (161dc1c7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
132) P150-132: (161dc3b7fd0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
133) P150-133: (161dc1c7fd0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
134) P150-134: (465d61b7fd0610dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
135) P150-135: (161dc3b7fd0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
136) P150-136: (161dc1b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
137) P150-137: (161dc1c5ed0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
138) P150-138: (061dc1b7ed0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
139) P150-139: (161dc1b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
140) P150-140: (161dc1b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
141) P150-141: (161dc1c7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
142) P150-142: (065dc1b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
143) P150-143: (161d63c7ed0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
144) P150-144: (161dc1c7ed0530dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
145) P150-145: (161dc1b7ed0610de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
146) P150-146: (161dc1b7ed0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
147) P150-147: (161dc1b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
148) P150-148: (161dc3b7fd0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
149) P150-149: (161dc1b7fd0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
150) P150-150: (161dc1c7ed0510d4), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
151) P150-151: (161dc1b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
152) P150-152: (165dc1b7fd0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
153) P150-153: (061dc1b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
154) P150-154: (161d63b7ed0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
155) P150-155: (061dc1c7fd0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
156) P150-156: (161dc1c7fd0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
157) P150-157: (061dc1b7ed0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
158) P150-158: (161dc1b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
159) P150-159: (161dc3b7ed0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
160) P150-160: (165dc1b7ed0500dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
161) P150-161: (061dc1b7fd0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
162) P150-162: (161dc1b7fd0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
163) P150-163: (161d61b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
164) P150-164: (161dc1b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
165) P150-165: (161dc1b7ed0610de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
166) P150-166: (165dc1c7fd0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
167) P150-167: (161dc1b7ed0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
168) P150-168: (161dc1b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
169) P150-169: (161dc3b7fd0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
170) P150-170: (161dc3b7fd0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
171) P150-171: (161dc1b7ed0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
172) P150-172: (465d61b7fd0610de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
173) P150-173: (161d63c7ed0210dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
174) P150-174: (161dc1b7ed0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
175) P150-175: (061dc1b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
176) P150-176: (165dc1b7ed0530dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
177) P150-177: (161dc1c7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
178) P150-178: (001dc1b7fd0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
179) P150-179: (001d61c7ed0610de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
180) P150-180: (161dc1c7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
181) P150-181: (161dc1c7ed0500d4), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
182) P150-183: (161dc1c7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
183) P150-184: (161d63b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
184) P150-185: (161dc1c7ed0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
185) P150-186: (161dc1c7ed0530d8), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
186) P150-187: (161dc1b7ed0210dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
187) P150-188: (161dc1b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
188) P150-189: (161dc3c7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
189) P150-190: (001dc1c7fd0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
190) P150-191: (161dc1c7ed0500dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
191) P150-192: (161dc1b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
192) P150-193: (561dc1b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
193) P150-194: (061dc1b7ed0210de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
194) P150-195: (161dc1b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
195) P150-196: (161dc1b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
196) P150-197: (161dc1b7ed0510de), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
197) P150-198: (161dc1c7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
198) P150-199: (161d61b7ed0510dc), Fit: 10.70 (w 13 1) (d 0 3 0 0) (l 0 0)
199) P150-182: (561dc1b7ed0530de), Fit: 8.99 (w 12 1) (d 0 3 0 1) (l 0 0)

Finished Games...
Writing best player to file 'run.11.26.player4'...
Done.



Appendix C:

Game 1: An alternative sequence of moves to the game shown in the paper, using the same white player in the same initial position.


Initial position

White's first move

Black's first move

White's second move

Black's second move

White's third move

Black's third move

Final position

Notice how the white king protects his pawn until it has been queened, which is probably the most important attribute in these sorts of endgames. Unfortunately, the learner decided it was too important, and would continue to protect the pawn even when unnecessary.

Game 2: The perfect black player playing against a white human player. Notice that this black player was the input in the bootstrapping method which created the white player discussed in Game 1 above and Figure 5 in the paper.


Initial position

White's first move

Black's first move

White's second move

Black's second move

White's third move

Black's third move

White's fourth position

Black's fourth position

White's fifth move

Black's fifth position

White's sixth position

Black's sixth move

White's seventh position

Black's seventh position



White's eighth move

Black's eighth position

Final position

Notice in the first and second moves, black keeps white in opposition, forcing white to either advance the pawn, or move beside the pawn. Either is bad. Another maneuver to notice occurs in black's fourth, fifth and sixth moves. Black moves his king in a triangle shape. This is a typical chess endgame strategy which can be very important in getting to the right square at the right time (the "indirect" triangle method takes an extra move more than the direct method to get to the same square).