コンテンツにスキップ

命令数の上限

あなたの担当 どれだけ計算するかは、あなたが決めます。上限の数字と、超えたときの決まりは、エンジンのものです。

bot が1 回の update で使える計算量には、上限があります。 時間(秒)ではなく、命令の数で決まっています。

上限
update 1 回150,000 命令
setup(試合のはじめの 1 回)1,000,000 命令

なぜ「時間」ではなく「命令の数」なのか

Section titled “なぜ「時間」ではなく「命令の数」なのか”

端末が遅いと、同じ計算でも時間がかかります。時間で切ると、同じ bot が、端末によって別の動きになります。 命令の数なら、どの端末でも同じ数になります。試合が、どの端末でも同じ結果になる(決定論)ために、こうなっています。

起きたこと結果
1 回だけ超えたその回は、前回と同じ動きになる
試合のあいだに 3 回まで超えた許される
4 回目行動停止。それ以降、タンクは何もしなくなる

実際には、ほとんど引っかからない

Section titled “実際には、ほとんど引っかからない”

ふつうの書きかたで、上限に近づくことはまずありません。 たとえば経路探索と計算量のページでは、実際に試合を走らせて測りました。

書き方1 tick の平均いちばん重い tick
毎 tick BFS で探し直す1,1571,795
毎 tick A* で探し直す8942,568
10 tick に 1 回だけ BFS(あとは使い回す)2131,847
経路探索なし(line_of_sight だけ)113113

(測りかた・条件は、そのページにあります)

いちばん重い書きかたでも、上限の 2% ほどです。 バジェットは、無限ループの bot が端末を固まらせないための安全装置です。

それでも、命令数を気にする価値

Section titled “それでも、命令数を気にする価値”
  1. 数字が、自分の書きかたを教えてくれる。 同じ動きでも、「毎回全部やり直す」と「覚えておく」では、5 倍ちがいます
  2. 経路探索は「重い処理は重い」と学べる。 組み込みの道具でも、広げたマスの数だけ命令数が加わります
  3. ステップアップ・チャレンジの一部は、命令数の平均がクリア条件です
  • 覚えておく。 前の update で調べたことを、変数に残す(bot のかたち
  • 必要なときだけ調べる。 まず line_of_sight、見えないときだけ経路探索
  • ループの中で、重い道具を呼ばない

対戦画面の下に、命令数のメーターが出ます(バジェットの 60% で黄色、100% で赤)。 分析画面の「命令数の消費」のグラフでも、tick ごとの計算量が見られます。