h27sim 関西春ロボコン 対戦シミュレーター

読み込み中…

作戦を、選んだ相手と seed を変えて何試合も戦わせ、相手ごとの勝率を出す。評価する作戦が赤、相手が青で、同点は 0.5 勝として数える(CLI・explore と同じ数え方)。

相手(青)

決定木の探索(tree-search・tree-coevolve)と、機体 + 戦略の探索(design-search)で見つけた作戦。決定木は「はい/いいえ」で枝分かれして、行き着いた葉の行動をする作戦。表の行や名前を押すと、右に機体・成績・中身が出る。

左の一覧から選ぶ

使い方

関西春ロボコンの試合を、作戦どうしで何度も戦わせて比べるためのツール。作戦はブロックを組んで作る。プログラムを書く必要はない。

できること

作戦を作る
ブロックで作戦を組む。見本(これまでに調べた強い作戦)を開いて、そこから変えるのが早い。
試合する
作戦を 2 つ選んで 1 試合し、フィールドの上で再生する。機体がなぜその動きをしたか(どのブロックが動いたか)も見える。
評価する
作戦を、たくさんの相手と seed(試合ごとの運)を変えて何百試合も戦わせ、勝率を出す。強さを比べるのはこちら。
決定木
シミュレーターが自動で探した作戦(決定木)と、機体ごとに探した結果(どの機体が強いか)を見る。そこから試合・評価・エディタに渡せる。

はじめての 5 分

  1. 「作戦を作る」を開く。最初は見本 #1(飛び最速)が開いている。
  2. ブロックの数を 1 つ変えてみる(例: 「桜を 6 本まで補充する」の 6 を 3 に)。
  3. 右の「この作戦で試合する」を押す。下の「▶ 再生」で試合の流れを見る。
  4. 「評価する」で、見本の上位 8 人と 100 seed 戦わせる。平均勝率が変える前と比べて上がったか下がったかを見る。
  5. よくなったら「書き出す」でファイルにして、ほかの人に渡す。

作戦の動き方(いちばん大事)

機体が空くたびに、「作戦」の下に並べたブロックを上から順に見て、最初に「今できる」ブロックを 1 つだけやる。 Scratch のように上から全部を順番にやるのではない。1 つやり終えたら、また一番上から見直す。

満開なら宣言する             ← 満開でなければ「できない」ので次へ
サイコロを 6 以上にする       ← もう 6 なら次へ
もし 経過時間 ≥ 170 なら
  桜を置く: 相手がいてもよいゾーン … ← 170 秒までは中を見ない
桜を 6 本まで補充する         ← もう 6 本持っていれば次へ
次に置ける空きゾーンの前で待つ ← 何もなければここに来る
  • 「できない」のは、持っていない・置ける場所がない・やっても意味がない・違反になる、など。違反になる行動は選ばれない。
  • 何より先にやらせたいこと(割り込み)は、上に置く。
  • 「もし」は条件を満たすときだけ中を見る。中にできることがなければ、その下へ進む。
  • 行動の場所が遠ければ、まずそこへ向かって 1 区間だけ移動する。移動の途中でも見直すので、状況が変われば行き先も変わる。
  • どのブロックもできなければ、0.5 秒待ってからまた上から見る。

ブロックの一覧

棚の分類ごと。ブロックにマウスを乗せても同じ説明が出る。「組み合わせ」は、よく使うブロックを組み立てたもの。

条件で使える量

条件ブロック「〈量〉 ≥ 〈数〉」の量。「自分」はこの作戦の機体、「相手」は相手の機体。

試合の見方

  • フィールドの数字は本数。桜=桜ゾーン、剤=除草剤、避=避難エリアの雑草、目=サイコロの目、立/倒=直立/倒れた雑草、除=除去エリアの桜、使=使用済み除草剤。真ん中の列の赤・青の数字は共通ゾーンの本数。
  • 機体の下の札は手持ち。点線はこれから通る道。縁が点線になっているのは、違反で止まっているとき。
  • 「いまの判断」は、その時点の行動と、それを選んだブロック(「もし 〈条件〉 → 〈ブロック〉」)。右のブロックでは、そのブロックと、そこへ至った「もし」が黄色の縁で光る。
  • 「GIF に書き出す」で、試合を動く画像(GIF)にしてダウンロードできる。チャットや資料にそのまま貼れる。上の帯に得点・時刻・作戦の名前・seed が入り、最後に結果を出して 3 秒止まる。範囲を「いまの位置から 30 秒」などにすると、見せたい場面だけを切り出せる(下のつまみで位置を決めてから押す)。試合の全部・10 倍・570 px で、数 MB・十数秒で書き出せる。
  • ログの行を押すと、その時刻に飛ぶ。seed を変えると、機体のばらつき・除草剤が当たるか・同時に終わった行動の順が変わる。

評価の見方

  • 評価する作戦が赤、相手が青。同点は 0.5 勝として数える。CLI の explore と同じ数え方なので、数字をそのまま比べられる。
  • 「±」は標準誤差。2 つの作戦の勝率の差がこの 2 倍くらいより小さければ、差はたまたまかもしれない。seed を増やして確かめる。
  • 平均勝率だけでなく「最低」(一番苦手な相手への勝率)も見る。平均が高くても、特定の相手に全く勝てない作戦は危ない。
  • 評価する作戦と中身が同じ相手とは戦わない。
  • 表の行を押すと seed ごとの勝敗が出る。seed を押すと、その試合を「試合する」で再生できる。負けた試合を見ると、直すところが見つかりやすい。

決定木

決定木は、「はい/いいえ」で枝分かれして、行き着いた先(葉)の行動をする作戦。シミュレーターが何万世代も試合を繰り返して、強い木を自動で探した(tree-search・tree-coevolve・design-search)。

満開なら宣言する(いつも先頭)
もし 経過時間 ≥ 165
  はい → もし 経過時間 ≥ 172
    はい → 置く(1〜4番の相手がいてもよいゾーンに近い順、1 ゾーン 2 本)
    いいえ → 【補充場所では続けて取る】6 本まで
  いいえ → サイコロを 6 以上にする / 【置いては補充】…
何もできないとき → 相手の桜を除去 / …
  • 葉には行動が「/」区切りで並ぶ。普通の作戦と同じで、左から順に見て最初に「今できる」ものを 1 つやる。葉の行動がどれもできなければ「何もできないとき」の行動を見る。
  • ブロックでは、分岐は「もし 〈量〉 ≥ 〈数〉」(はい)と「もし 〈量〉 < 〈数〉」(いいえ)の組になる。エディタの「決定木の形で見る」で、はい/いいえの形でも見られる。
  • 機体 + 戦略の探索は、機能を 1 つ捨てるごとに 1 つ強くした機体(62 通り)それぞれに、その機体専用の木を探したもの。表は機体の順位。木を選ぶと、試合・評価の機体も自動でその機体になる。
  • 機体の設計(「−除草剤 +雑草」など)は、試合・評価の「機体」の一覧からも選べる。「−」はできない機能、「+」は速くした機能(行動の時間が半分。除草剤は命中率も +0.2。移動は 1.5 倍)。
  • 成績は、標準機の 42 作戦(見本 36 + 決定木 6)を相手に、探索で使っていない seed 10000..10400 で出したもの。「評価する」の「機体 + 戦略の探索と同じ相手」で同じ相手を選べる。ただし「評価する」の seed は 0 から数えるので、数字は近いが同じにはならない。

作戦ファイル(ほかの人に渡す)

  • 作業中のブロックはこのブラウザにだけ自動で保存される。別のパソコンやブラウザでは見えない。
  • 「書き出す」で作戦ファイル(.json)ができる。ほかの人はそのファイルを「ファイルを開く」で開ける。評価の相手や試合の相手にも、ファイルのまま使える。
  • 作戦ファイルは、シミュレーター本体(Rust の CLI)でもそのまま使える: cargo run --release -- duel-json 作戦.json strategies/presets/35.json、 cargo run --release -- league-json 作戦.json strategies/presets。同じ作戦・seed なら、ここと CLI で結果は同じになる。

困ったとき

「問題が … 件ある」と出て、書き出しや試合ができない
右の一覧の問題を押すと、そのブロックへ移動する(⚠ が付いている)。空の「もし」の条件などを直す。
ブロックが灰色になっている
「作戦」につながっていないか、右クリックで無効にしたブロック。試合では使われない。
まちがえて消した・動かした
Ctrl+Z で元に戻せる(Mac は ⌘+Z)。
作戦が消えた
自動保存はブラウザごと。別のブラウザ・プライベートウィンドウでは見えない。大事な作戦は書き出しておく。
試合の動きがおかしい
作戦ファイルと seed の番号を、シミュレーターの担当に送る。同じ試合をそのまま再現できる。

注意

  • 機体の数値(速さ・行動の時間・除草剤の命中率など)は仮。勝率は機体の数値に強く左右されるので、作戦の良し悪しの目安として使う。
  • 試合ごとに、機体の数値を ±15% ばらつかせている(「機体のばらつき」)。
  • 選べる機体の型: