Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Hiro H.
PPTX, PDF
5,116 views
C++用将棋ライブラリ"OpenShogiLib"の紹介
2013.7.13 CLR/H & Sapporo.cpp 勉強会で発表
Technology
◦
Read more
2
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 65
2
/ 65
3
/ 65
4
/ 65
5
/ 65
6
/ 65
7
/ 65
8
/ 65
9
/ 65
10
/ 65
11
/ 65
12
/ 65
13
/ 65
14
/ 65
15
/ 65
16
/ 65
17
/ 65
18
/ 65
19
/ 65
20
/ 65
21
/ 65
22
/ 65
23
/ 65
24
/ 65
25
/ 65
26
/ 65
27
/ 65
28
/ 65
29
/ 65
30
/ 65
31
/ 65
32
/ 65
33
/ 65
34
/ 65
35
/ 65
36
/ 65
37
/ 65
38
/ 65
39
/ 65
40
/ 65
41
/ 65
42
/ 65
43
/ 65
44
/ 65
45
/ 65
46
/ 65
47
/ 65
48
/ 65
49
/ 65
50
/ 65
51
/ 65
52
/ 65
53
/ 65
54
/ 65
55
/ 65
56
/ 65
57
/ 65
58
/ 65
59
/ 65
60
/ 65
61
/ 65
62
/ 65
63
/ 65
64
/ 65
65
/ 65
More Related Content
PDF
Boost.GraphでJR全線乗り尽くしプランを立てる - プログラミング生放送+CLR/H+Sapporo.cpp 勉強会@札幌 (2014.7.12)
by
Hiro H.
PDF
2017 0721 サーバレスアーキテクチャを勉強する会
by
t-moritsugu
PDF
C++ ポインタ ブートキャンプ
by
Kohsuke Yuasa
PDF
イマドキC++erのモテカワリソース管理術
by
Kohsuke Yuasa
PDF
札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」
by
Hiro H.
PDF
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
by
Hiro H.
PDF
2012.11.17 CLR/H&札幌C++勉強会 発表資料「部分文字列の取得を効率よく!楽に! - fundoshi.hppの紹介と今後の予定 -」
by
Hiro H.
PDF
プロ生ちゃんbotを作ろう!
by
treby
Boost.GraphでJR全線乗り尽くしプランを立てる - プログラミング生放送+CLR/H+Sapporo.cpp 勉強会@札幌 (2014.7.12)
by
Hiro H.
2017 0721 サーバレスアーキテクチャを勉強する会
by
t-moritsugu
C++ ポインタ ブートキャンプ
by
Kohsuke Yuasa
イマドキC++erのモテカワリソース管理術
by
Kohsuke Yuasa
札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」
by
Hiro H.
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
by
Hiro H.
2012.11.17 CLR/H&札幌C++勉強会 発表資料「部分文字列の取得を効率よく!楽に! - fundoshi.hppの紹介と今後の予定 -」
by
Hiro H.
プロ生ちゃんbotを作ろう!
by
treby
Viewers also liked
PDF
rsyncで差分バックアップしようぜ!
by
Hiro H.
PDF
2011.7.2 Ruby勉強会@札幌 「はじめてのRubygemsへのライブラリ公開」
by
Hiro H.
PDF
関数の最小値を求めることから機械学習へ
by
Hiro H.
PDF
C++ template-primer
by
Kohsuke Yuasa
PDF
名古屋市営地下鉄最小距離完乗
by
Hiro H.
PDF
Introduction to boost test
by
Kohsuke Yuasa
PDF
コンピュータに「最長しりとり」「最短距離でのJR線全線乗り尽くし」を解いてもらった方法
by
Hiro H.
PDF
オーディオ用レベルメータを作ってみよう
by
Kohsuke Yuasa
PDF
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
by
Hiro H.
PDF
規格書で読むC++11のスレッド
by
Kohsuke Yuasa
PDF
フォロワーから友利奈緒を探す
by
jz5 MATSUE
PDF
Boost.勉強会 #15 札幌 LT「8年間の研究生活でC++書いてて大変だったことベスト3」
by
Hiro H.
PPTX
2011.6.4 TDD bootcamp 札幌2.0 自己紹介LT
by
Hiro H.
PDF
Hubotで遊ぶ
by
treby
PDF
Study3 boost
by
Kohsuke Yuasa
PDF
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
by
Hiro H.
PDF
Hubotをはじめる
by
nasa9084
PDF
最近のC++ @ Sapporo.cpp #5
by
Kohsuke Yuasa
PDF
〜ゲーム制作を始めてみよう〜 Kawaz入会希望者向けスライド
by
Kohki Miki
PDF
Sapporocpp#2 exception-primer
by
Kohsuke Yuasa
rsyncで差分バックアップしようぜ!
by
Hiro H.
2011.7.2 Ruby勉強会@札幌 「はじめてのRubygemsへのライブラリ公開」
by
Hiro H.
関数の最小値を求めることから機械学習へ
by
Hiro H.
C++ template-primer
by
Kohsuke Yuasa
名古屋市営地下鉄最小距離完乗
by
Hiro H.
Introduction to boost test
by
Kohsuke Yuasa
コンピュータに「最長しりとり」「最短距離でのJR線全線乗り尽くし」を解いてもらった方法
by
Hiro H.
オーディオ用レベルメータを作ってみよう
by
Kohsuke Yuasa
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
by
Hiro H.
規格書で読むC++11のスレッド
by
Kohsuke Yuasa
フォロワーから友利奈緒を探す
by
jz5 MATSUE
Boost.勉強会 #15 札幌 LT「8年間の研究生活でC++書いてて大変だったことベスト3」
by
Hiro H.
2011.6.4 TDD bootcamp 札幌2.0 自己紹介LT
by
Hiro H.
Hubotで遊ぶ
by
treby
Study3 boost
by
Kohsuke Yuasa
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
by
Hiro H.
Hubotをはじめる
by
nasa9084
最近のC++ @ Sapporo.cpp #5
by
Kohsuke Yuasa
〜ゲーム制作を始めてみよう〜 Kawaz入会希望者向けスライド
by
Kohki Miki
Sapporocpp#2 exception-primer
by
Kohsuke Yuasa
More from Hiro H.
PDF
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
by
Hiro H.
PDF
C++のライブラリを簡単に眺めてみよう
by
Hiro H.
PDF
スマホ音楽ゲームの動画から譜面をデータ化したかった
by
Hiro H.
PDF
配列の要素挿入・削除もランダムアクセスも両方高速にできる?
by
Hiro H.
PDF
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
by
Hiro H.
PDF
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説
by
Hiro H.
PDF
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
by
Hiro H.
PDF
デレステの劇場で登場したアイドルの回数の統計取ってます
by
Hiro H.
PDF
pandas便利だけどデフォルトパラメータでファイルを読み込むな!
by
Hiro H.
PDF
最近デレステ創作譜面作ってるので技術的な見地から話します
by
Hiro H.
PDF
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
by
Hiro H.
PDF
MSYS2使いはじめました
by
Hiro H.
PDF
シンデレラガールズの「シンプルな」カードゲームを作りたい(アイマスハッカソン2024)
by
Hiro H.
PDF
PCSじゃないよ、PCAだよ
by
Hiro H.
PDF
式を書くだけで最適化計算してほしい!~CVXPY編~
by
Hiro H.
PDF
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
by
Hiro H.
PDF
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
by
Hiro H.
PDF
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
by
Hiro H.
PDF
声優やぞ!~シンデレラガールズにおける配役の歴史のRDFデータ化~
by
Hiro H.
PDF
シンデレラガールズ声優の増え方まとめ
by
Hiro H.
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
by
Hiro H.
C++のライブラリを簡単に眺めてみよう
by
Hiro H.
スマホ音楽ゲームの動画から譜面をデータ化したかった
by
Hiro H.
配列の要素挿入・削除もランダムアクセスも両方高速にできる?
by
Hiro H.
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
by
Hiro H.
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説
by
Hiro H.
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
by
Hiro H.
デレステの劇場で登場したアイドルの回数の統計取ってます
by
Hiro H.
pandas便利だけどデフォルトパラメータでファイルを読み込むな!
by
Hiro H.
最近デレステ創作譜面作ってるので技術的な見地から話します
by
Hiro H.
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
by
Hiro H.
MSYS2使いはじめました
by
Hiro H.
シンデレラガールズの「シンプルな」カードゲームを作りたい(アイマスハッカソン2024)
by
Hiro H.
PCSじゃないよ、PCAだよ
by
Hiro H.
式を書くだけで最適化計算してほしい!~CVXPY編~
by
Hiro H.
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
by
Hiro H.
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
by
Hiro H.
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
by
Hiro H.
声優やぞ!~シンデレラガールズにおける配役の歴史のRDFデータ化~
by
Hiro H.
シンデレラガールズ声優の増え方まとめ
by
Hiro H.
C++用将棋ライブラリ"OpenShogiLib"の紹介
1.
C++用将棋ライブラリ "OpenShogiLib"の紹介 H.Hiro (Sapporo.cpp) http://hhiro.net/about/ Twitter: @h_hiro_ 2013.7.13
CLR/H & Sapporo.cpp 勉強会
2.
自己紹介
3.
H.Hiro • 大学院生 • 現在は就活と研究が 同時並行なので忙しめです •
こんなアイコン 使ってます→
4.
H.Hiro • Sapporo.cpp • Ruby札幌 •
数学勉強会@札幌 : いろいろやってます
5.
部分文字列の取得を 効率よく!楽に! ~fundoshi.hppの紹介と 今後の予定~ Photo by KAIZUKA Creative
Commons BY-NC-SA 2.0 http://www.flickr.com/photos/kaizuka/386511394/ http://www.slideshare.net/maraigue/ 20121117-clrhc-fundoshihpp 【前回の発表(2012.11.17)】
6.
宣伝
7.
http://www.ospn.jp/osc2013-do/ • 今年は9月なのでお間違いなく! • 場所もコンベンションセンターなので お間違いなく! •
ブース・セミナー申込締切は 7月22日(月)です
8.
よろしく お願いします
9.
本題
10.
C++用将棋ライブラリ "OpenShogiLib"の紹介 H.Hiro (Sapporo.cpp) http://hhiro.net/about/ Twitter: @h_hiro_
11.
ということで これから将棋の話を するわけですが
12.
第2回電王戦 (プロ棋士とコンピュータの五番勝負) http://ex.nicovideo.jp/denousen2013/
13.
コンピュータ側の第5局を 戦った「GPS将棋」 http://gps.tanaka.ecc.u-tokyo.ac.jp/gpsshogi/
14.
このうち、汎用的な 部分を切り出したのが OpenShogiLibです
15.
さて
16.
コンピュータに 将棋を扱わせるには 何が必要か
17.
[質問] 将棋をよく/たまに やるよ!という方
18.
[質問] 将棋はあまり しないけど 何となくどんな ゲームかは分かる方
19.
今日必要な前提知識(1/3) 将棋は、二人が順番に 駒を動かすゲームです 駒の動かし方 の表を別途 配布して おります
20.
今日必要な前提知識(1/3) 将棋は、二人が順番に 駒を動かすゲームです 取った駒は 盤上に打つ ことができます
21.
今日必要な前提知識(2/3) 駒にはそれぞれ動きが 決められています
22.
今日必要な前提知識(3/3) 勝利条件は、相手の玉(王) を取ることです 右図のように、実際に 玉を取らなくても、次に 取れることが確定すれば 勝ち(詰み)。
23.
コンピュータ上で 将棋を扱うのに 必要そうなデータ構造
24.
•将棋盤(81マス) •将棋駒(40個) •駒が動ける場所
25.
•将棋盤(81マス) →9×9の2次元配列? •将棋駒(40個) →40個の配列? •駒が動ける場所 →8種をハードコーディング →ルール上動けない場所
26.
OpenShogiLibが これらを全部 提供してくれます
27.
導入方法 & 簡単な利用方法
28.
導入方法 • # apt-get
install libosl-dev •ソースコードから導入の 場合、boostが必要 •Windowsでは試してません もしかしたら面倒かも
29.
// http://blog.livedoor.jp/maraigue/archives/1711816.html // SimpleStateは盤面のみを保持するクラス state::SimpleState
sstate(osl::HIRATE); // NumEffectStateは盤面+駒の動きを扱えるクラス state::NumEffectState nstate(sstate); Move move; // 先手(BLACK)の(7,7)にあるPAWN(歩兵)を、 // (7,6)という何もないマス(PTYPE_EMPTY)に動かす move = Move(Square(7,7), Square(7,6), PAWN, PTYPE_EMPTY, false, BLACK); if(nstate.isValidMove(move)){ nstate.makeMove(move); }
30.
// http://blog.livedoor.jp/maraigue/archives/1711816.html // SimpleStateは盤面のみを保持するクラス state::SimpleState
sstate(osl::HIRATE); // NumEffectStateは盤面+駒の動きを扱えるクラス state::NumEffectState nstate(sstate); Move move; // 先手(BLACK)の(7,7)にあるPAWN(歩兵)を、 // (7,6)という何もないマス(PTYPE_EMPTY)に動かす move = Move(Square(7,7), Square(7,6), PAWN, PTYPE_EMPTY, false, BLACK); if(nstate.isValidMove(move)){ nstate.makeMove(move); }
31.
// http://blog.livedoor.jp/maraigue/archives/1711816.html // SimpleStateは盤面のみを保持するクラス state::SimpleState
sstate(osl::HIRATE); // NumEffectStateは盤面+駒の動きを扱えるクラス state::NumEffectState nstate(sstate); Move move; // 先手(BLACK)の(7,7)にあるPAWN(歩兵)を、 // (7,6)という何もないマス(PTYPE_EMPTY)に動かす move = Move(Square(7,7), Square(7,6), PAWN, PTYPE_EMPTY, false, BLACK); if(nstate.isValidMove(move)){ nstate.makeMove(move); }
32.
これで、とりあえず 将棋が指せる ことはわかった
33.
では、もう少し 凝ったことを してみよう
34.
詰将棋
35.
こんなのが詰将棋です
36.
こんなのが詰将棋です
37.
詰将棋の目的: 王手のみを続けて 相手の玉を詰める
38.
まずは人手で解いてみる
39.
人手だと 何となく 「この手が正解っぽい」 と分かるけど
40.
コンピュータには どう解かせる?
41.
詰将棋の目的: 王手のみを続けて 相手の玉を詰める
42.
コンピュータには 王手になる手を 総当りで指させる
43.
コンピュータには 王手になる手を 総当りで指させる (自分の立場)
44.
コンピュータには 王手を回避する手を 総当りで指させる (相手の立場)
45.
• 詰みとなる条件 相手がどう指そうとも 自分の手によっては 王手を回避できなくなる • 詰まない条件 自分がどう指そうとも 相手の手によっては 王手をかけられなくなる
46.
ここから王手になる手は?
47.
実は4通りある
48.
先に進めると 手の数はすごいことになる
49.
コンピュータに 全部試させればよい // [駒を動かして王手] ActionTryMove acm(mt_new,
nstate, depth, max_depth); for(int i = 0; i < osl::Piece::SIZE; ++i){ p = nstate.pieceOf(i); if(p.isOnBoardByOwner(osl::BLACK)){ // 盤上にある先手の駒の場合 nstate.forEachEffectOfPiece<ActionTryMove>(p, acm) } } valid_moves += acm.valid_moves();
50.
コンピュータに 全部試させればよい // [駒を動かして王手] ActionTryMove acm(mt_new,
nstate, depth, max_depth); for(int i = 0; i < osl::Piece::SIZE; ++i){ p = nstate.pieceOf(i); if(p.isOnBoardByOwner(osl::BLACK)){ // 盤上にある先手の駒の場合 nstate.forEachEffectOfPiece<ActionTryMove>(p, acm) } } valid_moves += acm.valid_moves(); 将棋で用いる全部の駒 (40個)についてループ
51.
コンピュータに 全部試させればよい // [駒を動かして王手] ActionTryMove acm(mt_new,
nstate, depth, max_depth); for(int i = 0; i < osl::Piece::SIZE; ++i){ p = nstate.pieceOf(i); if(p.isOnBoardByOwner(osl::BLACK)){ // 盤上にある先手の駒の場合 nstate.forEachEffectOfPiece<ActionTryMove>(p, acm) } } valid_moves += acm.valid_moves(); 動かしてみる
52.
コンピュータに 全部試させればよい // class ActionTryMove
の中身 template<osl::Player pl> void doAction (const osl::Piece & pc, const osl::Square & sq){ /*(中略)*/ if(osl::isPiece(pc.ptype()) && osl::canPromote(pc.ptype())){ // 成れる駒ならば、成ってみる if(recursive_search(/*(中略)*/) != -2){ ++valid_moves_; } } // 成らない場合 if(recursive_search(/*(中略)*/) != -2){ ++valid_moves_; } }
53.
コンピュータに 全部試させればよい // class ActionTryMove
の中身 template<osl::Player pl> void doAction (const osl::Piece & pc, const osl::Square & sq){ /*(中略)*/ if(osl::isPiece(pc.ptype()) && osl::canPromote(pc.ptype())){ // 成れる駒ならば、成ってみる if(recursive_search(/*(中略)*/) != -2){ ++valid_moves_; } } // 成らない場合 if(recursive_search(/*(中略)*/) != -2){ ++valid_moves_; } } 成れるかどうか判定し 成らないケースとともに試す
54.
コンピュータに 全部試させればよい if(nstate.isValidMove(*p_move)){ // 動かせるか確認 nstate.makeMove(*p_move);
// 動かす // (先手が指した結果の場合)後手玉が王手になっている // (後手が指した結果の場合)後手玉が王手になっていない if(logical_xor(depth % 2 == 1, nstate.inCheck(osl::WHITE))){ mt_new = MoveTree::createNewPtr(*p_move); mt->children.push_back(mt_new); }else{ return -2; } }else{ return -2; // 動かせない場合 }
55.
コンピュータに 全部試させればよい if(nstate.isValidMove(*p_move)){ // 動かせるか確認 nstate.makeMove(*p_move);
// 動かす // (先手が指した結果の場合)後手玉が王手になっている // (後手が指した結果の場合)後手玉が王手になっていない if(logical_xor(depth % 2 == 1, nstate.inCheck(osl::WHITE))){ mt_new = MoveTree::createNewPtr(*p_move); mt->children.push_back(mt_new); }else{ return -2; } }else{ return -2; // 動かせない場合 } まず、将棋のルールとして 動けるかをチェック
56.
コンピュータに 全部試させればよい if(nstate.isValidMove(*p_move)){ // 動かせるか確認 nstate.makeMove(*p_move);
// 動かす // (先手が指した結果の場合)後手玉が王手になっている // (後手が指した結果の場合)後手玉が王手になっていない if(logical_xor(depth % 2 == 1, nstate.inCheck(osl::WHITE))){ mt_new = MoveTree::createNewPtr(*p_move); mt->children.push_back(mt_new); }else{ return -2; } }else{ return -2; // 動かせない場合 } 続いて、王手をかける/ 回避するという条件をチェック
57.
実際に 動かしてみる https://github.com/maraigue/ clrhsapporocpp-20130713
58.
補足
59.
•詰将棋を解くだけなら OpenShogiLibに最初から コードがある •でも、それ以上のことを したかったので 自前で書いた
60.
詰将棋制作支援の プログラムが欲しかった •回答が一意に定まる必要 •余計な駒を使わない :
61.
•そういう機能を持つ ソフトもあるのだが 有料なうえに絶版 •なので自分で作りたかった
62.
おわりに
63.
将棋は 自身で遊ぶだけでなくて コンピュータ的にも 奥が深いです
64.
OpenShogiLibは ドキュメントがあまり整備 されてないので Tipsをブログとかに書くと 喜ばれるかも?
65.
ありがとう ございました
Download