Announcing lczero

Discussion of anything and everything relating to chess playing software and machines.

Moderators: hgm, Rebel, chrisw

koedem
Posts: 105
Joined: Fri Mar 18, 2016 10:45 pm

Re: Announcing lczero

Post by koedem »

So I just read up on the basic ideas of NNs and thought this might be a nice testbed to try it out in practice.
Sorry for the stupid question, but how do you input the position? (I got a bit lost in the code... :? ) 64 * 13 input neurons for each possible piece on each square? (that would seem a bit weird to me but I don't see anything cleaner)

And another question, it's probably a bad idea but could one also let the NN learn the rules by itself? By letting it try random square combinations and have the cost function e.g. X - legal moves played at the start? (and by minimizing the cost function it learns to only play legal moves)
That might be slow but like that one doesn't force it to take moves in whatever format and instead let it decide itself how it wants to generate them. (and in what order if that makes sense)
FWCC
Posts: 117
Joined: Wed Aug 22, 2007 4:39 pm

Re: Announcing lczero

Post by FWCC »

Nice Project,the opening of that game looks like a 5 year old was playing it(Not 5 year old Capablanca)but we are at the beginning!If I can contribute CPU power let me know.Lets watch this grow.Is any of the implication from the A0 papers as it is not open source?







FWCC
TAL WAS CORRECT
gladius
Posts: 568
Joined: Tue Dec 12, 2006 10:10 am
Full name: Gary Linscott

Re: Announcing lczero

Post by gladius »

I've created a Google Groups forum to discuss lczero: https://groups.google.com/forum/#!forum/lczero

A small progress update as well. From training so far, the network seems to be learning to draw incredibly well, but then nearly all the training samples end up being draws. This leads to a situation where predicting a draw as the value of the position is all the training learns. One potential way around the draw problem is including 33% wins, 33% losses, and 33% draws in the training set.

First though, taking a step back and going to train a net based on Stockfish self-play games (thanks gcp!), and we'll see how strong the engine is. That will hopefully flush out any major bugs in the search.
gladius
Posts: 568
Joined: Tue Dec 12, 2006 10:10 am
Full name: Gary Linscott

Re: Announcing lczero

Post by gladius »

Training from SF self-play games seems to be working well. Here is self-play game on the latest network:
[pgn]
1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 c6 5. Bg5 h6 6. Bh4 dxc4 7. e4 g5 8.
Bg3 b5 9. h4 g4 10. Ne5 a5 11. f4 gxf3 12. Qxf3 a4 13. Bf4 Qxd4 14. Rc1 Nbd7
15. Nxc6 Qxc3+ 16. bxc3 Bb7 17. Bxc4 bxc4 18. Bxh6 Bxc6 19. Bg5 Ne5 20.
Qxf6 Bxe4 21. h5 Rxh5 22. Rxh5 Ng6 23. Qxg6 fxg6 24. Rh4 Bxg2 25. Rh6 Bxh6
26. Bxh6 Bh3 27. Bg7 Bg4 28. Bf6 Kf7 29. Bh8 Rxh8 30. Kf2 Rh2+ 31. Kg3 a3
32. Kxh2 Kf6 33. Kg3 Kf5 34. Re1 e5 35. Rxe5+ Kxe5 36. Kxg4 Kf6 37. Kf4 g5+
38. Ke4 Ke6 39. Kd4 g4 40. Kxc4 g3 41. Kb5 g2 42. c4 g1=Q 43. c5 Qb1+ 44.
Ka5 Kd7 45. Ka4 Qb2 46. Ka5 Kc6 47. Ka6 Kxc5 48. Ka7 Qxa2 49. Ka6 Qb1 50.
Ka7 Qa2 51. Ka8 Qb1 52. Ka7 a2 53. Ka8 a1=Q+
[/pgn]

It is starting to understand chess :). Still, a long, long ways to go of course.

The weights are available for download from https://github.com/glinscott/lczero-wei ... _64.txt.gz if you want to try at home. It has working UCI support, so it could even play against other engines now!
Daniel Shawul
Posts: 4185
Joined: Tue Mar 14, 2006 11:34 am
Location: Ethiopia

Re: Announcing lczero

Post by Daniel Shawul »

Here are three games against ScorpioMCTS, which uses monte-carlo-tree-search but replaces the value network with a qsearch. It doesn't have a policity network.

It seems lczero is far weeker at the moment mainly due to tactics issues i suppose.

[pgn]
[Event "Tour8"]
[Site "daniel-Satellite-C855"]
[Date "2018.01.15"]
[Round "1"]
[White "ScorpioMCTS"]
[Black "Lczero"]
[Result "1-0"]
[BlackElo "2200"]
[Time "06:41:30"]
[WhiteElo "2200"]
[TimeControl "60"]
[SetUp "1"]
[FEN "rq2kb1r/p2p1ppp/1pb1pn2/8/2P1P3/P1N5/1PQ1BPPP/R1B1K2R w KQkq - 0 1"]
[Termination "normal"]
[PlyCount "21"]
[WhiteType "program"]
[BlackType "program"]

1. Be3 {(Bc1-e3 Bf8-d6 Ke1-c1 Ke8-g8 Kc1-b1 Qb8-c7 Rh1-e1 Bd6-e5 Nc3-b5
Bc6xb5 c4xb5 Qc7xc2 Kb1xc2 Ra8-c8 Kc2-b1 d7-d5 e4xd5) -0.12/17 2} Bb4 2.
axb4 {(a3xb4 a7-a6 c4-c5 b6xc5 b4xc5) -0.78/5 1} d5 3. b5 {(b4-b5 Bc6-b7
e4xd5 e6xd5 c4xd5) -0.83/5 2} dxc4 4. bxc6 {(b5xc6 Qb8-c7 e4-e5 Nf6-d5
Nc3xd5) -1.27/5 1} Nd7 5. cxd7+ {(c6xd7 Ke8xd7 Qc2-a4 Kd7-e7) -1.89/4 1}
Kd8 6. Bxc4 {(Be2xc4 Qb8-c7 Bc4-b5 a7-a6) -1.93/4 1} Kxd7 7. Qa4+ {(Qc2-a4
Kd7-e7 Ke1-g1 Qb8-c7) -2.03/4 2} b5 8. Nxb5 {(Nc3xb5 Kd7-e7 Ke1-c1) -2.12/3
3} Kc6 9. Rd1 {(Ra1-d1 Kc6-b7 Rd1-d7 Kb7-c8) -3.04/4 4} a6 10. Na7+
{(Nb5-a7 Kc6-b7 Qa4-c6) -10.00/3 1} Kb7 11. Qc6# {(Qa4-c6) -10.00/1 1} 1-0

[Event "Tour8"]
[Site "daniel-Satellite-C855"]
[Date "2018.01.15"]
[Round "2"]
[White "Lczero"]
[Black "ScorpioMCTS"]
[Result "0-1"]
[BlackElo "2200"]
[Time "06:42:45"]
[WhiteElo "2200"]
[TimeControl "60"]
[SetUp "1"]
[FEN "rq2kb1r/p2p1ppp/1pb1pn2/8/2P1P3/P1N5/1PQ1BPPP/R1B1K2R w KQkq - 0 1"]
[Termination "normal"]
[PlyCount "41"]
[WhiteType "program"]
[BlackType "program"]

1. Bg5 Qe5 {(Qb8-e5 f2-f4 Qe5-d4 Ra1-d1 Qd4-e3 Qc2-d3 Qe3xd3 Be2xd3 Ra8-c8
Bd3-c2 Nf6-g4 Ke1-e2 f7-f6 Bg5-h4 Bf8-c5 Bc2-b3 Ke8-g8) -0.12/17 2} 2. Bxf6
Qxf6 {(Qe5xf6 Ke1-g1 Bf8-e7 Ra1-d1 Ke8-g8 Be2-f3 Ra8-c8 Rf1-e1 d7-d6 b2-b3
Qf6-e5 Nc3-a2 Be7-f6 Qc2-d2 Bc6-b7 Qd2xd6 Qe5xd6) -0.08/17 1} 3. O-O Be7
{(Bf8-e7 Be2-f3 Ke8-g8 Ra1-d1 Ra8-c8 Rf1-e1 d7-d6 h2-h3 Qf6-f4 Nc3-e2
Qf4-e5 Ne2-d4 Bc6-d7 g2-g3 Be7-f6 b2-b3) -0.05/16 1} 4. Rad1 O-O {(Ke8-g8
Rf1-e1 d7-d6 Be2-f3 Qf6-f4 Nc3-e2 Qf4-e5 Ne2-d4 Bc6-b7 Nd4-b5 Rf8-c8 Qc2-d3
Qe5xb2 Nb5xd6 Be7xd6 Qd3xd6 Qb2-c3 Qd6-e7 Bb7-c6 Qe7-b4 Qc3-e5 Qb4-d6
Qe5-c3 Rd1-c1 Qc3-b2 Rc1-b1 Qb2-a2 Rb1-c1 Qa2-b2) -0.03/29 1} 5. Rfe1 d6
{(d7-d6 Be2-f3 Qf6-f4 Nc3-e2 Qf4-e5 Ne2-d4 Bc6-b7 Nd4-b5 Rf8-c8 Qc2-d3
Rc8-d8 Qd3-c2 Rd8-c8) -0.02/13 1} 6. Rd2 Rac8 {(Ra8-c8 Be2-f3 Qf6-f4 Nc3-e2
Qf4-e5 Ne2-d4 Bc6-b7 Rd2-d1 Be7-f6 Qc2-a4 Qe5-c5 e4-e5 Bb7xf3 Nd4xf3 d6xe5
Qa4xa7 Rf8-d8 b2-b4 Qc5xc4 Qa7xb6 Rd8xd1 Re1xd1 Qc4-c1 Rd1-e1 Qc1xa3 b4-b5
Qa3-b4 Qb6-a6) +0.02/28 1} 7. f4 Qxf4 {(Qf6xf4 Be2-f3 a7-a6 Qc2-d1 Qf4-e5
Rd2-f2 Be7-g5 Qd1-b3 Qe5-d4 Qb3-d1 Qd4-c5 e4-e5 Bg5-e3 Re1xe3 Qc5xe3 e5xd6
Bc6xf3 Qd1xf3 Qe3-d4 Qf3-d1 Qd4xd1 Nc3xd1 Rf8-d8 Rf2-d2 Rc8xc4 Nd1-e3
Rc4-c1 Kg1-f2 Rd8-d7) +0.26/29 2} 8. Rd4 Qe3+ {(Qf4-e3 Kg1-h1 Qe3xd4 Re1-d1
Qd4-f2 Rd1-f1 Qf2-e3) +1.00/7 1} 9. Kh1 Qxd4 {(Qe3xd4 Re1-d1 Qd4-e3 Be2-g4
f7-f5 e4xf5) +1.03/6 1} 10. Bf3 Qxc4 {(Qd4xc4 Bf3-e2 Qc4-c5 Re1-f1 Qc5-e3)
+1.12/5 1} 11. Qd2 f5 {(f7-f5 Bf3-e2 Qc4-c5 Be2-a6) +1.15/4 1} 12. exf5
Bxf3 {(Bc6xf3 g2xf3 Rf8xf5 Qd2-g2) +1.23/4 2} 13. gxf3 Rxf5 {(Rf8xf5 Qd2-e3
e6-e5 Qe3-e4) +1.20/4 1} 14. Ne4 Rxf3 {(Rf5xf3 Qd2-e2 Qc4-b3 Ne4-c3)
+1.36/4 1} 15. Nxd6 Bxd6 {(Be7xd6 Qd2-e2 Qc4xe2 Re1xe2) +1.73/4 1} 16. Qxd6
Rf1+ {(Rf3-f1 Kh1-g2 Rf1xe1 Kg2-g3) +2.06/4 1} 17. Kg2 Rxe1 {(Rf1xe1 Qd6-b4
Qc4-f1 Kg2-g3) +2.12/4 5} 18. Qe7 Qg4+ {(Qc4-g4 Kg2-f2 Re1-e2 Kf2-f1
Rc8-c1) +9.96/5 1} 19. Kf2 Rc2+ {(Rc8-c2 Kf2xe1 Qg4-e2) +9.99/3 1} 20. ...
{0-1 White forfeits on time} 20. Kxe1 Qe2# {(Qg4-e2) +10.00/1 0} 0-1

[Event "Tour8"]
[Site "daniel-Satellite-C855"]
[Date "2018.01.15"]
[Round "3"]
[White "ScorpioMCTS"]
[Black "Lczero"]
[Result "1-0"]
[BlackElo "2200"]
[Time "06:44:49"]
[WhiteElo "2200"]
[TimeControl "60"]
[SetUp "1"]
[FEN "rq2kb1r/p2p1ppp/1pb1pn2/8/2P1P3/P1N5/1PQ1BPPP/R1B1K2R w KQkq - 0 1"]
[Termination "normal"]
[PlyCount "21"]
[WhiteType "program"]
[BlackType "program"]

1. Be3 {(Bc1-e3 Bf8-d6 Ke1-c1 Ke8-g8 Kc1-b1 Qb8-c7 f2-f3 Bd6-e5 Nc3-b5
Bc6xb5 c4xb5 Qc7xc2 Kb1xc2 d7-d5 f3-f4 Ra8-c8 Kc2-b1 Be5-d6) -0.13/18 3}
Bb4 2. axb4 {(a3xb4 a7-a6 c4-c5 b6xc5 b4xc5 Ke8-g8) -0.78/6 2} d5 3. b5
{(b4-b5 Bc6-b7 e4xd5 e6xd5 c4xd5) -0.82/5 2} dxc4 4. bxc6 {(b5xc6 Qb8-c7
e4-e5 Nf6-d5 Nc3xd5) -1.27/5 1} Nd7 5. cxd7+ {(c6xd7 Ke8xd7 Qc2-a4 Kd7-e7)
-1.89/4 1} Kd8 6. Bxc4 {(Be2xc4 Qb8-c7 Be3-g5 f7-f6) -1.93/4 1} Kxd7 7.
Qa4+ {(Qc2-a4 Kd7-e7 Qa4-d1) -2.05/3 2} b5 8. Nxb5 {(Nc3xb5 Kd7-e7 Ke1-c1)
-2.12/3 3} Kc6 9. Rd1 {(Ra1-d1 Kc6-b7 Rd1-d7 Kb7-c8) -3.04/4 3} a6 10. Na7+
{(Nb5-a7 Kc6-b7 Qa4-c6) -10.00/3 3} Kb7 11. Qc6# {(Qa4-c6) -10.00/1 1} 1-0

[/pgn]
Henk
Posts: 7216
Joined: Mon May 27, 2013 10:31 am

Re: Announcing lczero

Post by Henk »

gladius wrote:Training from SF self-play games seems to be working well. Here is self-play game on the latest network:
[pgn]
1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 c6 5. Bg5 h6 6. Bh4 dxc4 7. e4 g5 8.
Bg3 b5 9. h4 g4 10. Ne5 a5 11. f4 gxf3 12. Qxf3 a4 13. Bf4 Qxd4 14. Rc1 Nbd7
15. Nxc6 Qxc3+ 16. bxc3 Bb7 17. Bxc4 bxc4 18. Bxh6 Bxc6 19. Bg5 Ne5 20.
Qxf6 Bxe4 21. h5 Rxh5 22. Rxh5 Ng6 23. Qxg6 fxg6 24. Rh4 Bxg2 25. Rh6 Bxh6
26. Bxh6 Bh3 27. Bg7 Bg4 28. Bf6 Kf7 29. Bh8 Rxh8 30. Kf2 Rh2+ 31. Kg3 a3
32. Kxh2 Kf6 33. Kg3 Kf5 34. Re1 e5 35. Rxe5+ Kxe5 36. Kxg4 Kf6 37. Kf4 g5+
38. Ke4 Ke6 39. Kd4 g4 40. Kxc4 g3 41. Kb5 g2 42. c4 g1=Q 43. c5 Qb1+ 44.
Ka5 Kd7 45. Ka4 Qb2 46. Ka5 Kc6 47. Ka6 Kxc5 48. Ka7 Qxa2 49. Ka6 Qb1 50.
Ka7 Qa2 51. Ka8 Qb1 52. Ka7 a2 53. Ka8 a1=Q+
[/pgn]

It is starting to understand chess :). Still, a long, long ways to go of course.

The weights are available for download from https://github.com/glinscott/lczero-wei ... _64.txt.gz if you want to try at home. It has working UCI support, so it could even play against other engines now!
Using chess knowledge is against the zero rules. It's like cheating. Of course you can rename your engine to LCFish.
Jhoravi
Posts: 291
Joined: Wed May 08, 2013 6:49 am

Re: Announcing lczero

Post by Jhoravi »

gladius wrote:Training from SF self-play games seems to be working well. Here is self-play game on the latest network:
[pgn]
1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 c6 5. Bg5 h6 6. Bh4 dxc4 7. e4 g5 8.
Bg3 b5 9. h4 g4 10. Ne5 a5 11. f4 gxf3 12. Qxf3 a4 13. Bf4 Qxd4 14. Rc1 Nbd7
15. Nxc6 Qxc3+ 16. bxc3 Bb7 17. Bxc4 bxc4 18. Bxh6 Bxc6 19. Bg5 Ne5 20.
Qxf6 Bxe4 21. h5 Rxh5 22. Rxh5 Ng6 23. Qxg6 fxg6 24. Rh4 Bxg2 25. Rh6 Bxh6
26. Bxh6 Bh3 27. Bg7 Bg4 28. Bf6 Kf7 29. Bh8 Rxh8 30. Kf2 Rh2+ 31. Kg3 a3
32. Kxh2 Kf6 33. Kg3 Kf5 34. Re1 e5 35. Rxe5+ Kxe5 36. Kxg4 Kf6 37. Kf4 g5+
38. Ke4 Ke6 39. Kd4 g4 40. Kxc4 g3 41. Kb5 g2 42. c4 g1=Q 43. c5 Qb1+ 44.
Ka5 Kd7 45. Ka4 Qb2 46. Ka5 Kc6 47. Ka6 Kxc5 48. Ka7 Qxa2 49. Ka6 Qb1 50.
Ka7 Qa2 51. Ka8 Qb1 52. Ka7 a2 53. Ka8 a1=Q+
[/pgn]

It is starting to understand chess :). Still, a long, long ways to go of course.

The weights are available for download from https://github.com/glinscott/lczero-wei ... _64.txt.gz if you want to try at home. It has working UCI support, so it could even play against other engines now!
It's working!! The first dozen moves are no random anymore! Proof is that whites dark Bishop retreated twice when threatened by blacks h6 and g5 pawn moves and so does the Knight at Nf3 moved to Ne5 when threatened by g4.

Interesting is that the remaining moves goes back to random proving that the learning concentration starts at the opening phase then moving forward meaning it may master the endgame last.
jpqy
Posts: 550
Joined: Thu Apr 24, 2008 9:31 am
Location: Belgium

Re: Announcing lczero

Post by jpqy »

Is it possible to get a working compile Lczero for windows..

Now that we can still beat it..or to follow it up till we can't anymore :wink:

I think more people would like to play against it so long it makes crazy moves..

JP.
Rodolfo Leoni
Posts: 545
Joined: Tue Jun 06, 2017 4:49 pm
Location: Italy

Re: Announcing lczero

Post by Rodolfo Leoni »

jpqy wrote:Is it possible to get a working compile Lczero for windows..

Now that we can still beat it..or to follow it up till we can't anymore :wink:

I think more people would like to play against it so long it makes crazy moves..

JP.
+1
I'm very curious too...
F.S.I. Chess Teacher
gladius
Posts: 568
Joined: Tue Dec 12, 2006 10:10 am
Full name: Gary Linscott

Re: Announcing lczero

Post by gladius »

Daniel Shawul wrote:Here are three games against ScorpioMCTS, which uses monte-carlo-tree-search but replaces the value network with a qsearch. It doesn't have a policity network.

It seems lczero is far weeker at the moment mainly due to tactics issues i suppose.
Thanks for playing some games! Yes, it definitely doesn't have much tactical awareness yet :). I think part of that comes from training on SF games. In self-play, it would learn the probabilities of exploring each move from UCT, with SF games, it only has the best-played move to learn from.