2012-03-02 27 views
2

這個問題出現在我玩FIFA的時候。如何編程函數以某種概率返回值?

假設他們編制了一個複雜的函數,其中包括射擊技巧,距離,擊球力量等所有因素,以計算射門擊中目標的概率。他們會如何根據這種可能性對目標進行編程?

換句話說,像函數X()具有使其返回 89%和0 11%的概率。我將如何編程,使其在100次試驗中返回1次(大約)89次?

回答

6

生成01之間的uniformly-distributed隨機數,並返回true如果數目小於所期望的概率(0.89)。

例如,在IPython

In [13]: from random import random 

In [14]: vals = [random() < 0.89 for i in range(10000)] 

In [15]: sum(vals) 
Out[15]: 8956 

在該實現中,8956出10000個布爾結果是true。如果我們重複這個實驗,這個數字可能會有所不同圍繞8900

+0

謝謝。我正在考慮隨機數和模數運算符。只是可以認爲它可以如此簡單。 :) – Shubham 2012-03-02 12:07:29

+0

+1提到隨機數必須均勻分佈。 – Heinzi 2012-03-02 12:08:36

1

我不是100%肯定,但一個方式,我會做到:

產生一個隨機數(0和100之間)。如果數字爲89或大於回報1,elsewise返回0

0

如果你有一個隨機數發生器,那麼你會做這樣的事情:

bool return_true_89_out_of_100() { 
    double random_n = rand(); // returns random between 0 and 89 
    return (random_n < 0.89); 
} 

您可以通過以下方法產生粗製濫造的隨機數,例如,採樣CPU時鐘的低位或一些數學技巧。

0

您被標記爲語言不可知,但答案取決於您可以使用的隨機數字函數。此外,準確度可能取決於您的發電機是多麼接近真正的隨機(通常它們並不那麼接近)。

至於隨機數函數,往往有兩種 - 生成一個介於0和1之間的數字,以及生成一個介於m和n之間的數字的函數。每個都可以用來輕鬆導出一個百分比。

3

那就是不是目標是如何在FIFA或其他視頻遊戲中確定的。他們不要有一個函數,說有一些概率,鏡頭使它或不。

相反,他們模擬了一個實際被踢入球門的球。

球會擁有一些速度(基於「射門力量」)和一些軌跡角度(根據玩家的目的在哪裏,以及基於角色的「射擊技能」的一些變化)。然後,他們允許物理學 - 以及如果有的話 - 接受的goalee的AI,並且只有當球進入球門時纔算作一個點。

當然還有隨機性涉及,但是沒有一個變量決定一個鏡頭是否會拍攝它。