AHC001 参加記
AHC001に参加しました。
長期のコンテストにC++を使いたくなかったのでRustで参加
githubで管理してたので公開します https://github.com/kanra824/ahc001
1日目
- (x, y)に1 * 1の正方形をおいて初期化: 823090
- それぞれの長方形をランダムに選んで拡張する: 35830035700
長方形を広げたり縮めたりしながら山登り: 44048518763
50個分を非同期実行するシェルスクリプトを書いた(2並列 * 25回)
(脳死で50個同時に非同期実行させて回しまくってたらブルスクが起きて焦った CPU温度が大変なことになるからやめようね)
ビジュアライザが出力した画像の一覧をブラウザで見れるようにした 素のJSでゴリッと
- 公式のビジュアライザを改造して、全体のスコア(/ 109)や長方形ごとのスコア(*100) が表示されるようにした
2日目
- 焼きなまし: 47498289869
拡張する時に他の広告が重なるならその広告を縮める: 47804220369
テストケース生成をシュッとできるスクリプトを書いた
3日目
- 更新するidxを選択するときの確率分布をスコアに応じて決められるようにした
- 差分更新をより高速化
その他
- optunaで初期温度と終了温度を探索するやつをかいた(使うかな?)
- ビジュアライザをシークバーで動かせるようにした
- 動画: https://github.com/kanra824/ahc001/pull/15
4日目
- 広告がずれてくれるように、縮小して拡大する遷移を追加した
- 序盤はスコアが均一になるようにした: 48176775941
- 今までやってきた焼きなましが時間を書けてもそんなに変わらないことに気づいたので、何度か回すことにした
- ループを回しながら、各回の焼きなましの結果スコアが低かった広告をいくつか取り出して、次のループではそれらの広告が最初に拡大されるようにした: 48453049603
5日目
進捗0
6日目
- 広告の変化しにくさみたいなパラメータを入れる
- 長方形の辺と辺がぶつかったとき、たまにいい感じに縦横を入れ替える
- めちゃくちゃバグっています HELP
- なおった
- スコアが....スコアが伸びない.....
7日目
- 色々試したけど伸びなくて、結局4日目のやつを提出
感想
490にのせたかったけど、結局485にも乗らなかった... Rustはとても良くて、リファクタリングをするときに威力を発揮してくれたと思う。 C++でやってたら途中で管理しきれなくなっていた