阅读目录(Content)
回到顶部(go to top)
这篇文章,我们通过一个更加普遍而又简单的现象来更深入地讨论【自组织临界动力学】。沙堆是我们日常生活经验的一部分,在沙滩上玩过沙的孩子都懂得。
基于沙堆比喻的物理直觉会使人们对纯数学模型的行为有一个更好的理解。我们通常是从数学分析,而不是周围的其他方式中获得物理理解。
在讨论我们模型的数学表达形式以前,让我们先简单描述一下沙堆实验。
在刚开始的非临界状态中,沙粒遵从局域的动力学规则。在临界态下,沙堆遵循整体动力学规则。
在稳定的 SOC 态中,存在一个复杂系统,并且沙堆自身具有自然而生的动力学。沙堆的形成不可能从单个沙粒的性质中预先知道。
由于沙粒是自外部加入的,因而沙堆是一个开放的动力学系统。
沙堆有多个自由度,或者说沙堆中有很多粒沙。位于沙堆中的一粒沙就代表了一份势能,而势能的大小通过沙粒离台面的高度来测量。当沙粒倒塌的时候,其势能就转化为动能。当倒塌的沙粒逐渐静止下来的时候,这个动能就耗散掉了,也就是转化为了沙堆的热能。因此整个系统中就存在着能量的流动。
临界点之所以能获得,仅仅是因为能量是以新的沙粒的形式从外部输入的。
相对于变动来说,临界态必须十分稳固,
这一点对于描述现实世界的自组织临界性这个概念来说,是极为重要的。
假定同样的系统达到它自身的临界态后,我们突然往沙堆上堆湿的沙而不是干的沙。湿沙的摩擦要比干沙的摩擦大一些。因而,过了一会之后雪崩会变得越来越小,而且慢慢地只在局部发生。离开这个系统(沙堆)的沙会变得越来越少,原因是小的雪崩不能到达台子的边缘。但是随着继续增加沙子,沙堆就会变得越来越陡,反过来这种情况又将导致雪崩变大。最终系统将进入到一种和当前系统所匹配的雪崩的临界态。这种状态下的沙堆将比最初的沙堆要陡一些。
又或者,如果我们试图设置一些局部的障碍来阻止雪崩的发生,如到处加一些“雪”屏,这就会导致一个类似的效应:刚开始雪崩会变小,但是最终沙堆的斜坡将变得足够陡从而越过了这些障碍。而这是由于越来越多的沙被迫到处流动的缘故。
沙堆的整体物理性质改变了,但是其动力学仍然是临界的。当我们试图使沙堆远离临界态的时候,它却最终又返回到临界态。
笔者插入:
所谓的稳固,并不是字面上的意思,静止不动的意思。复杂系统的稳固实际上是一种充满无限变化,同时又维持动态平衡的状态。如同人生一样,所谓的稳定,不是指永远保持当下的状态不变,相反,它是指当下的时点上充满了各个方向无限的可能。冬去春来,去糙存精,永远在变化,永远自我否定,永远在进化。
我们已经明确了沙堆模式的物理特征,但到目前为止这一切只不过是想象的产物,其中还带有一些来自实际经验的直觉。对于计算机科学的学者来说,我们可以使用计算机模型来对沙堆这个物理系统进行建模。
把沙粒落在其上的台面用一个二维的格子来代表。每个方格子都有一个坐标 (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()
计算机科学家们的这个沙堆是对实际发生的一切所做的一个粗糙且过分简化的处理。
像诸如此类的因素还可以不断考虑下去。很快你就会意识到,想要制造出沙堆的一个实际模型是一种战略上的失误。
问题是,为什么最终这个简化的计算机模拟模型又得到了学界的广泛认同?它的合理性是建立在模型包含了基本物理思想的直觉之上的。
具体说来就是,
通过分析沙堆的几何特性,可以显示,沙堆的轮廓和挪威的海湾一样,是分形的。雪崩已经雕刻出沙堆的分形结构。
另外,通过分析沙堆沙崩的动力学过程,可以让我们对世界人口分布有一个更深的认识。
兹波夫的定律表明世界人口的区域分布,已自组织到一个临界态,其中城市是由于人口的流动而造成的雪崩形成的。
www.moxinylzc.cn www.qitianylezc.cn
www.hongszaix.cn
www.baijiazaixian.cn
www.hengxun2zc.cn www.hengxuangyul.com
www.zhuyngyule.cn
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
回到顶部(go to top)
当沙堆相对来说较浅的时候,他的经历会十分单调。不时地会有一些小的扰动出现,这时邻近的一些沙粒倒塌了。如果我们在某处落下一粒沙,这时在位形上只会导致一个很小的局域变动。决不会有一种方式使得扰动传遍整个系统。小的扰动得到的反应也是小的。
在一个非临界的世界里,不曾有任何戏剧性的事情发生。因此,做一个非临界系统平地上的天气(沙)预报员是很容易的。他不仅能够预 测将要发生的一切,而且他能够理解这一切到一种极限程度,也就是说,只要有事情需要理解,他就能理解。某个位置的行为并不依赖于很久以前在很远的位置所发生的事情。非临界态系统中的偶然性是互不相关的。
然而,一旦沙堆达到了稳定的临界态,情况就完全不同了。一粒沙可能就会导致一场包含整个沙堆在内的雪崩。位形上的一个小的变动可能会把本来不很起眼的小事情变成一场灾难事件。
沙堆预报者仍然可通过仔细确认规则,以及跟踪他周围的环境来做短时间的预报。
如果他发现一个雪崩事件即将而至,他会以某种概率程度预言什么时候雪崩会撞击下来。然而,他不能够预言一个大的事件何时发生,因为这一点与整个沙堆位形的细微部分是息息相关的。
自组织临界态中偶然性是相互关联的,有学者认为现实世界中的大量偶然性可以理解为自组织临界性的结果。
沙堆预报者的情形和我们复杂世界中天气预报者的情形是类似的。通过经验以及资料收集,他能够对局域的沙粒行为进行“天气”预报,但是这样做无法使他深入了解“气候”,因为“气候”是由许多沙粒的滑动这种统计性所表征的,例如滑动的大小以及频率。
组成临界系统的各部分不能隔离开来加以理解。局部所能观察到的动力学反映了它是整个沙堆的一部分这样一个事实。
在临界态,沙堆是一个功能单位,而不是一粒粒的沙。局部的单元以它们实际的形式存在,这种形式是通过如局部坡度这样的因素来表征的,这仅仅因为它们是整体的一部分。
在显微镜下研究单个的沙粒并不能为解释整个沙堆的行为提供线索。单个沙粒中的任何信息都不能用来说明沙堆中突发性质的出现。
沙堆从一种位形变到另一种位形,不是逐渐地,而是以灾难式的雪崩的形式。
根据幂次统计规律,大多数倒塌与大雪崩有关。而更多的频繁出现的小雪崩加在一起也算不上什么。沙堆的演化是以变革的方式进行的,正如同卡尔·马克思的历史发展观一样。
事情通过变革而发生,而不是逐渐地发生,这恰恰是因为动力学系统在临界态是均衡的。自组织临界性是自然界在短时间标度内制造巨大转变的一种方式。
大多数时间里,一个人周围的世界一片平静,这可能会使他认为他实际上生活在一个稳定平衡的世界当中,其中自然界处于平衡状态。然而,不时地,他的平静生活被打断了——沙粒不停地在他周围翻滚,这样的事情像黑天鹅一样偶然爆发,而且各种尺度的爆发都会发生。
这可能会诱使那个人相信,他正在处理一种局域现象。原因是,他能把他所观察到的行为与他周围沙粒倒塌的动力学规则联系起来。但是很多时候,他所观察到的局域断续只是集体现象的一个组成部分。
例如:
”时代的一粒灰 落在个人头上 就是一座山“。
事后人们可以追踪一个已发生过的特别大的雪崩的历史。沙的滑动可以用一种叙述的语言来描述,用历史的而不是物理的方式。沙的预报者将讲给我们听的故事是按下面这样的方式进行的:
“昨天早上7点钟,一粒沙落到了 A 格子上,坐标为(5,12)。这导致了位于(5,13)的 B 格点的倒塌。由于留在 B 格子上的沙粒已经到了稳定的极限,因而这进一步导致了格点 C、D 以及 E 的倒塌。我们已经很小心地跟踪了所有接下来的倒塌事件,从历史叙述的结果看来,很明显,我们本可以避免这个大灾难的发生,如果我们把一粒沙从最初引发一连串事件的格子上移走。一切都不会发生了。”
诸如此类的说法,在我们的历史书上非常常见,例如:
这不免让人常常感叹,为什么我们只能做事后诸葛亮?为什么我们不能提前预知并通过适当的行动,改变特定历史事件的行程呢?
然而,有两个原因使得这种思维方式有缺陷。
对一个个体来说,他无法通过做一些事情使他避开这些灾难。 即便他能够弄平周围的沙堆,从而对周围进行一些修正,他还是可能会被远处而来的雪崩扫走,这并非他自身的错。命运对沙堆居民起着决定性的作用。
形成对比的是,位于平坦的非临界沙堆上的观察者能通过简单的局部测量来避免这些灾难,原因是,他只需要知道他近邻的一些信息就能进行预报,这儿我们假设他已经有了沙堆中沙粒即将到达的信息。
毫无疑问,是临界性使得沙滩居民的生活变得复杂起来。
”历史不是简单的重复,但总压着相同的韵脚”。
沙堆这个比喻如此之好,以致于它已超越了物理学家们对复杂现象思考的领域。它似乎包含了一切:
www.baiweiegw.com
www.jintianxuesha.com
这是观察世界的一种新方式,正如副总统安·戈尔在他的《处于平衡中的地球》一书中说的那样:
沙堆理论——自组织临界性——作为一个比喻是无法抵制的。人们可以先试着把这种理论用于人类生命的不同发展阶段。身份的形成与沙堆的形成是非常相似的,这当中每个人都是独特的,因而受到事件影响的程度也会不同。一旦某种个性的基本轮廓被揭示出来,那么它就到达了临界状态。接着每一次崭新的经历都会反馈回来并影响到这个人的各个方面。反馈之时起直接作用,通过为将来的改变作好铺垫起间接作用。这个理论令我感兴趣的原因是,它帮助我明白了人生的真谛。
回到顶部(go to top)
从表面看起来,要描述沙堆模型极其简单。只需要文章的几行就能完全定义这个模型。为什么我们不得不通过计算机模拟往前走呢?即通过数学公式推演的方式获得沙堆模型的解析解。
令人吃惊地是,截止目前,我们不能!数学物理界一些头脑最聪明的科学家曾一直在这个问题上钻研,包括芝加哥大学的米奇·费根堡和利昂·卡当诺夫。以及以色列韦兹曼研究所的依特玛·普诺基 亚。
他们考虑了一个甚至比我们本文讨论的模型还简单的模型:
沙粒被放在一个一维的沙堆中,其中沙被堆在一条线上,而不是在一个二维平面上。这个模型自组织到了临界点,但是没有能导出任何解析的结果。例如,他们不能够证明雪崩遵从幂次定律。
数学是太复杂了。但否则它又能怎样呢?我们处理的是自然界中最复杂的现象,在一个长长的进程中信息慢慢地堆积。为什么我们必然期待用一个简单的数学公式来描述个态?
也许世界上就存在着一些复杂开放性问题,我们无法找到准确描述它们的数学公式,但是我们可以使用【简化建模】的计算机工程思路,使用计算机技术进行建模,并通过迭代循环和优化技术,在可行的时间内寻找最优解。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。