日記/2007-02-15
2007-02-16 (金) 11:47:46
すっかり検証するのを忘れていたことがあったので、ちと試してみて、よくわからなくなった。
とりあえず、公開メモという感じで。
話題:ゼロ移動キャンセル。†
可能な限りAIで提案されている、攻撃高速化の一手法。
プログラムのつくり自体は、すでにある程度確立されている「移動キャンセル」と同じ。
違いは、ホムの移動先指定。
普通の移動キャンセルは、実際にホムを1セル程度歩かせる位置を指定するのに対して「ゼロ移動キャンセル」は文字通りゼロ距離:ホムのいる位置そのものを指定する。
追記:
可能な限りAIの作者・horoさんの解説では
- 移動しないキャンセル(ゼロ移動キャンセル)を「Bモード」動作
- 移動するキャンセル(1セル移動キャンセル)を「Cモード」動作
・・・と呼んでいます。
ゼロ移動ってのは友瀬の造語なので、誤解なきよう。
効果のほどは?†
確かに、ゼロ移動キャンセルでも攻撃は高速化されている。
ただ、友瀬が使っている99レベル原種進化バニルでは、通常の移動キャンセルと比べると確かに遅いように感じる。
もう少し具体的に調べて、困った。†
上記の「感じる」というのが非常に主観的なので、もっと具体的な手が使えないか考えて、Attack()を呼び出したタイミングを記録してみることにした。
と、その結果がよくわからないことになってきた。
試行回数はそれぞれ2,3回程度の平均なのでばらつきはあるかもしれない。
99進化バニル | 通常なし | 1セル移動 | ゼロ移動 |
草を倒す所要時間 | 5秒台 | 4秒台 | 5秒台 |
AIサイクル | 18回前後 | 15回前後 | 10回前後 |
33未進化リーフ | 通常なし | 1セル移動 | ゼロ移動 |
草を倒す所要時間 | 7秒台 | 7秒台 | 6秒台 |
AIサイクル | 20回前後 | 30回前後 | 10回前後 |
- 確かに、ゼロ移動キャンセルには一定の効果はある。
上記バニルのケースでは「キャンセルなし」も「ゼロ移動」も5秒台となっているが、厳密にいうとゼロ移動のほうが速いのは確か。 - 通常キャンセルとゼロ移動キャンセル、どちらが効果的かはよくわからない。
少なくとも上記を見る限り、進化原種バニルでは移動キャンセルのほうが速いが、未進化原種リーフではゼロ移動キャンセルのほうが速い。 - どちらのケースにしても、移動キャンセル/ゼロ移動キャンセルを絡めるとAIサイクルの挙動が怪しい。
特にゼロ移動時のサイクル数の少なさは、かなり異常と言っていいだろう。
草のHPは10なので、10回攻撃が必要:つまりゼロ移動キャンセルをした場合、Attack()するたびに実際に攻撃が出ている、といっても過言ではないペースまで、AI動作が減速されているといえる。 - 移動キャンセル時の見た目について補足:
進化バニルでは、攻撃回数のほうが移動回数よりも多い:「攻撃・攻撃・移動」になることがある。
未進化リーフでは、攻撃よりも移動回数のほうが多い:「移動・移動・攻撃」になることがある。
- そういう意味では、リーフのほうが移動キャンセル時に遅いのはなんとなく理解できる。
移動キャンセルによるメリットよりも、移動モーションによる無駄のほうが大きいのでは。
- そういう意味では、リーフのほうが移動キャンセル時に遅いのはなんとなく理解できる。
どのケースもソース・プリント出力タイミングなどは変えていないので、プリント出力によるディレイ差という問題ではなさそう。
まあいずれにせよ、まだまだ検証は必要な段階。