コンテンツにスキップ

AtCoder Heuristic Contest 027 参加記

AtCoder Heuristic Contest 027に参加し、273位でした。

サンプルのdfsと同じものを実装する。 スコアの計算を実装する。

以下、特に明記しない場合はシードが1~100のときの平均
Average = 21991473.54

24通りを試し、最良を選択する

Average = 19521742.3

各マスでランダムに優先順位を決める。 20000回程シミュレーションできた。

Average = 21251525.91

あんまりよくなっていない

ちょっと寄り道したり、省略したりしてみて改善するなら採用を繰り返す。変化が小さいのですぐに局所解になったり、広い盤面だと計算に時間がかかって十分に派生させられないので、いろいろ残念。大きい変化を頑張って採用できるようにする案もあるが、次の手に。

Average = 18365379.48

15000000くらいなら提出する気になるかな…

DFSは実装が簡単だが、無駄な移動が多い。 なるべく少ない移動ですべてのマスを少なくとも一回通る方法について考える。 これは巡回セールスマン問題(TSP)なので、条件つきでの近似解法について調べる。 三角不等式が成り立つときの問題をMetric TSPというらしい。 この条件下ではDFSのルートから既に行ったことのある場所をとばしてルートを決定していくというのがあるらしい。 クリストフィードのアルゴリズムはよくわからなかった。O(n3)らしいので今回の条件だと使えない? RDLUの順に評価するDFSを変形する形で実装してみる。

Average = 16936320.88

思ったより改善した

Average = 16144839.97

まだTSPが不完全…。 グリッド上のTSP解法は確実に論文があるはずだが、検索能力がないので見つけられない。 Bing AIにきいてみるとFutureの記事を提案されるがこれは一般的なグラフの解法。 食い下がると、次数5以下の場合の多項式時間アルゴリズムを出してくれる。そんなものが存在するのか…。英語論文を読む気にならない

Average = 15892483.36

とりあえずTSPは十分と思って、ここから適当に遷移させる。

Average = 14025677.55

結構改善した

汚れが大きいところを通るものを選ぶようにする

Average = 13801249.45

局所最適解に陥ることが多い

TSPの後、改善する手順を繰り返す。 改善する段階は重みをつけているので一意だが、TSP解がランダムなのでいろいろな解がえられる。

Average = 13567886.96

そもそもTSPが最適でないし、多様性もない

TSPの最善でないものもいろいろ採用してみる

Average = 13178283.81

Average = 13213827.0

収束の速いケースでは改善したが全体としては悪化

入力生成方法を読むと、1~20の汚れやすいゾーンがある。汚れやすい場所でないところは10以下で汚れやすい場所は最大1000なので、かなり差がある。実際どのくらいかわからないが、汚れやすい場所をそうでない場所の10倍以上通るくらいがよさそう?

10より大きい場所だけでTSPを解けばいいのでは?

間に合わず 悲しい

結構いいアイディアが思いついたと思ったけど、実装しきれず… 参加賞が200人対象なので頑張ったが、さすがに届いてなさそう