simanのブログ

ゆるふわプログラマー。競技プログラミングやってます。Ruby好き

MM141 TrafficController 参加記

問題

www.topcoder.com

方針

  • 毎ターンごとに5ターン先までの信号機の方向を焼きなましで求める

焼きなましで信号機の方向を決める

  • 遷移としては任意のターン、任意の信号機をランダムに 1箇所選択して変える
  • 実際にシミュレーションを行い評価を行う
    • 前進 +1pt
    • 停止 -1pt
    • スポーン地点での停止 -2pt
    • グリッドロックが発生しうる箇所での停止 -5pt

グリッドロックの回避

グリッドロックは下の画像のように渋滞が連続すると全く前進できなくなる状態のことを指す。

これを回避するために閉路を検出して、閉路の角に対して停止した場合のペナルティを大きくした。(赤色の部分で停止するとペナルティが大)

ただこれだけだと不十分なので他にもっと良い回避方法があったかもしれない。(1方向を完全に止めるとかもやってみたけど回避率が上がっても全体のスコアが下がってしまったのでバランスが難しい)

感想

最後までグリッドロックを効率的に回避する方法がわからなかった。車両にそれぞれポイントが付与されていたが結局どれだけ車両を捌けるかが大事なのであまりスコアに影響なかったように思える(終盤で緊急車両を優先するみたいなことはあるとは思うけど)

最近はわからない問題が多くて何もわからない。