Category mabinogi.

写経して書いてみたけどこんなもんか。式を理解してないのがあぶない。でも昔の人は「式がわからないならライブラリを使えばいいじゃない。ライブラリがないならコピペすればいいじゃない」っていったんだぜ

とりあえずこれで、最小ダメージ・最大ダメージどちらをあげたほうが期待ダメージがあがるかはハッキリわかるようになった。ずっと気になってたからスッキリ。

なんかコードにするとたいしたことしてなくてもオレッテバスゲー感でるよなぁ。これとか式まんま写してコードにしているだけなわけだし、全く構造化されていないうんこなコードだしでどうしよもないけど、なんかやった感はある。ダメですね。ちゃんとまとめよう。

Ruby で書こうと思ったんだけど、JS のほうがあとで適当にまとめるとき便利ではやいかなぁと思いなおして JS にした。でも Spidermonkey が入ってなかったら Ruby で書いたかもなぁ。

あああ これじゃダメだw まるめこみしてないじゃん

なおした。あと klm 先生からアドバイスをもらったのでもっと効率いい方法をためしてる

klm 先生のアドバイスをうけて分布関数使うようにしてみた。なるほどなぁ。コード短くなったし余計な計算しなくなって高速になった。

あ、分布関数を勘違いしてた…… これって -∞ からある値までの累積ってことか……
うえのが動いていたように見えたのは違う関数を実行していたからという……

累積分布関数だけだと、最小・最大以外の部分についての積分値 (確率に実際の値をかけた値累積) は求められないよね……

というか積分アルゴリズムとか使わんでもシグマで十分だ?

  1. トップ
  2. mabinogi

あれおかしいな…… ネトゲのダメージ計算していたはずなのにパンツいっちょで微積調べている…… しかも理解できない。微分が変化量を求めるっていう概念から導関数の式の意味はある程度わかったけど、積分のもっと具体的な求めかたの概念が理解できてない……

  1. トップ
  2. mabinogi

ちなみにネトゲのダメージ計算ってのは、最小・最大・バランスから期待ダメージを求めたいなぁという欲求からきたのだけど、どうしてもどうやって求めたらいいか理解できない。

バランスってのは、%で表わされていて、例えば、バランス80%のとき、最小から最大の間で80%の位置を中心に、ダメージ値の出現確率が正規分布しますよってことらしい (分散は定数?)、最小や最大を超えた場合には最小や最大にまるめこまれてしまう。バランス80%の場合、最大を超えてまるめこまれる確率が結構高いので、実際は 80% の位置の値よりも期待値は低い (というのは直感的にわかる)。

でも期待値の求めかたがわからない…… 最大が出る確率や最小が出る確率はそれぞれ正規分布の密度関数を積分すればわかる。それ以外の場合の期待値が求まればいいんだけど、どうやって求めたらいいかわからない……


あー そうか。ここも積分すればいいのか……あたりまえだ。この区間の期待値を直接求めればいいのか…… (Wikipedia で更めて期待値を調べていて、これも積分で定義されていることを知る)

最小0 最大100 バランス80 を例にすると、

  • 0-100 の区間の期待値が 51.39
  • 0 の期待値はもちろん 0
  • 100 の期待値が 24.44

なので期待値 75 ぐらいになる (境界を考慮してないねこれ)。

バランス 20 だと

  • 0-100 の区間の期待値が 23.87
  • 0 の期待値はもちろん 0
  • 100 の期待値が 0.30

なので期待値 24.27 ぐらい

これ一発で求まる式をどうやって書いたらいいかわからない…… コードにはできそうかなぁ…… 積分ってコードにするとどうなるんだ (ここでまた積分に戻る)

Wikipedia と Grapher で頑張りまくってる…… 頭悪くてもソフトが補助してくれるお…… Grapher は表示領域の調節が超絶しにくかったりエラーが不親切だったりするのを除けば、Mac 標準でついてくるし、数式綺麗にレンダリングしてくれるし、グラフ萌えるしでまじべんりすぎる

  1. トップ
  2. mabinogi