2023年11月6日月曜日

トヨタ自動車プログラミングコンテスト2023#6(AtCoder Heuristic Contest 026)

 56位。短期ヒューリスティックとしては悪くない順位なのだけど、もっと上にいけたはずなので悔しい。

コンテスト後のツイート

 本当に上位の解法は、「各山ごとにソートする」だったようだ。これは全く頭に上らなかったわけではないけど、あまり検討しなかったから仕方ない。

 自分の方針でももっと上位にいけた、というのが悔しい。

 まず、RUSTに直すところ。
 エラーメッセージもないのに、実行しても何の出力も返ってこないので不思議に思っていたのだが、こんなミスをしていた。

 いやー。くだらないミスなんだけど、意外と気付きにくいか? どうしたら気付けたのかなぁ。


 ただ、本質はもう一つの方です。

 ツイートの「焼きなまし」における遷移は、「x以上を山yに移す」を「x以上を別のランダムな山rに移す」に変更するというのだけ行っている。その後、スコア計算を愚直に行い、改善されていたら採用、もしくは、焼きなましの条件式を満たしていたら採用、としている。

 その条件式が間違っていた。

 なぜこんなミスを……。

 思い返すと、まずPythonで山登りを書いて、焼きなましに直す際、RUSTに直そうかな、と思ってちょっとだけ書き、「いや、もし間に合わなかったら嫌だからPythonのままで改善するか試そう」と思ってPythonでも焼きなましを書いたんだよね。

 そのとき、RUSTの焼きなましの式を見ながら書いたから、コピペでなくちょっと自分で直す必要が生じて、それで間違えたのだろう。

 その後、そのPythonの式を見てRUSTに直したから、間違いがそのまま残ってしまった、と。


 とはいえ、焼きなましの意味を理解していればこんなミスはしないはずですよねー。

0 件のコメント:

コメントを投稿