假設我有一個簡單的程序,它可以模擬拋硬幣,並且具有由表達式指定的給定概率。它可能是這個樣子:現在計算表達式解析爲真的預期概率
# This is the probability that you will get heads.
$expr = "rand < 0.5"
def get_result(expr)
eval(expr)
end
def toss_coin
if get_result($expr)
return "Head"
else
return "Tail"
end
end
,我也想告訴用戶越來越Head
的概率。
對於給定的表達
"rand < 0.5"
我們可以眼球它說的概率爲50%,因爲蘭特返回0和1之間的數,因此,表達式求的真正50%平均時間。
但是,如果我決定提供一個操縱拋硬幣,其中用於確定結果的表達式是
"rand < 0.3"
現在,我已經得到Head
30%的機會。
是否可以編寫一個方法,該方法將採用任意表達式(計算結果爲布爾值!)並返回其解析爲true
的概率?
def get_expected_probability(expr)
# Returns the probability the `expr` returns true
# `rand < 0.5` would return 0.5
# `rand < 0.3` would return 0.3
# `true` would return 1
# `false` would return 0
end
聽起來像家庭作業 –
如果功課,也許爲哲學101. –
假設(與'需要'時間')我們有't = Time.new.year == 2014;睡眠(RAND(5)); t'。無論何時執行,它返回true的概率都是零或一。今天,我們可以說真的概率是1.0。但是當我們準備在2015年響起時呢? 'get_expected_probability'可能不知道這是在舊年還是新年執行的。爲了返回0.0到1.0之間的概率,我們需要擴展模型來表示2014年代碼執行的概率,這個概念可能沒有任何意義。所以,我認爲答案是「否」。 –