なんか複雑っぽい
打撃ダメージのばらつき具合なんですが、どうやら単純ではないみたいです。
少なくとも2回は一様乱数の抽選をしているものと思われます。
現在、想定中の計算式を示しておきます
PS2DQ5のダメージ値
{(基本値*16/17)〜(基本値*18/17)}+{-0.9〜+0.9}
基本値は
攻撃力÷2−守備力÷4
です。
攻撃力64にして親分ゴースト殴ってたら上記のような複雑な式じゃないと説明がつかない結果を得ました。
17〜22ダメージが出るのですが、17と22は超レアで18と21は、19と20の半分以下の頻度でした。
(100回以上殴って統計とりました)
Posted by red_chun at 11:59│
Comments(8)│
TrackBack(0)│
│
ドラクエ日記
この記事へのトラックバックURL
ちょっと考えてみたのですが、
1.正規分布型の乱数を引く
2.力と守備力の両方に、幅が設定されて一様にばらつく結果、ダメージが正規分布型になる
というのもありえるのではないかと思いました。どうなんでしょうかね。
何にしても、真ん中付近が出やすいという今回の調査結果は、それだけで価値があると思います。
ちょっと言葉の整理します。
「一様乱数」
一様にばらつく乱数です。
コンピュータの乱数は、「0〜1の範囲で任意の数が、一様に(均等に)ばらつく分布に従ってランダムに抽出される」ってのが基本で、あとはこれに適当な数値をかけたり足したりしています。
これは端数処理で最大最小の確率が小さくなる以外は、どの値も等確率で出現します。Lvアップ時のステータスの伸びはこれにあたると考えられます。
「正規分布型の乱数」
これは「平均値から離れるに従って徐々に出現頻度が減っていくような山形の分布を形成する乱数」ってことだと考えていいですか?>右弐さん
多分そーゆー意味だとして話を進めると、コンピュータに正規分布型の乱数を引かせようとする場合、複数回の一様乱数の合計を求めるなどしないといけないと思います。
>1.正規分布型の乱数を引く
>2.力と守備力の両方に、幅が設定されて一様にばらつく結果、ダメージが正規分布型になる
そういう可能性も十分考えられます。
ただし、その場合でも「複数回の一様乱数を引いている」と言うことができると思います。
僕が本文中にあるような計算式を想定したのは、
・ダメージ期待値が3とか6とか小さい値の場合でも±1程度の幅でダメージがちゃんとばらついている。
・ダメージ期待値が100以上の場合になるとそれに見合った範囲内である程度一様にばらついてダメージが出ている(平均値が特に出やすいということはない)
という二つの経験則によるところもあります。
実際のところは、もっと詳しくいろいろな条件でダメージ範囲と分布を調査しないと分かりませんね。
逆に調べれば、そのあたりのことは結論が導き出せると思います。
ちょっと言葉たらずでした。ゴメンナサイ
>正規分布型の乱数を引く
これなんですが、コンピュータで0〜1の一様乱数を取得するというのはもちろんで、その取得した値を適当な式に入れることで正規分布型の乱数を得るということです。
y = A*exp(-x^2/2*σ^2) という形の式があって、xに一様乱数をぶち込めば正規分布に近い形の乱数yが得られます。
>あとはこれに適当な数値をかけたり足したり
というところを、もうちょっと複雑な場合まで考えれば、何度も乱数を引く必要はないのではないかと思ったので。
>ただし、その場合でも「複数回の一様乱数を引いている」
これはおっしゃる通りです。
この仮説は複数回引いていることを疑問視するのではなくて、もし2度乱数を引くとした場合に、なぜ「2回」なのかという理由付けを考えたものです。
最初に投稿した文章のつながりが悪くてごめんなさい。
どもども
コメントありがとうございます。
って最初に書かないで本題入ってしまってすみませんでした(^^;
言葉足らずというのはむしろこの記事本文のことです。
それと、右弐さんの「正規分布型の乱数を引く」という仮説について、
「正規分布型は複数回乱数を引かないと得られない」という誤解をして前回のようなレスをつけてしまいました。
y = A*exp(-x^2/2*σ^2) →xは一様乱数、yは正規分布(型?)乱数
というようにちょっと細工をすれば別に複数回乱数を引かなくてもいろんな分布の形を得ることができるんですね。
おもいきり勉強不足でした。(言われてみればそーだった…orz)
この件について、僕の誤解により右弐さんとのコメントのやりとりなど、わかりにくくなってしまったので近日中に記事を書き直そうと思います。
私のコメントで重大な間違いに気付いたため取り急ぎ訂正を。
>y = A*exp(-x^2/2*σ^2) という形の式があって、xに一様乱数をぶち込めば正規分布に近い形の乱数yが得られます。
これウソです。yは正規分布型の分布関数になるだけで、この式に一様乱数xを代入してもyは正規分布型の乱数にはなりません。勘違いしておりました。
取り急ぎ間違いの訂正だけさせていただきます。
のちほど今回の意図にあう関数の例をコメントに書かせていただきます。
ガウシアンの積分のし方を忘れてて調べるのも面倒なため、正規分布ではありませんが「中心付近の値が出やすい関数」ということで、3次関数で簡単な例を2つほど。(正規分布も展開すると無限次元の多項式なので、本質的には同じ理屈です。)
y = 2x^3-3x^2+2x
y = 4x^3-6x^2+3x
これのxに[0,1]の一様乱数を入れると、yは[0,1]の中心付近が多い乱数になります。下の式の方が、より中央の0.5付近に乱数が寄ります。
以上の式を、先の私のコメントの訂正としていただければ幸いです。
関数式の訂正ありがとうございます。
全体の主旨は理解していたつもりだったので、細かいところには目が届きませんでした(ぉ
折角なので正規分布(型?)の分布関数から正規分布(型?)の乱数式を作ってみたいですw
そのうちに(ぉ
積分して逆関数作ればいいんですかねー(注 適当なことほざいてます!)
それはさておき、本記事を書き直しました。
右弐さんとのコメントのやり取りも、僕なりに要約しちゃいました。
コメントの主旨が違ってたらごめんなさい。