3.
Programming Chess <ul><li>Easy to learn, difficult to master games </li></ul><ul><li>Until recently, almost impossible for computers to play at the grandmaster level </li></ul><ul><ul><li>State space incredible 2 8000 raw, 2 600 with pruning </li></ul></ul><ul><ul><li>Programming for chess is an expensive process, requiring chess experts to work with programmers for years </li></ul></ul><ul><li>Requirements </li></ul><ul><ul><li>Cheap </li></ul></ul><ul><ul><li>Fast </li></ul></ul><ul><ul><li>Minimize development time </li></ul></ul>

5.
 Minimax <ul><li> – Keeps track of best move for us to make (we want to max imize the utility the worst situation we can get ourselves into) </li></ul><ul><li> – Keeps track of best move for opponent to make (we want to mini mize the utility of our opponent’s best situation) </li></ul><ul><li>Works by looking at all possible decisions you could make, by estimating all possible decision your opponent could make, etc </li></ul>

7.
Evaluation Functions <ul><li>Just a simple function to give a board a score </li></ul><ul><li>Evaluate the leaf nodes, and then let  minimax determine which path is optimal </li></ul><ul><li>For chess, should incorporate which pieces are still on the board, position, etc </li></ul><ul><li>This is where the hard work comes in </li></ul>

14.
Gene Pool <ul><li>100 Generations </li></ul><ul><li>512 Chromosomes in the Gene Pool / Generation </li></ul><ul><li>The next generation is determined by randomly selecting two chromosomes, mutating and crossing them over, and letting them play a chess match </li></ul><ul><li>Each time the best is calculated by holding a tournament </li></ul>

15.
Why Genetic Programming? <ul><li>Advantages </li></ul><ul><ul><li>Easy to program </li></ul></ul><ul><ul><li>Fast </li></ul></ul><ul><ul><li>Shown to work in other research </li></ul></ul><ul><li>Disadvantages </li></ul><ul><ul><li>Problems with depth on first several moves </li></ul></ul><ul><ul><li>Limited by expressivity of “function set” (genes) </li></ul></ul><ul><ul><li>High amount of branching </li></ul></ul><ul><ul><li>Strategy often complex </li></ul></ul>

16.
Simpler Task <ul><li>Vinciperdi – aka “Loser’s Chess” </li></ul><ul><li>Same as chess, but to win you must lose all of your pieces or force your opponent to checkmate you </li></ul><ul><li>If there is a capture available, you must make it </li></ul>

17.
Why Loser’s Chess? <ul><li>Simpler than regular chess </li></ul><ul><ul><li>Branching reduced by forced captures </li></ul></ul><ul><li>Faster than regular chess </li></ul><ul><ul><li>Openings lead to captures very fast </li></ul></ul><ul><ul><li>Games tend to be end fast, since captures occur almost every move </li></ul></ul><ul><li>A simple evaluation function set is sufficient for most modeling </li></ul><ul><li>Much of the work for Loser’s Chess can be extended to regular chess </li></ul>

18.
Work So Far <ul><li>In Spring 2003, I began implementation of these concepts in Java </li></ul><ul><li>Implemented multi-threaded genetic programming library and  minimax tree searching </li></ul><ul><li>Picked up work again in Fall 2004, starting with implementing rules for Loser’s Chess </li></ul><ul><li>Currently at about 4,000 lines of source code </li></ul>

19.
Preliminary Results <ul><li>Difficult to judge progress </li></ul><ul><li>Program generates incredibly complicated solutions (hundreds of points) </li></ul><ul><li>Takes long time to run (several days for 100 generations) due to the complexity of calculations on a chess board (~ 2 hours / generation) </li></ul><ul><li>Each generation increases the average complexity in the gene pool, and therefore increases execution time </li></ul>

22.
But What About Humans? <ul><li>These programs are designed to play each other, and therefore many flaws may go undiscovered until humans play some of the games </li></ul><ul><li>It is possible to incorporate a Java Chess Applet into the genetic functions, allowing human players to affect the outcome </li></ul>