確率を比率(割合)で設定する関数

投稿者:Material 305033 1 mini 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(引数から配列を得る関数) が必須です。

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」とかいうエラーが出てきました。


コメントする

コメントするには、ログインする必要があります。

コメント一覧

コメントはありません。