使い方
関西春ロボコンの試合を、作戦どうしで何度も戦わせて比べるためのツール。作戦はブロックを組んで作る。プログラムを書く必要はない。
できること
- 作戦を作る
- ブロックで作戦を組む。見本(これまでに調べた強い作戦)を開いて、そこから変えるのが早い。
- 試合する
- 作戦を 2 つ選んで 1 試合し、フィールドの上で再生する。機体がなぜその動きをしたか(どのブロックが動いたか)も見える。
- 評価する
- 作戦を、たくさんの相手と seed(試合ごとの運)を変えて何百試合も戦わせ、勝率を出す。強さを比べるのはこちら。
- 決定木
- シミュレーターが自動で探した作戦(決定木)と、機体ごとに探した結果(どの機体が強いか)を見る。そこから試合・評価・エディタに渡せる。
はじめての 5 分
- 「作戦を作る」を開く。最初は見本 #1(飛び最速)が開いている。
- ブロックの数を 1 つ変えてみる(例: 「桜を 6 本まで補充する」の 6 を 3 に)。
- 右の「この作戦で試合する」を押す。下の「▶ 再生」で試合の流れを見る。
- 「評価する」で、見本の上位 8 人と 100 seed 戦わせる。平均勝率が変える前と比べて上がったか下がったかを見る。
- よくなったら「書き出す」でファイルにして、ほかの人に渡す。
作戦の動き方(いちばん大事)
機体が空くたびに、「作戦」の下に並べたブロックを上から順に見て、最初に「今できる」ブロックを 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% ばらつかせている(「機体のばらつき」)。
- 選べる機体の型: