日本橋ハーフマラソン 2025冬(AHC043)~Railway Company~ 参加記
AHC043に参加して、109位/1,431人 でした。
解法や所感について書いていきます。
解法
「単純化したモデルでビームサーチを実施した後、ビームサーチで得られた結果を実際に作ってみて一番良かったものを返す」をしました。
次節から、それぞれのパートについて詳しく書いていきます。
単純化したモデルでビームサーチ
- 建設する駅は全部連結にする
- 新設する駅は、既建設駅の中で最も近いものと最短経路で繋げる
という前提を立てたモデル上でのビームサーチをしています。
具体的には、
Stateは線路や操作履歴の情報は持たず、「ターン数」「建てた駅の位置と順序」「所持金」「ターン収入額」「ペアの片側だけ連結成分に含まれている家職場の数」の情報のみを持ちます。
遷移は、
- 駅を新規に1つ建て、それを既存の駅連結成分に線路を引いて繋ぐ*1
- ゲーム終了までWaitし続ける
の2つです。 優先度付きキューを総ターン数ぶん常に持っておいて、ターン数昇順にキューを舐めながら上述の計算を進めていきます。
駅の新設位置候補はある程度絞り込んでいます。 具体的には、フィールド全体を2x2の区画に分かれるようにグリッド状に分割して、各区画から代表マスを1つずつ選出しています。選出基準は、駅を建てた場合に含まれる家職場の数の多さです。 ただし、一番最初の駅の建設位置だけは全マスを候補にしています*2。
ビーム幅は1です(同一ターンのキューで合流しない限り絞られることがないので、ビーム幅は1ですが多様性はある程度保たれています)。
評価関数は、所持金 + (収益 + ペアの片側だけ連結成分に含まれている家職場の数) * 残ターン数
としました。
気持ちとしては、「このままWaitし続けた場合の所持金」が大筋で、そこに片側のみの家職場の多さをちょっとだけ加味したって感じです。
このモデルだと計算量が 建設駅総数(探索の深さ) * ビーム幅 * 候補マス数 * 建設駅総数(遷移の計算)
で済みます。
ただし、これだけだと操作列が無いですし実値とも当然乖離し得るので、 ビームサーチ終了後に Tターン目のキューに集まったStateに対して、ちゃんとしたシミュレートを実施し最もスコアが良いものを最終的な回答としています。 そこの手順について、詳しくは次節で説明します。
ビームサーチで得られた結果を実際に作ってみる
前節のビームサーチで得られた結果(駅の建設位置と順序)を実際に作ってみて、最も良かったものを最終回答とします。
具体的な手法は単純で、「ビームサーチで求めた駅の建設順序通りに、連結を保ちながら駅を追加建設していく。連結のための線路のルートは、既存連結成分に繋がる最短経路をBFSで求める。」ということをしました。 ただし1つだけ工夫があって、BFS中に「それ以降に設立される予定の駅の座標」を踏んだ場合はキューに front push *3をすることで、その座標が含まれるパスを優位に扱っています。 駅の建設位置が線路上にあれば、単に駅を建設するだけで*4接続できて有利なためです。
簡易モデル上でのスコア上位のStateから順に時間いっぱいチェックする という実装にしていましたが、実際は全てのテストケースで実行時間に余裕があったため、そもそも全ケースチェックできていました。
ケース0000のビジュアライズ結果
その他解法に対する雑多なコメント
- ビーム幅は増やすとむしろスコアは悪くなりました。おそらく、同一ターンのキューで出くわす があまり起きないことで多様性を保っていたのに、ビーム幅が増えるとそこが損なわれてしまうため、ではないかなと考えています。
- 「ビームサーチで得られた結果を実際に作ってみる」パートでは、簡易モデル上でのスコアより実際のスコアの方が大きいケースの方が多そうでした。これは、最短経路で繋げなかったケースのマイナスよりも、線路上に直接駅を建設できたことで線路建設が不要だったケースのプラスの方が大きいためだと思われます。
- そのためか、実結果でベストスコアが出るのは、簡易モデル上では駅を作りすぎてしまって投資回収が間に合っていないケースに多いようでした*5。
提出コード
Submission #63119698 - RECRUIT Nihonbashi Half Marathon 2025 Winter(AtCoder Heuristic Contest 043)
感想を雑多に
- 暫定テスト時点では99位とギリギリ2桁順位に滑り込めていたのですが、最終結果で109位まで落ちてしまいました、、とはいえ黄パフォは出せたので満足です。
- Kが小さいし駅建設費は高いしで、開始当初はほとんど建設できずに終わるゲームなのかな?と思ってたんですが、コンテストを進めるにつれ、案外結構な数が建設ができることが分かっていって面白かったです。
- 資金繰りの都合で駅の建設順序は重要だと思ってたんですが、Xのタイムラインを見た感じそうでも無さそうで驚きました。
- 今回コンテスト参加人数が過去最多らしいですね。めでたい。