Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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
540
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.2k
Elixir 1.0
mururu
3
880
Why Elixir
mururu
9
2k
Other Decks in Programming
See All in Programming
GISエンジニアから見たLINKSデータ
nokonoko1203
0
180
Python札幌 LT資料
t3tra
7
1.1k
C-Shared Buildで突破するAI Agent バックテストの壁
po3rin
0
420
Jetpack XR SDKから紐解くAndroid XR開発と技術選定のヒント / about-androidxr-and-jetpack-xr-sdk
drumath2237
1
190
Tinkerbellから学ぶ、Podで DHCPをリッスンする手法
tomokon
0
140
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
39
26k
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
4
1.3k
2年のAppleウォレットパス開発の振り返り
muno92
PRO
0
120
從冷知識到漏洞,你不懂的 Web,駭客懂 - Huli @ WebConf Taiwan 2025
aszx87410
2
3.1k
Graviton と Nitro と私
maroon1st
0
140
Spinner 軸ズレ現象を調べたらレンダリング深淵に飲まれた #レバテックMeetup
bengo4com
0
190
開発に寄りそう自動テストの実現
goyoki
2
1.4k
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
230
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
0
100
Ruling the World: When Life Gets Gamed
codingconduct
0
100
Mind Mapping
helmedeiros
PRO
0
39
The browser strikes back
jonoalderson
0
130
Skip the Path - Find Your Career Trail
mkilby
0
27
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.3k
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.2k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
300
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
57
40k
Typedesign – Prime Four
hannesfritz
42
2.9k
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 を用いた実装を紹介した