Upload
yowaken
View
323
Download
1
Embed Size (px)
Citation preview
北大日立マラソン2nd やったこと
@yowa
1st のおさらい
● K×Kの盤面に 1~V の数字を置く
● 得点表(項目数: E)のペアが隣接 → 加点
得点表
(1, 2) -> 5点
(2, 6) -> 2点
(4, 7) -> 9点
(6, 7) -> 8点
1st のおさらい
● K×Kの盤面に 1~V の数字を置く
● 得点表(項目数: E)のペアが隣接 → 加点
得点表
(1, 2) -> 5点
(2, 6) -> 2点
(4, 7) -> 9点
(6, 7) -> 8点
総得点: 11点
1st と 2nd の違い
● 同じ数字を、 連結する複数マスに置ける
● 得点表をフルコンプするとボーナス100,000点
得点表
(省略)
やったこと(基本アイデア)
● 左図のように 斜めに並べれば、K×Kの盤面で
(K+1)個の領域が互いに隣り合う (完全グラフ)
● V K+1 ≦ ならこれでフルコンプ
やったこと(基本アイデア)
● V > K+1 ならば いくつかの領域をぶった切って 領域数を増やす
おおまかなアルゴリズム(1/4)
● K×Kの盤面を、V個の領域に分割する(前述の方法)
おおまかなアルゴリズム(2/4)
● K×Kの盤面を、V個の領域に分割する(前述の方法)
● 領域の形を固定したまま、どの領域にどの数字を当てはめるか、焼きなましで決める
↑ここは、だいたい 1st と同じアルゴリズム
おおまかなアルゴリズム(2/4)
● K×Kの盤面を、V個の領域に分割する(前述の方法)
● 領域の形を固定したまま、どの領域にどの数字を当てはめるか、焼きなましで決める
↑ここは、だいたい 1st と同じアルゴリズム
おおまかなアルゴリズム(3/4)
● K×Kの盤面を、V個の領域に分割する(前述の方法)
● 領域の形を固定したまま、どの領域にどの数字を当てはめるか、焼きなましで決める
↑ここは、だいたい 1st と同じアルゴリズム● 当てはめた数字を固定したまま、領域の形をちょっ
とずつ変形させ、スコア改善なら採用(山登り)
おおまかなアルゴリズム(4/4)
● K×Kの盤面を、V個の領域に分割する(前述の方法)
● 領域の形を固定したまま、どの領域にどの数字を当てはめるか、焼きなましで決める
↑ここは、だいたい 1st と同じアルゴリズム● 当てはめた数字を固定したまま、領域の形をちょっ
とずつ変形させ、スコア改善なら採用(山登り)● (蛇足) スコアが減らない範囲で、各領域を狭める
実は使ったマス数でスコアにペナルティがある
そんなの誤差だよ、誤差
やったこと(焼きなまし)
● いったん各領域の形はさっきのに固定– 領域同士が隣接してるかどうかの隣接グラフを
あらかじめ計算しておく
● どの領域を何番に割り当てるか?– 焼きなまし
– 2つの領域について、割り当てる番号を swap して よかったら採用(悪くても一定確率で採用)
やったこと(領域変形) (1/2)
● 「領域はそれぞれ連結でないといけない」という 制約を守ったままの変形– 除去するマスが領域グラフの関節点かどうか
– オレのアルゴリズムぢからでは、そんなの無理無理
やったこと(領域変形) (2/2)
● 各領域の形を木(tree)に限定
– 幸い初期領域は木(閉路どころか分岐すらない)
– 次数2以上なら関節点、次数1ならそうじゃない● 周囲8マスだけ見れば関節点かどうかわかる!かんたん!
この5→周囲に5が2マスある→関節点→変更すると領域切断→変更不可
やったこと(領域変形) (2/2)
● 各領域の形を木(tree)に限定
– 幸い初期領域は木(閉路どころか分岐すらない)
– 次数2以上なら関節点、次数1ならそうじゃない● 周囲8マスだけ見れば関節点かどうかわかる!かんたん!
この8→周囲に8が1マスだけ→関節点じゃない→変更しておk
やったこと(領域変形) (2/2)
● 各領域の形を木(tree)に限定
– 幸い初期領域は木(閉路どころか分岐すらない)
– 次数2以上なら関節点、次数1ならそうじゃない● 周囲8マスだけ見れば関節点かどうかわかる!かんたん!
この8→2,7,1 に変更可
→3,5には変更不可
(周囲に2個ある
→木じゃなくなる)→4,6にも変更不可
(周囲に0個
→飛び地になる)
やらなかったこと
● 積極的に得点表コンプボーナスを取りに行く– さっきのやり方でコンプできたらラッキー程度
– 特に小規模なグラフ(V小、E小、K大)なら、それ専用のアルゴリズムに切り替えてでも、ボーナス狙うべき
● 領域変形時の焼きなまし– 山登りにとどめた
– やってはみたけど芳しくなかった
– 計算が重くて回数稼げないのと、この近傍の取り方だと遷移確率の可逆性(?)みたいな(?)アレが適してない(?)
– 焼きなまし、わからん
よかったこと / よくなかったこと
● 序盤に「どんな形の領域にしたら完全グラフが埋め込めるかな~?」と図を書きながらいろいろ考えたのがたのしかったです。
● 解のvisualizeがけっこうキレイにできたのがよかっ
たです。(テキストでSVGをベタ出力だけどな)
● まとめスライドに取り掛かるのが遅かったのがよくなかったです
よかったこと / よくなかったこと
● 序盤に「どんな形の領域にしたら完全グラフが埋め込めるかな~?」と図を書きながらいろいろ考えたのがたのしかったです。
● 解のvisualizeがけっこうキレイにできたのがよかっ
たです。(テキストでSVGをベタ出力だけどな)
● まとめスライドに取り掛かるのが遅かったのがよくなかったです
おしまい
@yowa