確率を比率(割合)で設定する関数
投稿者: cfm_ 投稿日:2016/05/11 17:55
確率を、2:3:5:1のように割合で設定して、値を得られる関数です
例)rand2(2,3,5,1) → 0が18.2%, 1が27.3%, 2が45.5%, 3が9.1%の確率で返される
(2:3:5:1 = 約 18.2% : 27.3% : 45.5% : 9.1%)
引数は1~16個のいくつでも大丈夫です (=引数15個まで省略可)
関数名は思いつかなかったので、使う際は適当に変えちゃってください
注意:この関数の使用には、関数array2(引数から配列を得る関数) が必須です。
テスト(rand2(3,5,7,1)を500回取得)
ちょっと結果が正しすぎる気がしますが、気のせいでしょうか?
一応メモ。rand()の引数を複数にすると「RRandExecutor args.length not equal 0 or 1. args.length = 4」とかいうエラーが出てきました。
ツイート
例)rand2(2,3,5,1) → 0が18.2%, 1が27.3%, 2が45.5%, 3が9.1%の確率で返される
(2:3:5:1 = 約 18.2% : 27.3% : 45.5% : 9.1%)
引数は1~16個のいくつでも大丈夫です (=引数15個まで省略可)
関数名は思いつかなかったので、使う際は適当に変えちゃってください
注意:この関数の使用には、関数array2(引数から配列を得る関数) が必須です。
def rand2(r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15) a=array2(r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15) s=0 i=0 while i<getArrayLength(a) s=s+a[i] i=i+1 end r=rand()*s i=0 while r>0 r=r-a[i] i=i+1 end return i-1 end
テスト(rand2(3,5,7,1)を500回取得)
test=createArray() i=0 while i<500 x=rand2(3,5,7,1) test[x]=test[x]+1 i=i+1 end speak(test[0]+","+test[1]+","+test[2]+","+test[3]) #理論値 94,156,219,31 #結果1回目 97,165,211,27 # 2回目 97,162,212,29 # 3回目 81,160,234,25 # 4回目 81,172,220,27
ちょっと結果が正しすぎる気がしますが、気のせいでしょうか?
一応メモ。rand()の引数を複数にすると「RRandExecutor args.length not equal 0 or 1. args.length = 4」とかいうエラーが出てきました。
コメントする
コメントするには、ログインする必要があります。
コメント一覧
コメントはありません。