I have one approach that I have been looking a little bit at recently. A couple of years ago a student (Matthew Lai) tried to apply machine learning to computer chess. The result was a program that could basically teach itself master level chess within three days. Lai would go on to be headhunted by Google for the DeepMind project, where he became involved with the AlphaGo program which went on to beat the worlds top go player. See https://motherboard.vice.com/en_us/arti ... atthew-lai
Now, Giraffe is not the strongest chess engine in the world. But that's not the point. The point is it takes a different approach to learning chess. One that we can mimic. The engine, the source and the training documentation is all freely available. So I downloaded all the necessary files and set up an environment in which I could train my very own Giraffe. But instead of letting it train for the longest time possible for the strongest possible play, I grabbed snapshots for different steps of this training. I then set these up against each other, and against other chess engines. The results are, I think, are interesting.
After the first round of training, Giraffe has a style that is very similar to a rank beginner: It has no idea how to develop pieces, so it pushes pawns, brings out the queen, knights to the edge of the board, even starts moving the king around. Usually does not castle. The only saving grace is that it's clearly stronger tactically than a rank beginner, but the style and piece development certainly screams "n00b!"
An example:
Code: Select all
[White "Giraffe 20161023 64-bit [t1]"]
[Black "Zotron 4.4.6"]
[Result "0-1"]
[ECO "D00"]
[Opening "Queen's Pawn Game"]
[TimeControl "40/180:40/180:40/180"]
[Termination "normal"]
[PlyCount "58"]
1.d4 d5 2.Qd3 e6 3.Nh3 Nf6 4.Nc3 Nc6 5.a3 e5 6.dxe5 Nxe5 7.Qg3 Qe7 8.b4 d4 9.Na4 Ne4 10.Qf4 Ng6 11.Qf3 Rb8 12.g3 b5 13.Nb2 Bb7 14.Qd3 Nd6 15.f3 Ne5 16.Qb3 Nxf3+ 17.Kd1 Ne4 18.Na4 Rd8 19.g4 Nc3+ 20.Nxc3 dxc3+ 21.Bd2 Qe3 22.Kc1 Nxd2 23.Qxf7+ Kxf7 24.Ng5+ Qxg5 25.e3 Qxe3 26.Be2 Bxh1 27.g5 Nb3+ 28.Kb1 Qc1+ 29.Ka2 Qxc2# 0-1
Code: Select all
[White "Giraffe 20161023 64-bit [t25]"]
[Black "Waxman 2010"]
[Result "1-0"]
[ECO "A22"]
[Opening "English"]
[TimeControl "40/180:40/180:40/180"]
[Termination "normal"]
[PlyCount "72"]
1.c4 Nf6 2.Nc3 e5 3.e3 Bb4 4.Nge2 d6 5.a3 Bxc3 6.Nxc3 Bg4 7.f3 Bd7 8.Bd3 O-O 9.O-O Be6 10.Be2 Nbd7 11.f4 exf4 12.d4 Nb6 13.d5 Bd7 14.Rxf4 Qe7 15.a4 a5 16.e4 Rfe8 17.Qf1 Qe5 18.Be3 Nh5 19.Rh4 Nf6 20.Qf2 Bc8 21.Rf4 Nbd7 22.Rf1 Qe7 23.Qg3 Kh8 24.Rh4 b6 25.h3 Rb8 26.Bd4 Ne5 27.Nb5 Ng6 28.Rxf6 gxf6 29.Qg5 Kg8 30.Bxf6 Qf8 31.Bh5 Rb7 32.Nd4 Bd7 33.Nf5 Bxf5 34.exf5 Re5 35.Bxg6 Re1+ 36.Kf2 fxg6
{Resigns}
1-0
I am thinking that maybe combining the approach I have taken of limiting the machine learning with limiting the tactical abilities by reducing the search capabilities could produce something like the chess player you are looking for.
Some more links:
- The report Matthew Lai wrote about his engine https://arxiv.org/abs/1509.01549
- Giraffe source code and information about building and traning: https://bitbucket.org/waterreaction/giraffe
I can also recommend taking a look at the blog of Brendan Norman at http://chessncognac.com/. He has a lot of articles about tuning engines to play like humans.[/url]