命令数の上限
あなたの担当 どれだけ計算するかは、あなたが決めます。上限の数字と、超えたときの決まりは、エンジンのものです。
bot が1 回の update で使える計算量には、上限があります。
時間(秒)ではなく、命令の数で決まっています。
| 上限 | |
|---|---|
update 1 回 | 150,000 命令 |
setup(試合のはじめの 1 回) | 1,000,000 命令 |
なぜ「時間」ではなく「命令の数」なのか
Section titled “なぜ「時間」ではなく「命令の数」なのか”端末が遅いと、同じ計算でも時間がかかります。時間で切ると、同じ bot が、端末によって別の動きになります。 命令の数なら、どの端末でも同じ数になります。試合が、どの端末でも同じ結果になる(決定論)ために、こうなっています。
超えたらどうなる
Section titled “超えたらどうなる”| 起きたこと | 結果 |
|---|---|
| 1 回だけ超えた | その回は、前回と同じ動きになる |
| 試合のあいだに 3 回まで超えた | 許される |
| 4 回目 | 行動停止。それ以降、タンクは何もしなくなる |
実際には、ほとんど引っかからない
Section titled “実際には、ほとんど引っかからない”ふつうの書きかたで、上限に近づくことはまずありません。 たとえば経路探索と計算量のページでは、実際に試合を走らせて測りました。
| 書き方 | 1 tick の平均 | いちばん重い tick |
|---|---|---|
| 毎 tick BFS で探し直す | 1,157 | 1,795 |
| 毎 tick A* で探し直す | 894 | 2,568 |
| 10 tick に 1 回だけ BFS(あとは使い回す) | 213 | 1,847 |
経路探索なし(line_of_sight だけ) | 113 | 113 |
(測りかた・条件は、そのページにあります)
いちばん重い書きかたでも、上限の 2% ほどです。 バジェットは、無限ループの bot が端末を固まらせないための安全装置です。
それでも、命令数を気にする価値
Section titled “それでも、命令数を気にする価値”- 数字が、自分の書きかたを教えてくれる。 同じ動きでも、「毎回全部やり直す」と「覚えておく」では、5 倍ちがいます
- 経路探索は「重い処理は重い」と学べる。 組み込みの道具でも、広げたマスの数だけ命令数が加わります
- ステップアップ・チャレンジの一部は、命令数の平均がクリア条件です
軽くするコツ
Section titled “軽くするコツ”- 覚えておく。 前の
updateで調べたことを、変数に残す(bot のかたち) - 必要なときだけ調べる。 まず
line_of_sight、見えないときだけ経路探索 - ループの中で、重い道具を呼ばない
自分の bot の命令数を見る
Section titled “自分の bot の命令数を見る”対戦画面の下に、命令数のメーターが出ます(バジェットの 60% で黄色、100% で赤)。 分析画面の「命令数の消費」のグラフでも、tick ごとの計算量が見られます。
- 経路探索の測りかた → 経路探索と計算量
- 超えたときのエラー → 赤いメッセージが出たとき