我需要根據概率選擇一個可能的輸出。可以說我有加載骰子(加權隨機)
p[1]=20%
p[2]=40%
p[3]=15%
p[4]=25%
P []的大小是可變(在這種情況下4),我知道它們一起求和,以100%。如何根據概率從p中選擇一個元素?
我需要根據概率選擇一個可能的輸出。可以說我有加載骰子(加權隨機)
p[1]=20%
p[2]=40%
p[3]=15%
p[4]=25%
P []的大小是可變(在這種情況下4),我知道它們一起求和,以100%。如何根據概率從p中選擇一個元素?
使用這種最簡單的方法是使用Random.nextFloat()
方法對於這一點,然後檢查其範圍之間的隨機數0-1落在英寸
根據您的問題的評論,你可能想要更多的東西一樣這個:
Random r = new Random();
p[0]=0.2;
p[1]=0.4;
p[2]=0.15;
p[3]=0.25;
float myVal = r.nextFloat();
float probSum = 0.0;
for (int i = 0; i < p.length; p++) {
probSum += p[i];
if (myVal <= probSum) {
return i;
}
}
return p.length-1;
顯然你可以很漂亮,但這是一個普遍的想法,應該工作。
我不能這樣編碼,因爲我不知道p []中有多少個元素,所以我不知道我需要多少其他元素(if)。我所知道的是我有n個元素,它們的概率合計爲100%。我也知道他們的個人概率 – user3453281
@ user3453281我編輯了我的答案來反映這一點。讓我知道這是否是你需要的。 –
哦,這很漂亮,看起來非常像我需要的東西。我總結他們的個人概率,直到我得到我的隨機數。是的,應該有效。謝謝你,朋友。 – user3453281
第一個想法:創建一個介於1和100之間的隨機整數值。然後通過if/else來檢查它的值併合理設置你的數組。 – pzaenger
困難在於我不知道p []中有多少個元素。由於這個原因,我不能硬編碼的東西,如果(0
user3453281
http://stackoverflow.com/questions/17250568/randomly-choosing-from-a-list-with加權概率 – pjs