1. 沙堆模型
0x1:沙堆实验的简化过程描述
这篇文章,我们通过一个更加普遍而又简单的现象来更深入地讨论【自组织临界动力学】。沙堆是我们日常生活经验的一部分,在沙滩上玩过沙的孩子都懂得。
基于沙堆比喻的物理直觉会使人们对纯数学模型的行为有一个更好的理解。我们通常是从数学分析,而不是周围的其他方式中获得物理理解。
在讨论我们模型的数学表达形式以前,让我们先简单描述一下沙堆实验。
- 考虑放一个平整的台子,台子的这种平坦的状态就代表了 一种普遍的平衡态,这个平衡态具有最低能量,因为很显然我们必须加进一些能量才能把沙排列成形状各异的沙堆。
- 把沙缓缓地加到台子上,而且每次只加一粒沙。沙粒可以被加到任意的位置上,或者只加在某个点上,如台子的中心。
- 在最初的阶段,沙堆处于非临界态,
- 沙粒或多或少地会停留在它们落下的位置上。
- 一粒沙的加入只会导致一个局域的扰动,而对沙堆来说不会有任何戏剧性的事情发生。尤其值得注意的是,沙堆的某个部分所发生的事件不会影响位于沙堆较远部分的沙粒。在这个阶段上,沙堆内部并不存在整体的交流,而只是一些个别沙粒之间的交流。
- 当我们不断加进沙子的时候,沙堆会变得陡峭起来,并且小沙粒会滑动起来或者说雪崩发生了,沙堆进入自组织临界态。
- 沙粒会附在其他沙粒的顶部,同时跌到一个较低的层次。这个过程也会使其他沙粒轮流倒塌。
- 当沙堆变得更为陡峭的时候,一粒沙就很有可能使其他沙粒倒塌。
- 最终,当沙堆的陡峭到达一定程度的时候,沙堆就不可能再增长了,因为平均来看加到沙堆上的沙的数量与从沙堆边缘上掉下的沙的数量是相等的。这就称为一个【稳定态】,因为随着 时间的增长,沙的平均数量与沙堆的平均斜率都趋于常数。很明显,为了具有这种平均的平衡,整个系统内部必定存在着交流。偶尔,整个沙堆中也会有雪崩事件插进来。这就是【自组织临界(SOC)态】。
在刚开始的非临界状态中,沙粒遵从局域的动力学规则。在临界态下,沙堆遵循整体动力学规则。
在稳定的 SOC 态中,存在一个复杂系统,并且沙堆自身具有自然而生的动力学。沙堆的形成不可能从单个沙粒的性质中预先知道。
0x2:沙堆动力学系统简述
由于沙粒是自外部加入的,因而沙堆是一个开放的动力学系统。
沙堆有多个自由度,或者说沙堆中有很多粒沙。位于沙堆中的一粒沙就代表了一份势能,而势能的大小通过沙粒离台面的高度来测量。当沙粒倒塌的时候,其势能就转化为动能。当倒塌的沙粒逐渐静止下来的时候,这个动能就耗散掉了,也就是转化为了沙堆的热能。因此整个系统中就存在着能量的流动。
临界点之所以能获得,仅仅是因为能量是以新的沙粒的形式从外部输入的。
0x3:临界态必然是稳固的
相对于变动来说,临界态必须十分稳固,
这一点对于描述现实世界的自组织临界性这个概念来说,是极为重要的。
假定同样的系统达到它自身的临界态后,我们突然往沙堆上堆湿的沙而不是干的沙。湿沙的摩擦要比干沙的摩擦大一些。因而,过了一会之后雪崩会变得越来越小,而且慢慢地只在局部发生。离开这个系统(沙堆)的沙会变得越来越少,原因是小的雪崩不能到达台子的边缘。但是随着继续增加沙子,沙堆就会变得越来越陡,反过来这种情况又将导致雪崩变大。最终系统将进入到一种和当前系统所匹配的雪崩的临界态。这种状态下的沙堆将比最初的沙堆要陡一些。
又或者,如果我们试图设置一些局部的障碍来阻止雪崩的发生,如到处加一些“雪”屏,这就会导致一个类似的效应:刚开始雪崩会变小,但是最终沙堆的斜坡将变得足够陡从而越过了这些障碍。而这是由于越来越多的沙被迫到处流动的缘故。
沙堆的整体物理性质改变了,但是其动力学仍然是临界的。当我们试图使沙堆远离临界态的时候,它却最终又返回到临界态。
笔者插入:
所谓的稳固,并不是字面上的意思,静止不动的意思。复杂系统的稳固实际上是一种充满无限变化,同时又维持动态平衡的状态。如同人生一样,所谓的稳定,不是指永远保持当下的状态不变,相反,它是指当下的时点上充满了各个方向无限的可能。冬去春来,去糙存精,永远在变化,永远自我否定,永远在进化。
0x4:沙堆模型的计算机简化模拟
我们已经明确了沙堆模式的物理特征,但到目前为止这一切只不过是想象的产物,其中还带有一些来自实际经验的直觉。对于计算机科学的学者来说,我们可以使用计算机模型来对沙堆这个物理系统进行建模。
把沙粒落在其上的台面用一个二维的格子来代表。每个方格子都有一个坐标 (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 之间的加减运算。然而,这些方程的结果却是异常复杂,而且这些结果不能通过对方程的简单考察就推导得出来,那样做的结果只能了解沙粒的局域动力学行为。
可以在大脑中简单想象一下这个过程:
- 这个过程刚开始时,格点的高度都很低,因而没有不稳定的格点。所有格点的 Z 都小于 3,因而沙粒恰好就停留在它们落下时的位置上。
- 经过多次把沙加到方格子中,某处格子的高度必定且必然会超过 3,因而就有了第一个倒塌事件。而这个格子的四个邻近格子的高度不可能马上超过 3,因而没有更进一步的倒塌事件发生。
- 当这个过程继续下去的时候,很有可能至少一个邻近格子的高度会达到临界值,因而最初的倒塌事件就导致了第二个倒塌事件。一个倒塌事件导致下一个倒塌事件,就像倒下的多米诺骨牌一样。
- 当更多的沙粒加入的时候,就会有越来越大的滑坡事件,或雪崩,尽管也会有小的雪崩事件。
- 最终整个沙堆进入了一个稳定态,在这个稳定态中所有格点的平均高度不再增长。平均高度是 2 到 3 之间的某个数。沙堆永远不能到达最可能的稳定态(其中所有格点的高度均是 3),这是因 为在达到这个最终稳定态以前,由于大雪崩事件,沙堆已经被瓦解了。
我们可以通过数一数在任意时刻沙堆中总的沙粒数目来跟踪整个过程。
如同地球物理学家们对地震进行统计所用的操作过程一样。通过每次”沙崩“结束后连续地加沙,我们产生了大量的沙崩(比如 100 万次)。通过计算出大大小小的沙崩的数量,我们造出了一份“人工沙崩目录”。沙崩的“量级”就是沙崩大小的对数值。
同以往一样,对于给定的量级,计算出其数量的对数,然后作出关于二者之间的图。
结果表明,沙崩遵从古登堡—里特幂次定律。这是一个很令人振奋的结论!
使用计算机模拟的简化模型的好处在于,我们不必像地震学家那样,为了得到很多地震的数据等上几百万年,因而,我们的统计起伏比起地震本身的统计起伏要小一些,因为对后者我们要处理自然界为我们产生的数量要少得多的地震。
幂次定律表明稳定态是临界的。我们得出结论 : 沙堆已经自组织到了一个临界态。
我们必须要检验临界性在模型修正后仍是稳固的。无论我们如何修正沙堆,幂次定律都应当成立。我们试验了一连串不同的情形。
- 在一种情形中,临界高度不是取相同的 3,而是对不同的格子取不同的临界值。
- 把沙粒放在一个三角形的格子而不是方格子当中,从而防止沙粒从某些格子之中掉下来,这些格子是任选的,这样就模拟了雪屏。
- 我们并且试着加入不同大小的沙粒,也就是说,当沙粒落下时,我们不是一次增加一个单位,而是一次增加 0 到 1 之间的一个随机数。
- 我们放开这个模型,因而当格点变得不稳时便会有随机数量的沙倒塌。我们选择这样的格点,其中沙粒的倒塌以一种随机的方式进行,而不是朝向其邻近点。
在所有的情形中,沙堆都自组织到了一个伴随各种大小的雪崩的临界状态,临界性是无法避免的。
最后一点要注意的是,加入沙粒时的随机性并不影响幂次定律的出现。随机性与我们所观察到的复杂性行为毫不相关。
当研究更为复杂的系统时,意识到这个事实是很重要的。经济学处理的是代理人或多或少的随机行为,他们的想法当然不会在一开始就被确定下来。然而,尽管有极好的统计性质,这种随机性还是不能阻止系统演化到精确的临界态。
这一点很有趣,但也令人费解。系统如何置现实世界中显然的随机性不顾,而发展到一个自组织态?
实例代码如下:
# -*- 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()
0x5:沙堆模型计算机模型有实际意义吗
计算机科学家们的这个沙堆是对实际发生的一切所做的一个粗糙且过分简化的处理。
- 首先,实际的沙粒有不同的大小与形状。
- 一个真实沙堆的不稳定性不仅仅发生在沙堆表面,而且也会通过大面积裂缝的形成而发生。
- 倒塌取决于单个的沙粒是如何连在一起的。一个沙粒在下落的过程中,其运动由引力场所决定,引力场使其加速,而它与其他沙粒间的相互作用又使它减速。要使运动停止下来取决于多方面的因素,例如它所撞击的沙粒的形状以及在撞击点它的速度,并且不仅仅是附近一些点中沙堆的高度或者说坡度。
像诸如此类的因素还可以不断考虑下去。很快你就会意识到,想要制造出沙堆的一个实际模型是一种战略上的失误。
问题是,为什么最终这个简化的计算机模拟模型又得到了学界的广泛认同?它的合理性是建立在模型包含了基本物理思想的直觉之上的。
具体说来就是,
- 沙粒之间相互作用并且彼此之间会引起对方的倒塌。这一点是否正确,只有通过与实验比较后才能得以验证(或推翻)。
- 其次,我们对沙堆并不是特别感兴趣。我们期待着我们观察到的沙堆动力学足够普遍以致于它们能够被用到更广泛的现象中去。因此,构建沙堆模型的底层目的是为了找到普适的底层模型。
通过分析沙堆的几何特性,可以显示,沙堆的轮廓和挪威的海湾一样,是分形的。雪崩已经雕刻出沙堆的分形结构。
另外,通过分析沙堆沙崩的动力学过程,可以让我们对世界人口分布有一个更深的认识。
兹波夫的定律表明世界人口的区域分布,已自组织到一个临界态,其中城市是由于人口的流动而造成的雪崩形成的。
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
2. 沙堆的临界复杂性带给我们的启示
0x1:沙堆世界中的生命
当沙堆相对来说较浅的时候,他的经历会十分单调。不时地会有一些小的扰动出现,这时邻近的一些沙粒倒塌了。如果我们在某处落下一粒沙,这时在位形上只会导致一个很小的局域变动。决不会有一种方式使得扰动传遍整个系统。小的扰动得到的反应也是小的。
在一个非临界的世界里,不曾有任何戏剧性的事情发生。因此,做一个非临界系统平地上的天气(沙)预报员是很容易的。他不仅能够预 测将要发生的一切,而且他能够理解这一切到一种极限程度,也就是说,只要有事情需要理解,他就能理解。某个位置的行为并不依赖于很久以前在很远的位置所发生的事情。非临界态系统中的偶然性是互不相关的。
然而,一旦沙堆达到了稳定的临界态,情况就完全不同了。一粒沙可能就会导致一场包含整个沙堆在内的雪崩。位形上的一个小的变动可能会把本来不很起眼的小事情变成一场灾难事件。
沙堆预报者仍然可通过仔细确认规则,以及跟踪他周围的环境来做短时间的预报。
如果他发现一个雪崩事件即将而至,他会以某种概率程度预言什么时候雪崩会撞击下来。然而,他不能够预言一个大的事件何时发生,因为这一点与整个沙堆位形的细微部分是息息相关的。
自组织临界态中偶然性是相互关联的,有学者认为现实世界中的大量偶然性可以理解为自组织临界性的结果。
沙堆预报者的情形和我们复杂世界中天气预报者的情形是类似的。通过经验以及资料收集,他能够对局域的沙粒行为进行“天气”预报,但是这样做无法使他深入了解“气候”,因为“气候”是由许多沙粒的滑动这种统计性所表征的,例如滑动的大小以及频率。
组成临界系统的各部分不能隔离开来加以理解。局部所能观察到的动力学反映了它是整个沙堆的一部分这样一个事实。
在临界态,沙堆是一个功能单位,而不是一粒粒的沙。局部的单元以它们实际的形式存在,这种形式是通过如局部坡度这样的因素来表征的,这仅仅因为它们是整体的一部分。
在显微镜下研究单个的沙粒并不能为解释整个沙堆的行为提供线索。单个沙粒中的任何信息都不能用来说明沙堆中突发性质的出现。
沙堆从一种位形变到另一种位形,不是逐渐地,而是以灾难式的雪崩的形式。
根据幂次统计规律,大多数倒塌与大雪崩有关。而更多的频繁出现的小雪崩加在一起也算不上什么。沙堆的演化是以变革的方式进行的,正如同卡尔·马克思的历史发展观一样。
事情通过变革而发生,而不是逐渐地发生,这恰恰是因为动力学系统在临界态是均衡的。自组织临界性是自然界在短时间标度内制造巨大转变的一种方式。
0x2:人生中遇到的突发事件真的只是偶然吗?
大多数时间里,一个人周围的世界一片平静,这可能会使他认为他实际上生活在一个稳定平衡的世界当中,其中自然界处于平衡状态。然而,不时地,他的平静生活被打断了——沙粒不停地在他周围翻滚,这样的事情像黑天鹅一样偶然爆发,而且各种尺度的爆发都会发生。
这可能会诱使那个人相信,他正在处理一种局域现象。原因是,他能把他所观察到的行为与他周围沙粒倒塌的动力学规则联系起来。但是很多时候,他所观察到的局域断续只是集体现象的一个组成部分。
例如:
- 福建南平的某位生猪养殖户,拿出了自己90%的积蓄,租用了厂房,引进了大量的生猪,准备在来年大干一场。但是村名们都不看好他,因为猪肉的价格这几年一直持续低迷,而且短期内也很难看到有回高的迹象。但令人意外的是,过了新年后,猪肉的价格开始过山车似地疯涨,背后的原因也很简单,非洲的猪瘟爆发,导致猪肉出口锐减,国际猪肉价格每天都在猛涨,国内的猪肉价格也同样受到波及,同比去年上涨了400%。这位养殖户在2个月内就获得了丰厚的收益,他将自己的成功归因于自己的商业前瞻性以及养殖技术得当。但因为信息获取的原因,他并不知道猪肉上涨的真正原因。
”时代的一粒灰 落在个人头上 就是一座山“。
0x3:历史能够总结出规律吗?
事后人们可以追踪一个已发生过的特别大的雪崩的历史。沙的滑动可以用一种叙述的语言来描述,用历史的而不是物理的方式。沙的预报者将讲给我们听的故事是按下面这样的方式进行的:
“昨天早上7点钟,一粒沙落到了 A 格子上,坐标为(5,12)。这导致了位于(5,13)的 B 格点的倒塌。由于留在 B 格子上的沙粒已经到了稳定的极限,因而这进一步导致了格点 C、D 以及 E 的倒塌。我们已经很小心地跟踪了所有接下来的倒塌事件,从历史叙述的结果看来,很明显,我们本可以避免这个大灾难的发生,如果我们把一粒沙从最初引发一连串事件的格子上移走。一切都不会发生了。”
诸如此类的说法,在我们的历史书上非常常见,例如:
- 如果当初能有效处理于1914年6月28日在巴尔干半岛的波斯尼亚发生的萨拉热窝事件,也许第一次世界大战就不会爆发的。因为这件事成为了后续一连串事件的导火索。
- 如果当初那个苹果没有刚好砸中牛顿,也许就不会有后面的万有引力定律的提出。
- 经过一场地震之后,人们可以详细地报告所发生的一切。人们能够确认出是哪一 处断层断裂,从而精确地确定出震中。
这不免让人常常感叹,为什么我们只能做事后诸葛亮?为什么我们不能提前预知并通过适当的行动,改变特定历史事件的行程呢?
然而,有两个原因使得这种思维方式有缺陷。
- 首先,这个特定事件导致一场灾难的事实依赖于在那个特定时间里沙堆非常细微的结构。为了预言那个事件,人们将不得不以绝对的准确性测量每时每刻所发生的一切,而这一点是不可能办到的。
- 接下来,人们将不得不依据这些信息进行精确的计算,这一点同样是不可能做到的。对地震而言,我们必须去了解了一个很大的区域,如加利福尼亚,每一个地方详细的断层结构,以及作用在那些断层结构上的作用力。
- 其次,即便我们能够辨认出引发一连串事件的沙粒,并把它移走,但迟早在其他某个地方会产生另外一场灾难,也许同样会带来破坏性的后果,系统向临界状态的演进是不可阻挡的。
- 最重要的是,历史上的记录并不能为我们深入了解现今所发生的一切提供依据,尽管事实表明每一步都是从前面的步骤中按逻辑发展而来的。沙堆的演化历史发生在一个比观察周期要长得多的时间标度内。预报者不明白,为什么沙粒的安排是如此巧妙以致于它恰好能够容纳一个大的雪崩?为什么所有的雪崩不能都是小的?
对一个个体来说,他无法通过做一些事情使他避开这些灾难。 即便他能够弄平周围的沙堆,从而对周围进行一些修正,他还是可能会被远处而来的雪崩扫走,这并非他自身的错。命运对沙堆居民起着决定性的作用。
形成对比的是,位于平坦的非临界沙堆上的观察者能通过简单的局部测量来避免这些灾难,原因是,他只需要知道他近邻的一些信息就能进行预报,这儿我们假设他已经有了沙堆中沙粒即将到达的信息。
毫无疑问,是临界性使得沙滩居民的生活变得复杂起来。
”历史不是简单的重复,但总压着相同的韵脚”。
沙堆这个比喻如此之好,以致于它已超越了物理学家们对复杂现象思考的领域。它似乎包含了一切:
- 多个部分的集体行为
- 断续平衡
- 偶然性
- 不可预测性
- 命运
这是观察世界的一种新方式,正如副总统安·戈尔在他的《处于平衡中的地球》一书中说的那样:
沙堆理论——自组织临界性——作为一个比喻是无法抵制的。人们可以先试着把这种理论用于人类生命的不同发展阶段。身份的形成与沙堆的形成是非常相似的,这当中每个人都是独特的,因而受到事件影响的程度也会不同。一旦某种个性的基本轮廓被揭示出来,那么它就到达了临界状态。接着每一次崭新的经历都会反馈回来并影响到这个人的各个方面。反馈之时起直接作用,通过为将来的改变作好铺垫起间接作用。这个理论令我感兴趣的原因是,它帮助我明白了人生的真谛。
3. 我们能用笔和纸计算出幂次定律吗?
从表面看起来,要描述沙堆模型极其简单。只需要文章的几行就能完全定义这个模型。为什么我们不得不通过计算机模拟往前走呢?即通过数学公式推演的方式获得沙堆模型的解析解。
令人吃惊地是,截止目前,我们不能!数学物理界一些头脑最聪明的科学家曾一直在这个问题上钻研,包括芝加哥大学的米奇·费根堡和利昂·卡当诺夫。以及以色列韦兹曼研究所的依特玛·普诺基 亚。
他们考虑了一个甚至比我们本文讨论的模型还简单的模型:
沙粒被放在一个一维的沙堆中,其中沙被堆在一条线上,而不是在一个二维平面上。这个模型自组织到了临界点,但是没有能导出任何解析的结果。例如,他们不能够证明雪崩遵从幂次定律。
数学是太复杂了。但否则它又能怎样呢?我们处理的是自然界中最复杂的现象,在一个长长的进程中信息慢慢地堆积。为什么我们必然期待用一个简单的数学公式来描述个态?
也许世界上就存在着一些复杂开放性问题,我们无法找到准确描述它们的数学公式,但是我们可以使用【简化建模】的计算机工程思路,使用计算机技术进行建模,并通过迭代循环和优化技术,在可行的时间内寻找最优解。
4. 我们能预测下一次网络攻击吗?
作为一名网络安全从业者,笔者习惯性地将一切理论都和网络安全进行结合,尝试用新的理论和方法解决网络安全领域中的老问题。
回到这个问题上,我们能预测下一次网络攻击吗?
笔者认为这是做不到的,就拿地震预测这件事来类比。的确经过一场地震之后,人们可以详细地报告所发生的一切。人们能够确认出是哪一处断层断裂,从而精确地确定出震中。这些信息可能会使地震学家确信人们能预言大事件。“再多一点点资助”,就可能会成功。然而,沙堆模拟的经验告诉我们,事情并不总以那样的方式发展。因为,我们能极其精确地解释所发生的一切并不意味着我们能预言将要发生的一切。
在攻击发生的一瞬间,受害者系统是处于复杂临界态的,系统从正常状态,瞬间跌入了被入侵状态,这个状态的准确发生时间是无法预测的。
但是,我们可以进行【局部性预测】,也就是常说的“killchain事中检测”,在第一次攻击发生后,受害者系统产生的后续行为就变得可预测的,因为此时受害者系统已经处于非临界态了。