チェスサイトのAIはすべてStockfish?
以前の記事でchess.com
のAIとチェスアプリとの対戦成績を紹介したので、今度はlichess
で試してみました。でも中で動いているAIはchess.com
もlichess
もStockfish
を使っているようで大きな違いは無いようです。対戦結果も以前の記事と似たようなものだったので、同じAIが動いていると思われますが、自分のチェスアプリが勝つ時はある特定のパターンがありそうです。そしてチェス対戦サイトのAI(chess.com
、lichess
)のある特徴に気付きました…。
チェスアプリが勝った対局
レベル4で10戦して3勝7敗だったのですが、チェスアプリが勝った3局をgifファイルで紹介します。gitファイルの下側がチェスアプリです。テキストの棋譜はチェスアプリに入力して再現することも可能です。
-
序盤は大抵チェスアプリ側が劣勢になります。
勝局1:劣勢から逆転1. e3 e6 2. Qg4 f5 3. Qf4 g5 4. Qf3 g4 5. Qf4 Bh6 6. Qe5 Nf6 7. h4 Nc6 8. Qb5 a6 9. Qc4 b5 10. Qc3 b4 11. Qc4 Bb7 12. a4 d5 13. Qb3 a5 14. Bb5 O-O 15. Bxc6 Bxc6 16. d4 Bg7 17. Nd2 Ra6 18. Qd3 Rb6 19. f3 Qe7 20. Ne2 h5 21. Kf2 Ne4+ 22. Kf1 Bd7 23. Ke1 Nd6 24. Ng3 Be8 25. Kf2 f4 26. exf4 Rf6 27. Nxh5 g3+ 28. Nxg3 Bg6 29. f5 Nxf5 30. Nde4 Nd6 31. Nxf6+ Kf7 32. Nge4 Qxf6 33. Nxf6 Bxd3 34. cxd3 Bxf6 35. Be3 Nf5 36. Rac1 c6 37. g4 Nxd4 38. g5 Bh8 39. g6+ Kxg6 40. Rhg1+ Kh5 41. Rg5+ Kh6 42. Rxd5+ Kh7 43. Rd7+ Kg8 44. Bxd4 Bxd4+ 45. Rxd4 c5 46. Rxc5 Kf7 47. Rf4+ Ke7 48. Rxa5 Kd7 49. Rg5 Kc7 50. Rg7+ Kd6 51. Rf8 Ra6 52. Rd8+ Kc6 53. Re8 Kd6 54. Rd8+ Kc5 55. Rg5+ e5 56. Rxe5+ Kc6 57. Re7 b3 58. Rd4 Kc5 59. Rde4 Rf6 60. R4e6 Rxe6 61. Rxe6 Kb4 62. Ra6 Kc5 63. f4 Kb4 64. h5 Kc5 65. f5 Kd5 66. Re6 Kc5 67. Re4 Kd6 68. Re1 Kc5 69. Re4 Kd6 70. Re6+ Kc7 71. d4 Kc8 72. Re3 Kc7 73. Rxb3 Kd8 74. Rc3 Ke7 75. b4 Kd8 76. a5 Ke7 77. b5 Kf6 78. Rf3 Kg5 79. d5 Kxh5 80. d6 Kg5 81. d7 Kf6 82. d8=Q+ Ke5 83. Qe7+ Kd4 84. a6 Kd5 85. Rg3 Kd4 86. Rg4+ Kd3 87. Qc7 Kd2 88. Rd4# 1-0
-
なんと!6手(将棋で言うと12手)でチェックメイト。lichessAIは一手詰めを読んでない?
棋譜解析によるとNf3
が悪手で、d4
と着手すればlichessAI側が優勢のままだったようです。勝局2:6手でチェックメイト1. g4 d5 2. g5 e5 3. Bg2 Qxg5 4. Bxd5 Bc5 5. Nf3 Qg2 6. Rg1 Qxf2# 0-1
-
チェスアプリの序盤は相変わらず定跡無視の乱戦、終盤は5手詰め以内の詰みならほぼ逃すことはありませんが、大優勢な局面であっても詰みがない局面だとも勝ち切るまでがもたつきます。評価関数の出来の悪さとしか言えません。
勝局3:終盤はもたつく1. c4 e5 2. Nc3 Qh4 3. e3 a5 4. g3 Qg5 5. h4 Qf5 6. g4 Qf6 7. g5 Qf5 8. e4 Qe6 9. Nd5 Kd8 10. Bh3 Qc6 11. d4 Qxc4 12. Qh5 Bb4+ 13. Nxb4 axb4 14. g6 Qxd4 15. gxf7 Qxe4+ 16. Kf1 Ne7 17. Bg2 Qd3+ 18. Qe2 Qxe2+ 19. Nxe2 Rf8 20. a3 d5 21. Be3 Rxf7 22. Rh2 Bg4 23. Bc5 Nd7 24. Be3 Ra6 25. Bd2 Nc5 26. Bxb4 Nd3 27. Bxe7+ Kxe7 28. Nc1 Rxf2+ 29. Kg1 Nxc1 30. Kxf2 Nb3 31. Rg1 Rf6+ 32. Kg3 Be6 33. Rhh1 Rf4 34. Re1 Rg4+ 35. Kf2 e4 36. Rd1 b5 37. Bf1 Rf4+ 38. Kg2 Rg4+ 39. Kh2 Rxh4+ 40. Kg2 Rg4+ 41. Kf2 Rf4+ 42. Ke1 e3 43. Bg2 Nd4 44. Rc1 Nf3+ 45. Bxf3 Rxf3 46. Rg1 Rf4 47. Rxc7+ Kd6 48. Rcxg7 d4 49. Rxh7 d3 50. Rg6 Rc4 51. Kd1 Rf4 52. Ke1 Rc4 53. Rxe6+ Kxe6 54. Rh6+ Kd7 55. Rh7+ Kd6 56. Rh6+ Kc7 57. Kd1 Rf4 58. Ke1 Rg4 59. Rh7+ Kc6 60. Rh1 Rf4 61. Rh5 Rg4 62. Rh1 Rg2 63. a4 bxa4 64. b4 axb3 65. Rh6+ Kb7 66. Kf1 Rf2+ 67. Kg1 Rf4 68. Rh3 e2 69. Kg2 e1=Q 70. Rh7+ Ka8 71. Rh8+ Ka7 72. Rh7+ Ka8 73. Kh3 Qe5 74. Rh6 Rf2 75. Kg4 Qg7+ 76. Rg6 Qxg6+ 77. Kh3 d2 78. Kh4 Rh2# 0-1
lichessのAIは先読み(探索)
をしていない?
AIの強さを調整する(適度に弱くする)のはなかなか難しいと思いますが、上記の2番目の勝局のように1手詰め(詰めろ)を受けないというのはどういうことでしょうか?lichessAIがRg1
と指したところでRf1
と指して1手詰めを受けていればまだまだ勝負は分からなかったと思います。それをせずにわざと負ける(チェックメイトされる)ような手を選ぶのは、「何回かに一回はわざと負けてあげる」というようなことをしているわけではなく、AIのレベルが低い時(今回の場合はレベル4)は「先読み
を一切しない」というような調整の仕方をしている気がします。
一般的に学習型のAIは詰将棋(チェスプロブレム)は苦手と言われますが、それを補うためにまず短い手数の先読み(探索)
を行い、詰みが無ければ学習データを利用した静的評価関数で指し手を決めるようになっていると聞きますが、その先読み
(よく力任せとかbrute-forceと表現される指し手の探索)をせずに静的評価関数のみ(計算式のパラメータ調整のみ?)で指し手を決めているのかも知れません。冒頭である特徴と書いたのはこのことです。
実際のところは分かりませんし、他にも強さ調整のためにいろいろやってると思いますが、先読み(探索)
をしなければサイトの負荷軽減にもなるので当たってる気がします。
chess.comも同じ?
以下の対局はchess.com
のAI(Santa BOT)とチェスアプリの対戦ですが
1. e4 e5 2. Nf3 Qf6 3. Bc4 a5 4. O-O g5 5. Qe2 h5 6. Bd5 g4 7. Ne1 Ne7 8. Kh1
Rg8 9. Nd3 Nxd5 10. exd5 Bd6 11. Nc3 h4 12. Ne4 Qf5 13. Nxd6+ cxd6 14. b3 h3 15.
Kg1 hxg2 16. Re1 g3 17. hxg3 Qh3 18. f4 Rxg3 19. Nf2 Qh6 20. fxe5 Ke7 21. exd6+
Kf8 22. Qe8+ Kg7 23. Re3 Qh2+ 24. Kxh2 g1=Q# 0-1
chess.com
AIが必勝局面で23手目Re3
と指したことで3手詰が生じて頓死です。これもchess.com
のAIが短手数の詰みを読んでいなかった(先読み探索をしてなかった)のだと思います。
自分のチェスアプリが勝つ時はだいたいこんな感じで、出来の悪い評価関数のせいで序盤からずっと劣勢でなんとか終盤まで縺れた時に相手の頓死で勝つパターンが多いです。
あと、lichess
の方はchess.com
と違って無料の棋譜解析の回数制限が無いようなのでお勧めです。