Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
サンタコンペ 2025 考察と解法解説
Search
shr
February 26, 2026
Technology
45
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
サンタコンペ 2025 考察と解法解説
slides for
https://algo-artis.connpass.com/event/382730/
shr
February 26, 2026
Other Decks in Technology
See All in Technology
AI時代のPRレビューにどう向き合うか?
kairim0
1
240
AIがコードを書く時代に、エンジニアは何で自分の価値を証明するのか / In an era where AI writes code how do engineers prove their value
carta_engineering
3
1.1k
OptunaHub: ブラックボックス最適化のためのプラットフォーム
pfn
PRO
0
140
ブラウザとサーバーから考えるAI時代のフロントエンド監視
shogo4131
3
1k
SAENM ~Jupyterで残すPoCの試行錯誤、未来の自分と仲間を助ける記録!~
terapyon
0
120
ソフトウェア ファクトリー - 再現性のあるソフトウェアの工場づくり / Software factory
iktakahiro
6
5.1k
ウォンテッドリーの最近のプロダクトと技術の紹介
stomk
0
130
実践! SRE × AI - ABEMA における AIOps -
tetsuya28
8
3.1k
hackers_champloo_2026_tidb
makocchi
0
170
JAWS-UGグッズ職人仕事の流儀
kentapapa
0
120
日本語に強いオープンな大規模言語モデル「LLM-jp」
odashi
5
1.2k
V8のArray.prototype.flatを最大約20倍速くするまでと、巨大OSSへの大規模コミットの道のり
riyaamemiya
0
310
Featured
See All Featured
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.9k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
59k
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
Optimizing for Happiness
mojombo
378
71k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
460
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
730
sira's awesome portfolio website redesign presentation
elsirapls
0
460
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
Bash Introduction
62gerente
615
220k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.4k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
800
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
280
Transcript
サンタコンペ 考察と解法解説 team: shr (Kaggle ID: oimoio)
自己紹介 shr / saharan / さはら という名前で活動しています[1] 物理シミュレーション好き[2] AtCoder Heuristic
Contest (AHC) によく参加してます ▪ 昨日まで世界ランク1位(タイ)でした 2 [1] X IDs: @shr_id / @shr_pc [2] 興味ある人は oimo.io を見てね
自己紹介 shr / saharan / さはら という名前で活動しています[1] 物理シミュレーション好き[2] AtCoder Heuristic
Contest (AHC) によく参加してます ▪ 昨日まで世界ランク1位(タイ)でした ▪ 一昨日終わった AHC061 で惨敗したため鉑冠が剥奪されました ▪ 夢をありがとう 3 [1] X IDs: @shr_id / @shr_pc [2] 興味ある人は oimo.io を見てね
自己紹介 shr / saharan / さはら という名前で活動しています[1] 物理シミュレーション好き[2] AtCoder Heuristic
Contest (AHC) によく参加してます ▪ 昨日まで世界ランク1位(タイ)でした ▪ 一昨日終わった AHC061 で惨敗したため鉑冠が剥奪されました ▪ 夢をありがとう Kaggle は初参加 ▪ サンタ面白いという話は聞いていたのでワクワク 4 [1] X IDs: @shr_id / @shr_pc [2] 興味ある人は oimo.io を見てね
最終結果 最終 5 位でした 途中まで 1 位をキープできていたので、LB 上最長 1 位賞
(Rudolph 賞) を獲得 5
問題概要 皆さんご存知だと思うのでざっくり…… ▪ 変な形したクリスマスツリーを正方形に詰めなくてはならない ▪ 1 個から 200 個まで ▪
スコアはツリーあたりの面積の総和 ▪ 小さいほどよい 6
問題概要 皆さんご存知だと思うのでざっくり…… ▪ 変な形したクリスマスツリーを正方形に詰めなくてはならない ▪ 1 個から 200 個まで ▪
スコアはツリーあたりの面積の総和 ▪ 小さいほどよい 期間中街中で装飾されたツリーを見て苦しんだ人は多いはず 7
アプローチを考える かなり AHC ぽい 普段のサンタコンペと比較しても問題の質が高そう? ▪ サンタコンペ、最適解が出がち問題 ▪ 今年はその心配はなさそう 8
アプローチを考える 狭い領域内に物体を押し込む…… ▪ 物理シミュレーションが有効なのでは? 9
アプローチを考える 狭い領域内に物体を押し込む…… ▪ 物理シミュレーションが有効なのでは? ➢ めり込みや回転をうまいこと処理するという点では物理エンジンの処理は強力 • AHC で物理演算が使えそうと思ったケースの 99.9%
は大地雷である • が、今回ばかりは有用そう……? 10
アプローチを考える 同じことを考えてる人がいた[1][2] 11 [2] https://www.kaggle.com/competitions/santa-2025/discussion/640112 [1] https://www.kaggle.com/competitions/santa-2025/discussion/638404
物理演算を利用する際の懸念点 ▪ まず誤差が厳しい ▪ 普通の物理エンジンでは挙動の安定性のために若干のめり込みを許容する ➢ 今回は一切のめり込みも許されない 12
物理演算を利用する際の懸念点 ▪ まず誤差が厳しい ▪ 普通の物理エンジンでは挙動の安定性のために若干のめり込みを許容する ➢ 今回は一切のめり込みも許されない ▪ 非凸形状と衝突解消の相性が悪い ▪
非凸形状は深くめり込むとすぐに stuck する 13
物理演算を利用する際の懸念点 ▪ まず誤差が厳しい ▪ 普通の物理エンジンでは挙動の安定性のために若干のめり込みを許容する ➢ 今回は一切のめり込みも許されない ▪ 非凸形状と衝突解消の相性が悪い ▪
非凸形状は深くめり込むとすぐに stuck する ▪ そもそも「物理に正しく従う必要」があんまりない ▪ 最終的に欲しいのは良さげなシーンのスナップショットだけ ➢ 速度や時間発展については真面目に考える必要なし 14
位置ベース物理を使う ▪ 位置ベース物理 (Position Based Dynamics, PBD) とは? ▪ 位置に対する拘束条件(めり込まない、伸びない
等)を解いて、そこから速度を更新 ➢ 他の手法よりもめり込みに強く、最終的に細かい座標調節が必須な問題要件に一致 ただし、非凸形状が深くめり込むと暴れるのは避けられないので工夫は必要 15
位置ベース物理を使う ▪ 位置ベース物理 (Position Based Dynamics, PBD) とは? ▪ 位置に対する拘束条件(めり込まない、伸びない
等)を解いて、そこから速度を更新 ➢ 他の手法よりもめり込みに強く、最終的に細かい座標調節が必須な問題要件に一致 ただし、非凸形状が深くめり込むと暴れるのは避けられないので工夫は必要 ▪ ミンコフスキー差を利用して確実に分離する案[1] ▪ 回転すると形状が大きく変わるのが難しい ▪ 重いので事前計算 + LUT が必要そうだが、補間による誤差が心配…… 16 [1] 詰め込み問題では No Fit Polygon と呼ばれているらしい
位置ベース物理を使う ▪ 位置ベース物理 (Position Based Dynamics, PBD) とは? ▪ 位置に対する拘束条件(めり込まない、伸びない
等)を解いて、そこから速度を更新 ➢ 他の手法よりもめり込みに強く、最終的に細かい座標調節が必須な問題要件に一致 ただし、非凸形状が深くめり込むと暴れるのは避けられないので工夫は必要 ▪ ミンコフスキー差を利用して確実に分離する案[1] ▪ 回転すると形状が大きく変わるのが難しい ▪ 重いので事前計算 + LUT が必要そうだが、補間による誤差が心配…… ▪ Ad hoc にゴリ押す案 17 [1] 詰め込み問題では No Fit Polygon と呼ばれているらしい
凸分解を工夫する ▪ めり込み距離と押し出し方向の計算のために非凸形 状は凸形状に分解してから使うのが一般的 ➢ このときに分解されたパーツ同士が絡まって抜け なくなる • ゲームで暴れてるオブジェクトはほとんどこれ 18
凸分解を工夫する ▪ めり込み距離と押し出し方向の計算のために非凸形 状は凸形状に分解してから使うのが一般的 ➢ このときに分解されたパーツ同士が絡まって抜け なくなる ▪ ゲームで暴れてるオブジェクトはほとんどこれ 絡まったパーツを押し出すための補助パーツを追加
することでめり込んだまま詰むのを防ぐ ▪ どれだけめり込んでも分離するようになった 19 core shape
探索の方針 移動・回転の transition 後に物理演算によるめり込み量の最小化を適用 ▪ めり込みが全体に分散され、ある種のエネルギー極小状態に落ち着く ▪ この操作を diffuse と(勝手に)呼ぶことにする
20
探索の方針 移動・回転の transition 後に物理演算によるめり込み量の最小化を適用 ▪ めり込みが全体に分散され、ある種のエネルギー極小状態に落ち着く ▪ この操作を diffuse と(勝手に)呼ぶことにする
最適化のメインループ 1. ツリーを正方形の領域に重ならないように詰め込む 2. 正方形の領域を少しだけ縮小して圧縮する 3. ツリーを動かして重なりが 0 になるのを祈る 21
初期解が超重要 ランダム解から始めてみたが、N が大きいと全くもってダメ ➢ 規則正しい初期解を作ろう 22
初期解が超重要 ランダム解から始めてみたが、N が大きいと全くもってダメ ➢ 規則正しい初期解を作ろう 焼きなましでツリーのペア・三つ組・四つ組・五つ組あたりを敷き詰めて高密度に なるものを探した ▪ ペアを敷き詰めるのが最強、他は全然ダメそう ペアの敷き詰め方にも大きく分けて二つのパターンがある
23
敷き詰めのパターン パターン1 ▪ 幹が接しているペアの位置関係と傾きの方向 に注目 24
敷き詰めのパターン パターン1 ▪ 幹が接しているペアの位置関係と傾きの方向 に注目 ▪ 傾いた方向に幹で接している 25
敷き詰めのパターン パターン2 ▪ 幹が接しているペアの位置関係と傾きの方向 に注目 26
敷き詰めのパターン パターン2 ▪ 幹が接しているペアの位置関係と傾きの方向 に注目 ▪ 傾きと逆方向に幹で接している 27
パターン別の特徴 ▪ パターン1 ▪ 高密度 ▪ 柔軟性は低め ▪ パターン2 ▪
低密度 ▪ 高い柔軟性 28
パターン別の特徴 ▪ パターン1 ▪ 高密度 ▪ 柔軟性は低め ▪ パターン2 ▪
低密度 ▪ 高い柔軟性 結晶構造で性質に違いが出るのが面白い! ▪ ダイヤモンドと黒鉛みたいな…… 29
パターン1が強かったケース N=156 ▪ 多分みんなこれ 30
パターン2が強かったケース N=172 ▪ 全ケースで最もスコアが低かった ▪ このケースは全参加者中最良? 31
意外だったケース N=110 ▪ 初期解時点でパターン1が最適に見える 32
意外だったケース N=110 ▪ 初期解時点でパターン1が最適に見える ▪ 途中でパターン2に塗り替えられた 33
意外だったケース N=110 ▪ 初期解時点でパターン1が最適に見える ▪ 途中でパターン2に塗り替えられた パターン1の配置をよく見ると縦方向に隙間が空いている ➢ パターン1の中でも低密度寄りだった 34
意外だったケース N=110 ▪ 初期解時点でパターン1が最適に見える ▪ 途中でパターン2に塗り替えられた が、最終的にはパターン1ベースの方が強かった… ▪ 画像は Jingle
Bins の解[1] 35 [1] https://www.kaggle.com/competitions/santa-2025/writeups/third-place-solution-a-customized-sparrow- algorit
全体的な傾向 最終的にパターン2が多く採用された ▪ N の解から N±1 の解を作る過程で、だんだんパターン1が駆逐されていった 36
全体的な傾向 最終的にパターン2が多く採用された ▪ N の解から N±1 の解を作る過程で、だんだんパターン1が駆逐されていった ▪ 敗因 37
全体的な傾向 最終的にパターン2が多く採用された ▪ N の解から N±1 の解を作る過程で、だんだんパターン1が駆逐されていった ▪ 敗因 実はほとんどのケースでパターン1の方が強かった
38
パターン1をよく見る 初期解でこう切ってしまった ▪ 「一段増やす」のハードルが高い ▪ ぴったりはまらないと厳しい 39
パターン1をよく見る このラインに注目するのが正解! ▪ 実はパターン1もこの方向の伸縮にはかなり柔軟性がある 40
パターン1をよく見る このラインに注目するのが正解! ▪ 実はパターン1もこの方向の伸縮にはかなり柔軟性がある こう切っておけば ▪ 横方向はかなり融通が利く ▪ 切り口は不規則になるが、局所改善しやすい ▪
縦方向は「一段増やす」のハードルが低い 1~4位はみんなこれやってた…… 41
N の解から N±1 の解を作る 「たまたま見つかった良いパターン」を他の N でも活用したい ➢ 一個抜く /
一個入れる で特徴を引き継いだ解を作る 特に「一個入れる」は難しくなりがちだが、物理演算による局所改善と相性が良い 42
「一個抜く」様子 一つツリーを除去して圧縮する 43
「一個入れる」様子 一つツリーを挿入して拡張する 44
焼きなまし法の詳細 あまり凝ったことはできなかった ▪ いくつか移動 → diffuse が基本 ▪ N が大きいと重いので、局所的に
diffuse するなどの工夫を入れた 無限に焼きたいので、parallel tempering を導入 ▪ 適当な温度間隔でレプリカを交換 ▪ 高温がすぐゴミになる問題 45
焼きなまし法の詳細 あまり凝ったことはできなかった ▪ いくつか移動 → diffuse が基本 ▪ N が大きいと重いので、局所的に
diffuse するなどの工夫を入れた 無限に焼きたいので、parallel tempering を導入 ▪ 適当な温度間隔でレプリカを交換 ▪ 高温がすぐゴミになる問題 ▪ 定期的にベスト解を注入 ▪ ベスト解と比較して一定以上評価(めり込み量)が悪化する遷移は行わない ▪ これがかなり効いた 46
焼きなまし法の詳細 最適解から一定範囲でのスコア悪化を許容して探索するアルゴリズムに Record- to-Record Travel (RRT) がある 47
焼きなまし法の詳細 最適解から一定範囲でのスコア悪化を許容して探索するアルゴリズムに Record- to-Record Travel (RRT) がある ちょうどコンペ期間中に行われた AHC059 延長戦でも活躍していた
▪ hitonanode さんによる解説[1]で RRT を知りました ▪ 偶然似たようなことをしていてびっくり 48 [1] https://atcoder.jp/contests/ahc059/editorial/15052
Record-to-Record Travel をちょっと解説 山登り法 (Hill Climb, HC) の亜種 ▪ HC:スコアが改善する場合のみ受理
▪ RRT:スコアがこれまでの最善解から一定範囲 𝜽 の悪化なら受理 49
Record-to-Record Travel をちょっと解説 山登り法 (Hill Climb, HC) の亜種 ▪ HC:スコアが改善する場合のみ受理
▪ RRT:スコアがこれまでの最善解から一定範囲 𝜃 の悪化なら受理 見方によっては焼きなまし法 (SA) の deterministic な亜種とも捉えられる ▪ 温度 𝑇 許容悪化量 𝜃 の対応 ▪ SA:受理確率が悪化量と 𝑇 の比率で指数的に低下 ▪ RRT:受理確率が悪化量と 𝜃 の比率でステップ関数的に低下 50
HC, SA, RRT の相関図 51 山登り法 焼きなまし法 (パラメータ 𝑻, 非決定的)
Record-to-Record Travel (パラメータ 𝜽, 決定的) 受理確率の二値化 受理確率の連続化
やろうと思ってできなかったこと Large Neighborhood Search ▪ 他の解を混ぜるとか ▪ 部分的に解を拾ってきて組み合わせるとか 52
やろうと思ってできなかったこと Large Neighborhood Search ▪ 他の解を混ぜるとか ▪ 部分的に解を拾ってきて組み合わせるとか GPU 利用
▪ 物理演算部分が複雑になりすぎて SIMD を使うのが限界だった 53
やろうと思ってできなかったこと Large Neighborhood Search ▪ 他の解を混ぜるとか ▪ 部分的に解を拾ってきて組み合わせるとか GPU 利用
▪ 物理演算部分が複雑になりすぎて SIMD を使うのが限界だった 反省:全体的に「放置しとけば改善する」に甘えていた感がある ▪ 長期 AHC のように常に積極的に良いアルゴリズムを掴みに行かないといけなかった ▪ が、2ヶ月あれをやるのは辛い…… 54
全体を振り返って ▪ Discussion が楽しい ▪ AHC は解法共有が厳禁なので、Kaggle ならでは 55
全体を振り返って ▪ Discussion が楽しい ▪ AHC は解法共有が厳禁なので、Kaggle ならでは ▪ 長い!!!
▪ つらい ▪ 特にソロだと辛い 56
全体を振り返って ▪ Discussion が楽しい ▪ AHC は解法共有が厳禁なので、Kaggle ならでは ▪ 長い!!!
▪ つらい ▪ 特にソロだと辛い ▪ 治安が…… ▪ 不審なメール・チームマージリクエストを多数受け取った ▪ 公開 Notebook 問題 ➢ チーム戦なのもあり、純粋な競技として参加するのは辛くなりそう 57 ↑は??
全体を振り返って ▪ コンペ中に勉強ができるのはとても良い ▪ Parallel tempering の理論と実装の勉強になった 58
全体を振り返って ▪ コンペ中に勉強ができるのはとても良い ▪ Parallel tempering の理論と実装の勉強になった ▪ 体調と生活が破壊される ▪
長期 AHC ですら、いわんや Kaggle をば ▪ いのちだいじに 色々大変でしたが楽しかったです! ▪ 今年も参加するかは謎 59