Submit Search
Upload
ぷよぷよAIの新しい探索法
•
Download as ODP, PDF
•
11 likes
•
11,684 views
T
Takaya Doki
Follow
https://github.com/puyoai/puyoai/tree/master/src/cpu/takapt の解説
Read less
Read more
Software
Slideshow view
Report
Share
Slideshow view
Report
Share
1 of 36
Download now
Recommended
ぷよぷよ AI 人類打倒に向けて
ぷよぷよ AI 人類打倒に向けて
mayahjp
ぷよぷよ AI: mayah(AI) の実装
ぷよぷよ AI: mayah(AI) の実装
mayahjp
先端技術とメディア表現1 #FTMA15
先端技術とメディア表現1 #FTMA15
Yoichi Ochiai
[DL輪読会] マルチエージェント強化学習と心の理論
[DL輪読会] マルチエージェント強化学習と心の理論
Deep Learning JP
強化学習 DQNからPPOまで
強化学習 DQNからPPOまで
harmonylab
直交領域探索
直交領域探索
okuraofvegetable
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
Preferred Networks
SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜
SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜
SSII
Recommended
ぷよぷよ AI 人類打倒に向けて
ぷよぷよ AI 人類打倒に向けて
mayahjp
ぷよぷよ AI: mayah(AI) の実装
ぷよぷよ AI: mayah(AI) の実装
mayahjp
先端技術とメディア表現1 #FTMA15
先端技術とメディア表現1 #FTMA15
Yoichi Ochiai
[DL輪読会] マルチエージェント強化学習と心の理論
[DL輪読会] マルチエージェント強化学習と心の理論
Deep Learning JP
強化学習 DQNからPPOまで
強化学習 DQNからPPOまで
harmonylab
直交領域探索
直交領域探索
okuraofvegetable
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
Preferred Networks
SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜
SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜
SSII
強化学習と逆強化学習を組み合わせた模倣学習
強化学習と逆強化学習を組み合わせた模倣学習
Eiji Uchibe
明日使えないすごいビット演算
明日使えないすごいビット演算
京大 マイコンクラブ
深層強化学習の分散化・RNN利用の動向〜R2D2の紹介をもとに〜
深層強化学習の分散化・RNN利用の動向〜R2D2の紹介をもとに〜
Jun Okumura
数理最適化とPython
数理最適化とPython
Yosuke Onoue
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
Shota Imai
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
catupper
Surveyから始まる研究者への道 - Stand on the shoulders of giants -
Surveyから始まる研究者への道 - Stand on the shoulders of giants -
諒介 荒木
POMDP下での強化学習の基礎と応用
POMDP下での強化学習の基礎と応用
Yasunori Ozaki
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
Takuya Akiba
多様な強化学習の概念と課題認識
多様な強化学習の概念と課題認識
佑 甲野
Binary indexed tree
Binary indexed tree
HCPC: 北海道大学競技プログラミングサークル
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Yasutomo Kawanishi
セクシー女優で学ぶ画像分類入門
セクシー女優で学ぶ画像分類入門
Takami Sato
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
Chokudai search
Chokudai search
AtCoder Inc.
機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)
Kota Matsui
強化学習の基礎的な考え方と問題の分類
強化学習の基礎的な考え方と問題の分類
佑 甲野
Minecraft による強化学習の実践 (MineRL)
Minecraft による強化学習の実践 (MineRL)
Tusyoshi Matsuzaki
強化学習入門
強化学習入門
Shunta Saito
強化学習その3
強化学習その3
nishio
More Related Content
What's hot
強化学習と逆強化学習を組み合わせた模倣学習
強化学習と逆強化学習を組み合わせた模倣学習
Eiji Uchibe
明日使えないすごいビット演算
明日使えないすごいビット演算
京大 マイコンクラブ
深層強化学習の分散化・RNN利用の動向〜R2D2の紹介をもとに〜
深層強化学習の分散化・RNN利用の動向〜R2D2の紹介をもとに〜
Jun Okumura
数理最適化とPython
数理最適化とPython
Yosuke Onoue
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
Shota Imai
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
catupper
Surveyから始まる研究者への道 - Stand on the shoulders of giants -
Surveyから始まる研究者への道 - Stand on the shoulders of giants -
諒介 荒木
POMDP下での強化学習の基礎と応用
POMDP下での強化学習の基礎と応用
Yasunori Ozaki
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
Takuya Akiba
多様な強化学習の概念と課題認識
多様な強化学習の概念と課題認識
佑 甲野
Binary indexed tree
Binary indexed tree
HCPC: 北海道大学競技プログラミングサークル
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Yasutomo Kawanishi
セクシー女優で学ぶ画像分類入門
セクシー女優で学ぶ画像分類入門
Takami Sato
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
Chokudai search
Chokudai search
AtCoder Inc.
機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)
Kota Matsui
強化学習の基礎的な考え方と問題の分類
強化学習の基礎的な考え方と問題の分類
佑 甲野
Minecraft による強化学習の実践 (MineRL)
Minecraft による強化学習の実践 (MineRL)
Tusyoshi Matsuzaki
強化学習入門
強化学習入門
Shunta Saito
強化学習その3
強化学習その3
nishio
What's hot
(20)
強化学習と逆強化学習を組み合わせた模倣学習
強化学習と逆強化学習を組み合わせた模倣学習
明日使えないすごいビット演算
明日使えないすごいビット演算
深層強化学習の分散化・RNN利用の動向〜R2D2の紹介をもとに〜
深層強化学習の分散化・RNN利用の動向〜R2D2の紹介をもとに〜
数理最適化とPython
数理最適化とPython
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
Surveyから始まる研究者への道 - Stand on the shoulders of giants -
Surveyから始まる研究者への道 - Stand on the shoulders of giants -
POMDP下での強化学習の基礎と応用
POMDP下での強化学習の基礎と応用
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
多様な強化学習の概念と課題認識
多様な強化学習の概念と課題認識
Binary indexed tree
Binary indexed tree
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
セクシー女優で学ぶ画像分類入門
セクシー女優で学ぶ画像分類入門
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Chokudai search
Chokudai search
機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)
強化学習の基礎的な考え方と問題の分類
強化学習の基礎的な考え方と問題の分類
Minecraft による強化学習の実践 (MineRL)
Minecraft による強化学習の実践 (MineRL)
強化学習入門
強化学習入門
強化学習その3
強化学習その3
ぷよぷよAIの新しい探索法
1.
ぷよぷよ AI の新しい探索方法 @takapt0226
2.
自己紹介 ● Twitter: @takapt0226 –
たかぷとと読むらしい ● ぷよぷよ – ぷよぷよフィーバーWinで1万試合ぐらい? – 最近はpuyovsをたまに ● レート900台 ● 競技プログラミング – TopCoder (Algo: yellow, Marathon: red) – CODE VS4.0 (予選4位, 本戦4位) – HAL研プロコン(2012学生6位, 2013学生1位, 2014学生5位)
3.
puyoai の制約 ● AI
には 2 手しか見えない ( 操作ツモとネクス ト ) ● 思考に使える時間は 300ms
4.
既存の探索方法 ● 見えてる 2
手の置き方を全探索 – 1 手の置き方は 22 パターン 一番いい評価値 この操作をする
5.
既存の探索方法 ● 評価関数をとにかく超頑張るしかない – 定形パターンマッチング ●
GTR なら評価値をプラスするなど
6.
アイデア ● ツモが完全に見えている場合は評価関数をたい して頑張らなくても大連鎖を探索できそう ● 最大
50 手ぐらいまでを探索したい ● 実際は 2 手しか見えないのでランダムに生成し たツモを足す – 30 手先探索したい場合、見えてる 2 手 + ランダム な 28 手
7.
ツモが完全に見えている場合 ● 全探索で n
手探索する場合、計算量は O(22n ) – 高速化を頑張っても 5 手ぐらいまでしか全探索はで きない ● どうやって 50 手の探索をするか? – ビームサーチしよう! ● BFS + 枝刈り
8.
BFS ● BFS( 幅優先探索
) – 深さが小さい順で探索する
9.
BFS 初期状態
10.
BFS
11.
BFS
12.
BFS
13.
BFS の実装例 void bfs() { vector<State>
states[MAX_DEPTH + 1]; states[0].push_back(initial_state); // 初期状態 for (int depth = 0; depth < MAX_DEPTH; ++depth) { // 深さ depth の状態を列挙 for (State state : states[depth]) { // 各状態から次の状態を生成 for (State next_state : generate_next_states(state)) states[depth + 1].push_back(next_state); } } }
14.
ビームサーチ ● BFS +
枝刈り – 探索の各深さで評価値が良い上位 k 個の状態の探索 を継続 ● k のことをビーム幅と呼ぶ
15.
ビームサーチ ( ビーム幅
4) 0 n n は評価値
16.
ビームサーチ ( ビーム幅
4) 0 4 2 1 評価値が良い順に sort ここでは大きいほど良いとする
17.
ビームサーチ ( ビーム幅
4) 0 4 2 1 7 6 4 3 2 2 1
18.
ビームサーチ ( ビーム幅
4) 0 4 2 1 7 6 4 3 2 2 1 11 10 9 8 7 5 5 上位 4 つの状態は探索を継続
19.
ビームサーチ ( ビーム幅
4) 0 4 2 1 7 6 4 3 2 2 1 11 10 9 8 7 5 5 上位 4 つの状態は探索を継続
20.
ビームサーチの実装例 void beam_search() { vector<State> states[MAX_DEPTH
+ 1]; states[0].push_back(initial_state); // 初期状態 for (int depth = 0; depth < MAX_DEPTH; ++depth) { const int BEAM_WIDTH = 810; // 評価値が良い順で sort sort(states[depth].begin(), states[depth].end(), GoodEvalOrder); // 上位 BEAM_WIDTH に入らないものを削除 if (states[depth].size() > BEAM_WIDTH) states[depth].erase(states[depth].begin() + BEAM_WIDTH, states[depth].end()); // 深さ depth の状態を列挙 for (State state : states[depth]) { // 各状態から次の状態を生成 for (State next_state : generate_next_states(state)) states[depth + 1].push_back(next_state); } } } BFS に枝刈りを追加
21.
ぷよぷよ AI の評価関数 ●
フィールドを評価する ● 評価項目 – 連鎖数 ( 重要 ) – より良くするために takapt(AI) の現状で評価に入れ ているもの ● フィールドの形 (U 字になっていると良い ) ● 発火点の高さ ● test さんの資料を見て、どうぞ – http://www.geocities.co.jp/lockitjapan/puyoai/
22.
連鎖数の評価 ● フィールドの各列にある 1
色を 1,2 個落として 連鎖をシミュレーション – 1 列目に赤 1 つ : 1 連鎖 – 2 列目に赤 1 つ : 1 連鎖 – 5 列目に黄 2 つ : 3 連鎖 ● このフィールドは 3 連鎖と評価
23.
ビームサーチをぷよぷよに適用 ● 操作ツモごとにビームサーチする ● 探索中に発火した連鎖の中で最大の連鎖数の状 態を探し、その状態に遷移する
1 手目の操作を 実際にする ● takapt(AI) の現状ではビーム幅は 400
24.
ビームサーチをぷよぷよに適用 1 15 16 14 〜〜〜〜〜〜〜〜〜〜〜〜〜〜 〜〜〜〜〜〜〜〜〜〜〜〜〜〜 depth 0 1 2 18 20 n は n
連鎖を発火 最大の連鎖数 このツモ操作をする
25.
本線連鎖数の実験結果について ● 100 回独立したとこぷよ
( 対戦相手がいない ) を行い、本線連鎖数の頻度をカウント ● 50 手までに本線が発火出来なかった場合は -1 としている ● 横軸は本線連鎖数、縦軸は頻度
26.
ツモが完全に見えている場合の結果 評価関数 : 連鎖数のみと
takapt(AI) の現状 ( 連鎖 数 ,U 字 , 発火点の高さ ) -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 0 10 20 30 40 50 60 連鎖数のみ takapt(AI)
27.
ツモが見えていない場合 ● 見えている 2
つのツモ + ランダムに生成したツモを 使ってビームサーチ ● 何手先まで探索するか? – takapt(AI) の現状ではフィールドが埋まるツモ数 + α を基 準にしている ● (6 * 13 - フィールド上のぷよ数 ) / 2 + 4 手先まで探索している 見えてるツモ ランダムに生成したツモ
28.
見えてるツモ 2 つ
+ ランダムツモを用いた場合の結果 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 5 10 15 20 25
29.
ランダムなツモによる問題 ● ランダムなツモで探索を行うと、たまたま神ツ モで大連鎖が出来た場合やクソツモで発火でき ず死亡する場合などがある ● モンテカルロしよう!
30.
モンテカルロ法 ● ランダムさを用いてシミュレーションを行う – 最近は囲碁でモンテカルロ法を使う方法が流行って るらしい ●
ランダムさ : 終局までプレイヤーが打つ手をランダムに 選択する ● まとめる : 何度もランダムなシミュレーションを行い、 最も勝率が高かった手を実際に打つ
31.
モンテカルロ法をぷよぷよに適用 ● 異なる複数のランダムなツモを生成し、それぞれのツモご とにビームサーチする – takapt(AI)
の現状では 5 回ビームサーチをしている ● それぞれのビームサーチの結果を考慮して、実際に操作す る手を選択
32.
実際に操作する手の選択 ● 22 パターンのそれぞれの操作に番号を付ける –
例 : 回転せずに 1 列目に置く操作を番号 0 に対応 ● この探索結果が得られたときにどうする? 各ビームサーチの探索結果 操作番号 (0~21) 最大連鎖数 1 14 1 13 4 16 5 14 1 14
33.
実際に操作する手の選択 (NG) ● 平均値
(or 中央値 ) を使い、最大のものを選択 – 操作 1: (14 + 13 + 14) / 3 = 13.66 – 操作 4: 16 – 操作 5: 14 ● 操作 4 を選択 – 神ツモでは ??? 各ビームサーチの探索結果 操作番号 (0~21) 最大連鎖数 1 14 1 13 4 16 5 14 1 14
34.
実際に操作する手の選択 (takapt(AI) の現状
) ● 異なるツモに対して、同じ操作が最大連鎖に繋 がっているからには何かしら良さがあるはず ● 和が最大のものを選択 – 操作 1: 14 + 13 + 14 = 41 – 操作 4: 16 – 操作 5: 14 ● 操作 1 を選択 各ビームサーチの探索結果 操作番号 (0~21) 最大連鎖数 1 14 1 13 4 16 5 14 1 14
35.
1, 5, 50
回ビームサーチをした場合の結果 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 0 5 10 15 20 25 30 35 40 1 5 50
36.
今後の課題 ● いつ、どこを発火するか? – 現状ではとにかく連鎖数を最大化することしか考えてい ない ●
降ってくるおじゃまは考慮している – 潰し、対応、催促などの判断 ● ルールベースなアルゴリズムではなく、勝率を最大化しようと した結果、潰し、対応、催促を自然にするようなアルゴリズム にしたいと妄想中 ● 評価関数を良くする – mayah(AI), niina の評価関数を参考にしたり
Download now