fc2ブログ

徒然なる雑記

若葉研究所管理人の雑記。 主にゲームポケットモンスターについて語られます。

役割解析

というわけで年の最後にやってようやく活動を見せた駄目サイト管理人です。
話題は「役割解析」です。
…という名のついたただの役割理論の解説です;w
ただ、形として存在する元々の役割理論(セキエイジム様やVロード様にあるような役割理論)とは、
ちょっと見た目が変わってしまったために、
そのまま名前を使ってしまうと偉大なる先人達に失礼ではなかろうかと思いまして…。
また、言葉としての『役割理論』が持ってしまった意味を
とりあえず忘れていただきたかったからという理由もあります。
なので、今回はもったいぶった割には役割理論を理解されている方には
特に真新しい話ではないかもしれません;
書きたいことを全部書き上げたかったのですが、私には難しくて全く間に合わなかったので、
すみませんが一部のみの暫定公開となります;
ともあれ、楽しんでいただけたらと思います。

では、続きを読む、からご覧下さい。




対戦に勝つためには。
・味方が相手を倒せること
・味方が相手を倒す前に相手に倒されないようにすること
この2つが条件であるとされています。
対戦とは、基本的にこの条件を満たすために2人の対戦者が動きます。
しかし、これだけを示されただけではどうすればよいのか見当は付け難いでしょう。
何故なら、対戦というのは直感的に仕組みが分からないほど複雑であるからです。
となると、対戦の仕組みを知るための何かしらの"道具"が必要となってきます。
その"道具"の一つが『役割』です。
即ち、『役割理論』とは、「役割を用いて対戦を理解するための理論体系」であり、
これから行う役割解析とは役割理論に基づいた対戦の解析、ということになります。
(※サイトにおいてある「役割理論」の内容では、役割理論を"戦い方"としてしまっていますが、
  戦い方であるとすると意味が狭まってしまうことが分かりましたので、
  このように理解を改めることにしました。
  「役割理論」を読んで参考にしてしまった方は申し訳ありません;
  ただ、「役割理論」の方も間違っているわけではありませんので、
  こちらも読まれている方がここから先読みやすいかと思います。)

この文章は、「役割理論」「決定力」を読まれていることを前提としていますが、
そうでない方にも伝わるように努力しているつもりです。
もし興味があれば以上のテキストも読んでいただけると。



1.基本的な解析 ~攻撃わざのみの系~
2.役割の強化 ~回復を含んだ系~
3.様々な解析 ~その他、補助わざ等を取り扱った系~
4.役割の重複と間接役割破壊
(※今回は1のみです)


--------------------------------------------------


1.基本的な解析 ~攻撃わざのみの系~

1-1 2vs2の各ポケモンに攻撃わざ1つの場合

ではまず、最も簡単な系として、2vs2の各ポケモンが1つだけわざを持った場合の対戦を解析してみます。
一般論で展開しても面白くないでしょうから、具体的な例を見ながら解析を進めてみたいと思います。
 ポケモン名HPこうげきぼうぎょとくこうとくぼうすばやさわざ1
1Pジュカイン1469486156106188リーフブレード
ハガネール182150220678551アイアンテール
2Pヘラクロス1561949554115137メガホーン
スターミー16785105121105183なみのり

「ジュカイン&ハガネール」対「ヘラクロス&スターミー」という対戦。
この対戦がどのようになっているのか、分かりますか?

ではまず、解析に必要な準備として、ダメージ計算をする必要があります。
ダメージ計算とは、おおまかに、
ダメージ=((威力*こうげきorとくこう*(Lv*0.4+2))/ぼうぎょorとくぼう/50+2)*タイプ相性補正*乱数/100
で計算されるものです。
詳しくは各情報サイトで調べてみるとよいでしょう。
ではそれに従ってダメージ計算をしてみましょう。
 攻撃を受ける側
ジュカインハガネールヘラクロススターミー





ジュカイン  32~27
(29)
140~119
(129)
ハガネール  106~90
(98)
48~40
(44)
ヘラクロス362~307
(334)
36~30
(33)
  
スターミー36~30
(33)
182~154
(168)
  
手動で計算したものなのでもし間違っていたら指摘していただけると。
()内の数字はダメージの最大値と最小値の中央値の小数点以下切捨ての値です。
本当は16通りのダメージの平均値を取るのがよいのでしょうが面倒なのでw
恐らくこれでもほとんど差は出ないと思われるので、解析にはこの()内の数値を用います。

さて、ここからが『役割』の出番です。
このままでは対戦がどのように進んでいくのかが分かりません。
そこでまず、お互いのポケモンが1体づつ対峙した時にどのような結果になるのか考えてみます。
そうすると、
「1Pジュカインvs2Pヘラクロス」は「ヘラクロスが勝利」し、
「1Pジュカインvs2Pスターミー」は「ジュカインが勝利」し、
「1Pハガネールvs2Pヘラクロス」は「ハガネールが勝利」し、
「1Pハガネールvs2Pスターミー」は「スターミーが勝利」する、
という結果になると考えられます。
この時、これらの勝利は全て同じものかと言いますと、それは少し違います。
何が違うのかと言いますと、勝利した側は敗北した側のHPを0にしているのは違いありませんが、
その敗北した側のHPを0にする間に変化する勝利した側のHPに差があります。
つまり、勝利した側が勝利するまでの間に受けるダメージ(費やしたHP量)に違いがあるということです。
では、この「勝利した側が勝利するために必要とするHP量」を『潰しコスト』とでも呼んでみましょうか。
上で行ったダメージ計算を元に(初期)潰しコストを表してみると、
ジュカイン←ヘラクロス 29
ジュカイン→スターミー 33
ハガネール→ヘラクロス 66
ハガネール←スターミー 44
となります。
矢印の根元が払う側、矢印の先が払われる対象、です。「(払う)→(払われる)」
以下同様の表現法をさせていただいてます。
「(初期)」と書いている理由は後ほど説明させていただきます。
コストという表現をしたのは、
「このコストを払うことができればこのポケモンに勝利できる」という意味を持たせたかったからです。
つまり、例えばヘラクロスはHPが満タンの状態では29のコストを払うことができるために
相手のジュカインに勝利することができますが、
そのヘラクロスも残りHPが29以下であるとコストを払おうとすると0以下になってしまうために、
相手のジュカインに勝利することができない、ということになります。
ただし、これは相手が「(初期)」の状態の場合に限ります。

しかし、これだけではまだ対戦は掴めません。
何故なら、今考えている系はお互いにポケモンは2体づつ居り、
「交代」という行動が選択肢にあるからです。
1Pがジュカインを場に出していて、2Pが場にヘラクロスを出していると、
1P側はジュカインが負けると分かっているのにジュカインを出したままにはせず、
2Pのヘラクロスに勝つためのハガネールを交代で出す、
という対戦者が勝つための条件を満たすためにする行動のためです。
となると、この場合1Pのハガネールは2Pのヘラクロスに対して、
「交代で出してから勝利する」ことを義務付けられるわけです。
逆に言えば、「交代で出してから勝利する」ことができなければ交代で出す意味がありません。
(厳密に言えば「勝利」という結果を残せなくても交代で出すという行動にも意味がある場合があるのですが、
 2vs2でさらにそれぞれ1つのみの攻撃わざしか持たないごく簡単な系ではこう考えてもよいでしょう。)
したがって、1Pがジュカインを交代してハガネールを出すかどうかは、
ハガネールが「交代で出してから勝利する」ことができるかどうかによって決まると考えられます。
ここで先に挙げたコストという表現が生きてきます。
つまり、ハガネールが何らかのコストを払うことができた時、
1Pはジュカインを戻してヘラクロスの前にハガネールを出すことをする、ということになります。
ではその何らかのコストとは一体どのようなものなのか。
まず1つには、先ほど上げた「潰しコスト」が必要です。
これがないとまず勝利することもできませんから。
次に、「交代」という行動をした時には、相手は普通に行動が可能であるために、
その時に交代で出たポケモンはダメージ等の被害を受けることになります。
この簡単な系の場合は、即ち相手の場に居るポケモンから1回分のダメージを受けることに相当します。
このダメージを受けてHPが0にならなければ交代から出せるということになり、
このような「交代から場に出る時に必要なHP量」を『受けコスト』と呼んでみましょう。
ダメージ計算を元に同じように(初期)受けコストを表してみると、
ジュカイン→ヘラクロス 334
ジュカイン←ヘラクロス 29
ジュカイン→スターミー 33
ジュカイン←スターミー 129
ハガネール→ヘラクロス 33
ハガネール←ヘラクロス 98
ハガネール→スターミー 168
ハガネール←スターミー 44
となります。
コストそのものは実際に払える(払う)かどうかは問題ではないので全ての組み合わせについて計算されます。
そして、交代から出すにはこの「受けコスト」も支払えなければなりません。
したがって、交代から出して勝利するために必要な何らかのコスト、とは、
この2つのコストを合わせたものであるということが言えるでしょう。
このような「交代から出て相手に勝利するために必要なHP量」を『流しコスト』と呼ぶことにします。
定義に従うと、「流しコスト」=「潰しコスト」+「受けコスト」であるので、
それぞれの(初期)流しコストを表してみると、
ジュカイン←ヘラクロス 58
ジュカイン→スターミー 66
ハガネール→ヘラクロス 99
ハガネール←スターミー 88
となります。
受けコストはそれぞれの逆の矢印の場合にも算出されますが、
潰しコストがこの逆の矢印の場合に算出されないので、流しコストもこのような結果になります。
算出されないと言うよりは、払えない値である、とした方が正確かもしれません。

今計算された3つのコストについて纏めてみましょうか。
 コストを払われる対象
ジュカインハガネールヘラクロススターミー






ジュカイン  潰 -
受 334
流 -
潰 33
受 33
流 66
ハガネール  潰 66
受 33
流 99
潰 -
受 168
流 -
ヘラクロス潰 29
受 29
流 58
潰 -
受 98
流 -
  
スターミー潰 -
受 129
流 -
潰 44
受 44
流 88
  
上から順に、(初期)潰しコスト、(初期)受けコスト、(初期)流しコスト、です。

すると、対戦を以下のように捉えることができるのではないでしょうか。
お互いのあるポケモンが対峙した場合、
潰しコストの払えるポケモンの側はそのまま場に残って行動をし、
潰しコストの払えないポケモンの側は、
その相手のポケモンに対して流しコストの払えるポケモンが居れば交代をし、
居なければそのまま場に残って行動をする。
こうすると、もし交代が起こった場合は次のターンは潰しコストを払える側が逆転し、
そのターンにおいては反対側のプレイヤーが交代の選択肢を迫られます。
そしてそのターンに交代が起こった場合はまた潰しコストを払える側が逆転し…
とこのように、対戦の流れを掴むことができるようになりました。

ではこの対戦の流れを作っているものは何か?
それは、「潰しの判定」と「流しの判定」です。
この2つを把握することによって対戦を掴むことができる、すなわち解析可能になるのです。

そして、それを分かりやすくポケモン単位で考えたものが『役割』です。
ヘラクロスはジュカイン潰しの役割を持っているからジュカインと対峙した時に残って行動する。
ヘラクロスはジュカイン流しの役割を持っているから
自分の場に居るポケモンがジュカインに潰される時に交代から場に出る。
そういう仕組みであると考えることができるわけです。
既に理解されているとは思いますが、『潰し』『流し』の定義について確認しておきましょう。
潰しあるポケモンに対して、1vs1で勝利できること、及びその役割
流しあるポケモンに対して、交代から出して勝利できること、及びその役割

それぞれのポケモンの役割を把握し対戦の流れを掴む、というのが『役割理論』であり、
この役割理論を利用して対戦を解析することが『役割解析』であるということです。

さて、役割理論の解説はほぼこれで終了したので、ここからは役割解析として、
実際にこの「ジュカイン&ハガネール」vs「ヘラクロス&スターミー」という対戦の解析をします。
準備はここまでで全て整いました。
各種(初期)コストの算出、対戦の流れの構成要素。
ではそれに則って対戦をシミュレートしてみましょう。
あと必要な入力は"お互いの先頭のポケモン"ですね。
まず「先頭がジュカインvsヘラクロスの場合」を考えてみましょう。
ただし、簡単のために、命中判定・急所判定・追加効果判定・特性等を考えないとします。
 
バトルシミュレート1 開始ジュカインvsヘラクロス
確率現象を全て排除したので、結果は一意的です。
同様に、「先頭がジュカインvsスターミーの場合」「先頭がハガネールvsヘラクロスの場合」
「先頭がハガネールvsスターミーの場合」も考えてみましょう。
 バトルシミュレート1 開始ジュカインvsスターミー
 バトルシミュレート1 開始ハガネールvsヘラクロス
 バトルシミュレート1 開始ハガネールvsスターミー
今までの話と少しだけ違うのは、「役割のなくなったポケモンは交代で引っ込めない」ということです。
現実的には確率現象(急所や追加効果発動)によって流しコストが払えても交代で出すことに失敗することがあるので、
この判断はごく一般的であると考えられるのですが、
「役割がなくなった」という判断が難しいのでここまでの話では省いてきました;
さて、この解析で分かるのは、
「ジュカイン&ハガネール」vs「ヘラクロス&スターミー」という対戦は、
「ジュカイン&ハガネール」側が勝利する、ということです。
いろいろ長々とやってきた割には解析結果がやけに簡単な形になったと思われる方もいらっしゃるかもしれませんが、
少なくともこの4体のステータスを与えられただけの時点ではどちらが勝つのかさえ分からなかったため、
この解析結果は大きな収穫であると言えると思います。
今回は全ての確率現象を排除したために勝利か敗北かの1か0かという結果にしかなりませんが、
確率現象も含めて解析を行った場合、どちらがどのくらい勝ちやすいか、
というように結果も確率で表されるようになるでしょう。

さて、この対戦の解析はこれで一段落ついたわけですが、
これらの対戦フローを見ていくらか得られる情報があります。
まず気付けるのは、どのログも結果は同じなのですが、
勝者の決まる最後のターンのお互いのポケモンも全て同じであるということです。
これは果たして偶然でしょうか。
次に、これは私が仕掛けたことなのですが、
何の説明もなく対戦フロー中に「(costdown)」「<limit>」という表記を加えました。
「(costdown)」は、対戦中に「そのポケモンに対して流し役割を持つポケモンの流しコストが下がった」、
「<limit>」は、「そのポケモンは流しコストを払えなくなった」ということを意味しています。
これはどういうことかを詳しく説明します。
「(初期)」という言葉を先述しました。
これは、「相手のHPが初期状態(満タン)の場合」を意味しているのですが、
対戦中には相手のHPが常に満タンであるとは限りません。
むしろ、それを減らし合うのが対戦なので、一般的に下がります。
とすると、ある程度下がると、例えば初期状態では2発攻撃を加えないと倒せなかった相手が
1発攻撃を加えるだけで倒せるようになる、などというように、
確定数が下がるという現象が起こります。
ポケモンを倒すのにターンが掛からなくなるということは倒す側が攻撃を受ける回数が減るため、
これは即ち「対戦中に潰しコストが下がる」ということを意味しているのです。
同様に、流しコストの定義から、「対戦中に流しコストが下がる」という現象もあります。
そうすると、今まで残りHPが足りなくて流しコストが払えず流しができなくても、
コストが下がることによってまた流しができるようになるという可能性が出てきて、
それは、流しをする回数が増える可能性があるということを表しています。
よって、各種コストは対戦中に変化するので、その動きに注意する必要があります。
流しをする回数、に関して具体的な話はもう少し後で。
また、流しコストが払えなくなったということは、
この後場から退くと、流しコストが下がらない限りもう流しはできないということを表しています。
(もう少し複雑な系ではこの状態から流しコストを下げる以外に流しをできるようにすることはありますが。)
そのような表記に注目してみると、
全ての対戦フローで一番最初に「<limit>」の表記が付くポケモンも同じであるということが分かるでしょうか。
具体的に言うなら、どの対戦フローでも必ず最初にスターミーに「<limit>」が付いています。
これは、2Pのスターミーが最初にもう流しのできない状態になる、ということを意味しています。
流しができなくなるとはどういうことか。
即ち、1Pハガネールvs2Pヘラクロスという状況になって、
ヘラクロス側が負けると分かっていても、もうスターミーを出すことができないので、
ヘラクロスはこのまま負けるしかなくなっている、ということです。
事実、スターミーに「<limit>」が付いた後にハガネールvsヘラクロスという構図になっても、
ヘラクロス側はそのまま倒されるを余儀なくされています。
(逆に、スターミーが流しコストを払えないのに場に出そうとすると、
 スターミーがハガネールを倒す前に倒される結果となります。)
ということは、対戦の結果は、
先に流しコストの払えなくなったポケモンが発生した方が負けると言えるのではないでしょうか。
ただし、正確に言えばこの後に流しコストが下がることによって再び流しコストが払えるようになることはありますが、
この対戦ではスターミーが流しコストを払えなくなる前に流しコストは下がりきっているので、
この後スターミーが再び流しコストを払えるようになることはありません。
「<limit>」が2Pの場に掛かった状態であるように見えるので分かり難かったかもしれませんが、
これらを統一的に表現するならば、「<limit>」は各ポケモンに掛かる状態で、
この状態が掛かったままで流しコストを払わねばならない必要に駆られた時、
その必要に駆られた側のプレイヤーは負ける、ということになるでしょう。

それでは、この対戦では何故全ての場合(先頭の組み合わせ4通り)において、
最初に「<limit>」の付くポケモンが同じであるのでしょうか。
ここで、ちょこっと先に出てしまいましたが、「流しの回数」ということを考えてみたいと思います。
流しの回数とは、対戦中にどれだけの回数流しコストを払うことができるかを表します。
では例えばヘラクロス(→ジュカイン)は2回流しコストを払うと58を下回るので
流しの回数は2回、でよいでしょうか?
ここで少し実戦に即した「流し」というものを考えてみると、
交代から場に出た後は、相手は潰されるようになってしまうため、
一般的には相手はそのまま潰されるのを待つのではなく、交代という行動に切り替えます。
そうすると、交代から出て相手が居なくなったので、これは「役割遂行」ということになるのですが、
この時、相手を潰しては居ないので結果的に潰しコストは払っていません。
言い方を変えてみると、相手が潰されてくれなかったので、
流しコストを払ったが、潰しコストが返ってきた、ということになります。
となると、1回の「役割遂行」に払うコストは、
相手がそのまま潰された場合と交代した場合とで異なって、
前者は流しコストを、後者は受けコスト((流しコスト)-(潰しコスト))のみを払うことになります。
話の展開上先に文章に出てきてしまいましたが、「役割遂行」について詳しく書くと、
「潰し」にしても「流し」にしても最終的に行っているのは「相手の場に居るポケモンを場から退かせる」ということです。
ただし、相手は勝つための条件を満たすために倒されるのを拒むため、
場から退かなければならないとしてもできるだけ「倒れる」よりも「交代して控えに戻す」を選択します。
しかし、その瞬間だけで考えると、相手の場に居たポケモンを場から退かせることには成功しているため、
これを「役割遂行」=「相手の場に居るポケモンを場から退かせること」と呼んでいます。
さて、そうすると流しコストを払うことのできる回数は役割遂行できる回数であると言えそうなのですが、
最終的に勝つための条件を満たすには「退かせる」のうち「倒す」ことが必要になってくるので、
1回は流しコスト("潰しコスト"+受けコスト)そのものを払わねばなりません。
逆に、潰しコストは1回払えばそれでもう払うことはなくなるので、
それ以外は受けコストだけ払えば役割遂行は可能です。
従って、流しの回数とは、
流しコストを1回払った上で受けコストを払える分だけ得られる、と言えるでしょう。
ややこしかったと思うので、一気に数式化してしまうと、
(流しコスト)×1+(受けコスト)×(n-1)<(払うポケモンのHP)
(潰しコスト)+(受けコスト)×n<(払うポケモンのHP)
を満たす最大の整数nが流しの回数ということです。
そして、初期状態での流しの回数を知りたければ
払うポケモンのHPを初期状態の数値を当てはめれば得ることができます。
例えば、ジュカインのスターミーに対する初期流し回数は、
33+33×n<146
n<3.42・・
より、3回である、ということが分かります。
では、この対戦における全ての流し役割について初期状態の流しの回数を計算してみますと、
ジュカイン→スターミー 3回
ハガネール→ヘラクロス 3回
ヘラクロス→ジュカイン 4回
スターミー→ハガネール 2回
となります。
そうすると、2Pのスターミーが最も流し回数が少ない、ということが分かります。
そして、4つの対戦フローを見てもう1つ気付くことがあります。
それは、先頭に置いたポケモンの違いにより順番こそは異なるものの、
4ターン単位で結局状況が同じであるということです。
これは、行動の定義により、4ターン単位で全てのポケモンが同じだけ流しをしたことを表しており、
つまり、4ターン単位で流しのできる回数は全てのポケモンで平等に減っていくのです。
そうすると、(コストが下がることを考えなければ、)
2Pのスターミーが4×2ターン後には全ての場合においてただ1人「<limit>」が掛かり、
それは即ち、2Pがその対戦において全ての場合において負ける、ということを表しているのです。
よって、最も少ない流しの回数しか持たないポケモンが居る方が負ける、とも言えるわけです。
ただし、これはコストが下がることを考えていません。
実際には、コストが下がると流しのできる回数は増えます。
事実、どの対戦フローでもスターミーは3回役割遂行をしています。
しかしながら、この対戦で考えると、
スターミーの役割のコストが下がる余地があると同時に、
ジュカインとハガネールにも役割の下がる余地があり、
スターミーの流しの回数が1回増えて「<limit>」が掛かるまでの間に、
ジュカインとハガネールもコストが下がって流しの回数が1回増えているために、
結局のところスターミーが最も流し回数の少ないポケモン、ということになるのです。

さて、これで分かることは、
対戦の結果を知るには、それぞれのポケモンの『役割』の回数に着目し、
それを比較することによって知ることもできる、ということです。

ちなみに、このように気になった方もいらっしゃるかもしれません。
最も少ない流しの回数しか持たないポケモンが異なるプレイヤーで1体以上づつ居たらどうなるか?
つまり、今の対戦ではたまたま2Pのスターミーのみが最も少ない流しの回数しか持たないポケモンでしたが、
1Pの方にもスターミーと同じだけの流しの回数しか持たないポケモンが居たらどうなるのか?ということです。
では試しにジュカインのすばやさを182と考えてみてください。
そうすると、ジュカインの(初期)潰しコストが66になって、流しの回数が2回となるはずです。
この状態で、対戦の解析をしてみるとどうなるでしょうか…?
結果は、先頭のポケモンによって異なる、です。
具体的には、先頭がハガネールvsスターミーの場合は2Pが勝利し、
それ以外の組み合わせが先頭だった場合は1Pが勝利します。
対戦フローで、どこでジュカインとスターミーに「<limit>」が掛かるか考えてみるとよいでしょう。
ここでは扱いませんが、最も少ない役割の回数しか持たないポケモンが同数居て
何故2P側の方が勝てる場合の数が少ないのか、考えてみるのも面白いかと思います。
これが掴めるようになると、この簡単な系で先頭のポケモンをどうすればよいのかが分かるようになってきます。


1-2 2vs2の各ポケモンに攻撃わざ2つの場合

次に、以下のような例の解析をしてみましょう。
 ポケモン名HPこうげきぼうぎょとくこうとくぼうすばやさわざ1わざ2
1Pジュカイン1469486156106188リーフブレードめざめるパワー(炎)
ハガネール182150220678551アイアンテールじしん
2Pヘラクロス1561949554115137メガホーンじしん
スターミー16785105121105183なみのりれいとうビーム
1-1での例にそれぞれのポケモンに攻撃わざをもう1つづつ持ってもらった場合です。

では同じようにまずダメージ計算から入りましょう。
 攻撃を受ける側
ジュカインハガネールヘラクロススターミー





ジュカイン  32~27
(29)
86~73
(79)
140~119
(129)
23~19
(21)
ハガネール  106~90
(98)
53~45
(49)
48~40
(44)
96~81
(88)
ヘラクロス362~307
(334)
50~42
(46)
36~30
(33)
80~68
(74)
  
スターミー36~30
(33)
98~83
(90)
182~154
(168)
61~51
(56)
  
上の数値がわざ1で攻撃した場合のダメージ、下の数値がわざ2で攻撃した場合のダメージです。
()内の数値は同じくダメージの最大値と最小値の中央値(小数点以下切捨て)を表しています。

次に、同じく各種コストの計算をしてみたいと思います。
ただし、今回は1-1と異なるのは、攻撃する側はただ攻撃するだけでなく、
攻撃をする時に2つの選択肢を持っているということです。
つまり、攻撃する時に2つの異なる結果を出せるのであれば、
攻撃する側はその最適な方を選ぶであろう、ということです。
そうすると、まず「潰しコスト」を考えますと、
ジュカイン←ヘラクロス
ジュカイン→スターミー
ハガネール→ヘラクロス
ハガネール←スターミー
という潰しの関係に代わりはないのですが、
お互いに"最適な行動"を取る、即ちできるだけ相手に多くのダメージを与えようとするのであれば、
例えばジュカインvsヘラクロスはヘラクロス側は最もダメージの大きいメガホーンを使うでしょうし、
ジュカイン側は最もダメージの大きいめざめるパワー(炎)を使うでしょう。
そうすると、(初期)潰しコストは以下のようになるでしょう。
ジュカイン←ヘラクロス 79
ジュカイン→スターミー 90
ハガネール→ヘラクロス 158
ハガネール←スターミー 88
潰しコストが上がっているのは、潰されるポケモンが潰すポケモンに対して
元々持っていた手段(わざ1)よりも大きな被害を与えられる手段(わざ2)を持っているからです。
このような、「元の状態よりも対象に大きなコストを課すこと」を「役割破壊」と呼びます。
この大きなコストを課す手段がわざによるものであればそのわざを「役割破壊わざ」と呼びます。
ただし、"元の状態"というものに厳密な定義がないため、
役割破壊の定義も曖昧なものになっているのですが、
この言葉自体は話の便宜のためのものに過ぎないので気にする必要はありません。
このように、課すコストは大きくできる、ということを理解していただければ。

次に「受けコスト」を考えてみましょう。
相手の交代際に相手に課すコストを大きくするためにわざ2を使う…
と言いたいところですが、それで済みそうにはありません。
一般的な場の状態を考えると、
2人のプレイヤーにはそれぞれ「わざ1を使う」「わざ2を使う」「控えと交代する」の3つの選択肢があります。
つまり、その場からプレイヤーの選択を入力した結果という出力は確率現象を排除した時3×3通りあります。
ここで、1Pが相手ポケモンを潰せる状態、2Pが相手ポケモンから潰される状態としましょう。
そうすると、1Pは相手を潰せるのだから少なくとも「控えと交代する」という行動よりも
「攻撃する」方が利益を得られるので「控えと交代する」は最適ではないと思われます。
(厳密に考えると「役割の重複」が有り得るのでこの行動が最適になることもありますが、
 とりあえずそれに関しては後ほど解説したいと思いますのでこの場は最適でないとします。)
ポジティブな選択の排除、と言えるでしょう。
それに対して、2Pは潰される状態であるため、
ただ潰されるのを待つだけの「わざ1を使う」という選択肢を選ぶこともないでしょう。
ネガティブな選択の排除、と言えるでしょう。
そうすると、お互いに最適になる可能性のある選択を入力した結果は、2×2通り、となります。
1Pは「わざ1を使う」か「わざ2を使う」、2Pは「わざ2を使う」「控えと交代する」。
さて、ここで注目していただきたいのは、
相手を潰せる状態である1Pのポケモンがわざ2を使った時、
相手から潰される状態である2Pのポケモンに与える被害(ダメージ)はいくらでしょうか。
これは、この例ではいずれもわざ1を使った時よりも小さな被害しか与えられません。
では、相手から潰される状態である2Pのポケモンがわざ2を使った時、
相手を潰せる状態である1Pのポケモンに与える被害はいくらでしょうか。
これは、当然ではあるのですが、交代した時よりも大きな被害を与えられます。
大体言わんとしていることを理解された方も多いでしょうが、
ここでこの場の状態に対する2×2の結果を表に表してみましょうか。
2P
わざ2を使う控えと交代する

わざ1

使う
1Pに大きな被害
2Pに非常に大きな被害
1Pにステータス的な被害なし
2Pに小さな被害
次ターン2Pが潰しに
わざ2

使う
1Pに大きな被害
2Pに小さな被害
1Pにステータス的な被害なし
2Pに大きな被害
次ターン2Pが潰しに?
こんなところでしょう。
ステータス的に被害はない、と書いたのは、
確かに1P側はダメージそのものは受けていないのでポケモン達のステータスには被害はありませんでしたが、
場が次のターンに、相手に潰されるようになる、という場的な被害は受けていると考えることもできるからです。
となると、2Pが「控えと交代」した時に得られる結果は、形は変わるが1Pも被害はあるということです。
さて、この4つの結果は、それぞれのプレイヤーにとってどれが好ましいでしょうか?
1Pにとっては、被害の差し引きで考えるのであれば"左上"の結果は好ましいと考えられます。
また、場的な被害は受けるものの相手にステータス的に大きな被害を与えられる"右下"も好ましい分類でしょう。
2Pにとっては、被害の差し引きから考えるのであれば"左下"の結果は好ましいと考えられ、
相手に場的な被害を与えるのにステータス的な被害を少量で済ませられる"右上"も好ましい分類と考えられます。
つまり、1Pは"左上"か"右下"の結果を、
2Pは"左下"か"右上"の結果を求めてその場での選択肢を決定すると思われる、ということです。
しかし、これを片方のみの立場で考えてみると、
どちらの選択肢を選んだとしても相手の選択肢が決定しない限り、
その結果が好ましいものであるか好ましくないものであるのかが分かりません。
即ち、このような結果の評価だけでは一意的に選択を決定できない、ということです。
そうすると、交代から出したポケモンは、
相手のポケモンから「わざ1を受ける」のか「わざ2を受ける」のかが分かりません。
よって、受けコストはこのままでは一意的に決まることはありません。
なので、仮に相手が「わざ1を使う」可能性と「わざ2を使う」可能性を状況に因らず一律で半々としてみましょう。
そうすると、(初期)受けコストの期待値(小数点以下切捨て)は、
ジュカイン→ヘラクロス 190
ジュカイン←ヘラクロス 54
ジュカイン→スターミー 61
ジュカイン←スターミー 75
ハガネール→ヘラクロス 53
ハガネール←ヘラクロス 73
ハガネール→スターミー 112
ハガネール←スターミー 66
となります。
すると、定義に従って(初期)流しコストは、
ジュカイン←ヘラクロス 133
ジュカイン→スターミー 141
ハガネール→ヘラクロス 211
ハガネール←スターミー 154
となります。

計算されたコストを纏めてみましょう。
 コストを払われる対象
ジュカインハガネールヘラクロススターミー






ジュカイン  潰 -
受 190
流 -
潰 90
受 61
流 141
ハガネール  潰 158
受 53
流 211
潰 -
受 112
流 -
ヘラクロス潰 79
受 54
流 133
潰 -
受 73
流 -
  
スターミー潰 -
受 75
流 -
潰 88
受 66
流 154
  
上から順に、(初期)潰しコスト、(初期)受けコスト、(初期)流しコスト、です。

さて、ではこの解析をしてみるとどうでしょう。
頭の中でできるほど簡単なので1-1と同じ方法で対戦をシミュレートしてみてください。
恐らくこういう結果が出るのではないでしょうか。
先頭ジュカインvsヘラクロスの場合―2Pが勝利する
先頭ジュカインvsスターミーの場合―2Pが勝利する
先頭ハガネールvsヘラクロスの場合―2Pが勝利する
先頭ハガネールvsスターミーの場合―2Pが勝利する
要するに2Pが勝利する。
ここまでの話からすると当然の結果ではあります。
流しの回数、というものを考えた場合、
ジュカイン→スターミー 1回
ハガネール→ヘラクロス 0回
ヘラクロス→ジュカイン 1回
スターミー→ハガネール 1回
となり、流しの回数の最も少ないポケモンを含む1Pの方が負けやすいのでしょうから。
一応、ハガネール(→ヘラクロス)にはコストの下がる余地があり、
ヘラクロス(→ジュカイン)にはコストの下がる余地がないため、
最終的な流しの回数が1Pハガネールと2Pヘラクロスで同じになる可能性はあるのですが、
ヘラクロスがジュカインを1回流した時にハガネールのコストが下がらなかったため、
結局のところハガネールが流しの回数が最も少ないポケモンであるわけです。
ここで、こう思われるかもしれません。
上の方で各ターンのお互いの行動は一意的には決まらないとしているのに
この解析では一意的に決定してしまっているではないか、と。
例えば、この方法では残りHP130のジュカインは流しコストが払えないので
場がハガネールvsHP満タンスターミーだったとしても交代で出せない、という状況。
ここで交代でジュカインを交代で出したとすると、
スターミーがわざ2(れいとうビーム)を使った場合は確かにHPが保たないので
ジュカインはこの状況で流しが行えない、とすることができますが、
スターミーがわざ1(なみのり)を使った場合はわざ2(れいとうビーム)を耐えられるだけの
HPが残るので流しが成立するから交代で出てもよいではないか、と。
ここで考えていただきたいのは、"確率"という言葉の持つ意味です。
確率とは、事象の起こる可能性を度合いを示しており、
その事象の確定を表しているというわけではないということです。
すなわち、逆に言えば流せるかもしれないけど、流せないかもしれない、と。
そうすると考えるのは「流せる」ことの方が多いのか「流せない」ことの方が多いのか。
ここでもし流せることの方が多いのであればそちらが"最適"な判断でしょうし、
流せないことの方が多いのであればそちらが"最適"な判断、と言えるのではないでしょうか。
確率・期待値にした時、事実と照らし合わせるには、その試行を無限回数行う必要があります。
なので、ただ1回だけの対戦に関して議論する意味はなくなっているのです。
よって、受けコストを期待値にして扱うということは、
どちらが最適かを計るためという意味なのです。
なので、結果も"2Pが勝つ"としてしまいましたが、それも確率的な話です。
つまり、"2Pの方が勝ちやすい"という結果であると言うのが正しいでしょう。
曖昧ですが、これも1-1同様大きな収穫であると私は考えます。

さて、この解析結果は、「潰しとなる側がわざ1とわざ2を半々の確率で使う」という仮定の下です。
つまり、このわざ1とわざ2を使う確率が異なれば違う結果解析結果が出るのではないか、と。
(※実際に確かめたわけではないのですが、わざ2を使う確率を非常に大きくすると、
  ヘラクロスがジュカイン流しを1回行った時にハガネールのヘラクロス流しに関するコストが下がるため、
  結果的にハガネールとヘラクロスの流し回数が同じになって
  先頭のポケモンの組み合わせによって結果が異なってくると思います。)
そうすると、仮定である「わざ1とわざ2を使う確率」は、
でたらめに代入できるものではないということになります。
つまり、何かしらこの確率を決める手法も適切なものが必要であるということです。
例えば、今半々としたのは、上に示したある状況におけるお互いの行動に対する2×2の結果にあるように、
一律でそのプレイヤーにとって好ましい結果を1、好ましくない結果を0とした時に、
どちらの行動でも得られる期待値が0.5で等しいために半々としました。
しかし、例えばヘラクロスのわざ2がかわらわりだったとすると、
ハガネールに対してもジュカインに対しても十分大きい被害を与えられるために、
この時わざ1とわざ2を使う確率はかなりわざ2の方が大きいと見積もらないといけないでしょう。
そのような見積もりをきちんと確率として出すにはどのようにしたらよいのか。
まず簡単なもので考えられるのは、今のように刹那的にその状況における結果から考えて
その時の行動の実行可能性を決める場合です。
この方法では比較的簡単に(その状況限りですが)確率が求められそうです。
ただし、今の例ですと結果が0と1と、かなり簡略化されてしまっており、
本当に結果が0か1かで決められるものであるのかどうかに疑問が残ります。
もう1つ、今の方法よりも厳密になりそうなのが、
その状況の結果に限らず、その後のそれぞれの状況も全て含めて、
その末尾の結果の勝利(1)か敗北(0)かを数え上げてその比率によって行動確率とする、という方法です。
お互いの選択ごとに分岐する樹形図のさきっぽの1と0を数える、という意味です。
勝利と敗北ならこれほど明確な結果はないので、0か1かというデジタルな仮定が可能であると思います。
ただし、この場合の問題は、とても人間の手で解析ができなくなるということです。
このような簡単な系でも1ターンにつき3×3(簡素化すると2×2)の結果が出てしまうので、
それが十数ターン続いただけで何十億もの"0"と"1"を扱わねばならないためです。
いずれにせよ、この仮定をできる限り正しく置かないと解析は信用のいく結果にはならない、ということです。


これで1.基本的な系の解析は終わりたいと思います。



--------------------------------------------------

とりあえず今回はここまでです。
と言いますか、今年中にはここまでしか間に合いませんでしたorz
新しい年に向けて何も活動のないサイトというのはどうかと思って急いで閲覧に耐えられるところまで書いたのですが、
結局この程度しか書けていないのであればあまり意味はなさそうですね;w
本当は2.役割の強化、という話までは最低したかったのですが…
と言いますのは、この「役割解析」を書き始めたそもそもの理由がいくらかここにあるからです。
時々、『役割理論』が「受け戦略」と混同されていることがあります。
それは、ひとつの原因として、役割理論確立当時にとって「受け」という概念が非常にセンセーショナルであったため、
役割理論より「受け」の概念が先走りしてしまい、
このような混同が起こってしまったのではないかと個人的に推測しています。
そもそも「受け」役割は、「たくさんある役割の中の1つの例」として挙げられていただけのはずなのですが。
そのため、「受け戦略」はルビサファ以降の対戦に合わないということで、
混同されて役割理論もある程度淘汰されてしまったのではないかと思います。
しかし、この2.役割の強化、では、「受け」の役割が
(全体と比較して)かなり特殊な役割である
ということを謳っているため、
「役割理論」≒「受けに関する戦略」という認識を打ち壊せるのではないかと考えていました。
「受け」は「"役割"理論」のほんの一部の切片であるということを主張したかったのです。
「役割理論」と「受け戦略」が混同されていますが、
「理論」と「戦略」と言うように、それ自体は「E=mc^2」と「おいしい野菜の見分け方」くらい違います。
(そもそも「受け理論」は、対戦が「決定力の保障」が可能(「受け性能」の保障が不可能)であることから、
 自己のうちに矛盾を含む不完全な戦略であるように思われます。)
とまぁいろいろ言えるのも私も過去に同じような誤解をしていたためですが;
何か私がこの記事で役割理論以上のものを作り上げようとしているように見えるかもしれませんが、
もう一度言いますと、この役割解析は役割理論を言い換えてみただけに過ぎません。
「役割理論」で解説されているのは、「基本的な役割(潰しと受け)」と「回復の重要性」と「間接役割破壊」ですが、
この「役割解析」でも上の方の目次にあるように説明しようとしているのはそれだけなのです。
(見た目補助わざ等を含んだ系が何に該当するのか分かりにくいかもしれませんが、
 役割理論における基本的な役割・間接役割破壊でそれは説明できています。)
なので、本当はこの記事のタイトルを「再構築役割理論」にしようと思っていました。
ただ、役割理論の名を冠するのは前置きに書いたような理由でとりあえず避けてみました。
あと、何か新しそうなタイトルがついていると人目を惹くかなーとw
もちろん、今までの「役割理論」にとって代わるものを作ろうとしているわけでもありません。
金銀対戦界では「受け」がそれほど特殊な役割ではなかったために、
元々の「役割理論」では「潰し」と「受け」を紹介すればよかったのです。
(※ちなみに、この「役割解析」では結果的に「潰し」と「流し」を紹介していることになりますね。)
(※することすら失礼かもしれない蛇足ですが、「潰しコスト」の"潰し"は役割理論で言う「潰し」とほぼ同じですが、
  「受けコスト」の"受け"は役割理論の「受け」とは意味が異なるので注意してください。)
過去の方々は凄いですね。
役割理論自体は非常に簡素な理論体系なので、
今のところどの世代の「ポケットモンスター」の対戦にも適用可能な他、
ある程度のカードゲームやボードゲームなどにも適用できる可能性があります。
この「役割解析」は、その具体的な適用例、といったところでしょうか。

ただ、私はどちらかというと、世のため人のため、よりも自分本位の人間なのでw、
それだけのためにこんな奇妙な文章は仕上げようとはしません。
私が役割理論に拘る理由、それは、昨年の最後の雑記にあるようなことのためです。
つまり、役割理論は「最強のパーティ」に欠かせないものであると考えているからです。
それはどういうことかと言いますと、
「最強のパーティ」を作るプロセス(と言いますか、「最強のパーティ」の定義)の中に、
お互いのパーティの構成要素による勝率の算出、というものがありました。
これは、まさに今やってきた解析ではないでしょうか?
この役割解析では、対戦の構成要素を定義して流れを把握することで
2つのパーティ間のどちらが勝ちやすいかを求めることができました。
(具体的な勝率を求めるまでには至っていませんが;)
では、これを7千兆の6乗×2通り全て行えば、
その定義での「最強のパーティ」というのは求まるのではないでしょうか?

もう1つ、今回の話の重要なポイントは、
この解析手法により、コンピュータで対戦の記述が可能になった、と言えそうな気がします。
つまり、プログラムにして解くことが可能であると思うのです。
…と口で言っても分かり難いと思われたので、
急遽、協力を得ながら実際にプログラムを作ってみました。
そのソースコードです。
少し古い言語で申し訳ありません;
もしコンパイルできるという方がいらっしゃれば実際に実行してみてください。
あまりプログラミングに慣れているというわけでもないのでかなり稚拙な内容ですが;
とりあえず、1-1の場合のプログラムです。
HPを0で止めることもできていなかったり、
実際の挙動と違って役割のなくなったポケモンを引っ込めるという行動をしてしまっていたり、
コストダウンの判断の部分をサブルーチン化に失敗して10回も同じような文が続いたり;w
ちなみに、ところどころコメントアウトされているwrite文は
ただの製作中における出力の確認をしたかっただけのものなので気になさらず。
ともかく、実行してみるとこういう出力結果になると思います。
見て分かったと思いますが、上の方であった対戦フローはこれで作ったものを弄っただけですw
楽をさせていただいた…というものの裏に、
あれがプログラムで作ることができる、ということを実践できたのではないかと思います。
入力を外部ファイルにしているのですが、
ダメージ計算の過程が一般化されておらず、この対戦に依存しているので実は無意味です;
ただ、これだけでもジュカインをすばやさを弄って
流しの回数を同じにしてみたら~という解析はできます。
ジュカインのすばやさを182にした時の出力結果
ハガネールvsスターミーの場合のみ結果がplayerBの勝ちであるということが確認できるでしょうか。
後はダメージ計算のサブルーチンを一般化できれば
このプログラムで簡単な系は解析可能であると思います。


要するに、今回の記事で言いたかったことは、
私は目標に向かって少しづつ進んでいますよーという報告ですw
思ったより長くなってしまいましたが、
ここまで読んでいただき、ありがとうございました。
もし興味を持たれたならば、意見をいただけると非常にありがたいです。


では、よいお年を。


※急いで加筆
潰しコストを、勝利した側が勝利するために必要とするHP量、としましたが、
よく考えてみたらこれも受けコストと同じように払えるか払えないかは関係なく、
それが払えれば潰し、払えなければ潰せない(潰される)なので、
相手のHPをゼロにするために必要とするHP量」とした方がよかったですね。
そうすると、例えばジュカイン←ヘラクロスは29でジュカイン→ヘラクロスは1670となり、
初期状態ではヘラクロス側が払えるのでヘラクロスとなりますが、
ジュカインヘラクロス共に残りHPが1だとすると、
ジュカイン←ヘラクロスは29でジュカイン→ヘラクロスは0になるので、
払えるジュカイン側が潰しになる、ということになります。
こうすれば、試しに作ったプログラム中にwhichisbreaker関数を作りましたが、
潰しコストの動きを辿るだけで潰しかそうでないかは判別付けられたので、
このサブルーチンは必要ありませんでしたね。
潰しコストの定義が変わるので、潰される側の潰しコストも
999でなく適切な数値で出せるようにしなければなりませんね。
スポンサーサイト



  1. 2006/12/31(日) 12:00:00|
  2. 未分類
  3. | トラックバック:0
  4. | コメント:0
<<新年 | ホーム | >>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://vento.blog3.fc2.com/tb.php/127-0f5b26ce
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

若葉みどり

最近の記事

最近のコメント

最近のトラックバック

月別アーカイブ

カテゴリー

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

RSSフィード

リンク

このブログをリンクに追加する