小樣本大概率事件的正確處理方式 - 3. 實際使用

版權聲明:本文爲博主原創文章,轉載請註明出處。 https://blog.csdn.net/xmousez/article/details/72628216

在之前的兩篇文章中,我主要對概率約束和樣本約束做了比較。
(詳情點擊 《小樣本大概率事件的正確處理方式 - 1. 概率的含義和誤差產生的原因》《小樣本大概率事件的正確處理方式 - 2. 結果分析》
結論簡單點說就是:概率約束誤差大,但是簡單;樣本約束精確,但是複雜。

從其複雜度上去比較,產生n次隨機事件,概率約束的時間複雜度是O(n),空間複雜度是O(1)。而樣本約束,由於要提前將樣本進行洗牌,其時間複雜度是O(n^2),而爲了存放洗牌結果,其空間複雜度是O(n)(實際上應該是和約束樣本的大小相關)

然而前兩篇文章只是爲了表現兩種約束的含義,而並不是我們在寫代碼時要使用的算法。爲了將其區別更清晰地展現出來,我在樣本約束中提前處理好了樣本,但這並不是必要的。

樣本約束的實際目的,是讓每個約束週期中(總體樣本的數量是我們的約束樣本數量的整數倍時就是一個週期)各事件的出現頻次與預期完全相符。所以,我們並不需要在第一次隨機時就知道最後一次隨機的結果,我們只需要知道某一次隨機時,各種事件還能在本次約束週期中出現多少次——每次隨機後,下一次隨機條件會出現相應變化,這就是“動態”的含義。

和上一篇文章的例子一樣:我們有一個10大小的約束樣本,該樣本中0,1,2分別出現2,3,5次。
我們並不需要在第一次隨機時對樣本進行洗牌,只需要在第n次隨機後,記錄0,1,2分別出現過的次數(或剩餘可出現的次數),然後獲取一個[0,剩餘事件-1]的隨機數即可。比如第6次隨機後統計0出現了1次,1出現了2次,2出現了3次,那麼週期剩餘的4次中,0,1,2分別可以出現1,1,2次,第7次隨機我只需要取一個[0,3]的隨機數即可。

對實例進行範化描述(公式化)就是:樣本大小爲S,事件a的出現概率爲P(a),在第n-1次隨機後a出現了T(a)次,那麼第n次隨機中a出現的概率就是(S * P(a) - T(a)) / (S - n)。這就是我標題中的動態概率約束——它的實質就是樣本約束(限制事件頻次),但是其計算方式卻與概率約束一樣(看隨機數落在那個區間)。這個結果會與上一篇文章提到的樣本約束完全一樣。

從另一個角度再次考慮一下這個問題:既然每個約束週期裏面的事件發生頻次都已經訂好了,那無論該約束樣本里的事件是如何排列的,概率都會在週期結束時得到保證。如果我對概率波動並不關心,我只需要限制樣本次數,是不是就只需要關注剩餘事件種類,而不需要關注剩餘事件的出現概率呢?

仍然是之前的例子:約束樣本大小爲10,0,1,2分別出現2,3,5次。每次隨機時都取[0,2]的隨機整數,這個數直接作爲事件。如第6次隨機0,1,2分別出現了1,2,3次,那麼第7次臥仍然從[0,2]中選取,如果第7次選中了0,那麼0就不可能再出現了,剩餘事件就只有1,2兩種了,那麼第8次的隨機則取[0,1]。

範化描述爲:樣本大小爲S,a是其中一種並且其期望概率爲P(a),在第n-1次隨機時有C種可能的互斥事件,並且a出現了S*P(a)-1次,那麼第n-1次所有的事件概率都是1/C,如果第n-1次隨機結果爲a,那麼a的概率就變爲0,其他互斥事件的概率變爲1/(C-1)。這就是標題中的動態事件約束——它的實質也是樣本約束,但是其計算方式只和當前隨機事件的種類有關,換句話說,所有當前可能出現的事件概率都相同,如果某個事件發生的次數達到了期望值,那麼這個事件就不再是“可能出現的事件”。


這次的曲線分析我稍微做一下調整,將約束樣本的大小定爲200,總樣本還是1000,也就是說,對於樣本約束(包括本篇所說的動態概率約束和動態事件約束),總樣本有5個約束週期。四種約束的樣本生成代碼和曲線圖如下:
這裏寫圖片描述
概率約束:
這裏寫圖片描述
樣本約束:
這裏寫圖片描述
動態概率約束:
這裏寫圖片描述
動態事件約束:
這裏寫圖片描述

對比就可以看出,動態概率約束作爲樣本約束的優化,在一個週期後二者的穩定性沒有差別;而對於動態事件約束,曲線會呈現週期性波動,波動週期則與約束週期相同,在每個波動週期中,各事件概率先趨向均值,然後再趨向實際概率。

對於動態概率約束,實際上就是樣本約束的優化,所以所有的隨機事件,都可以——並且理論上應該——用動態概率約束(當動態概率約束的約束樣本大小爲無限大時,其等價於普通概率約束);
而對於動態事件約束,則是在動態概率約束上偷了一下懶,將當前所有可能事件視爲等概率,免去了依次判斷某個事件是否發生的過程(取的隨機整數就能做事件),事件的可能性越多,能夠節省的開銷就越大。

最後給出一個動態事件約束的使用情景:如果概率和樣本是以遊戲世界來說的(用戶無感知),並且概率只是爲了保證稀有物品的“稀有度”,那麼你就不用在乎這個物品爆率的週期波動(事實上這種週期性波動反倒有可能有益於用戶留存)。

我一直在洗澡,油膩的師姐在哪裏?屠龍寶刀,點擊就送,極品裝備,一秒刷爆?醒醒吧,遊戲爲了賺錢啥事都幹得出來~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章