談談隨機數

God does NOT play dice with the Universe! 算法

      什麼是隨機(random)?字典中給出的定義是無計劃,無序和無目的,純靠運氣。隨機是生活中必不可少的成分,好比彩票,遊戲,安全,早餐吃什麼,這些行爲都有一些隨機的成分,但咱們能說這些行爲都是隨機的嗎? 安全

      好比早餐,吃的人覺得是隨機的,作什麼吃什麼,對廚師而言,多是精心安排的,就不算隨機行爲。遊戲也是如此,隨機掉了一件裝備,你如獲至寶,其內部是一個機率算法,若是你掌握了這個算法作了一個外掛,對你而言,這也不是隨機行爲了。同理,不少安全密碼的密鑰都是隨機數,好比核武器的按鈕,但難保哪天就被一個天才數學家破解了。 dom

      個人意思是,很難定性判斷某一行爲是不是隨機的。隨着咱們掌握的信息愈來愈多,咱們的決策算法愈來愈高效,咱們的計算能力愈來愈強大,進而有能力預測出目前沒法預測的隨機行爲。這就留下了一個有意思的問題,是否真的存在上帝,上帝是否擲骰子(隨機行爲),在宇宙大爆炸前,上帝是否已經設計好宇宙的發展?而咱們的人生,是否早已寫好,只是看不見而已呢?固然,目前一切還不得而知,萬一宇宙的產生只是一個意外呢設計

2

1

      隨機並不絕對,但生活中又要用到隨機,歷史上有不少隨機數生成器(random number generator,簡稱RNG),好比骰子。這方面,咱們的祖先甚至寫了一本《易經》,能夠理解爲如何生成隨機數並破解隨機行爲的百科全書。 3d

      根據不一樣的方法,大概分爲兩種方式:T(rue)RNG和P(seudo)RNG。二者有什麼區別呢? orm

TRNG

      經過一些物理現象來產生隨機數,好比大氣層的噪音,元素的衰變和放射,擲骰子等,由於這些行爲受到多個天然因素的影響,過程不可預測,因此主觀上以爲比較安全。因此,當咱們對安全性和經濟性上有較高要求時,每每須要採用這類方式產生的隨機數,好比彩票,人類不會放心的把這件事情交給機器來處理,必定要有儀式感,讓它看上去是隨機的。 blog

      然而,公正的行爲不必定會產生公平的結果。相比而言,TRNG更大的優點在於不可預測性,但結果上並不必定平均。 遊戲

PRNG

      僞隨機數經過算法產生,計算機所以能夠模擬隨機行爲。但由於有公式,因此只要參數肯定,也就是隨機的種子,獲得的隨機結果必定是可重複的。好比以下的通隨機數生成公式,給出種子1,就能夠獲得一系列的隨機數。 get

3

4

      這樣通過算法設計出來的隨機數分佈很均勻,完美的不像人類或天然的產物。下面是在JS,產生1000000個隨機數,區間在(0,1000): generator

5

      我在Matlab中也作了一樣的實驗,分佈也很平均。可見,目前機器生成的隨機數,從結果來看確實很隨機。好比隨機生成灰度圖和對應的直方圖統計,有沒有小時候電視沒信號的視覺效果?

隨機

萬物看似隨機,卻都有其統計的宿命

正態分佈

      完美的隨機缺乏美感。好比咱們玩鬥地主,洗牌的原則就是作到儘量的隨機,好比同一個花色的不能連續,數字不能連,甚至不能有規律,簡單說,要求越嚴格越隨機。但是,若是隨機作到絕對的公平,遊戲的趣味性則會大大下降。

      事物發展的規律也是如此,所謂的能就是勢差,只有不平等才能產生差,進而有了發展的動力。大天然在宏觀上達成平衡,但在個體之間是不平等的。

      因此,咱們須要人工干預隨機行爲,讓這種隨機變得不平等。如何讓隨機行爲更符合客觀規律呢,就是統計的意義。好比統計人的身高,若是樣本夠多,好比一個學校,一個城市,一個國家,整個世界,就會發現這樣的一個分佈規律:

4

      這就是正態分佈,有興趣的能夠讀一下以前寫的關於斐波那契數列的文章,由於它們裏面都體現了黃金分割。如何讓機器模擬正態分佈的隨機數生成?Box–Muller transform提供了公式,網上也有現成的代碼,下圖是JS上實現的正態分佈的隨機數效果:

6

      以下是正態分佈的灰度圖和直方圖:

正態分佈

噪聲

      經過公式,咱們能夠建立符合規律(公式)的隨機數,數學的美老是晦澀而難以發現的。而莊子雲:「天地有大美而不言」。

      不是在說隨機數,跟美有什麼關係?且看下圖,沙丘的造成,過程是隨機的,但卻給人一種美,這樣的場景有不少,好比地形,火焰,雨雪天氣,木質紋路等,都有各自的美,當咱們感嘆大天然的鬼斧神工,天然會有疑問:如何經過隨機算法來模擬它們?

fig05-01

      這就是噪聲:在三維空間提供高效的,可實現,可重複的僞隨機信號。固然,上面的隨機算法也能製造出噪聲,但比較尖銳,生硬不天然,咱們成爲White Noise,好比電視上的雪花屏。學者們根據效率、用途、天然程度(即效果好壞)等方面的衡量,提出了許多但願用程序模擬天然噪聲的方法。例如,Perlin噪聲被大量用於雲朵、火焰和地形等天然環境的模擬;Simplex噪聲在其基礎上進行了改進,提到了效率和效果;而Worley噪聲被提出用於模擬一些多孔結構,例如紙張、木紋等。---摘自candycat的博文《談談噪聲》

10

      這裏就不闡述噪聲紋理的算法和思路了,這塊內容也不少,我的的理解也很淺薄。如上圖,是Perlin噪聲的4次分形疊加產生的灰度圖,添加顏色表,模擬地形的一個過程。機器的特色是不易出錯,能夠完美的執行任務,經過噪聲,能夠在可控範圍內隨機的創造出不完美,反而更有質感,真實感。

6

      當機器的能力愈來愈強大,也許,相比機器,人類的一個優點就是會犯錯,真是這種隨機的錯誤,讓咱們的生活更真實。生命的演化也是如此,基因的突變是隨機的,多數是失敗的,但正是那些不經意的成功,不斷推進生命的發展和演變。

      Impossible is nothing~

相關文章
相關標籤/搜索