wesnoth戦術の定量的議論に向けたプラットフォームの構築
Construction of platform for quantitative discussion of
strategy in WesNoth
目次
1. Introduction
2. ダイアグラムを用いたユニット間相性の数値化
2.1. 概要
2.2. ダイアグラムの作成
2.3. ダイアグラムの利用
2.3.1. 期待値による一般的な相性
2.3.2. 相手雇用計画が既知であるような場合の解
3. まとめと展望
4. 参考文献
1.Introduction
オープンソースで開発されたターンベースシミュレーションゲームであるwesnoth(以下wes)の戦術論は,未だ体系的に構築されておらず,個人レベルでの理解にとどまるのが現状である.このことはwesの持つゲームの深みともいうべき複雑性に拠るものである.すなわち各々のユニットの性能が,敵陣営や,単一の敵陣営であってもそのユニット種に依存して大きく変化し,どの場合にも適用できるような統一的な戦術を構築しにくいということが原因である.そのため各人は,各人の知識と経験を「総合的に判断して」戦術を構築するしかなかった.こうした戦術論はしばしば定量性に欠け,検証や戦術の共有なども困難であった.筆者のこれまでの研究[参考文献1]においても,「ナルガン同盟相手には骨弓よりも骨斧を出すのが良い」といった,定性的な議論がなされているに過ぎなかった.こうしたことから,定量的な議論に基づく戦術論の構築が望まれている.
前述したような統一的戦術の欠如は,wesに限らず他のゲームにおいても見られる.チェスなどの決定論的なルールかつ組み合わせ数がそれほど多くないゲームにおいてはコンピュータが世界チャンピオンを破るような例があるものの,多くの複雑なゲーム(麻雀など)では,wesと同様の問題を抱えている.しかし近年麻雀においては,統計解析とコンピュータ・シミュレーションを利用した数理モデルが登場し[参考文献2],何を切ればよいかといった短期的な局面から,持ち点何点で残り何局ならば何着を目指すのが最も良いか,といった長期的な局面にわたるまで,定量的な内容を含む指針を得ることができるようになりつつある.
wesにおいても,各ユニットの性能は,相手ユニットとの組み合わせさえ決まれば一意に決定できる.ユニットの性能は,戦闘時の性能に限れば,攻撃手段・相手からの反撃・回避率などによって数値化が可能である.こうした数値情報を用い,何らかの定量性を議論に組み込むことは可能である.そこで本研究では,こうした定量性を組み込むための方法論の構築を目指した.
2.ダイアグラムを用いたユニット間相性の数値化
2.1.概要
wesの戦闘において,双方の損害はユニットの組み合わせによって変化する.同様にコンポーネントの組み合わせの相性をダイアグラムを用いて表現するような手法が,格闘ゲーム攻略などにおいてしばしば見られる[参考文献3].そこで本研究では,ダイアグラムを用いてユニット間の相性を数値化することを試みた.
通常ダイアグラムでは,参考にみられるように,相性が良い組み合わせを10点,悪い組み合わせを0点として規格化した数値が並び,各行の合計値によって強いキャラ,弱いキャラなどが定義される.しかしこの数値は,主観によって定められためやすに過ぎない.というのも,格闘ゲームなどの種類のゲームはwesなどより自由度が圧倒的に高く,個人の技能に拠るところが大きいからである.本研究では,ダイアグラムの各項目として,攻撃時のダメージ期待値などの数値を用いることで,ユニット同士の相性を定量的に表現することを目指した.こうした数値データは公式ページにおいて公開されており、前述のような表を全てのユニットの組み合わせにおいて作成することが可能である.マルチプレイ対戦において使用できるレベル1ユニットの総数は約40である. こうしたフルセットの表を作成した後,たとえばアンデッド陣営vsエルフ陣営といったような陣営同士の相性を知りたければ,アンデッドとエルフのユニットのみからなるsub Tableを作成すればよい.さらにアンデッドに対して最も相性が良い陣営はどれか,といったランク付けも可能になる.さらに,たとえばアンデッドvs人間陣営において,相手が重歩兵:魔術師:槍兵=4:4:2で雇用してきた場合にこちらはどのような組み合わせの雇用を行えば最も良いか,というような解を求めることが可能となる.詳細な方法は次節以降で述べる.
脚注
このような表によって得られるのは,ユニット同士が1vs1で隣接した場合の相性のみを考慮している.毒や再生などの特殊能力は考慮されていない.移動力やマップ上の位置関係,多数ユニット間の相互作用なども考慮されていない.しかしながら,まずはもっとも単純な場合を定量的に議論するための方法を,本研究では提案していると考えてもらいたい.
2.2.ダイアグラムの作成
公式ページに,全ユニットの性能が記載されている.各ユニットは,攻撃手段(属性,威力,回数)および回避率※1,属性への耐性といったようなパラメータが定義されている.これを用い,攻撃側ユニットから防御側ユニットへ攻撃を行ったときのダメージと被ダメージの期待値が算出できる.
※1
回避率は全地形の平均値を用いた.もし厳密にやろうとすれば,戦場のマップにおける各地形の割合を求め,その割合によって重み付け平均した回避率を用いるという方法がある.しかしこれも,ユニットがその戦場のどこかに一様な確率で存在する場合の回避率期待値に過ぎない.実際はそうではなく,村付近や狭道などの要所のほうが存在確率がずっと高いだろう.おのおの研究したいマップの,研究したい区域のデータを用いるほうがこのモデルの予測精度は上昇するだろう.ただ,それを全地形の平均値と比較したときの精度上昇具合は,それほど高くないと考えられる.
これより,ダイアグラム作成の例を示す.5つのユニット(骨斧,骨弓,ゴースト,魔術師,重歩兵)に関するダイアグラムを作成する.Table 1に,5ユニットの攻撃手段※2,回避率平均,各属性に対する耐性を示す※3.
|
格闘 |
投射 |
回避(平均) |
耐性 |
|
|
|
|
|
|
|
|
|
斬 |
貫 |
打 |
火 |
冷 |
聖 |
骨斧 |
斬7-3 |
|
38 |
+40 |
+60 |
-20 |
-20 |
+60 |
-50 |
骨弓 |
打3-2 |
貫6-3 |
38 |
+40 |
+60 |
-20 |
-20 |
+60 |
-50 |
ゴースト |
聖4-3 |
冷3-3 |
50 |
+50 |
+50 |
+50 |
-10 |
+70 |
-10 |
魔術師 |
打5-1 |
火7-3 |
37 |
0 |
0 |
0 |
0 |
0 |
+20 |
重歩兵 |
打11-2 |
|
27 |
+50 |
+40 |
+10 |
-10 |
-10 |
+20 |
この情報をもとに,各ユニットの戦闘発生時のダメージ期待値を計算する.結果をTable 2に示す.Table
2は,行(縦)方向のユニットが攻撃者,列(横)方向のユニットが被攻撃ユニットを示す.2段のデータの上段は,攻撃者のダメージ期待値,下段は被ダメージ期待値を示す.攻撃手段が2種類以上存在する場合は,(ダメージ)-(被ダメージ)値を計算し,大きいほうを選んだ.ダメージ期待値の計算は以下の式に従う
ダメージ期待値 = round[ ダメージ量*(1-耐性/100)] *攻撃回数 * (1-回避率/100)roundは四捨五入
ただし魔法攻撃の場合は,回避率は一律30%になる たとえば骨斧→骨斧の攻撃は,round(6*0.6) * 3 * 0.62として計算した.また,Table 3に,(ダメージ)-(被ダメージ)値のダイアグラムを示す.
骨斧 | 骨弓 | ゴースト | 魔術師 | 重歩兵 | 平均 | ||
骨斧 | 攻撃 | 7.44 | 7.44 | 6 | 13.23 | 8.76 | 8.57 |
相手反撃 | 7.44 | 4.96 | 11.16 | 3.72 | 16.12 | 8.68 | |
骨弓 | 攻撃 | 3.72 | 4.96 | 4.5 | 3.78 | 8.76 | 5.14 |
相手反撃 | 0 | 4.96 | 1.86 | 3.72 | 0 | 2.10 | |
ゴースト | 攻撃 | 11.16 | 11.16 | 9 | 7.56 | 6.57 | 9.09 |
相手反撃 | 6 | 2 | 9 | 1.5 | 0 | 3.7 | |
魔術師 | 攻撃 | 16.8 | 16.8 | 12.6 | 14.7 | 16.8 | 15.54 |
相手反撃 | 0 | 11.34 | 4.5 | 14.7 | 0 | 6.108 | |
重歩兵 | 攻撃 | 16.12 | 1.12 | 6 | 13.86 | 14.6 | 13.34 |
相手反撃 | 8.76 | 4.38 | 6.57 | 3.65 | 14.6 | 7.59 | |
平均 | 攻撃 | 11.04 | 11.29 | 7.62 | 10.62 | 11.09 | |
相手反撃 | 4.44 | 5.52 | 6.61 | 5.45 | 6.14 |
骨斧 | 骨弓 | ゴースト | 魔術師 | 重歩兵 | 平均 | |
骨斧 | 0 | 2.48 | -5.16 | 9.51 | -7.36 | -0.10 |
骨弓 | 3.72 | 0 | 2.64 | 0.06 | 8.76 | 3.03 |
ゴースト | 5.16 | 9.16 | 0 | 6.06 | 6.57 | 5.39 |
魔術師 | 16.8 | 5.46 | 8.1 | 0 | 16.8 | 9.43 |
重歩兵 | 7.36 | 11.74 | -0.57 | 10.21 | 0 | 5.74 |
平均 | 6.60 | 5.76 | 1.00 | 5.16 | 4.95 | 0 |
Table 2の右端の列に示されているのはダメージ期待値の平均値である.この値を比較することで,そのテーブル内の組み合わせのユニットの中で,平均的に最も有用なユニットがどれであるかを議論することができる.また,Table 3の右端の平均値は,そのユニットの攻撃時のダメージ効率(ダメージ-被ダメージ)の平均値を示している.例えば(1,5)の骨斧平均値-0.10は,どの面子だとこちらのターンに攻撃を仕掛けても(相手がランダムだとすると)損をすることが多い,ということを示している.下段平均値は,守備ターン時の被ダメージ平均を示している(xで骨斧を攻撃したときのダメージ効率平均).すなわち(5,1)の骨斧平均値6.60は,表中のユニットが場にランダムに存在したときに受けるダメージである.攻撃ターン時には,自分で相手を選択することができるし,場合によっては攻撃しないことも可能なので,この表の平均値は有用ではないかもしれない.しかし守備ターンは,相手を選ぶことができないので,盾役としての指標になりうる.値が最も小さいのはゴーストで,これは魔術師以外からはダメージを受けにくく、さらに反撃するので効率が高いことが理由である.重歩兵が他ユニットよりも盾役指標が低いのは,回避率が低いことと投射攻撃に反撃できないという点で,期待値が下がるからであると考えられる.ここに示すのはダメージ効率であって,盾役としての頑強さを示しているわけではないことに注意してほしい.被ダメージそのものは,Table 2下段の平均値を参照するとよい.また表の各ユニットの値を列方向に眺めることで,たとえば骨斧に対して最も効率良くダメージを与えられるのは魔術師である,であるとか,骨斧でゴーストに殴りかかるのはたいへん分が悪い,などということを把握することができる.
※2全てのダメージ量は時刻補正およびユニットの特性(強力とか)を考慮していない
※3この表は公式ページを元に作成された.プログラミングが達者な人ならば,公式ページのソースをダウンロードし,ソースを変数へとインプットし,行列として出力するようなスクリプトを書けば自動生成できる.以下の工程も同様にして自動化が可能.面倒なので誰か書いて下さい.筆者のスキルだとうまくいっても数時間ぐらい掛かりそうなんで.
脚注
HPやコストも考慮していない.ダメージ期待値にHPやコストを掛け算および割り算することで,キャラクター順位点のような指標を算出することも可能である.
2.3.ダイアグラムの利用
2.3.1.期待値による一般的な相性
前節のようにして作成したダイアグラムを用いることで,様々なことがらについて定量的に議論できる.例では5ユニット分のデータのみを示したが,たとえばアンデッドと人間陣営の全キャラクターを含むテーブルを作成し,そのダメージ期待値平均(表の一番右端)を見ることで,対アンデッドとしてどのようなキャラを雇用すると最も効率よくダメージが与えられそうか,ということが判明する.このような表を用いずとも、筆者は過去の研究により[参考文献1][参考文献4]アンデッド陣営の弱点はすでに把握している.しかしながら,この方法を用いることで任意の全ての組み合わせの陣営の相性を知ることが可能となる.このことは,あまり習熟していない陣営同士の組み合わせの戦いにおいて,迅速に大まかな雇用計画の指針が得られるという点で有用である.さらにこの方法は,2vs2対戦時にも有効である.任意の組み合わせの4陣営(陣営がかぶった場合はもっと少ない数になる)分のテーブルを作成することで,同様にして大まかな雇用の指針が得られる.2vs2においてどのような雇用計画が効率が良いかということは,かなりの経験を積まないと直感的には理解できず、こうした場合に本方法により,強力な支援が容易に得られるようになると考えられる.
2.3.2.相手雇用計画が既知であるような場合の解
2.3.1における1vs1や2vs2の雇用計画は,相手が召還可能な全ユニットをランダムに出してきたときの期待値に過ぎず,現実的ではない.しかし相手の雇用計画が既知であるような場合は,それに対応した戦術が立てられる.たとえば相手が人間で,魔術師と重歩兵しか出してこない場合は,魔術師と重歩兵だけに対する,こちら陣営の全ユニットというsub
tableを作成し,期待値平均をもとにこちらが出すべきユニットがどれであるかを評価すればいい.さらに,相手のユニットの雇用割合や,マップ上における存在割合が既知である場合には,こちらの雇用ユニットあるいはマップにおける存在割合をどのようにすればよいかの解が求まる.たとえばマップ上に魔術師:重歩兵:槍兵が4:4:2の割合で存在する場合(あるいは相手がこの割合で雇用していることが近似的にわかる場合),やはり魔術師と重歩兵と槍兵からなるsub
tableを用意すればよい.次にこれらに対するこちらの各ユニットのダメージ期待値や,期待値平均を算出する際に,4:4:2の割合で重み付けを行う.そして,重み付けされた期待値平均を最大とするようなこちらのユニットの構成割合はどうか,ということを求めればよい.
3.まとめと展望
各ユニット同士のダメージ期待値をダイアグラムとして作成することで,雇用数というマクロな観点における指針を得ることが可能となった.本手法はプレイヤーの熟練度がそれほど高くない場合においても一定の雇用指針が得られ,特に2vs2陣営戦など,熟練プレイヤーでなければ直感的に解が得られないような複雑な場合において特に有効である.
脚注においても議論したが,本方法はユニットの移動力や展開,地形などの時間空間的要素を考慮していない.こうしたミクロな視点における戦術の体系化は別の方法によってなされる必要がある.しかし本方法は,そうした戦術の基盤として重要な切り口を与えるものと考えられる.
本研究においては,毒や再生,鈍化などの特殊効果を考慮していない.また,HPやコストというパラメータも導入されていない.これらをダメージ期待値に直接導入することは難しいが,何らかの間接的なパラメータとして導入することは可能であろう.これにより,本方法はさらに有用なものになると考えられる.
本稿において示された方法を今後実装し,有用性の検証を行うことで,本手法のさらなる進歩が可能となるであろう.
4.参考文献
[1] 2008, zako, wesnoth戦術論 発展, 雑魚の日記
[2] 2004, とつげき東北, 科学する麻雀, 講談社現代新書
[3] http://games.t-akiba.net/sf2/diagrama.html
[4] 2008, zako, 雑魚のwesnoth戦術論, 雑魚の日記