孵化厳選確率計算機
ウェブアプリクリエイターのhektです。タイトルのようなものを作ってみました。
何をするものかというと、ポケモンBWにおいて、特定の個体値を持つポケモンを親としたときに、特定の範囲内の個体値を持つ子が生まれる確率を計算するものです。UIは全力でLeopardをパクりました。
たとえば、31-31-12-25-29-20の父親と、31-9-25-29-19-31でパワーアンクル(素早さ固定)を持った母親から、31-31-[20〜31]-[0〜31]-[20〜31]-31の子が生まれる確率はいくつか、というような計算ができます。
現状では指定できるのは、特性を計算に含めるか、性格を含めるか、その場合変わらずの石を持たせるか、というくらいですが、そのうち特定のめざパを指定できるようにもしたいところです。あとは3種類(以上)の特性を持つ夢特性の親から特定の普通特性が産まれるパターンとか。(夢特性の遺伝確率はいまいちよくわかりませんが)
確率計算のアルゴリズムは間違っていないと思うのですが、なにぶん浅学なものでちょっと自信がありません。明らかに変な数値が出る場合もあるかもしれないし、そうじゃなくても微妙に違うかもしれません。なにせ結果から正確さが判るものではないですしね。
なので、目安程度にご利用下さい。
参考までに、計算の一例を示しておきます。先ほど例としてあげた場合の計算です。
- HAS遺伝: 2 * 12(B) * 32(C) * 12(D) = 9,216
- HBS遺伝: 2 * 1(A) * 32(C) * 12(D) = 768
- HCS遺伝: 22 * 1(A) * 12(B) * 12(D) = 576
- HDS遺伝: 2 * 1(A) * 12(B) * 32(C) = 768
- ABS遺伝: 1 * 1(H) * 32(C) * 12(D) = 384
- ACS遺伝: 2 * 1(H) * 12(B) * 12(D) = 288
- ADS遺伝: 1 * 1(H) * 12(B) * 32(C) = 384
- BCS遺伝: 2 * 1(H) * 1(A) * 12(D) = 24
- BDS遺伝: 1 * 1(H) * 1(A) * 32(C) = 32
- CDS遺伝: 2 * 1(H) * 1(A) * 12(B) = 24
これは、どの能力が遺伝したかによって場合分けして、それぞれ取り得るパターンを計算しています。最初のHAS遺伝のパターンだと、Bは20〜31の12段階、Cは0〜31の32段階、DもBと同じように12段階、ということで、それらすべてを掛けます。(括弧内はその数字の該当するステータスを示しています)最初に2がある理由は、Hを遺伝した場合、目標のH31という数値を両方の親が持っているので、父親から遺伝した場合と母親から遺伝した場合で単純に二倍のパターンがある、ということ。両親ともに目標の範囲内のステータスを持つ場合このように計算します。HCS遺伝の場合は、HもCも両方親のどちらからでも遺伝しうるので22、ということです。
さて、これで分子となる数字は求められましたが、分母がまだです。分母は、遺伝したステータスの組み合わせ、遺伝したものが両親どちらから遺伝したか、そして残りの遺伝しなかった三つのステータスが取り得る値をそれぞれ掛けたものになります。つまり以下のような計算式です。
- 6C3 * 23 * 323 = 5,242,880 (通り)
ただし、今回は素早さを固定しています。固定していると言うことはつまり計算から除外できるということなので、
- 5C2 * 22 * 323 = 1,310,720 (通り)
ということになります。分子の合計とあわせると、
- 12,464 / 1,310,720 = 0.951%
ということに。
ただし、これはいくつかの仮定に基づいての計算です。遺伝する場合は確実に3つの能力を受け継ぐ、つまり両親あわせて12個のステータスのなかから3種類選ばれるわけでなく、6種類のステータスの中から3種類選ばれたあと、両親のどちらから遺伝するか決定されること、すべてのステータスが同じ確率で決定されること(ちょっと前のポケモンだと特定のステータスが遺伝しやすいとかあったらしい)など。
うーん、わかりすく説明するのは難しいですね。誰か数学が得意な人ヘルプミー。