Marathon Match 68の反省

今回のマラソンは、自分で思っていた以上に駄目だった。高い授業料(=rating)を払ったので、しっかりと反省することにする。

過去の教訓

ラソンマッチに参加するのは今回が4回目だけど、過去3回の反省は生かせたのか。

  • 初参加だったMM64は、環境を整備することの大事さと、過学習が駄目なことを学んだ。
    • 期限が短いことを言い訳にして環境の整備を放棄した。結果的に大量に時間を消費してしまうなんて分かりきっていたことなのに。
    • 過学習はしてないと思う。送信回数は多いものの、ほとんどはトレードオフな機能の追加ではなく、ほぼ上位互換な改変だったから。
  • 2度目のMM65では、厳密に数学で求められるところはきちんと求めた方が良いということを学んだ。
    • 重みによって文字を挟んだ方が良いかどうか求めた。多分ここはそんな重要じゃない。
  • 3度目のMM66では、序盤良くても中盤で気を抜くと終盤で焦ることになると学んだ。
    • 1週間ずっと取り組んではいたが、序中盤は集中力が欠けていた。最終日になるまで気づいて当然のこと(奇数の場合は作りやすい)に気づかなかったのがいい証拠。

根本的な方針の間違い

今回の問題での失敗要因を無理やり一言でまとめると、"充填率と交差率の両立の実現困難さを過大評価した"になると思う。1位の人のスクリーンショットを見て、"こんなの実現可能なのか?"という印象を最初に受けた。

  • まず、各評価関数を見て最初に思ったのは対称率の特殊さだった。計算式の分母にくっついている1/8という数字が大きく、それにつられて対称率の重みを過大評価してしまった。
  • この問題に対する解法を次の様に考えた。"4つの評価関数全てを立てることはできないから、重みによってどれを重視するか変えれば良いのだろう。つまり重みに応じた異なるパターンの解法をそれぞれ準備しておけば良いはずだ"
  • この方針が直接悪かったのではなく、以下の弊害が決定的な敗因になった。
  • コンテスト中はこの解法が当然の帰結だと考えていて、上位の人もこれに沿ってやっていると思っていた。
  • なので、トップ層と得点差が開いたときも、全体的に負けているのではなく幾つかのパターンで大きく差を開けられているのだと思い込んでいた。
  • 思考時間のほとんどは、気づいてないはずのパターンを探すのに費やされた。もちろん、そんな素敵アイテムは存在しなかった。考えたことが悪いのではなく、それしか考えなかったことが悪かった。

細かな間違い

  • 田とか口に類似した形は真ん中に置くだけならあるかもしれないと思っていたが、それ以外の所に置こうとすると似たような形のを4(or 8)個作らないといけない。短い長さの文字はそんなに数が多くないので無理そうだし、数の多い長さ9の文字で作ろうとしたら仮に作れたとしても充填率がかなり落ちてしまう。そういった理由から意味のある形で実現させるのは難しいと判断して思考から除外した。
  • でも実際は短い長さの文字でも結構作れるし、充填率もそこまで落ちない。一番気づかないといけないのは、充填率は分母がN^2なので1個や2個埋める文字が減ってもそんなに影響がないということだ。一方交差率は使った文字数が分母にくるので、場合によっては充填率が減った以上に交差率で稼げるかもしれない。
  • 考えただけで切り捨てる事自体が悪いとは思わない。考えただけで切り捨てるなら、その考えが絶対に正しいという確信を持ってなきゃならなかった。
  • 辞書に乗っている単語は英単語なので、末尾が一致する場合が多いということにも気づいていなかった。全辞書の長さの分布と文字の分布だけを調べて後はその特性を知ることを放棄していた。

唯一良かった点

  • 充填率と行、列の使用率が極端に低いケースでは結構稼げていたと思う。
    • 例えば、seed=495とか。
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
............DAK...........
............R.Y...........
...........PASE...........
...........OBAS...........
...........M.Y............
...........S..............
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
Board filling score = 0.023668639053254437
Rows/columns filling score = 0.03550295857988166
Symmetry score = 0.9593406593406592
Crossings score = 0.625
Score = 0.575678888419273
    • 他の参加者がこれをやっていれば、もっと盛大に死んでいたはず。