Slide 1

Slide 1 text

Go で始める将棋 AI 伊藤 友気 Go Conference 2022 Spring

Slide 2

Slide 2 text

Copyright Kanmu, Inc. All right reserved. 2 伊藤 友気 CTO at Kanmu, Inc. @mururu @mururururu 自己紹介

Slide 3

Slide 3 text

Copyright Kanmu, Inc. All right reserved. 3 将棋好きですか?

Slide 4

Slide 4 text

Copyright Kanmu, Inc. All right reserved. 4 これは自分で作った 将棋AIと対戦してみたく なった話です

Slide 5

Slide 5 text

Copyright Kanmu, Inc. All right reserved. 5 今日のゴール 将棋 AI / 将棋ソフトの基本的な仕組みを知り、 実際に Go で実装して対戦できるようになること

Slide 6

Slide 6 text

Copyright Kanmu, Inc. All right reserved. 6 Go で将棋 AI を作るとは gshogi の紹介 思考エンジンを育てる 1 2 3 アジェンダ

Slide 7

Slide 7 text

Copyright Kanmu, Inc. All right reserved. そもそも将棋とは ? 7 0 ● 1対1で行うボードゲーム ● 動きが異なる8種類の駒を交互 に動かして相手の王様を動け なくしたら勝ち

Slide 8

Slide 8 text

Go で将棋 AI を作る 1

Slide 9

Slide 9 text

Copyright Kanmu, Inc. All right reserved. 将棋ソフトの基本的なアーキテクチャ 9 1 テキストを入れたり。テキストを入れたり。テキストを入れた り。テキストを入れたり。テキストを入れたり。テキストを入 れたり。テキストを入れたり。テキストを入れたり。 GUI 思考エンジン 通信

Slide 10

Slide 10 text

Copyright Kanmu, Inc. All right reserved. 将棋ソフトの基本的なアーキテクチャ 10 1 テキストを入れたり。テキストを入 れたり。テキストを入れたり。テキ ストを入れたり。テキストを入れた り。テキストを入れたり。テキスト を入れたり。テキストを入れたり。 GUI 思考エンジン ● 盤面を表示したりユーザーが操 作する GUI と、手を探す思考 エンジンは別のソフトウェアとし て実装されている ● これにより独立して開発し組み 合わせて使用することができる ● それらが USI というプロトコル で通信しながら対局を進める 通信

Slide 11

Slide 11 text

Copyright Kanmu, Inc. All right reserved. Go で将棋 AI を作るとは 11 1 テキストを入れたり。テキストを入れたり。テキストを入れた り。テキストを入れたり。テキストを入れたり。テキストを入 れたり。テキストを入れたり。テキストを入れたり。 GUI 思考エンジン 通信

Slide 12

Slide 12 text

Copyright Kanmu, Inc. All right reserved. 12 1 Go で将棋 AI を作るとは GUI 思考エンジン 通信 これらを実装する

Slide 13

Slide 13 text

Copyright Kanmu, Inc. All right reserved. USI プロトコル 13 1 ● GUIソフトと思考エンジンが通信をするための双方向かつ非同期 なプロトコル ● 標準入出力を使ってやり取りする ● GUIソフトが盤面のデータを送り、思考エンジンが最善手を返 す、というのが基本の動作

Slide 14

Slide 14 text

Copyright Kanmu, Inc. All right reserved. USI プロトコル - 例 14 1 GUI 思考エンジン position sfen lnsgkgsnl/9/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LN SGKGSNL w - 1 moves 5a6b 7g7f 3a3b go bestmove 8c8d 思考

Slide 15

Slide 15 text

Copyright Kanmu, Inc. All right reserved. 思考エンジン 15 1 ● 将棋のルールを実装する ○ 細かな将棋のルールを正しく実装していかなければならない ● 外部のプログラムとのインターフェースを実装する ○ 今回は USI ● 与えられた盤面に対し次に指すべき手を探す ○ この精度が将棋の強さ

Slide 16

Slide 16 text

Copyright Kanmu, Inc. All right reserved. 思考エンジン 16 1 ● 将棋のルールを実装する ○ 細かい将棋のルールを正しく実装していかなければならない ● 外部のプログラムとのインターフェースを実装する ○ 今回は USI ● 与えられた盤面に対し次に指すべき手を探す ○ この精度が将棋の強さ ○ これだけに集中したい

Slide 17

Slide 17 text

gshogi の紹介 2

Slide 18

Slide 18 text

Copyright Kanmu, Inc. All right reserved. gshogi 18 2 ● https://github.com/mururu/gshogi ● 合法手の生成などができる Go の将棋ライブラリ ● python-shogi をベースにしている (Thanks!) ● USIプロトコル(の一部)を実装しており、思考エンジンのロジック を実装すればすぐさま GUI ソフトを介して対戦ができる ● パフォーマンスは全く気にしていない

Slide 19

Slide 19 text

Copyright Kanmu, Inc. All right reserved. gshogi - 例 19 2 これを go build して生 成されたバイナリを、GUI ソフトから指定すればそ のまま対戦できる

Slide 20

Slide 20 text

思考エンジンを育てる 3

Slide 21

Slide 21 text

Copyright Kanmu, Inc. All right reserved. ランダム 21 3 ● 次に指すべき手の選択として一番素朴 ● 可能な手の中からランダムに一つ選ぶ

Slide 22

Slide 22 text

Copyright Kanmu, Inc. All right reserved. ランダム - 実装 22 3

Slide 23

Slide 23 text

Copyright Kanmu, Inc. All right reserved. 駒の損得を考える 1 23 3 ● 「駒を多く持っている方が有利そうである」という直感に従ってみ る ● 可能な手の中で、指した後に駒が多くなりそうなものの中からラ ンダムに一つ選ぶ

Slide 24

Slide 24 text

Copyright Kanmu, Inc. All right reserved. 駒の損得を考える 1 - 実装 24 3

Slide 25

Slide 25 text

Copyright Kanmu, Inc. All right reserved. 駒の損得を考える 2 25 3 ● 「より強い 駒を多く持っている方が有利そうである」と制限を強く してみる ● 駒の種類ごとにポイントを割り振り、可能な手の中で、指した後 の合計ポイントが最も多くなりそうなものの中からランダムに一 つ選ぶ

Slide 26

Slide 26 text

Copyright Kanmu, Inc. All right reserved. 駒の損得を考える 2 - 実装 26 3

Slide 27

Slide 27 text

Copyright Kanmu, Inc. All right reserved. より強くするには - 評価関数の精度 27 3 ● ある局面がどれくらい良いか=勝ちやすいかを示す指標を評価 値とよび、それを求める関数を評価関数という ● 今回の例だと「駒の数」「駒のポイントの合計」が評価値であり、 それらを計算するロジック(countPiece, calculatePoint)が評価 関数である ● より高度な将棋の知識を用いたり、大量の棋譜を学習させるな どして評価関数の精度を高めることが可能

Slide 28

Slide 28 text

Copyright Kanmu, Inc. All right reserved. より強くするには - より先の局面まで考慮する 28 3 ● 今回の例では可能な指し手を打った直後の局面のみを考えてい たが、その次の局面で逆転されるかもしれないと考えると、さら に先の局面を考慮にいれたほうがより良く評価できるはず ○ より深い木構造を辿りながら評価をする ● 最終的に決着がつく局面まで探索はなかなかできないのでパ フォーマンスが大事になる

Slide 29

Slide 29 text

Copyright Kanmu, Inc. All right reserved. 29 まとめ ● 自作の将棋AI/将棋ソフトと対戦するために必要なソフトウェアの 概要を説明し、Go でその実装を簡単に行うための gshogi を紹 介した ● 思考エンジンに関する最もベーシックなアイデアを解説し、 gshogi を用いた実装を紹介した