計算の正確な結果の複合体を投げつD30
-
08-07-2019 - |
質問
大丈夫、このbuggedく、数年間です。ま吸引統計および高等数学、離れ 現在.遅すぎるのです。
大丈夫です。深呼吸。ここでいます。取 二つの 三角ダイス("yes"、 い存在 やロールしていた。
- 追加の番号
- 場合の両方のダイスショー <=5または>=26日に捨てるもと 追加 その結果をそのまま
- 場合には <=5およびその他>=26日に捨てるもと 減算 の結果から い
- まで繰り返しのいずれかです>5 < 26!
書き込む場合は一部のコード(下記参照)、ロールそのサイコロの数百万倍のときカウントがございます各号の最終結果、曲線では、長文ありがとうございまし平左の1日は45°°1 60平上60.のロール30.5以上より50%、ロールにより18は80%をロールにより0 97%が回答しています。
そこで問題:ができるプログラムを書くため 計算 の 正確な 値f(x)、の確率ロールある。
背景:当社の役割がロールプレイングゲーム"ジャングルの星"いかなければならないというニーズに保つランダムなイベントを有することができます。は、上記の規則保証はより安定した結果のために何かしよう:)
の球の周りは、コードをPython:
import random
import sys
def OW60 ():
"""Do an open throw with a "60" sided dice"""
val = 0
sign = 1
while 1:
r1 = random.randint (1, 30)
r2 = random.randint (1, 30)
#print r1,r2
val = val + sign * (r1 + r2)
islow = 0
ishigh = 0
if r1 <= 5:
islow += 1
elif r1 >= 26:
ishigh += 1
if r2 <= 5:
islow += 1
elif r2 >= 26:
ishigh += 1
if islow == 2 or ishigh == 2:
sign = 1
elif islow == 1 and ishigh == 1:
sign = -1
else:
break
#print sign
#print val
return val
result = [0] * 2000
N = 100000
for i in range(N):
r = OW60()
x = r+1000
if x < 0:
print "Too low:",r
if i % 1000 == 0:
sys.stderr.write('%d\n' % i)
result[x] += 1
i = 0
while result[i] == 0:
i += 1
j = len(result) - 1
while result[j] == 0:
j -= 1
pSum = 0
# Lower Probability: The probability to throw this or less
# Higher Probability: The probability to throw this or higher
print "Result;Absolut Count;Probability;Lower Probability;Rel. Lower Probability;Higher Probability;Rel. Higher Probability;"
while i <= j:
pSum += result[i]
print '%d;%d;%.10f;%d;%.10f;%d;%.10f' % (i-1000, result[i], (float(result[i])/N), pSum, (float(pSum)/N), N-pSum, (float(N-pSum)/N))
i += 1
解決
があったので最初に書き換えコードの前に私は理解で
def OW60(sign=1):
r1 = random.randint (1, 30)
r2 = random.randint (1, 30)
val = sign * (r1 + r2)
islow = (r1<=5) + (r2<=5)
ishigh = (r1>=26) + (r2>=26)
if islow == 2 or ishigh == 2:
return val + OW60(1)
elif islow == 1 and ishigh == 1:
return val + OW60(-1)
else:
return val
ものを感じるかもしれませんがこの未読み;わかりません。(チェックインを行う場合に相当するものですが。) また、に関しては、ご利用"結果"にコード--いのPythonの 辞s?
とにかく事項はプログラミングスタイル以外:仮F(x)の CDF のOW60(1)、
F(x) = the probability that OW60(1) returns a value ≤ x.
同様にしよう
G(x) = the probability that OW60(-1) returns a value ≤ x.
それを計算できF(x)の定義による総括全(30×30)指定できる値は、結果の最初のスロー.例えば、最初のスローする(2,3)了し、管理状態の行き届いてロールは再び、この期に寄与し(1/30)(1/30)(5+F(x-5)の発現のためのF(x)を実現しました。ういやー、音楽って良いobscenely長の表現
F(x) = (1/900)(2+F(x-2) + 3+F(x-3) + ... + 59+F(x-59) + 60+F(x-60))
金900人を超え、各ペア(a,b)の[30]×[30].のペア(a,b)の両方≤5両≥26て期a+b+F(x-a-b)のペアを一≤5つ以上26て期a+b+G(x-a-b)にて期間(a+b)などを投げます。
同様にしていま
G(x) = (1/900)(-2+F(x-2) + (-3)+F(x-3) + ... + (-59)+F(x-59) + (-60)+F(x-60))
もちろん、この収係数;のではないからはF(x-60)F(x-52)からはF(x-10)F(x-2(a、b≥26または両方≤5)、G面で発生するかG(x-35)G(x-27)(一a,b≥26その他の≤5)が少ない条件は30ます。いずれの場合を定義するベクトルV(x)として
V(x) = [F(x-60) G(x-60) ... F(x-2) G(x-2) F(x-1) G(x-1) F(x) G(x)]
(い)きをしてから表現のためのFおよびG)の関係に
V(x) = A*V(x-1) + B
のための適切な行列Aおよび適切なベクトルBき算)からの初期値の形式V(x)=[0 0]x十分に小さいのでF(x)とG(x)xの範囲にしたい任意であります。(おf(x)の確率を投げxをかけることができF(x)-F(x-1)を付属しています。)
があります。すべてのところにあるが、なぜ?どのような分布をしたいが素敵な、単純な確率分布の適切なパラメータの良い性質(例えば小さな差異は、どちらか片方に誤りがな).あくまで自分のad-hocの手順をランダムます。
他のヒント
もちろん、一部の基本統計量サンプルの20百万円投.この結果:
Median: 17 (+18, -?) # This result is meaningless
Arithmetic Mean: 31.0 (±0.1)
Standard Deviation: 21 (+1, -2)
Root Mean Square: 35.4 (±0.7)
Mode: 36 (seemingly accurate)
の誤差を決定した実験的に行われています。の算術平均のモードは本当に正確には、パラメータを変えるにもかなり積極的な影響を与えています。というの行動の中央値は、既に説明しています。
注意:わからないかこれらの数字を適切な数学的に説明します。利用して素早く描いた分布のようになります。●に対してなんといっても、いないので正確なものとしている可能性もありますが精度の向上を図っています。
おそらくこれはある人がいる。
編集2:
に基づくだけで991値です。かん詰め込んだり値がとても早いことが気に入っていなと思い歪みの結果です。このサンプルが正当になります。
編集1:
ここで上記の値の一意にな面型の比較:
Median: 30.5
Arithmetic Mean: 30.5
Standard Deviation: 7.68114574787
Root Mean Square: 35.0737318611
このような値を計算しません。
化合物の無限の可能性は...非るようにします。いった問題に取り組むと同様にジェームズ-カランがその後から見たソースコードができる第三セロール、四います。問題は解決できる可能性が遥かに超え最もダイス転造シミュレーターです。
は特別な理由があが必要になりランダムか-InfにInfそのような複雑な曲線1-60?なぜベル曲線の2D30なの?ご説明し、その人がより簡単に、より限定アルゴリズムです。
てみましょう。の 第 投げをする場合があります追加または減算の最初のロールも容易に予測可能なベル曲線31日です。最初のロールはもちろん、れが問題なのであります。
最初のロールして900可能な組み合わせとなります。
- 50組み合わせた結果に加え、第二のロール。
- 25組み合わせ結果を差し引いた第二のロール。
- 出825組み合わせに合わせたベル曲線の第二のロール。
のを差し引いたセット(pre-引き算)フォーベル曲線の範囲(27..35).下半分を追加セットフォーベル曲線の範囲(2..10)が、上半分になるベル曲線の範囲(52...60)
私probablityは錆びない、正確な値が必要であることが明らかつ予測可能な値です。