A - Single Controller Multiple Robots Editorial by bowwowforeach


解法

基本方針は、まずロボットをそれぞれの持ち場へ移動させ、その後「ジグザグ移動」を3つのボタンで実行させる、というものです。
ジグザグ移動とは、RRRRDLLLLDRRRRDLLLLD… のように横移動と縦移動を交互に繰り返す動きです。
このジグザグには、方向の組み合わせとして 8種類のパターン があります。


手順

1. ジグザグの移動回数を決める

まずは試しに「横に8回、縦に10回」など、ジグザグの移動回数を仮で設定します。


2. 開始点と方向パターンを決める

各ロボットについて以下をランダムに決定します。

  • ジグザグを始める位置(開始点)
  • ジグザグの方向パターン

決定した組み合わせでシミュレーションを行い、「濡らせたマスの数」を評価値とします。
これを使って山登り法で開始点とパターンを改良していきます。

遷移のルール:

  • 各ロボットについて開始点と方向パターンを全通り試し、一番多くのマスを濡らせるものを採用。
  • 濡れるマス数が同じなら、初期位置から開始点までの距離が短い方を選ぶ。

更新できなくなった時点で山登り終了。
全てのマスが濡れなかった場合は、手順1に戻って移動回数を増やして再挑戦します。


3. ボタンへの行動割り当て

次に、各ロボットを「初期位置 → ジグザグ開始点」に移動させるためにボタンを割り当てます。

  • ジグザグ移動用の3ボタンはすでに確保済み。残り7ボタンを自由に割り当て可能です。
  • 各ロボットの現在位置を初期位置に設定し、ジグザグ開始点までの距離を計算します。
    • 最大距離を d とすると、「押すと距離が d→d-1 になる」ようなボタンがあればそれを押します。
    • そうしたボタンがなければ、未使用のボタンに新たな行動を割り当てて押します(できるだけ全員が開始点に近づく方向を選ぶ)。

これを繰り返して全ロボットが開始点に到達すれば成功です。
もしボタンが足りなくなった場合は、手順1に戻って移動回数を増やして再挑戦します。


4. 改善の繰り返し

時間がある限り、

  • ジグザグの移動回数を調整したり
  • 開始点や方向パターンを変えたり

を繰り返して、より良い結果を探索します。

posted:
last update: