這篇文章,咱們經過一個更加廣泛而又簡單的現象來更深刻地討論【自組織臨界動力學】。沙堆是咱們平常生活經驗的一部分,在沙灘上玩過沙的孩子都懂得。html
基於沙堆比喻的物理直覺會令人們對純數學模型的行爲有一個更好的理解。咱們一般是從數學分析,而不是周圍的其餘方式中得到物理理解。git
在討論咱們模型的數學表達形式之前,讓咱們先簡單描述一下沙堆實驗。github
在剛開始的非臨界狀態中,沙粒聽從局域的動力學規則。在臨界態下,沙堆遵循總體動力學規則。優化
在穩定的 SOC 態中,存在一個複雜系統,而且沙堆自身具備天然而生的動力學。沙堆的造成不可能從單個沙粒的性質中預先知道。 this
因爲沙粒是自外部加入的,於是沙堆是一個開放的動力學系統。spa
沙堆有多個自由度,或者說沙堆中有不少粒沙。位於沙堆中的一粒沙就表明了一份勢能,而勢能的大小經過沙粒離檯面的高度來測量。當沙粒倒塌的時候,其勢能就轉化爲動能。當倒塌的沙粒逐漸靜止下來的時候,這個動能就耗散掉了,也就是轉化爲了沙堆的熱能。所以整個系統中就存在着能量的流動。.net
臨界點之因此能得到,僅僅是由於能量是以新的沙粒的形式從外部輸入的。 3d
相對於變更來講,臨界態必須十分穩固,代理
這一點對於描述現實世界的自組織臨界性這個概念來講,是極爲重要的。rest
假定一樣的系統達到它自身的臨界態後,咱們忽然往沙堆上堆溼的沙而不是乾的沙。溼沙的摩擦要比干沙的摩擦大一些。於是,過了一會以後雪崩會變得愈來愈小,並且慢慢地只在局部發生。離開這個系統(沙堆)的沙會變得愈來愈少,緣由是小的雪崩不能到達臺子的邊緣。可是隨着繼續增長沙子,沙堆就會變得愈來愈陡,反過來這種狀況又將致使雪崩變大。最終系統將進入到一種和當前系統所匹配的雪崩的臨界態。這種狀態下的沙堆將比最初的沙堆要陡一些。
又或者,若是咱們試圖設置一些局部的障礙來阻止雪崩的發生,如處處加一些「雪」屏,這就會致使一個相似的效應:剛開始雪崩會變小,可是最終沙堆的斜坡將變得足夠陡從而越過了這些障礙。而這是因爲愈來愈多的沙被迫處處流動的緣故。
沙堆的總體物理性質改變了,可是其動力學仍然是臨界的。當咱們試圖使沙堆遠離臨界態的時候,它卻最終又返回到臨界態。
所謂的穩固,並非字面上的意思,靜止不動的意思。複雜系統的穩固其實是一種充滿無限變化,同時又維持動態平衡的狀態。如同人生同樣,所謂的穩定,不是指永遠保持當下的狀態不變,相反,它是指當下的時點上充滿了各個方向無限的可能。冬去春來,去糙存精,永遠在變化,永遠自我否認,永遠在進化。
咱們已經明確了沙堆模式的物理特徵,但到目前爲止這一切只不過是想象的產物,其中還帶有一些來自實際經驗的直覺。對於計算機科學的學者來講,咱們可使用計算機模型來對沙堆這個物理系統進行建模。
把沙粒落在其上的檯面用一個二維的格子來表明。每一個方格子都有一個座標 (x,y),咱們用一個數 Z(x,y) 來表示落在方格中的沙粒數。對一個尺度 L 爲 100 的臺子來講,座標 x 和 y 都在1 到 100 之間,總的格點數是 L × L。咱們用的是「理論物理學家的沙」,其中每粒理想的沙都是大小爲 1 的立方體,這樣的話每一粒沙都能和另外的沙粒完美地堆在一塊兒,咱們並無用你在海岸上所見到的那些不規則的複雜的沙粒。
隨便選取一個格子,並把那個格子的高度 Z 增長 1,從而就把一粒沙加到了那個方格子中 :
Z(x,y) → Z(x,y) + 1
咱們引入了一個「倒塌規則」。這個規則容許一粒沙從一個方塊中跑到另外一個方塊中。一旦某個方塊的高度 Z 超過了一個臨界值 Zcr,好比設爲3,那麼這個方塊就會向鄰近的四個方塊中的每一個方塊輸送 一粒沙。於是,當 Z 達到 4 的時候,那個方塊的高度就會減少 4 個單位,
Z(x,y) → Z(x,y) - 4
當 Z(x,y) > Zcr,而且與那個方塊鄰近的四個方塊的高度分別增 加 1 個單位時,
Z(x±1,y) → Z(x±1,y) + 1
Z(x,y±1) → Z(x,y±1) + 1
下圖顯示了這個倒塌的過程。若是不穩定的晶格碰巧在邊緣上,這個位置的 x 或 y 是 1 或 100, 那麼沙粒就離開了這個系統,即它們從臺子的邊緣上掉下去了,咱們就不用再關心這些沙粒了。
一個小沙堆中的倒塌雪崩事件的插圖說明。一粒沙掉在位於格子中央且高度爲 3 的方塊中,從而致使了一個由 9 個倒塌事件組成的雪崩,而且整個過程持續了不斷變化的 7 個步驟。這個雪崩的量級 s = 9。黑色的方格子顯示了 8 個已倒塌的方格。有一個方格倒塌了兩次
上述幾個簡單的方程就徹底說明了咱們的模型。而所需數學的複雜程度不會超過 1 到 4 之間的加減運算。然而,這些方程的結果倒是異常複雜,並且這些結果不能經過對方程的簡單考察就推導得出來,那樣作的結果只能瞭解沙粒的局域動力學行爲。
能夠在大腦中簡單想象一下這個過程:
咱們能夠經過數一數在任意時刻沙堆中總的沙粒數目來跟蹤整個過程。
如同地球物理學家們對地震進行統計所用的操做過程同樣。經過每次」沙崩「結束後連續地加沙,咱們產生了大量的沙崩(好比 100 萬次)。經過計算出大大小小的沙崩的數量,咱們造出了一份「人工沙崩目錄」。沙崩的「量級」就是沙崩大小的對數值。
同以往同樣,對於給定的量級,計算出其數量的對數,而後做出關於兩者之間的圖。
結果代表,沙崩聽從古登堡—裏特冪次定律。這是一個很使人振奮的結論!
使用計算機模擬的簡化模型的好處在於,咱們沒必要像地震學家那樣,爲了獲得不少地震的數據等上幾百萬年,於是,咱們的統計起伏比起地震自己的統計起伏要小一些,由於對後者咱們要處理天然界爲咱們產生的數量要少得多的地震。
冪次定律代表穩定態是臨界的。咱們得出結論 : 沙堆已經自組織到了一個臨界態。
咱們必需要檢驗臨界性在模型修正後還是穩固的。不管咱們如何修正沙堆,冪次定律都應當成立。咱們試驗了一連串不一樣的情形。
在全部的情形中,沙堆都自組織到了一個伴隨各類大小的雪崩的臨界狀態,臨界性是沒法避免的。
最後一點要注意的是,加入沙粒時的隨機性並不影響冪次定律的出現。隨機性與咱們所觀察到的複雜性行爲絕不相關。
當研究更爲複雜的系統時,意識到這個事實是很重要的。經濟學處理的是代理人或多或少的隨機行爲,他們的想法固然不會在一開始就被肯定下來。然而,儘管有極好的統計性質,這種隨機性仍是不能阻止系統演化到精確的臨界態。
這一點頗有趣,但也使人費解。系統如何置現實世界中顯然的隨機性不顧,而發展到一個自組織態?
實例代碼以下:
# -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt import matplotlib matplotlib.use('Agg') import os import sys import collections table_size = 31 # the size of the table that the sandpile is on z_crit = 4 # the critical size of a stack of grains, it will fall if there are more grains that that num_grains = 1000 # how many grains to drop z = np.zeros((table_size+2, table_size+2)) # thisis the sandpile and the table it rests on add_location = (table_size/2+1, table_size/2+1) # sets the middle of the table to drop grains on # print 'Executing on', os.uname() print 'Python version', sys.version print 'matplotlib version', matplotlib.__version__ z2 = z.copy() fig = plt.figure() colapse_cdf = dict() for g in xrange(num_grains): colapse_cn = 0 z[add_location[0], add_location[1]] += 1 # drop a grain for x in xrange(1, table_size+1): for y in xrange(1, table_size+1): if z2[x, y] > z_crit: # check for colapse colapse_cn += 1 z[x, y] -= 4 # colapse z[x+1, y] += 1 z[x-1, y] += 1 z[x, y+1] += 1 z[x, y-1] += 1 if colapse_cdf.has_key(colapse_cn): colapse_cdf[colapse_cn] += 1 else: colapse_cdf[colapse_cn] = 1 z2 = z.copy() # drop the grains over the edge off the table. z[0, 0:table_size+2] = np.zeros(table_size+2) z[0:table_size+2, table_size+1] = np.zeros(table_size+2) z[0:table_size+2, 0] = np.zeros(table_size+2) z[table_size+1, 0:table_size+2] = np.zeros(table_size+2) # plotting!! if False: ax = fig.add_subplot(111) ax.set_title('Height of the Sandpile') cax = ax.imshow(z, interpolation='nearest') cax.set_clim(vmin=0, vmax=8) cbar = fig.colorbar(cax, ticks=[0, 3, 5, 8], orientation='vertical') filename = str('%03d' % g) + '.png' plt.savefig(filename, dpi=100) print 'Wrote file', filename plt.clf() print sum(sum(z)) # plot colapse cdf colapse_cdf = collections.OrderedDict(sorted(colapse_cdf.items())) print "colapse_cdf: ", colapse_cdf print "colapse_cdf.keys(): ", colapse_cdf.keys() print "colapse_cdf.values(): ", colapse_cdf.values() x = colapse_cdf.keys() y = colapse_cdf.values() plt.xlim(-2, max(x)) plt.ylim(-2, max(y)) plt.plot(x, y, c='b') plt.show()
計算機科學家們的這個沙堆是對實際發生的一切所作的一個粗糙且過度簡化的處理。
像諸如此類的因素還能夠不斷考慮下去。很快你就會意識到,想要製造出沙堆的一個實際模型是一種戰略上的失誤。
問題是,爲何最終這個簡化的計算機模擬模型又獲得了學界的普遍認同?它的合理性是創建在模型包含了基本物理思想的直覺之上的。
具體說來就是,
經過分析沙堆的幾何特性,能夠顯示,沙堆的輪廓和挪威的海灣同樣,是分形的。雪崩已經雕刻出沙堆的分形結構。
另外,經過分析沙堆沙崩的動力學過程,可讓咱們對世界人口分佈有一個更深的認識。
茲波夫的定律代表世界人口的區域分佈,已自組織到一個臨界態,其中城市是因爲人口的流動而形成的雪崩造成的。
Relevant Link:
https://blog.csdn.net/wizardforcel/article/details/79897603 http://entmod.blogspot.com/2010/07/btw-sandpile.html https://zhuanlan.zhihu.com/p/35548881 http://greenteapress.com/complexity2/html/thinkcomplexity2009.html http://math.cmu.edu/~wes/sandgallery.html https://github.com/search?l=Python&q=sandpile&type=Repositories https://github.com/esdalmaijer/abelian_sandpile https://github.com/darshanime/sandpiles
當沙堆相對來講較淺的時候,他的經歷會十分單調。不時地會有一些小的擾動出現,這時鄰近的一些沙粒倒塌了。若是咱們在某處落下一粒沙,這時在位形上只會致使一個很小的局域變更。決不會有一種方式使得擾動傳遍整個系統。小的擾動獲得的反應也是小的。
在一個非臨界的世界裏,未曾有任何戲劇性的事情發生。所以,作一個非臨界系統平地上的天氣(沙)預報員是很容易的。他不只可以預 測將要發生的一切,並且他可以理解這一切到一種極限程度,也就是說,只要有事情須要理解,他就能理解。某個位置的行爲並不依賴於好久之前在很遠的位置所發生的事情。非臨界態系統中的偶然性是互不相關的。
然而,一旦沙堆達到了穩定的臨界態,狀況就徹底不一樣了。一粒沙可能就會致使一場包含整個沙堆在內的雪崩。位形上的一個小的變更可能會把原本不很起眼的小事情變成一場災難事件。
沙堆預報者仍然可經過仔細確認規則,以及跟蹤他周圍的環境來作短期的預報。
若是他發現一個雪崩事件即將而至,他會以某種機率程度預言何時雪崩會撞擊下來。然而,他不可以預言一個大的事件什麼時候發生,由於這一點與整個沙堆位形的細微部分是息息相關的。
自組織臨界態中偶然性是相互關聯的,有學者認爲現實世界中的大量偶然性能夠理解爲自組織臨界性的結果。
沙堆預報者的情形和咱們複雜世界中天氣預報者的情形是相似的。經過經驗以及資料收集,他可以對局域的沙粒行爲進行「天氣」預報,可是這樣作沒法使他深刻了解「氣候」,由於「氣候」是由許多沙粒的滑動這種統計性所表徵的,例如滑動的大小以及頻率。
組成臨界系統的各部分不能隔離開來加以理解。局部所能觀察到的動力學反映了它是整個沙堆的一部分這樣一個事實。
在臨界態,沙堆是一個功能單位,而不是一粒粒的沙。局部的單元以它們實際的形式存在,這種形式是經過如局部坡度這樣的因素來表徵的,這僅僅由於它們是總體的一部分。
在顯微鏡下研究單個的沙粒並不能爲解釋整個沙堆的行爲提供線索。單個沙粒中的任何信息都不能用來講明沙堆中突發性質的出現。
沙堆從一種位形變到另外一種位形,不是逐漸地,而是以災難式的雪崩的形式。
根據冪次統計規律,大多數倒塌與大雪崩有關。而更多的頻繁出現的小雪崩加在一塊兒也算不上什麼。沙堆的演化是以變革的方式進行的,正如同卡爾·馬克思的歷史發展觀同樣。
事情經過變革而發生,而不是逐漸地發生,這偏偏是由於動力學系統在臨界態是均衡的。自組織臨界性是天然界在短期標度內製造巨大轉變的一種方式。
大多數時間裏,一我的周圍的世界一片平靜,這可能會使他認爲他實際上生活在一個穩定平衡的世界當中,其中天然界處於平衡狀態。然而,不時地,他的平靜生活被打斷了——沙粒不停地在他周圍翻滾,這樣的事情像黑天鵝同樣偶然爆發,並且各類尺度的爆發都會發生。
這可能會誘使那我的相信,他正在處理一種局域現象。緣由是,他能把他所觀察到的行爲與他周圍沙粒倒塌的動力學規則聯繫起來。可是不少時候,他所觀察到的局域斷續只是集體現象的一個組成部分。
例如:
」時代的一粒灰 落在我的頭上 就是一座山「。
過後人們能夠追蹤一個已發生過的特別大的雪崩的歷史。沙的滑動能夠用一種敘述的語言來描述,用歷史的而不是物理的方式。沙的預報者將講給咱們聽的故事是按下面這樣的方式進行的:
「昨天早上7點鐘,一粒沙落到了 A 格子上,座標爲(5,12)。這致使了位於(5,13)的 B 格點的倒塌。因爲留在 B 格子上的沙粒已經到了穩定的極限,於是這進一步致使了格點 C、D 以及 E 的倒塌。咱們已經很當心地跟蹤了全部接下來的倒塌事件,從歷史敘述的結果看來,很明顯,咱們本能夠避免這個大災難的發生,若是咱們把一粒沙從最初引起一連串事件的格子上移走。一切都不會發生了。」
諸如此類的說法,在咱們的歷史書上很是常見,例如:
這難免讓人經常感嘆,爲何咱們只能作過後諸葛亮?爲何咱們不能提早預知並經過適當的行動,改變特定歷史事件的行程呢?
然而,有兩個緣由使得這種思惟方式有缺陷。
對一個個體來講,他沒法經過作一些事情使他避開這些災難。 即使他可以弄平周圍的沙堆,從而對周圍進行一些修正,他仍是可能會被遠處而來的雪崩掃走,這並不是他自身的錯。命運對沙堆居民起着決定性的做用。
造成對比的是,位於平坦的非臨界沙堆上的觀察者能經過簡單的局部測量來避免這些災難,緣由是,他只須要知道他近鄰的一些信息就能進行預報,這兒咱們假設他已經有了沙堆中沙粒即將到達的信息。
毫無疑問,是臨界性使得沙灘居民的生活變得複雜起來。
」歷史不是簡單的重複,但總壓着相同的韻腳」。
沙堆這個比喻如此之好,以至於它已超越了物理學家們對複雜現象思考的領域。它彷佛包含了一切:
這是觀察世界的一種新方式,正如副總統安·戈爾在他的《處於平衡中的地球》一書中說的那樣:
沙堆理論——自組織臨界性——做爲一個比喻是沒法抵制的。人們能夠先試着把這種理論用於人類生命的不一樣發展階段。身份的造成與沙堆的造成是很是類似的,這當中每一個人都是獨特的,於是受到事件影響的程度也會不一樣。一旦某種個性的基本輪廓被揭示出來,那麼它就到達了臨界狀態。接着每一次嶄新的經歷都會反饋回來並影響到這我的的各個方面。反饋之時起直接做用,經過爲未來的改變做好鋪墊起間接做用。這個理論令我感興趣的緣由是,它幫助我明白了人生的真諦。
從表面看起來,要描述沙堆模型極其簡單。只須要文章的幾行就能徹底定義這個模型。爲何咱們不得不經過計算機模擬往前走呢?即經過數學公式推演的方式得到沙堆模型的解析解。
使人吃驚地是,截止目前,咱們不能!數學物理界一些頭腦最聰明的科學家曾一直在這個問題上鑽研,包括芝加哥大學的米奇·費根堡和利昂·卡當諾夫。以及以色列韋茲曼研究所的依特瑪·普諾基 亞。
他們考慮了一個甚至比咱們本文討論的模型還簡單的模型:
沙粒被放在一個一維的沙堆中,其中沙被堆在一條線上,而不是在一個二維平面上。這個模型自組織到了臨界點,可是沒有能導出任何解析的結果。例如,他們不可以證實雪崩聽從冪次定律。
數學是太複雜了。但不然它又能怎樣呢?咱們處理的是天然界中最複雜的現象,在一個長長的進程中信息慢慢地堆積。爲何咱們必然期待用一個簡單的數學公式來描述個態?
也許世界上就存在着一些複雜開放性問題,咱們沒法找到準確描述它們的數學公式,可是咱們可使用【簡化建模】的計算機工程思路,使用計算機技術進行建模,並經過迭代循環和優化技術,在可行的時間內尋找最優解。