戦闘

攻撃


「攻撃」は二つに分かれます。一つは「総攻撃」で、もう一つは「散発攻撃」です。私が見た限り、コンピュータはたいてい散発攻撃しか行いません。 
 

1. 総攻撃

総攻撃には、全ての軍事ユニットを参加させることが出来ます。総攻撃を行うための命令は簡単です。 

(attack-now)

こうすることで、基本的にほとんどの軍事ユニットを攻撃に参加させることが出来ます。ただし、攻撃に参加させる軍事ユニットの割合をあらかじめ決めておく事も出来ます。 

(set-strategic-number sn-percent-attack-soldiers 90)

上の命令は、総攻撃に参加させる軍事ユニットを、全軍事ユニットの 90% にするものです。こうすることで、10% のユニットを防衛にまわすことが出来ます。 
 

2. 散発攻撃

散発攻撃とは、攻撃部隊の編成が整い次第、次々に攻撃を仕掛けていくことを指します。 

散発攻撃を行うには、まず攻撃部隊を編成しなければなりません。攻撃部隊を編成するには、攻撃グループの数や最小人員・最大人員などを設定しておき、あとはただ軍事ユニットを生産していくだけです。軍事ユニットは、生産されるとかならず「攻撃グループ」か「防御グループ」か「斥候グループ」に入りますので、その中で攻撃グループに所属したユニットが、散発攻撃に参加することになります。 

攻撃グループを作るのに関係する命令はいくつもあります。ただ、一つ忘れないで頂きたいのは、攻撃グループと防御グループと斥候グループは互いに人員を取り合ったり、どのグループにも属さない人員を勝手に適当なグループに入れてしまったりするということです。 

それとここでは、基本的には陸上での命令を解説しており、海上ではまた別の名前のついた命令が必要になります。しかし基本は同じだと思いますので、海上戦闘の設定は陸上戦闘のそれに習えば良いでしょう。 

(set-strategic-number sn-number-attack-groups 3)
(set-strategic-number sn-number-defend-groups 0)

1番目の命令は攻撃グループのグループ数を決める命令です。二番目の命令は防御グループのグループ数を決める命令です。もちろん、多くのグループ数を設定したからといって、それだけのグループが生まれるとは限りません。攻撃グループは、集まるとすぐに攻撃に行ってしまい、やられたりするので、なかなかグループ数が多くなる事はありません。それに、防御グループに人員を取られたりもします。 

(set-strategic-number sn-minimum-attack-group-size 4)
(set-strategic-number sn-maximum-attack-group-size 10)
(set-strategic-number sn-attack-group-size-randomness 1)

上の命令は、攻撃グループ一つ一つの、最大構成人数と最小構成人数を指示します。3番目の命令は、攻撃グループの大きさをまちまちにするための命令です。たとえば指定する値を 3 とかにすると、攻撃グループのサイズに 0〜3 が足されると考えて良いと思います。 

(set-strategic-number sn-scale-minimum-attack-group-size 1)
(set-strategic-number sn-scale-maximum-attack-group-size 0)
(set-strategic-number sn-scaling-frequency 10)

上の命令は、いまいち私もよく分かりません。scale 関係の命令は上の三つだけで、初期値は上の通りです。あくまで私の予想ですが、意味は「10分たつごとに攻撃部隊の最小構成人数を一つずつ増やせ」ということではないかと思います。 

(set-strategic-number sn-group-form-distance 999)

この命令は、部隊を構成する際に、部隊作成地点からどのぐらい離れているユニットまでをその部隊に組み入れるか、ということだと思います。本当のところは実験してみないと分かりません。 

(set-strategic-number sn-attack-group-gather-spacing 4)

上の命令は私はためした事がないのですが、予想では恐らく、グループに入ったユニット同士を、どのぐらいの距離の範囲内で密集しておかせるか、ということを決めるための命令だと思われます。 

その他、グループには指揮者が決められるだとか、どうもよく分からない点があるのですが、分かり次第お伝えしたいと思います。 
 

3. 攻撃目標

AOK の AI では、敵のどのユニットや建物を攻撃するかを細かく指定することが出来ません。ですが、どんな対象を真っ先に攻撃したらよいかを指定しておくことは出来ます。そのような指定は、攻撃対象評価値 ( target-evaluation ) を設定することで行います。 

(set-strategic-number sn-target-evaluation-distance 50)
(set-strategic-number sn-target-evaluation-hitpoints 0)
(set-strategic-number sn-target-evaluation-damage-capability 0)
(set-strategic-number sn-target-evaluation-kills 0)
(set-strategic-number sn-target-evaluation-ally-proximity 0)
(set-strategic-number sn-target-evaluation-rof 0)
(set-strategic-number sn-target-evaluation-randomness 0)

distance は距離でしょうね。 
hitpoints は当然ヒットポイントですよね。 
damage-capability はなんでしょうか。capability は、能力・特性・性能・戦闘能力、などの広い意味があるみたいです。ダメージを与える能力、つまり攻撃力でしょうか。 
kills は倒したユニット数でしょうか…? 
ally-proximity は同盟国との距離でしょうか。 
rof は説明によると rate of fire とありますので、飛び道具の攻撃力か、それとも攻撃速度のことを指しているのかもしれません。 
randomness は攻撃目標をでたらめにしたいときに使うのでしょうね。 

上の例はそれぞれの初期値です。ですから、これらの命令を一切使わないまま攻撃を行うと、恐らく自分たちと距離の近い敵のユニットや建物を攻撃するのだと思います。 

敵の農民を攻撃したいときはどのように設定したら良いでしょうか。これらの値にはマイナス値を設定する事は出来ないようですから、ヒットポイントの低くて攻撃力も低い相手を攻撃するにはどうしたらよいでしょう。私は実のところまだよく分かっていないので、他の AI を見てみることにします。 
 

4. 注意事項

散発攻撃は、明示的に「散発攻撃は行わない」と設定しない限り、必ず行われてしまいます。その結果、一人か二人の軍事ユニットが、敵の陣地に向かって攻めて行ってはやられ、攻めて行ってはやられて、資源の無駄になります。ですから、攻撃を「総攻撃」でしか行わないと決めた場合は、散発攻撃を行ってしまう元となる攻撃グループを一切作らないようにしなくてはなりません。 

 

防御

防御と言っても色々ありますが、ここで解説するのは、戦闘での防御です。壁や塔などを建てて防御することに関してはここでは説明しません。

防御にも攻撃と同じく二種類の防御があります。それは、防御グループによる防御と、散開による防御です。

1. 防御グループ

防御グループでの防御は、攻撃グループと同じようにします。つまり、防御グループをどのようにするかをあらかじめ設定しておくだけで良いのです。

(set-strategic-number sn-number-defend-groups 1)
(set-strategic-number sn-minimum-defend-group-size 8)
(set-strategic-number sn-maximum-defend-group-size 20)

私たちは、防御グループをどういう法則で作成するか、ということしか決めることが出来ません。どこを守れ、と指示することも出来ません。ただ、町の中心からどの範囲までで攻撃されたら守れ、という設定は可能です。

(set-strategic-number sn-defence-distance 15)

こうすることで、おそらく自分の町の中心から 15タイルまでを防衛します。

2000-1-13
現在のところ、まだそれほど防衛の必要がないため、これ以上は未研究です。
 

2. 散開

散開による防衛は、どのグループにも属さない軍事ユニットを作ることで防衛を行います。この防衛は非常に簡単で、何もしない状態で自動的に散開による防衛が行われます。散開による防衛が行われると、視界のないところへ軍事ユニットが散らばって行きます。ですから、敵が来るのを事前に察知することが容易です。しかし、一人ずつ散らばって行ってしまうため、大勢の敵に攻められるとモロいのが欠点です。近くにいるユニット同士は助け合いますが、それでも敵の大群に攻撃を受けると各個撃破されてしまいます。

散開による防衛をやめることが出来ます。

(set-strategic-number sn-task-ungrouped-soldiers 0)

値を 1 にすると散開により防衛し、0 にすると散開しなくなります。
 

城を攻める

相手が防御のために城を建てる事はよくあることです。城を攻めること自体は非常に簡単です。城は、破城槌、または遠投投石器に弱いからです。しかし、城を攻めるべきかどうかを判断することはほとんど不可能です。いつなら城を攻めるのが有効であるかを判断して破城槌を出せるでしょうか。また、たいていの場合、城だけを攻撃しようと思っても敵の防御部隊が来てしまいます。防御部隊が来てしまうと、破城槌と遠投投石器だけではやられてしまいます。そこで当然ながら破城槌と遠投投石器に護衛部隊をつけることになります。というかむしろ、攻撃部隊に破城槌や遠投投石器を付ける、と言った方が良いでしょう。

残念ながらコンピュータは、効果的な攻城戦が出来ません。効果的な攻城戦とは、たとえば遠投投石器を数台用意して、残りの部隊は全て遠投投石器の周りに配置して、遠投投石器が城を破壊するのを待っている戦い方です。たとえ攻撃部隊に遠投投石器とその護衛ユニットを入れても、コンピュータは全てのユニットで城を攻撃してしまいます。その結果、まず護衛部隊が敵の城からの射撃で次々と倒れていき、残された遠投投石器は遅れてやってきた敵の防衛隊にやられてしまいます。

まだまだ問題はあります。敵の防衛部隊が強力な場合、まず防御部隊を倒さなければなりません。そうしなければ、城に対してだけ有効な破城槌や遠投投石器が、城を攻撃する前にやられてしまいます。これを回避するには、敵の防御部隊が強力であるかどうかを判断して部隊を構成する必要があります。

私の結論は、効果的な城攻めは存在しない、ということです。城攻め自体を攻撃から切り離して行うことは不可能だと思います。攻城兵器を守ろうと考えない方が良いと思います。攻城兵器は通常兵器に比べて高価ですが、むしろ高価な囮と割り切れば良いのではないかと思います。敵の攻撃が囮に集中している間に敵の防御部隊を攻撃できると思えばよいと思います。ですから、攻城兵器も消耗すると考えて多少多めに作り、やられても気にしないことです。攻城兵器がやられないように通常のユニットを多めに作りすぎると、今度は逆に通常ユニットが敵の城の餌食になってしまうからです。

さらに大きな問題もあります。攻城兵器が通常の攻撃ユニットよりもあとになって戦場に到着してしまうことが結構あります。恐らくこれは、包囲攻撃訓練所の建っている位置の問題もあると思います。このあたりは可能な限りうまく制御すると強い AI が作れると蔽います。

また、攻城兵器を作らない、というのも一つの作戦だと思います。帝王の時代にテクノロジーを研究しますと、普通の攻撃部隊でも十分に城を攻撃することが出来ます。ということは、普通の攻撃部隊にわずかに攻城兵器を混ぜると効果的だといえるでしょう。

逆の話をすると、AI 対戦では城が非常に効果的な防御拠点です。特に二つの城を並んで建てる事が出来たとしますと、その城が敵の攻撃部隊をうまく誘い出してどんどん倒してくれます。

こちらが押していると城はおのずから落とせるはずです。うまく工夫して、部隊の損失を少なくできると、戦いを有利にできるはずです。
 


 
  (gomi@din.or.jp)