2011-07-01 45 views
1

如果我有發生x,y和z事件的概率,如何在編程上實現這三個事件之間的選擇?概率實現

實施例: PR(X)= 0.3 PR(Y)= 0.2 PR(Z)= 0.5

我想的功能給我一個實現這些概率的說我應該選擇y或z等。

任何指針或引用表示讚賞,謝謝。

+0

究竟給了你什麼,你想達到什麼目的?你有P(X),P(Y),P(Z)?你在尋找它們共同發生的概率嗎?他們是獨立的嗎? – amit

+0

是的,我給出了每個事件的概率。說對象U,想要在這三個事件之間進行選擇,只選擇一個事件。 – BigBoy14

+0

我還是不明白你的意思,你想要選擇什麼?你能給一個具體的詳細例子嗎? – amit

回答

1

如果你有一個函數rand(),在[0,1]返回一個統一的隨機數,然後

float r = rand(); 
if (rand < Pr(x)) { 
    return x; 
} else if (rand < Pr(x)+Pr(y)) { 
    return y; 
} else { 
    return z; 
} 

同樣,如果您可以生成1到100之間,也就是說,一個隨機整數,然後

int r = rand(); 
if (rand < Pr(x)*100) { 
    return x; 
} else if (rand < (Pr(x)+Pr(y))*100) { 
    return y; 
} else { 
    return z; 
} 
+0

偉大的思想家都認爲;) –

+2

@Victor:要麼,或者它是顯而易見的;-) – PengOne

0

如果有事件發生,請使用函數返回[0,1)中的正常分佈並檢查它落在哪個範圍內。如果它在[0,0.3]中返回A,如果它在[0.3,0.5]中返回B,否則返回C.

0

在python中,你可以編寫一個程序來定義一個方法'選擇器',該方法需要兩個參數px和這些是前兩個事件獨立發生的可能性。該方法會根據情況返回x,y或z,python代碼如下:

import random 

def chooser(px,py): 
    prob = random.randint(1, 10) 
    if (prob<=(px*10)): 
     return x 
    else if (prob<=((px+py)*10)): 
     return y 
    else: 
     return z 
+0

不完全。你需要第二個條件來讀取'(px + py)* 10'來代替'py * 10'。 – PengOne