Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ヒューリスティックコンテストの誘惑

 ヒューリスティックコンテストの誘惑

沖縄の競技プログラミングコミュニティ「競プロゆんたく会 a.k.a. 琉球計算機格闘技会」の第2回ミーティングでヒューリスティックコンテストの魅力について発表した際の資料です。
私自身まだ初心者ですので、内容に誤りを含む可能性があることをご了承ください。

Other Decks in Programming

Transcript

  1. 自己紹介 • 藤川浩明(ふじかわ ひろあき) • Crystal 言語と Vim と Arch Linux

    が好きな趣味 ぐらまー • 本業は環境調査員 • AtCoder アルゴ茶 / ヒューリスティック水
  2. AHC (AtCoder Heuristic Conteset) • AtCoder が主催するヒューリスティックコンテ スト • 4

    時間程度の短期コンテストと 1 週間〜 2 週間 程度の長期コンテストがあり、最近は長期が 多い • レーティングは減らない
  3. AHC の魅力 • コンテスト時間が長いので、マイペースに深く考えること ができる • 解法は十人十色なので、コンテスト後に Twitter 等で解法 を見せ合うのが楽しい

    • アルゴリズム能力だけでなく、大量のテストケースを生成 し並列実行する環境の構築や各テストケースごとのデータ の分析・統計、長めのコードを書く実装力など、様々な能 力が必要となるので、より実務に近い経験ができる
  4. 問題の例 : AHC002 https://atcoder.jp/contests/ahc002/tasks/ahc002_a AHC としてはシンプルな問題の短期コンテストです • 50×50 マスのグリッド上にタイルが敷き詰められている •

    各タイルは 1 マスのみで構成されるか、または 2 マスが合体して 1 タイルになっている • 各マスには得点が設定されており、そのマスを通った時に当該マ スの得点がスコアに加算される • 指定されたマスから始まる経路で、各タイルを一度しか通らず に、なるべく高いスコアを出せ
  5. 問題の例 : AHC002 • まずは深さ優先探索でなるべく長い経路を作る • 経路の中からランダムに 2 点を選び、 2

    点間の 経路を破壊してランダムに繋ぎ直し、より良い 経路に作り直す • 経路の破壊・再構築の際に「焼きなまし法」を 利用する
  6. 問題の例 : AHC002 AHC でよく使うテクニック「焼きなまし法」 • ランダムに行動を選び、スコアが上がるなら実行する 「山登り法」 • 山登り法は局所最適解に陥ってしまう

    • そこから抜け出すために、スコアが上がらない行動も 時々実行するのが「焼きなまし法」 ※ 時間の経過と共にスコアが下がる行動は減らしていく
  7. This work is licensed under a Creative Commons Attribution-ShareAlike 3.0

    Unported License. It makes use of the works of Kelly Loves Whales and Nick Merritt.