Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

of

メカ女子将棋Julia tokyo#1 Slide 1 メカ女子将棋Julia tokyo#1 Slide 2 メカ女子将棋Julia tokyo#1 Slide 3 メカ女子将棋Julia tokyo#1 Slide 4 メカ女子将棋Julia tokyo#1 Slide 5 メカ女子将棋Julia tokyo#1 Slide 6 メカ女子将棋Julia tokyo#1 Slide 7 メカ女子将棋Julia tokyo#1 Slide 8 メカ女子将棋Julia tokyo#1 Slide 9 メカ女子将棋Julia tokyo#1 Slide 10 メカ女子将棋Julia tokyo#1 Slide 11 メカ女子将棋Julia tokyo#1 Slide 12 メカ女子将棋Julia tokyo#1 Slide 13 メカ女子将棋Julia tokyo#1 Slide 14 メカ女子将棋Julia tokyo#1 Slide 15 メカ女子将棋Julia tokyo#1 Slide 16 メカ女子将棋Julia tokyo#1 Slide 17 メカ女子将棋Julia tokyo#1 Slide 18 メカ女子将棋Julia tokyo#1 Slide 19 メカ女子将棋Julia tokyo#1 Slide 20 メカ女子将棋Julia tokyo#1 Slide 21 メカ女子将棋Julia tokyo#1 Slide 22 メカ女子将棋Julia tokyo#1 Slide 23 メカ女子将棋Julia tokyo#1 Slide 24 メカ女子将棋Julia tokyo#1 Slide 25 メカ女子将棋Julia tokyo#1 Slide 26 メカ女子将棋Julia tokyo#1 Slide 27 メカ女子将棋Julia tokyo#1 Slide 28 メカ女子将棋Julia tokyo#1 Slide 29 メカ女子将棋Julia tokyo#1 Slide 30 メカ女子将棋Julia tokyo#1 Slide 31 メカ女子将棋Julia tokyo#1 Slide 32 メカ女子将棋Julia tokyo#1 Slide 33 メカ女子将棋Julia tokyo#1 Slide 34 メカ女子将棋Julia tokyo#1 Slide 35 メカ女子将棋Julia tokyo#1 Slide 36 メカ女子将棋Julia tokyo#1 Slide 37 メカ女子将棋Julia tokyo#1 Slide 38 メカ女子将棋Julia tokyo#1 Slide 39
Upcoming SlideShare
Plotly Julia API
Next
Download to read offline and view in fullscreen.

2 Likes

Share

Download to read offline

メカ女子将棋Julia tokyo#1

Download to read offline

JuliaTokyo #1 で発表した、メカ女子将棋についてのスライドです

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

メカ女子将棋Julia tokyo#1

  1. 1. メカ女子将棋💙 メカ女子将棋部 メカきむりん(@kimrin) 1
  2. 2. お品書き 自己紹介(@kimrin) メカ女子将棋部の紹介 なぜ#JuliaLangでコンピュータ将棋を? コンピュータ将棋システムの仕組み Magic Bit Board と #JuliaLang の128bit Integerとの蜜月 動かしてみよう(論より証拠w) 2
  3. 3. 自己紹介(@kimrin) 組込みエンジニア(メイン:OpenGL関係, 某Game機, 某歩く人など) コンパイラ(COINSのお手伝い、AspectJ静的解析系) 自然言語処理(修論は形態素解析) ゲーム木探索(海外発表あり) ソニー子会社勤務などを経て、現在某SIer勤務
 (主にSなんとか、とかに常駐してます) Mecha Lady Shogi Blog: http://mechawooser.blogspot.jp/ 絶賛転職活動中です 3
  4. 4. @kimrinの主な成果(1) @mechawooser (メカウーサーCC) 3時間に一回つぶやく、
 @wooserさんのtwitter bot 「うーさーのその日暮らし(覚醒編)」にも
 「メカウーサー」として登場しました 自然言語処理技術を使っています 現在約2,000名のフォロアー 4
  5. 5. @kimrinの主な成果(2) メカ女子将棋(@mechajyo)   ←メカジョさん 女流棋士2名を含む(!)
 女性メンバーによるコンピュータ将棋システム メカきむりんは小六女子のおっさん、ということで
 一応女子ということになってます(^_^;) 世界初、#JuliaLangによるコンピュータ将棋システム! (今日はこちらを詳しく、詳しく!) 5
  6. 6. メカ女子将棋部 メンバー 竹部 さゆり 女流三段(メカさゆりん) 渡辺 弥生 女流初段(メカみおたん) メカりえぽん(広報、女子大学院生) メカみゅーん(お裁縫担当) メカきむりん(ただのPCヲタw) 6
  7. 7. なぜ#JuliaLangで
 コンピュータ将棋プログラムを? 他のコンピュータ将棋システムは、C/C++を使ってるのが ほとんど C/C++やFortranに迫る性能を#JuliaLangが出している ちょうど#JuliaLang、興味があって覚えたいしー 将来評価関数の機械学習もしたいし じゃぁ、#JuliaLangで将棋ソフト作ったら、
 うっしっし(*^_^*) w 7
  8. 8. #JuliaLangでコンピュータ 将棋ソフト開発 スクリプト言語チックなので、色々楽w  C++もある程度コンテナとかあるけど、 #JuliaLangの方が楽(なにぶん直感的) ポインタないしw その場で実行開始できるので
 (JIT Compilation)開発効率もよい! 8
  9. 9. コンピュータ将棋
 システムの仕組み 現在はネットワーク対戦で勝敗を決めることが ほとんど 将棋エンジン UI (盤面表示) ネットワーク通信部 全部自分で作ると結構な量のコードに 9
  10. 10. 将棋GUIソフトの登場 将棋所 ShogiGUI 上記二つのソフトウェアはGUIやネットワークの部分を提 供してくれる。コンピュータ将棋プログラム作者は将棋 エンジンと呼ばれる標準入出力を使ったEXE Fileを作るだ けで、将棋の対局を実現できるようになった コンピュータ将棋エンジン作成者はより将棋エンジンの ロジックの設計に集中できるようになった 10
  11. 11. 将棋エンジンとは GUIソフトウェアからの起動 され、次のデータをASCIIで GUI側から受信・あるいは送 信する ソフトウェア名[Send] 対局準備OK[Recv] 対局準備OK[Send] 対局開始[Recv] 現在局面[Recv] 思考開始指令[Recv] 現在の探索深さと読み筋
 (複数)[Send] 自分の着手[Send] 投了[Send] 勝敗[Recv] 11
  12. 12. 具体例:▲7六歩 △4二王を指すところ >1:position startpos moves 7g7f >1:go btime 1499000 wtime 1500000 byoyomi 0 <1:info time 62 depth 1 nodes 51 score cp 11 nps 827 pv 3c3d 8h2b+ 8b2b <1:info time 122 depth 2 nodes 135 score cp -69 nps 1102 pv 3c3d 5g5f 2b8h+ 2h8h <1:info time 177 depth 2 nodes 313 score cp -205 nps 1770 pv 3c3d 5i6h 2b8h+ 7i8h <1:info time 279 depth 3 nodes 2812 score cp 54 nps 10079 pv 5a4b 3i4h 3c3d 8h2b+ 3a2b <1:info time 397 depth 4 nodes 4788 score cp 91 nps 12069 pv 5a4b 3i4h 3c3d 8h2b+ 3a2b <1:info time 550 depth 4 nodes 11286 score cp 118 nps 20507 pv 5a4b 5g5f 3c3d 5f5e 2b5e <1:info time 1077 depth 5 nodes 46579 score cp 188 nps 43256 pv 5a4b 5i6h 3c3d 8h2b+ 3a2b <1:info time 2635 depth 6 nodes 136954 score cp -229 nps 51967 pv 5a4b 5i6h 4b3b 3i4h 3b4b 5g5f <1:info time 7257 depth 6 nodes 501384 score cp -295 nps 69089 pv 5c5d 2g2f 8b5b 2f2e 5a6b 2e2d <1:bestmove 5a4b 12
  13. 13. 盤面と指し手 position startpos moves 7g7f 初期盤面から▲7六歩まで 以下、指し手を連ねていく 7g7f: (移動元)(移動先)になってる 7: 7筋(これは棋譜と一緒) g, f: 7段、6段(aが1段) 駒台から打つ手の場合 P*7f のように、打つ駒の名前、”*” 、打つ場所、と表記する 13
  14. 14. そもそも将棋エンジンとは、
 何を計算するのか? Pseudo Code で書いてみた: Algorithm S(p::Position) lis = generate_moves(p) move = choice(p,lis) return move choiceがキモ! 実際は、Alpha Beta Search(後述)というのを行う 14
  15. 15. Algorithm Choice for id_depth = 1:ID_MAX val = AlphaBeta (p, -Infinity, Infinity, id_depth, 0, teban) report_to_UI( PV) (後述) if timedOut return PV[1,1] # 指し手(後述) end end Algorithm AlphaBeta( p::Position, alpha::Int64, beta::Int64,
 depth::Int64, ply::Int64, teban::Int64) こんな感じの関数をひたすら再帰で実行する 15
  16. 16. Alpha Beta Search(1) Algorithm AlphaBeta(p,alpha,beta,depth,ply,teban) if depth <= 0 return evaluate(p,teban) end lis = generate_moves (p,teban) if length(lis) == 0 return -Infinity + ply end (続く。。。) 16
  17. 17. Alpha Beta Search(2) for m in lis (本体は次ページ) end return alpha end ! ! ! ! 17
  18. 18. (本体) make_move (p, m, teban) val = -AlphaBeta( p, -beta, -alpha, depth-1, ply+1, teban*(-1)) move_back(p, m, teban) if val > alpha alpha = val # alpha update update_pv( p, m, val) # update Principal Variation if val >= beta break # beta cutoff end end 18
  19. 19. Alpha Beta Search(3)
 関数について evaluate: 評価関数 局面の価値を計算する関数 メカ女子将棋ではbonanzaプログラムの素性値を利用 generate_moves: 可能手生成関数 局面から指せる手をすべてリストに列挙する 後述のMagic BitBoardはここの話 legal/pseudo legal の二種類がある(この例ではlegal) 以上二つがCPUのかなりの時間を使う(※重要) 19
  20. 20. Alpha Beta Search(4) make_move/move_back: 一手指す(mを)そしてpを更新する move_backは一手戻す update_pv: 最善応手手順(PV)を更新する 関数が手を返すのではなくここでPVを更新するケースが多い このPVの結果の1手目を指し手とする 実際は三角な行列を更新することが多い PVをtransposition table と呼ばれるハッシュテーブルから取得する場合も
 (Stock Fishなど) 20
  21. 21. Alpha Beta Search(5) 注目すべきは beta cutoff これ、途中でSearchを止めている しかし、このcutoffを行っても、最後に計算されるval(ゲーム木の値)は変わらない [Knuth 75]
 =つまりサボれる=もっと深く探索できる 実際にはmove ordering という指し手リストの並べ替えを行って、できるだけ最初の方 でbeta cutoffが起きるようにしている 最も最適な並び替えられたtree全体のことを、optimal treeと呼ぶ ! [Knuth 75] An Analysis of Alpha-Beta Pruning(Artificial Intelligence 6(1975), 293-326)
 という論文にこの点についての考察がある 21
  22. 22. メカ女子将棋GitHub repo. 第24回世界コンピュータ将棋選手権出場
 プログラム(そこそこの強さ、原始的) https://github.com/kimrin/WCSC23 現在開発中のNextGenバージョン
 (Magic BitBoard搭載、まだ未完成) https://github.com/kimrin/NextGenMechajyo 22
  23. 23. Magic BitBoard と #JuliaLang 128bit 整数 まず、bitboardとは、を説明します Chessでは、64bit変数のそれぞれのbitで、各 squareの駒の有無を表現する Whites, Blacks, AllPieces, WhiteBishopsなど、用 途に応じて色んなbitboardを作る 将棋は9x9なので、さて、困った。。。(続く) 23
  24. 24. NextGen Mechajyoでは Stockfish(Chess program)の64bit bitboardをそのまま128bitに拡 張して、下位81bit(=9x9)を使用する #JuliaLangでは、128bit 整数の演算をサポートしている (LLVM由来)ので、ロジックそのままに若干修正するだけ でbitboardを将棋にも導入できます! #JuliaLangまんせー\(^o^)/ ほかのソフトは32bit x 3とか、64bit+32bitとかやって、C/C++ で頑張って計算しています。。。 24
  25. 25. BitBoard 基本、駒の可能手を、次の関数で計算 する(表引き) B = F(original_position,piece_kind) 例:B= F(7七,先手歩)
   Bは7六だけbitが立ったBitBoard 25
  26. 26. BitBoard続き 自分の駒のいないマスとANDを取る
 つまり自分の駒は取れない 算出したBitBoardについて、各bitの位置を trailing_zerosなどで求める すべての1になっているbitを拾い出し、可能手 を生成する(可能手は32bit の整数で表現) 26
  27. 27. Magic BitBoardとは Sliding Pieces(香車、飛車、角、竜、 馬)などの可能手を高速に求める方 法 なんと、かけ算使って、効きを求め る!!!(なんだってー!!!) 27
  28. 28. 解説しよう Sliding Piecesの効き(=可能手の行き先) は、前述の場所と駒種類の関数にはならな い! Slidingは自分や相手の駒が有ると止まるの で、効きはcontextに依存する
 (contextとは、効きの途中にある駒たち) 28
  29. 29. 例:指し手生成祭り ! ! ! ! 9八の先手飛車は上の後手歩や香を取れない 9七の先手歩があるので、そこで効きが止まる 29
  30. 30. よって、効きを求める関数は C = G(original_position,piece_kind,
 context) となる ここで、contextは効きの 状態を駒の有無でbit化した整数 30
  31. 31. Programming Chessの仙人 が考えた斬新な方法とは contextを高速に求めたい。例えばcontextの長さが10bitで、すべ てのマスに駒がいる場合、1023という数字を、高速に求めたい Bishop, Rookのそれぞれで、縦横斜めの連続したbit列を集めてこ ないといけない そこで、以下の式でcontextを求めちゃう uint((((occ & Masks[s+1]) * Magics[s+1])) >>> Shifts[s +1]) 詳しくは次ページ 31
  32. 32. uint((((occ & Masks[s+1]) * Magics[s+1])) >>> Shifts[s+1]) occが全部の駒のbitboard Masksは、駒がsの位置に有った場合の、行き 放題の効き で、それにhashを求めるべくMagicsを掛けると 縦横斜めのbit達が連続した領域に入る♡ で、Shiftsで寄せて、contextのできあがり♡ 32
  33. 33. contextが求まれば、
 こっちのもの 先ほどの関数Gの表引きを実現するだけ! 飛車と角の二通りがある 馬は角、竜は飛車に、1マスの効きをORしたBitBoardで表現 香車は飛車の前方向マスクを取ったもので表現 ! でも、どうやってMagics計算するの?(真っ当な疑問w) 33
  34. 34. Magicsの求め方♡ 希薄な乱数(1のbitが少ないという意味)をひたすら生 成して、条件を満たすMagicsを計算? するw すいません、ローテクかもしれませぬ とりあえずNextGen Mechajyoでは10分くらいMacBookPro でごりごりやると計算できます。serializeしておいて、 実行時にファイルから読み出してます 基本NextGen MechajyoはStockfishの真似しっこです(^_^;) 34
  35. 35. 動かしてみよう! (時間が余ったらね。。。//////) 35
  36. 36. ご清聴ありがとう ございました きゃぴっ♡ 質問はこの場で言っていただくか、
 twitter: @kimrin まで! 36
  37. 37. メカ女子将棋 (愛称:メカジョさん)の棋風 ファンシーな指し手w 飛車 角を先に取られる(T_T) とにかく、成らないw なぜか相手のマシンがハング・反則をするw 第24回世界コンピュータ将棋選手権
 一次予選 22チーム中 19位 棋力は不明だけど、強いと感じさせる手もある 37
  38. 38. 将棋盤(棋譜) 9一 8一 7一 6一 5一 4一 3一 2一 1一 9二 8二 7二 6二 5二 4二 3二 2二 1二 9三 8三 7三 6三 5三 4三 3三 2三 1三 9四 8四 7四 6四 5四 4四 3四 2四 1四 9五 8五 7五 6五 5五 4五 3五 2五 1五 9六 8六 7六 6六 5六 4六 3六 2六 1六 9七 8七 7七 6七 5七 4七 3七 2七 1七 9八 8八 7八 6八 5八 4八 3八 2八 1八 9九 8九 7九 6九 5九 4九 3九 2九 1九 38
  39. 39. 将棋盤(USI) 9a 8a 7a 6a 5a 4a 3a 2a 1a 9b 8b 7b 6b 5b 4b 3b 2b 1b 9c 8c 7c 6c 5c 4c 3c 2c 1c 9d 8d 7d 6d 5d 4d 3d 2d 1d 9e 8e 7e 6e 5e 4e 3e 2e 1e 9f 8f 7f 6f 5f 4f 3f 2f 1f 9g 8g 7g 6g 5g 4g 3g 2g 1g 9h 8h 7h 6h 5h 4h 3h 2h 1h 9i 8i 7i 6i 5i 4i 3i 2i 1i 39
  • KanSakamoto

    Jul. 5, 2014
  • shiraco

    Jul. 5, 2014

JuliaTokyo #1 で発表した、メカ女子将棋についてのスライドです

Views

Total views

8,185

On Slideshare

0

From embeds

0

Number of embeds

6,153

Actions

Downloads

7

Shares

0

Comments

0

Likes

2

×