kggk2
TRANSCRIPT
コンピュータは
スーパーマリオ
をクリアできるか? -最適化問題入門-
@gzfVFYm
簡単な自己紹介
• 数理統計をやっている.
• 理論好き.
• プログラムを書くのは苦手.
• ゼミ充(首が回らない)
(宣伝)春休みは解析系のゼミも運営しています.
どうやってマリオをクリアするか?
マリオの話は後で…
(最初はちょっと真面目な話.)
と いきたいところですが…
今日の話の内容
• 関数最適化
– 関数最適化とは?
– 最適化で何ができる?
• 遺伝的アルゴリズム
– 遺伝的アルゴリズムとは
– コンピュータにマリオをクリアさせよう
– 他の応用例
関数最適化入門 前半
Q.最適化って何ですか
A.最大(小)値を求めることです
もっというと、最大(小)値を取る条件を求めることです
中学でやったはず
の最小値を求めなさい.
より最小値は1
あったあった 昔やったなぁ…
と思えなかった人も大丈夫(多分)
Q.何の役に立つんですか
A. 一生食べるのに困らないレベルで 死ぬほど役に立つ.
例えば!
事故率=f(作業時間)
事故率最小にすればいいですね!
⇒工場管理.
さっきやってたこと:
という関数から
事故率最小の作業時間を計算
事故率=f(作業時間)
抽象的に考える
A=f(B)
という関数から
最大のA(とそのときのB)を計算
「最適化」はたくさんの問題を解決する
• 将棋のプログラムも, 最適化が使える.
f(指し手)を最大化すればよい.
王手できる確率=f(指し手)
「最適化」はたくさんの問題を解決する
• 「路線検索」も最適化が使える.
かかる時間=f(ルート)
値段=g(ルート)
f(ルート)最小化で最短ルート.
g(ルート)最小化で最安値.
「最適化」はたくさんの問題を解決する
• 「おすすめユーザーの表示」
仲良さそう度=f(相手)
f(相手)が大きい相手を表示.
「最適化」はたくさんの問題を解決する
• 「問題を解く」操作も最適化が使える.
色がおかしい場所の数 = f(回し方)
f(回し方)=0なる回し方を見つければよい. ⇒f(回し方)を最小化することに相当.
…とまぁ 最適化は凄く役立つ
どうやって 最適化するんですか?
最適化の方法とか
勾配法
Newton-Raphson, BFGS
焼きなましとか Nelder-Meadとか.
進化的アルゴリズム,
数学の知識が必要
自然界を真似る (数学は要らない!)
色々研究されてます
Keyword: オペレーションズ・リサーチ(OR)
(Wikipediaより)
素朴な疑問
全通り試せばいいんじゃないの.
恐ろしい数の組み合わせ.
Ex)ルービックキューブの状態の数
43,252,003,274,489,856,000通り
3,000,000,000通り
Ex)3GHz シングルコアで1秒間に処理できる数
いつになったら計算が終わるのか…
もうちょっと効率的に探そう
例)国内で気温が最低の場所を探す
ちょっとした工夫で計算時間は減る
総当たり)47都道府県全部調べる
工夫)北陸とかだけ調べる
現実問題として.
コンピュータは”遅すぎる”.
コンピュータで”解ける”よう工夫する
=最適化
質問あればどうぞ!
SUPER MARIO BROS. 日本人なら誰でも知ってる
“あの”ゲーム.
土管工(26)
SUPER MARIO BROS. 日本人なら誰でも知ってる
“あの”ゲーム.
5秒で紹介 土管工(26)
姫
亀
を
から 助けるゲーム
ヒゲ
が
操作方法
十字キー 移動
A ジャンプ
動かし方:(↑,↓,←,→,A)の5通り
アイデア
ゲーム開始から0.5秒ごとにコマンド入力
時間(s) 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0
コマンド → → A → ← → A →
コマンドをどう組み合わせるか
ゲームの操作
死ぬまでに移動した距離 =f(コマンドの組み合わせ)
を最大化すれば良いのでは?
全通り試せばいいじゃん!
100秒分のコマンドを考えるとすると, 200ステップあるので,組み合わせは
5200=622301…5 (通り)
140桁
1秒間に100…00回の計算が可能
17桁
どうやればいいんだろう…
(後半へ続く)
総当たりだと スパコン京でも10123 (秒)かかります!
ビッグバンから46億年=1.5×1017(秒)
前半終了 質問タイム
遺伝的アルゴリズム GENETIC ALGORITHM (GA)
後半
キリン
“自然淘汰”による進化説 ※他にも色々な説があるそうですが,省略.
“自然淘汰”による進化説 ※他にも色々な説があるそうですが,省略.
首の短いキリンも長いキリンも両方居た.
エサを取れる首の長いキリンは生き残りやすい
首の長いキリンどうし交配し, 首の長いキリンが生まれる
この体勢で水を飲めるので 猛獣に襲われてもすぐ逃げられる =生存確率アップ
首が長いと…
そして首の長いキリンが増えるのであった
豆知識
要するに…
生き残る奴は環境に 適応している.
よって繁殖する
環境に適応してるって何ですか 再び
1)首が短い個体, 長い個体, 両方います.
2) (食用の)木が高くなりました.
3) 首が短い個体は子孫を残せません. 首が長い個体がどんどん増えます.
大事な部分だけ抜き出す
色んな個体が居る.
環境に適応できなかった個体は死, 適応出来た個体が繁殖
適応出来た個体の性質を 継ぐ個体が増える.
コレ, 最適化に使えるんじゃないか?
色んな個体が居る.
点数=f(個体)が小さい個体は死, 高い個体が繁殖
点数が高い個体の性質を 継ぐ個体が増える.
色んな(動きをする)マリオが居る. 前に進まないマリオは死, ステージクリアに近いマリオが生き残る.
ステージクリアに近いマリオが繁殖
何十世代も繰り返す
色んな(動きをする)マリオが居る. 前に進まないマリオは死, ステージクリアに近いマリオが生き残る.
ステージクリアに近いマリオが繁殖
何十世代も繰り返す
(凄く肝心な部分なので) 質問あればどうぞ!
ちょっと動画を見てみましょう.
YouTube 「【人工知能】スーパーマリオブラザーズを学習させてみた【GA】 」より
※私が作成した動画ではありません
まとめ
GAは便利.