Upload
dekosuke
View
2.128
Download
1
Embed Size (px)
Citation preview
遺伝的アルゴリズムでピクロスを解く
@dekosuke
2
ピクロス
3
ピクロス
縦横に制約がある 黒および白を順次確定
させて解いていく 人間が解くもの・・・です
よね?
4
ピクロスは NP 完全 – Ueda et al. (96’) →人間離れした難しい問題が作れる
ピクロス
名状しがたい問題のようなもの
5
コンピュータに解かせよう!!!
というわけで
6
遺伝的アルゴリズム (GA)
“ 遺伝的アルゴリズムはもっともよく使われている進化的アルゴリズムである” - wikpiedia
7
より正解に近い解答へ、回答群を進化させる 自然淘汰と突然変異の原理
遺伝的アルゴリズム (GA)
8
遺伝的アルゴリズムの応用例
戦略ゲーム ガンダムの歩行パズル(ピクロス)←今回
9
各マスの ( 黒 , 白 ) の状態を (1, 0) にして、遺伝子にコーディング
遺伝子コーディング
10
“Escape from the ivory tower” – Simon Peyton Jones
Haskell は象牙の塔(研究の世界)からやってきた言語
実装 - Haskell
11
名状しがたい純粋関数型言語のようなもの
可及的速やかに実装できる強力かつバグを出さない
Haskell の特徴
12
道具は揃った、あとはコードを書くだけというわけで、結果は・・・・
結果
13
結果
ハウス (5*5)
ニコニコ (10*10)
テレビちゃん (14*14)
名状し難い問題
14
ちゃんと問題が解けた!! 問題サイズが大きくなると、計算が終わらない
(局所解(正しくない解)から抜け出せない)
結果
15
御清聴ありがとうございました
おわり
成果物 https://gist.github.com/2516358
End
次頁から解説編
17
アイディアは大体、最初の参考文献(最終頁参照)から来ています。NP 完全について説明します。 NP 完全問題は、問題の大きさ(パズルサイズ)が大きくなると、その問題を確実に解くアルゴリズムが、ものすごい勢いで計算量が増えていく(普通の時間で解けなくなる)問題です (NP の壁 )遺伝的アルゴリズム (GA) は確率的アルゴリズムなので、必ず問題を解けることを保証しないかわりに、多くの問題に対して十分早い時間で解けることが期待できます。ほかにも、モンテカルロと呼ばれる一連の確率的手法もこの NP の壁に挑むことのできる手法です。実際、レプリカ交換法(モンテカルロの一種)とどっちをやろうか悩みました。
※GA でも無限の時間をかければ必ず解に到達します
解説
18
そういう動機を持ち、遺伝的アルゴリズムで今回の問題にトライしました。
遺伝的アルゴリズムを実装してやってみると、 14*14 のサイズでは、数時間内に正解にたどり着けなくなってしまいました遺伝的アルゴリズムでは突然変異の方法と確率をいじる余地がまだあるので、最適な調整をすればもう少し大きいサイズの問題まで解けるかもしれませんほかのアルゴリズムでは 20*20以上のものが解けるものもあるので、遺伝的アルゴリズムがどうだったかは微妙なところがあります・・・
解説
19
Haskell を実装に選んだ理由は、主に2点あります。1つは、十分早く実装ができること、そして2つめはバグが出る率が非常に低いことです。 Python や Ruby などの LL 言語も早く実装するのには向いていますが、アルゴリズムの一部にバグが出ても、気づきにくいことがあります。Haskell は強い静的型付けを持つ言語ですので、多くのバグをコンパイル時に検出することができます
解説
20
“A comparison of a genetic algorithm and a depth first search algorithm applied to Japanese nonograms” http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.62.9443
“Hoogle” http://www.haskell.org/hoogle/
参考文献