我有一個機器人玩的遊戲程序。爲了簡單起見,遊戲有2個按鈕 - 「贏」和「再試」。爲了獲勝,機器人必須簡單地推動「贏」按鈕。如何使可能性隨着時間的推移隨着時間的推移而增加
的遊戲涉及的是開始於10,並運行至0,每秒一次滴答倒數計時器。在計時器的每次打勾期間,機器人會選取兩個按鈕中的一個。當計時器在10時,機器人點擊贏的機會非常小。隨着計時器接近0,機器人點擊「贏」按鈕的機會增加。當然,機器人可能永遠不會點擊win按鈕。
什麼,我到底追求的是機器人點擊「贏」約90%的與時間贏得點擊進行加權接近定時器0被
我做了一些概率研究(絕對新手),我的理解是,在每個時間點的概率總和應高達0.90,以獲得我想要的結果。例如:
countdownTimerTickNumber | probabilityOfClickingWin
====================================================
10 | 0
9 | 0.0001
8 | 0.005
7 | 0.01
6 | 0.02
5 | 0.04
4 | 0.08
3 | 0.1
2 | 0.15
1 | 0.2
0 | 0.294
----------------------------------
Total probabilityOfClickingWin over all ticks: .9
下面是一些僞代碼來顯示如何使用的概率從表格上方實際確定哪個按鈕機器人點擊。它每滴答期間被稱爲:
function bool doClickWin(probabilityOfClickingWin)
{
if (probabilityOfClickingWin >= new Random().NextDouble())
return true;
return false;
}
但是,如果我跑我的程序很多次,我發現的機器人點擊「贏」時的實際比例遠低於90%(約60%)。
誰能告訴我我做錯了什麼?提前致謝。
我已經打消了我的意見,因爲它有不準確的,但想法是正確的。什麼擰你的邏輯是'probabilityOfClickingWin'和它的計算方式。爲了得到期望的概率,它需要是'probability * maxRandomNumberThatCanBeReturned'。因爲'Random.NextDouble'返回最大值'1.0d',所以你需要傳遞'0.9d'來獲得90%的返回'true'。這裏的示例:http://ideone.com/a8wxw6更高級的嘗試更加準確地成爲結果。還要靜態保留Random對象([_reason_](http://stackoverflow.com/a/10598041/1283847)) – Leri
Leri - 它看起來像您樣本中的CompareWithRandom()將返回true〜90%的時間迭代「嘗試」。這其實不是我所需要的。我需要它,所以對於所有「嘗試」迭代的組合,CompareWithRandom()只有一次返回真的概率爲90%。但是,感謝您抽出時間。 – Don