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

TOYOTA AHC 至高のアルゴリズム解説会 AHC015

thunder
January 27, 2024

TOYOTA AHC 至高のアルゴリズム解説会 AHC015

2024/1/27に開催されたトヨタ自動車主催のイベントにて使用した資料

イベントページ↓
https://atcoder.jp/contests/TOYOTA_AHCSupremeAlgorithmExplanatoryMeeting?lang=ja

問題ページ↓
https://atcoder.jp/contests/ahc015

発表者執筆の技術書籍↓
https://gihyo.jp/book/2023/978-4-297-13360-3

thunder

January 27, 2024
Tweet

More Decks by thunder

Other Decks in Programming

Transcript

  1. 問題設定 1/8 8 1個ずつ キャンディを 受け取る 同じ キャンディが 固まることが 目的

    AHC015 Halloween Candy ・正方形の箱に、3種類のキャンディー1個ずつ順に受け取る ・箱の全てのマスが埋めった時に なるべく同じ種類のキャンディー同士が隣同士に固まっていることを目指す。
  2. 問題設定 4/8 11 各ターン出力 箱をF (前) B (後ろ) L (左)

    R (右) のいずれかに傾ける 傾ける前
  3. 問題設定 4/8 12 各ターン出力 箱をF (前) B (後ろ) L (左)

    R (右) のいずれかに傾ける 傾ける前 F(前)
  4. 問題設定 4/8 13 各ターン出力 箱をF (前) B (後ろ) L (左)

    R (右) のいずれかに傾ける 傾ける前 B(後ろ) F(前)
  5. 問題設定 4/8 14 各ターン出力 箱をF (前) B (後ろ) L (左)

    R (右) のいずれかに傾ける 傾ける前 F(前) B(後ろ) L(左)
  6. 問題設定 4/8 15 各ターン出力 箱をF (前) B (後ろ) L (左)

    R (右) のいずれかに傾ける 傾ける前 F(前) B(後ろ) L(左) R(右)
  7. 問題設定 4/8 16 各ターン出力 箱をF (前) B (後ろ) L (左)

    R (右) のいずれかに傾ける 傾ける前 F(前) B(後ろ) L(左) R(右) 後ろに傾けたとして次ページを説明
  8. 問題設定 5/8 17 各ターン入力(2回目) 次に受け取るキャンディの場所を受け取る 1 2 3 4 5

    6 7 8 9 10 11 13 14 15 16 17 18 19 20 21 22 23 24 12 入力:12 23 出力:B 既にキャンディのある場所に重なることはない
  9. 問題設定 6/8 18 各ターン出力(2回目) 箱をF (前) B (後ろ) L (左)

    R (右) のいずれかに傾ける。キャンディ同士は重ならない。 F(前) B(後ろ) L(左) R(右) 傾ける前
  10. 問題設定 8/8 21 スコア計算式 106 × 12 + 72 +

    32 + 42 + 52 + 52 92 + 92 + 72 1 7 3 4 5 5
  11. ルールベース解法 1/4 31 ルールベース 次のキャンディを出現させたい方向と逆側に箱を傾ける if 次のキャンディ: 右に傾けると左に出現 既 存

    キ ャ ン デ ィ if 次のキャンディ: 前に傾けると後ろに出現 既存 キャンディ 目指す形 次 の キ ャ ン デ ィ 次の キャンディ
  12. ルールベース解法 1/4 32 ルールベース 次のキャンディを出現させたい方向と逆側に箱を傾ける if 次のキャンディ: 右に傾けると左に出現 既 存

    キ ャ ン デ ィ if 次のキャンディ: 前に傾けると後ろに出現 既存 キャンディ if 次のキャンディ: 左に傾けると右に出現 既 存 キ ャ ン デ ィ 目指す形 次 の キ ャ ン デ ィ 次の キャンディ 次 の キ ャ ン デ ィ
  13. ルールベース解法 3/4 34 ルールベース 次のキャンディを出現させたい方向と逆側に箱を傾ける 次の キャンディ 出現 目標位置 傾ける

    方向 後ろ 前 右 左 左 右 次のキャンディ: 左に傾ける 右側に出現したが、 イチゴより後ろにまぎれた
  14. モンテカルロ法 1/3 38 制限時間の有効利用 ルールベース解法の実行時間は2ms程度 ↓ 制限時間2000msを有効利用したい ↓ 探索アルゴリズムでより良い解を見つけたい 探索に必要な情報

    以下の情報があれば、箱が埋まった時のスコアを計算できる ・全ターンのキャンディの種類: 与えられる ・全ターンのキャンディの位置: 途中までしかわからない ・全ターンの傾ける方向 : 自分で制御
  15. モンテカルロ法 2/3 39 後ろ 前 右 後ろ 後ろ 固定情報: プレイアウト

    不定の情報を決め打ちや乱数で補うことで、終了時のスコアを計算
  16. モンテカルロ法 2/3 40 後ろ 前 右 後ろ 後ろ 固定情報: 位置乱数1:

    5 1 1 1 1 プレイアウト 不定の情報を決め打ちや乱数で補うことで、終了時のスコアを計算
  17. モンテカルロ法 2/3 41 808612点 後ろ 前 右 後ろ 後ろ 固定情報:

    位置乱数1: 5 1 1 1 1 プレイアウト 不定の情報を決め打ちや乱数で補うことで、終了時のスコアを計算
  18. モンテカルロ法 2/3 42 808612点 後ろ 前 右 後ろ 後ろ 固定情報:

    位置乱数1: 5 1 1 1 1 5 2 3 2 1 位置乱数2: プレイアウト 不定の情報を決め打ちや乱数で補うことで、終了時のスコアを計算
  19. モンテカルロ法 2/3 43 808612点 後ろ 前 右 後ろ 後ろ 固定情報:

    933014点 位置乱数1: 5 1 1 1 1 5 2 3 2 1 位置乱数2: プレイアウト 不定の情報を決め打ちや乱数で補うことで、終了時のスコアを計算
  20. モンテカルロ法 2/3 44 808612点 後ろ 前 右 後ろ 後ろ 固定情報:

    933014点 位置乱数1: 5 1 1 1 1 5 2 3 2 1 位置乱数2: 平均870813点 プレイアウト 不定の情報を決め打ちや乱数で補うことで、終了時のスコアを計算