情報オリンピック夏合宿発表

23
GP 使って競技で常勝 府立大高専 3 年 三上 和馬 @kyuridenamida 犯人さがしてます☝

Upload: kazuma-mikami

Post on 02-Jul-2015

698 views

Category:

Documents


2 download

DESCRIPTION

暫定

TRANSCRIPT

GP 使って競技で常勝府立大高専 3 年 三上 和馬@kyuridenamida

犯人さがしてます☝

遺伝はいいでん♪● 激寒

● 昨日のきたゆた

FX なんてチョロい !

セミナーの様子

● 今日のきたゆた

・・・

ばっちぇ冷えてる

ところでみなさん● 皆さん Div2Medium 解けますか ?

僕は● よく落とします

そこで● 遺伝的プログラミングを使って解くことにしました

つまり● 解法を自動生成します.

まさに常勝 !

SRM 543 Div2 Medium - EllysXors

● A,B が与えられる. (1 A B 4*10^9)≦ ≦ ≦

● A 以上 B 以下の数の排他的論理和を出力

A xor (A+1) xor (A+2) xor ... xor B

● ふつうにループすると TLE することにする

GP で解いた● 小さいケースは全探索で解ける

● それを教師として利用する.乱数生成

● (a から b までの xor)

= (0 から b までの xor) ^ (0 から a-1 までの xor)

● ランダム生成プログラムがいくつ正解しているかを評価値とする評価関数を用いた.

もっと厳密に● 非終端記号 :

四則演算 (+,-,*,/) (a == b ? c : d) , (a < b ? c : d)a,b,c,d で動作が決まる四項条件演算子

● 終端記号 : 変数 x もしくは 1~5 の定数

● 評価値 : 教師データ (100 問 ) に対する正答数と式の長さ

● 1 世代の集団の個体数 :250

● 集団に突然変異が 5% くらい起きて交叉は

45% くらい起きる.

式を求めるぞ !

● (x+2<10?1:0) みたいなかんじで式が生成される

● 実行してみます

<

+ 10 1 0

x 2

結果● 第 0 世代 : 正答率 41% �  運よく高かった !

● 第 1600 世代 : 正答率 55%

● 第 1800 世代 : 正答率 69%

● 第 4500 世代 : 正答率 86%

● 第 26000 世代 : 正答率 100%

● 出来上がった 0 から x までの xor を求める式「 (((((x-((1<1)?(x):((((((x%4)<(3/3))?((x+2)):(x))-x)+((x%x)*(x-x))))))/1)+((2/2)%(2*((x<x)?(4):(1)))))*(((((x+4)+(x+x))+((2+1)+4))-(2%3))%2))+((((x+2)%4)+1)/(1*3))) 」

実際に提出してみましょう● TopCoder に接続します

Codeforces #122 Div2 B. Square

● 一辺長さ n の正方形がある.

● 左下の頂点からはじめて時計回りに n+1 個飛ばしで番号をつけていく.左下の頂点に再び番号がつくのは何番目か.

同様にして自動実行● N が小さい場合は全探索で解ける !

● それを教師データにして・・・

結果● 20 分実行した結果 ,100 件の教師データに対して正答する

「 ((((((((2*x)*(x-x))+(x%2))+((x%(-1))*x))*((((3+(-5))-4)==((((x%x)%((-5)+x))+(-3))*((((-5)+x)%(4%x))%(-5))))?((((((((3+((x+x)/x))-(1%((x+(-2))/(x%(-2)))))-2)%(-3))*1)*(4-(((-1)*5)%((3/x)-((x-(4*x))-3)))))/((-5)%x))):((-2))))-(-5))*x)-(x-((x/x)%(x*4)))) 」

という式が得られた.

投げてみよう● 通るかな ?

( 絶望 )

● 小さいケースで落ちる

● 小さいケース対策して出してみる

GP の弱点● 本当に式を予測しているだけだから今回のように WA することもあ

● ただ教師データの全てに正解するようなプログラムであればある程度正しい ( 式が短い場合に限るが )

● ただし,式の変数が増えるとぜんぜん良い式を出してくれないのでつらい (1 変数だけ与えられる問題ってびみょう )

挑戦した問題● SRM 489 Div1 Medium DiceRotation

局所的な場合分けが絡む問題. 2 時間程実行したが完答するプログラムは得れず

● ざんねん

まとめ

● 簡単な法則性とか見つけるのが得意みたいなので,問題解けないときは GP しましょう.

● 評価関数の自動生成とかよさそう ( 適当 )

● ぶっちゃけ, GP で解けるような法則性の問題は人間がやったらすぐ気づけそう

● GP 遅いし微妙にバグってても気づかない

小学生並の感想

● 遺伝的○○は見た目より簡単だが,職人芸 (パラメータ調整 ) が要求され難しかった.

● 実行中のプログラムを眺めていると,子供の成長を見守っている感覚で面白かった.

● うっかり視聴してしまったキルミーベイベーがつまらないので班崩壊が起きそうになっていた.

● 黒い本は読めなかった