遊戲裡的隨機是不是偽隨機?


3樓貓 發佈時間:2024-06-02 23:23:29 作者:山東大學招生處 Language

很多人看到我這個標題可能會認為我是標題黨,不是偽隨機難道還是真隨機不成?

其實從隨機數的定義來看,遊戲裡的隨機機制不一定是一種數學定義下的隨機

下面我們介紹一下常見的遊戲隨機算法(看看哪些是偽隨機哪些不是),以及密碼學定義下的隨機(不用懷疑,隨機性這個定義就是密碼學提出的)

什麼是隨機

真隨機:你腦子裡隨便想幾個數,想說啥說啥,這些數都沒有聯繫,各個之間都是相互獨立的,完全不可預測的,一個真隨機數生成器可以是【過去十分鐘通過馬路的人數】,這是完全不能預測的。

遊戲裡的隨機是不是偽隨機?-第0張

偽隨機:由隨機種子根據一定的計算方法計算出來的數值。所以,只要計算方法一定,隨機種子一定,那麼產生的隨機數就不會變。要求隨機產生的數據隨即均勻,與真隨機不可分辨。一般認為,通過哈希算法的或者加密算法(包括對稱加密和非對稱加密)後的結果均屬於偽隨機,利用它們可以構建偽隨機數生成器。

遊戲裡的隨機是不是偽隨機?-第1張

遊戲裡常見的隨機機制

1.PRD

即Pseudo Random Distribution,偽隨機分佈,常見於各種抽卡和實時策略遊戲裡,一個很經典的例子就是暴擊PRD算法,其的誕生是為了解決“暴擊間隔不均勻”的問題。

這個算法的核心思想非常簡單,就是通過一系列運算方式,讓“理想情況下的暴擊分佈”出現的概率儘可能的大,讓總暴擊次數集中在總攻擊次數的某一區間裡的概率儘可能的小。換言之,就是讓總暴擊次數儘可能均勻的分佈在總攻擊次數中。

比如,DOTA中一個暴擊率20%的英雄,並不是每一刀都20%暴擊率的。而是以5.57%作為初始暴率,如果第一刀不暴,則第二刀的暴率增加到初始值的2倍:11.14%;如果還是不暴,就繼續增加到初始值的3倍:16.71%,以此類推。

遊戲裡的隨機是不是偽隨機?-第2張

而如果在這個過程中任何一次攻擊打出了暴擊,就會把暴擊率重置到5.57%。這樣一來,暴擊的觸發就會形成一個“不太可能暴擊-->有可能暴擊-->很可能暴擊-->必定暴擊”的暴擊週期,總暴擊次數均勻地分佈在總攻擊次數上的概率就大大上升了,同時從宏觀上來看,該算法模擬出的綜合暴擊率和紙面給出的理論暴擊率是無比接近的。

同樣,很多遊戲的抽卡也採用這種算法,同時減緩幾率增長速度,導致一開始很難抽到想要的角色和武器,只能吃保底。

遊戲裡的隨機是不是偽隨機?-第3張

2.洗牌算法

洗牌算法是將一組元素隨機打亂順序的算法,常用於模擬撲克牌遊戲中的洗牌過程、音樂播放器中的隨機播放等場景。 最早提出這個洗牌方法的是 Ronald A. Fisher 和 Frank Yates,即 Fisher–Yates Shuffle,其基本思想就是從原始數組中隨機取一個之前沒取過的數字到新的數組中,具體如下:

1. 初始化原始數組和新數組,原始數組長度為n(已知);

2. 從還沒處理的數組(假如還剩k個)中,隨機產生一個[0, k)之間的數字p(假設數組從0開始);

3. 從剩下的k個數中把第p個數取出;

4. 重複步驟2和3直到數字全部取完;

5. 從步驟3取出的數字序列便是一個打亂了的數列。

可以證明通過洗牌算法得到的序列是偽隨機的,即通過生成種子得到的n個元素的排列是均勻的,即不可分辨的。

我的世界或者小丑牌裡需要的生成種子,其實就是類似洗牌算法的種子。

遊戲裡的隨機是不是偽隨機?-第3張

3.水塘抽樣算法

水塘抽樣算法是一種隨機抽樣算法,它能夠在一個很大的集合中,抽取一部分樣本,並保證每個樣本的選取概率都是相等且隨機的,當然像原神這種抽卡遊戲肯定不會這麼幹,不然少掙多少錢

水塘抽樣算法的基本思想是,對於數據流中的第i個數,它有1/i的概率被替換為本輪隨機抽樣的結果。這種算法的實現非常簡單,每個樣本成為答案的概率是其編號的倒數,即1/i,其中i為樣本的編號。通過這種方式,可以證明每個樣本被選中的概率是相等的,即1/n。這種算法的優勢在於不需要預先知道數據總量為多少,且空間複雜度為O(1)。

雖然這種算法是偽隨機的,但是從商業層面講肯定是虧錢的,常常被用於組合隨機,即中獎概率使用PRD,但是中獎角色使用水塘抽樣,如你第幾次抽獎能中五星角色是PRD吃保底的,但是你具體抽到哪一張五星則是偽隨機的,這樣可以掙更多黑心錢。

在計算機中常常提到一個詞,黑盒,不是小黑盒的黑盒,是用戶看不到程序的運行原理的意思,只能看到結果,廠家正是利用這一特點,構建各種名義上的隨機,讓玩家依賴於所謂的玄學,所謂的玄學都是搞錯了偽隨機究竟是指什麼,我相信肯定還是有運氣成分在裡面,但是廠商肯定是想賺更多的錢,所以每個抽卡人都該好好考慮一下這個問題。

遊戲裡的隨機是不是偽隨機?-第3張

© 2022 3樓貓 下載APP 站點地圖 廣告合作:asmrly666@gmail.com