Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Go で始める将棋 AI
Search
mururu
April 23, 2022
Programming
1
3k
Go で始める将棋 AI
Go Conference 2022 Spring
mururu
April 23, 2022
Tweet
Share
More Decks by mururu
See All by mururu
カンム と React Native / Kanmu React Native
mururu
0
3.8k
Go製のネットワーククライアントに対する継続的 / Fuzzing for network client in Go
mururu
4
2.8k
カンムでの React Native の 歴史と現在 / React Native in Kanmu
mururu
1
530
Building FIDO2 server in Go
mururu
2
7.2k
「ElixirがリアルタイムWebに強い」 というのは本当か?
mururu
13
6.6k
Erlang: Improve the performance of cryptographic functions by AES-NI
mururu
1
260
Treasure Data Summer Intern 2015 Final Report
mururu
0
3.1k
Elixir 1.0
mururu
3
860
Why Elixir
mururu
9
2k
Other Decks in Programming
See All in Programming
Building, Deploying, and Monitoring Ruby Web Applications with Falcon (Kaigi on Rails 2025)
ioquatix
4
2.5k
Google Opalで使える37のライブラリ
mickey_kubo
3
140
3年ぶりにコードを書いた元CTOが Claude Codeと30分でMVPを作った話
maikokojima
0
630
Migration to Signals, Resource API, and NgRx Signal Store
manfredsteyer
PRO
0
110
NixOS + Kubernetesで構築する自宅サーバーのすべて
ichi_h3
0
1.2k
GC25 Recap: The Code You Reviewed is Not the Code You Built / #newt_gophercon_tour
mazrean
0
110
なぜGoのジェネリクスはこの形なのか? - Featherweight Goが明かす設計の核心
qualiarts
0
250
その面倒な作業、「Dart」にやらせませんか? Flutter開発者のための業務効率化
yordgenome03
1
140
Domain-centric? Why Hexagonal, Onion, and Clean Architecture Are Answers to the Wrong Question
olivergierke
3
960
AI 駆動開発におけるコミュニティと AWS CDK の価値
konokenj
5
240
理論と実務のギャップを超える
eycjur
0
180
Go言語の特性を活かした公式MCP SDKの設計
hond0413
2
500
Featured
See All Featured
We Have a Design System, Now What?
morganepeng
53
7.8k
Reflections from 52 weeks, 52 projects
jeffersonlam
353
21k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
Git: the NoSQL Database
bkeepers
PRO
431
66k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
130k
Side Projects
sachag
455
43k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Code Reviewing Like a Champion
maltzj
526
40k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.7k
The Language of Interfaces
destraynor
162
25k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
GraphQLとの向き合い方2022年版
quramy
49
14k
Transcript
Go で始める将棋 AI 伊藤 友気 Go Conference 2022 Spring
Copyright Kanmu, Inc. All right reserved. 2 伊藤 友気 CTO
at Kanmu, Inc. @mururu @mururururu 自己紹介
Copyright Kanmu, Inc. All right reserved. 3 将棋好きですか?
Copyright Kanmu, Inc. All right reserved. 4 これは自分で作った 将棋AIと対戦してみたく なった話です
Copyright Kanmu, Inc. All right reserved. 5 今日のゴール 将棋 AI
/ 将棋ソフトの基本的な仕組みを知り、 実際に Go で実装して対戦できるようになること
Copyright Kanmu, Inc. All right reserved. 6 Go で将棋 AI
を作るとは gshogi の紹介 思考エンジンを育てる 1 2 3 アジェンダ
Copyright Kanmu, Inc. All right reserved. そもそも将棋とは ? 7 0
• 1対1で行うボードゲーム • 動きが異なる8種類の駒を交互 に動かして相手の王様を動け なくしたら勝ち
Go で将棋 AI を作る 1
Copyright Kanmu, Inc. All right reserved. 将棋ソフトの基本的なアーキテクチャ 9 1 テキストを入れたり。テキストを入れたり。テキストを入れた
り。テキストを入れたり。テキストを入れたり。テキストを入 れたり。テキストを入れたり。テキストを入れたり。 GUI 思考エンジン 通信
Copyright Kanmu, Inc. All right reserved. 将棋ソフトの基本的なアーキテクチャ 10 1 テキストを入れたり。テキストを入
れたり。テキストを入れたり。テキ ストを入れたり。テキストを入れた り。テキストを入れたり。テキスト を入れたり。テキストを入れたり。 GUI 思考エンジン • 盤面を表示したりユーザーが操 作する GUI と、手を探す思考 エンジンは別のソフトウェアとし て実装されている • これにより独立して開発し組み 合わせて使用することができる • それらが USI というプロトコル で通信しながら対局を進める 通信
Copyright Kanmu, Inc. All right reserved. Go で将棋 AI を作るとは
11 1 テキストを入れたり。テキストを入れたり。テキストを入れた り。テキストを入れたり。テキストを入れたり。テキストを入 れたり。テキストを入れたり。テキストを入れたり。 GUI 思考エンジン 通信
Copyright Kanmu, Inc. All right reserved. 12 1 Go で将棋
AI を作るとは GUI 思考エンジン 通信 これらを実装する
Copyright Kanmu, Inc. All right reserved. USI プロトコル 13 1
• GUIソフトと思考エンジンが通信をするための双方向かつ非同期 なプロトコル • 標準入出力を使ってやり取りする • GUIソフトが盤面のデータを送り、思考エンジンが最善手を返 す、というのが基本の動作
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 思考
Copyright Kanmu, Inc. All right reserved. 思考エンジン 15 1 •
将棋のルールを実装する ◦ 細かな将棋のルールを正しく実装していかなければならない • 外部のプログラムとのインターフェースを実装する ◦ 今回は USI • 与えられた盤面に対し次に指すべき手を探す ◦ この精度が将棋の強さ
Copyright Kanmu, Inc. All right reserved. 思考エンジン 16 1 •
将棋のルールを実装する ◦ 細かい将棋のルールを正しく実装していかなければならない • 外部のプログラムとのインターフェースを実装する ◦ 今回は USI • 与えられた盤面に対し次に指すべき手を探す ◦ この精度が将棋の強さ ◦ これだけに集中したい
gshogi の紹介 2
Copyright Kanmu, Inc. All right reserved. gshogi 18 2 •
https://github.com/mururu/gshogi • 合法手の生成などができる Go の将棋ライブラリ • python-shogi をベースにしている (Thanks!) • USIプロトコル(の一部)を実装しており、思考エンジンのロジック を実装すればすぐさま GUI ソフトを介して対戦ができる • パフォーマンスは全く気にしていない
Copyright Kanmu, Inc. All right reserved. gshogi - 例 19
2 これを go build して生 成されたバイナリを、GUI ソフトから指定すればそ のまま対戦できる
思考エンジンを育てる 3
Copyright Kanmu, Inc. All right reserved. ランダム 21 3 •
次に指すべき手の選択として一番素朴 • 可能な手の中からランダムに一つ選ぶ
Copyright Kanmu, Inc. All right reserved. ランダム - 実装 22
3
Copyright Kanmu, Inc. All right reserved. 駒の損得を考える 1 23 3
• 「駒を多く持っている方が有利そうである」という直感に従ってみ る • 可能な手の中で、指した後に駒が多くなりそうなものの中からラ ンダムに一つ選ぶ
Copyright Kanmu, Inc. All right reserved. 駒の損得を考える 1 - 実装
24 3
Copyright Kanmu, Inc. All right reserved. 駒の損得を考える 2 25 3
• 「より強い 駒を多く持っている方が有利そうである」と制限を強く してみる • 駒の種類ごとにポイントを割り振り、可能な手の中で、指した後 の合計ポイントが最も多くなりそうなものの中からランダムに一 つ選ぶ
Copyright Kanmu, Inc. All right reserved. 駒の損得を考える 2 - 実装
26 3
Copyright Kanmu, Inc. All right reserved. より強くするには - 評価関数の精度 27
3 • ある局面がどれくらい良いか=勝ちやすいかを示す指標を評価 値とよび、それを求める関数を評価関数という • 今回の例だと「駒の数」「駒のポイントの合計」が評価値であり、 それらを計算するロジック(countPiece, calculatePoint)が評価 関数である • より高度な将棋の知識を用いたり、大量の棋譜を学習させるな どして評価関数の精度を高めることが可能
Copyright Kanmu, Inc. All right reserved. より強くするには - より先の局面まで考慮する 28
3 • 今回の例では可能な指し手を打った直後の局面のみを考えてい たが、その次の局面で逆転されるかもしれないと考えると、さら に先の局面を考慮にいれたほうがより良く評価できるはず ◦ より深い木構造を辿りながら評価をする • 最終的に決着がつく局面まで探索はなかなかできないのでパ フォーマンスが大事になる
Copyright Kanmu, Inc. All right reserved. 29 まとめ • 自作の将棋AI/将棋ソフトと対戦するために必要なソフトウェアの
概要を説明し、Go でその実装を簡単に行うための gshogi を紹 介した • 思考エンジンに関する最もベーシックなアイデアを解説し、 gshogi を用いた実装を紹介した