这篇文章,咱们经过一个更加广泛而又简单的现象来更深刻地讨论【自组织临界动力学】。沙堆是咱们平常生活经验的一部分,在沙滩上玩过沙的孩子都懂得。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 的倒塌。咱们已经很当心地跟踪了全部接下来的倒塌事件,从历史叙述的结果看来,很明显,咱们本能够避免这个大灾难的发生,若是咱们把一粒沙从最初引起一连串事件的格子上移走。一切都不会发生了。”
诸如此类的说法,在咱们的历史书上很是常见,例如:
这难免让人经常感叹,为何咱们只能作过后诸葛亮?为何咱们不能提早预知并经过适当的行动,改变特定历史事件的行程呢?
然而,有两个缘由使得这种思惟方式有缺陷。
对一个个体来讲,他没法经过作一些事情使他避开这些灾难。 即使他可以弄平周围的沙堆,从而对周围进行一些修正,他仍是可能会被远处而来的雪崩扫走,这并不是他自身的错。命运对沙堆居民起着决定性的做用。
造成对比的是,位于平坦的非临界沙堆上的观察者能经过简单的局部测量来避免这些灾难,缘由是,他只须要知道他近邻的一些信息就能进行预报,这儿咱们假设他已经有了沙堆中沙粒即将到达的信息。
毫无疑问,是临界性使得沙滩居民的生活变得复杂起来。
”历史不是简单的重复,但总压着相同的韵脚”。
沙堆这个比喻如此之好,以至于它已超越了物理学家们对复杂现象思考的领域。它彷佛包含了一切:
这是观察世界的一种新方式,正如副总统安·戈尔在他的《处于平衡中的地球》一书中说的那样:
沙堆理论——自组织临界性——做为一个比喻是没法抵制的。人们能够先试着把这种理论用于人类生命的不一样发展阶段。身份的造成与沙堆的造成是很是类似的,这当中每一个人都是独特的,于是受到事件影响的程度也会不一样。一旦某种个性的基本轮廓被揭示出来,那么它就到达了临界状态。接着每一次崭新的经历都会反馈回来并影响到这我的的各个方面。反馈之时起直接做用,经过为未来的改变做好铺垫起间接做用。这个理论令我感兴趣的缘由是,它帮助我明白了人生的真谛。
从表面看起来,要描述沙堆模型极其简单。只须要文章的几行就能彻底定义这个模型。为何咱们不得不经过计算机模拟往前走呢?即经过数学公式推演的方式得到沙堆模型的解析解。
使人吃惊地是,截止目前,咱们不能!数学物理界一些头脑最聪明的科学家曾一直在这个问题上钻研,包括芝加哥大学的米奇·费根堡和利昂·卡当诺夫。以及以色列韦兹曼研究所的依特玛·普诺基 亚。
他们考虑了一个甚至比咱们本文讨论的模型还简单的模型:
沙粒被放在一个一维的沙堆中,其中沙被堆在一条线上,而不是在一个二维平面上。这个模型自组织到了临界点,可是没有能导出任何解析的结果。例如,他们不可以证实雪崩听从幂次定律。
数学是太复杂了。但不然它又能怎样呢?咱们处理的是天然界中最复杂的现象,在一个长长的进程中信息慢慢地堆积。为何咱们必然期待用一个简单的数学公式来描述个态?
也许世界上就存在着一些复杂开放性问题,咱们没法找到准确描述它们的数学公式,可是咱们可使用【简化建模】的计算机工程思路,使用计算机技术进行建模,并经过迭代循环和优化技术,在可行的时间内寻找最优解。