ポケモンバトルにおける確定数の新たな概算方法の提案(導出)
2017年5月26日 ゲーム先のブログで確定数を足し算引き算だけで概算する方法を示したが、それの数学的思考を示す。
Lv50戦で、攻撃ステの実値がaのポケモンAが防御ステ実値dのポケモンDにタイプ一致威力110の技で与えるダメージDmgは以下の式で求められる。
Dmg = ((22×110×a) / (50×d) + 2)×1.5 = (363a)/(5d)+3
※実際にはこれにダメージ乱数(0.85~1.00)をかけるが今は1.00とする
ポケモンAがポケモンDを倒すのに必要な攻撃回数nはポケモンDのHPをこのダメージDmgで割ってやればよい。
例によって+3の項は十分無視できるとし、HPをhすると、
n = h/Dmg = h/{(363a)/(5d)} = (5hd)/(363a) … ①
とあるポケモンVのHP、攻撃ステ、防御ステがそれぞれ、p,q,rとする。
この時、ポケモンVはポケモンVを1回の攻撃で倒せるとすると、①式に代入して
n = (5pr)/(363q) = 1 … ②
が成り立つ。②から、①式は以下のように変形できる
n = (5hd)/(363a) = {(5pr)/(363a)}×{(5hd)/(363q)}
この時、①より{(5pr)/(363a)}はポケモンAがポケモンVを倒すまでの攻撃回数を、
{(5hd)/(363q)}はポケモンVがポケモンDを倒すまでの攻撃回数を表す。
つまりこれは、以下の情報が分かっていれば「ポケモンAはポケモンDを何回の攻撃で倒せるか」がわかることを示している。
・ポケモンAはポケモンVをx回の攻撃で倒せる
・ポケモンVはポケモンVを1回の攻撃で倒せる
・ポケモンVはポケモンDをy回の攻撃で倒せる
代表となるポケモンVは②が満たせればなんでもよい。
例えば、ここでは私の嫁のビビヨン(p=156, q=155, r=72)で考える。
ポケモンAがポケモンV(ビビヨン)を倒すのに必要な攻撃回数nAは
nA = {(5pr)/(363a)} = 18720/(121a) … ③
ポケモンV(ビビヨン)がポケモンDを倒すのに必要な攻撃回数nDは
nD = {(5hd)/(363q)} = (hd)/11253 … ④
になる。
要するにある代表ポケモンを1匹定め、それぞれが代表ポケモンに対する攻撃回数nA,nDで火力、耐久指数を種族値の代わりに覚えておけば対戦中に1回の四則演算で必要な攻撃回数を求められるという事だ。
ただ、この時、実数の掛け算が生じる。計算の早い人ならすぐ出来るかも知れないが私はやりたくない。
そこでこれを足し算引き算で表せるように対数を取る。この時の底は、「2の7乗根」とした。
この「2の7乗根」は2乗するとおよそ1.2、3乗するとおよそ1.3、4乗するとおよそ1.5というポケモンで多く使われる数字に近似する特性がある。
上記の式③、④の対数を取り整理するとそれぞれ以下の式⑤、⑥が得られる
log(nA,2^(1/7)) = log(18720/(121a),2^(1/7))=7*log(18720/(121a))/log(2) … ⑤
log(nD,2^(1/7)) = log((hd)/11253,2^(1/7))=7*log((hd)/11253)/log(2) … ⑥
これが評価値となる。
例えばカプ・テテフの場合Cについて無振りの場合150、極振りの場合182になる。
これを上記の式⑤、⑥に代入するとそれぞれ-0.31、1.64という数字が得られる。
これを防御側の値と攻撃側の値を加算して0になれば攻撃回数が1回ということになる。
使用に際して0.5刻み程度で丸めた方がいいかもしれない(-0.31→-0.5、1.64→1.5)
また、この時火力については実値が高いほど小さな数字が出て感覚的ではないので-1をかけた方がよいかもしれない。
Lv50戦で、攻撃ステの実値がaのポケモンAが防御ステ実値dのポケモンDにタイプ一致威力110の技で与えるダメージDmgは以下の式で求められる。
Dmg = ((22×110×a) / (50×d) + 2)×1.5 = (363a)/(5d)+3
※実際にはこれにダメージ乱数(0.85~1.00)をかけるが今は1.00とする
ポケモンAがポケモンDを倒すのに必要な攻撃回数nはポケモンDのHPをこのダメージDmgで割ってやればよい。
例によって+3の項は十分無視できるとし、HPをhすると、
n = h/Dmg = h/{(363a)/(5d)} = (5hd)/(363a) … ①
とあるポケモンVのHP、攻撃ステ、防御ステがそれぞれ、p,q,rとする。
この時、ポケモンVはポケモンVを1回の攻撃で倒せるとすると、①式に代入して
n = (5pr)/(363q) = 1 … ②
が成り立つ。②から、①式は以下のように変形できる
n = (5hd)/(363a) = {(5pr)/(363a)}×{(5hd)/(363q)}
この時、①より{(5pr)/(363a)}はポケモンAがポケモンVを倒すまでの攻撃回数を、
{(5hd)/(363q)}はポケモンVがポケモンDを倒すまでの攻撃回数を表す。
つまりこれは、以下の情報が分かっていれば「ポケモンAはポケモンDを何回の攻撃で倒せるか」がわかることを示している。
・ポケモンAはポケモンVをx回の攻撃で倒せる
・ポケモンVはポケモンVを1回の攻撃で倒せる
・ポケモンVはポケモンDをy回の攻撃で倒せる
代表となるポケモンVは②が満たせればなんでもよい。
例えば、ここでは私の嫁のビビヨン(p=156, q=155, r=72)で考える。
ポケモンAがポケモンV(ビビヨン)を倒すのに必要な攻撃回数nAは
nA = {(5pr)/(363a)} = 18720/(121a) … ③
ポケモンV(ビビヨン)がポケモンDを倒すのに必要な攻撃回数nDは
nD = {(5hd)/(363q)} = (hd)/11253 … ④
になる。
要するにある代表ポケモンを1匹定め、それぞれが代表ポケモンに対する攻撃回数nA,nDで火力、耐久指数を種族値の代わりに覚えておけば対戦中に1回の四則演算で必要な攻撃回数を求められるという事だ。
ただ、この時、実数の掛け算が生じる。計算の早い人ならすぐ出来るかも知れないが私はやりたくない。
そこでこれを足し算引き算で表せるように対数を取る。この時の底は、「2の7乗根」とした。
この「2の7乗根」は2乗するとおよそ1.2、3乗するとおよそ1.3、4乗するとおよそ1.5というポケモンで多く使われる数字に近似する特性がある。
上記の式③、④の対数を取り整理するとそれぞれ以下の式⑤、⑥が得られる
log(nA,2^(1/7)) = log(18720/(121a),2^(1/7))=7*log(18720/(121a))/log(2) … ⑤
log(nD,2^(1/7)) = log((hd)/11253,2^(1/7))=7*log((hd)/11253)/log(2) … ⑥
これが評価値となる。
例えばカプ・テテフの場合Cについて無振りの場合150、極振りの場合182になる。
これを上記の式⑤、⑥に代入するとそれぞれ-0.31、1.64という数字が得られる。
これを防御側の値と攻撃側の値を加算して0になれば攻撃回数が1回ということになる。
使用に際して0.5刻み程度で丸めた方がいいかもしれない(-0.31→-0.5、1.64→1.5)
また、この時火力については実値が高いほど小さな数字が出て感覚的ではないので-1をかけた方がよいかもしれない。
コメント