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

TOYOTA AHC 至高のアルゴリズム解説会 - Transit Warehouse 解説

terry-u16
January 27, 2024

TOYOTA AHC 至高のアルゴリズム解説会 - Transit Warehouse 解説

2024/01/27(土)に行われた、TOYOTA AHC 至高のアルゴリズム解説会における解説スライドです。
https://atcoder.jp/contests/TOYOTA_AHCSupremeAlgorithmExplanatoryMeeting

terry-u16

January 27, 2024
Tweet

More Decks by terry-u16

Other Decks in Programming

Transcript

  1. Toyota Programming Contest 2023 Summer Final Transit Warehouse 解説 TOYOTA

    AHC 至高のアルゴリズム解説会 松尾 充 (@terry_u16)
  2. 松尾 充 株式会社ALGO ARTIS まつお あたる (世界5位) 2196 アルゴリズム ヒューリスティック

    最高 3028 @terry_u16 terry_u16 1992年 福岡県生まれ 九州大学に入学して機械工学を勉強 九州大学大学院の修士課程に進学 2010年 2014年 株式会社IHIに入社し戦闘機用ジェットエンジンを開発 うっかり競技プログラミングにハマってしまう 株式会社ALGO ARTISに入社 2016年 2020年 2022年
  3. Transit Warehouse 問題文(要約) 𝐷 × 𝐷 マスの倉庫があります。この倉庫に 𝑀 個の コンテナが運び込まれ、その後運び出されます。

    運び込みと運び出しは、入口から空きマスを経由 して到達可能なマスにしか行えません。 各コンテナには番号が振られていますが、 運び込まれる順番は不明です。 できるだけ番号の昇順で運び出せるような 運び込み・運び出しの操作列を求めてください。 出典: Transit Warehouse ( https://atcoder.jp/contests/toyota2023summer-final/tasks/toyota2023summer_final_a )
  4. 解法の概要 運び込みパート 運び出しパート 運び込み順がランダムなので、 ランダムシミュレーションを行い 得点の期待値を求める。 シミュレーション中は いい感じの貪欲を行う。 モンテカルロ法 +

    貪欲プレイアウト なるべく小さい番号のコンテナを 運び出す貪欲を行う。 この貪欲を焼きなましで さらに改善する。 貪欲法 + 焼きなましで改善
  5. 運び込みパート 運び込みパート 運び出しパート 運び込み順がランダムなので、 ランダムシミュレーションを行い 得点の期待値を求める。 シミュレーション中は いい感じの貪欲を行う。 モンテカルロ法 +

    貪欲プレイアウト なるべく小さい番号のコンテナを 運び出す貪欲を行う。 この貪欲を焼きなましで さらに改善する。 貪欲法 + 焼きなましで改善
  6. 運び込みパート概要 モンテカルロ法 + 貪欲プレイアウトでコンテナを置いていく。 1. コンテナを置いても空きマスが連結となるマス (非関節点)を列挙する。 関節点はLowLinkで 𝑂 𝐷2

    で列挙可能。 2. 各マスをある評価関数で評価し、 評価値の高いマスをいくつかピックアップする。 3. 各候補マスに置いたときのスコアの期待値を 貪欲プレイアウトにより求め、 最も期待値の高いマスを選ぶ。
  7. 評価関数 質の高いプレイアウトを行うため、賢い貪欲が非常に重要。 2 1 1 3 2 1 5 4

    3 2 3 4 5 3 4 5 6 5 4 5 6 コンテナ 𝒌 𝑫𝒌 0~2 1 3~5 2 6~9 3 10~13 4 14~18 5 19~20 6 お気持ち IDの小さいコンテナは入口の近くに、 IDの大きいコンテナは入口から遠くに置きたい。 IDの大きいコンテナを入口の近くに置くのは特に避けたい。 BFSを行い、コンテナIDごとに置きたい距離 𝑫𝒌 を決める。 入口からの距離 𝑑𝑖,𝑗 のマス 𝑖, 𝑗 の評価値 𝑓 𝑖, 𝑗, 𝑘 は以下。 𝑓 𝑖, 𝑗, 𝑘 = ൝ 4 𝑫𝒌 − 𝑑𝑖,𝑗 𝑑𝑖,𝑗 < 𝑫𝒌 𝑑𝑖,𝑗 − 𝑫𝒌 𝑫𝒌 ≤ 𝑑𝑖,𝑗
  8. 運び出しパート 運び込みパート 運び出しパート 運び込み順がランダムなので、 ランダムシミュレーションを行い 得点の期待値を求める。 シミュレーション中は いい感じの貪欲を行う。 モンテカルロ法 +

    貪欲プレイアウト なるべく小さい番号のコンテナを 運び出す貪欲を行う。 この貪欲を焼きなましで さらに改善する。 貪欲法 + 焼きなましで改善
  9. 高速化 モンテカルロ法はプレイアウト回数が命。 プレイアウト結果のばらつきは、試行回数を 𝑵 として 𝟏/ 𝑵 に比例する(はず) 。 高速化を頑張ることで、より精度高く期待値を求められるようになる。

    𝑁 = 10 𝑁 = 40 𝑁 = 160 𝑁 = 640 標準偏差 0.55 標準偏差 0.28 標準偏差 0.14 標準偏差 0.07 「サイコロの出る目の期待値を試行回数 𝑁 回のプレイアウトで求めた結果」のばらつき
  10. ターゲットID コンテナ 𝑘 を距離 𝐷𝑘 ではなく距離 𝑫𝑻𝒌 の場所に置くことを目指す。 お気持ち: 少し遠めのマスに置いていき、近くのマスを空けておきたい。

    2 1 1 3 2 1 5 4 3 2 3 4 5 3 4 5 6 5 4 5 6 2 13 2 1 1 3 2 1 5 4 3 2 3 4 5 3 4 5 6 5 4 5 6 2 13 距離の近い順に置いていく 少し遠めの場所に置いていく Before After
  11. 距離マップ 入口からの距離を 𝑑𝑖,𝑗 ではなく 𝒅𝒊,𝒋 ′ = 𝒅𝒊,𝒋 + 𝑬𝒊,𝒋

    と見なして配置する。 お気持ち: 運び出す順番を工夫することでスムーズに運び出したい。 2 1 1 3 2 1 5 4 3 2 3 4 5 3 4 5 6 5 4 5 6 2 1 1 3 3 1 5 4 4 5 4 4 5 6 5 5 6 6 7 6 6 Before After 入口からの距離を素直に使う 見かけ上の距離を変化させる
  12. コストマップ マス 𝑖, 𝑗 のコストを 𝑪𝑴,𝒊,𝒋 だけ上乗せする。 お気持ち: 運び込むときに中央スペースは最後まで空けておきたい。 0

    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 4 6 0 1 3 7 3 1 1 6 5 1 0 2 3 2 0 Before After 特に追加コストなし 場所によって追加コストが発生
  13. 評価関数 最終的な評価関数 𝑓 𝑖, 𝑗, 𝑘 は以下のような形となる。 𝑓 𝑖, 𝑗,

    𝑘 = ቐ 𝜶 𝐷𝑻𝒌 − 𝑑𝑖,𝑗 ′ + 𝑪𝑬,𝒆 + 𝑪𝑴,𝒊,𝒋 𝑑𝑖,𝑗 ′ < 𝐷𝑘 𝑑𝑖,𝑗 ′ − 𝐷𝑻𝒌 + 𝑪𝑬,𝒆 + 𝑪𝑴,𝒊,𝒋 𝐷𝑘 ≤ 𝑑𝑖,𝑗 ′ 𝑑𝑖,𝑗 ′ = 𝑑𝑖,𝑗 + 𝑬𝒊,𝒋 距離マップ 空きマスコスト コストマップ ターゲットID ハイパーパラメータ: 𝛼, 𝐶𝐸,𝑒 , 𝐶𝑀,𝑖,𝑗 , 𝑇𝑘 , 𝐸𝑖,𝑗 (250パラメータ程度)
  14. 運 び 出 し 運 び 込 み 最適化結果の考察 焼きなましくんがどのような戦略を編みだしたのか考察してみる。

    • マップの外周部分から順に埋めていっている • 細長い通路ができないようにしている • 小さいIDのコンテナ置き場を横に空けている • 両サイドから先に運び出している • 運び込み終盤にどの順番でコンテナが来ても 両サイドのコンテナは既に配置済みのため 安定して運び出しを行うことができている
  15. パラメータ焼きなましの詳細 • 𝜶, 𝑪𝑬,𝒆 , 𝑪𝑴,𝒊,𝒋 , 𝑻𝒌 , 𝑬𝒊,𝒋

    の組を最適化する • 焼きなましの評価関数は 「1000ケースに対して以下の解法で解いたときのスコアの総和」とする • 運び込みパート: 評価関数 𝑓 𝑖, 𝑗, 𝑘 が最小となるマスを選ぶ貪欲 • 運び出しパート: IDが最小のコンテナを運び出す貪欲 • ローカルだと並列計算可能で、焼きなましのループが100万/hくらい回る • 過学習していないか最後に別の1000ケースでバリデーションしておく
  16. 弱点の改善案 障害物マップを入力、距離マップ・コストマップを出力とするCNNを考え、 動的に距離マップ・コストマップを生成させると改善できる? 2 1 1 3 3 1 5

    4 4 5 4 4 5 6 5 5 6 6 7 6 6 0 2 2 0 4 6 0 1 3 7 3 1 1 6 5 1 0 2 3 2 0 CNN 距離マップ コストマップ 障害物マップ 力尽きたので誰かやって