复杂系统建模,一场和失控的掰手腕
说实话,我每次看到有人把复杂系统建模说得跟套公式一样简单,就忍不住想翻白眼。你见过真实系统吗?那玩意儿跟有脾气似的。
去年我在做一个城市交通流模拟的项目,就是那种经典的元胞自动机。看着代码跑起来,绿波带怎么调都别扭。最后一查,居然是某条街上一个早餐摊的随机停车行为没建模进去。真荒唐。那种感觉就像你解一道数学题,结果发现变量列表里漏了你家猫。
这就是复杂系统建模的日常。没有一劳永逸的万能模型,只有没完没了的跟现实对表。
复杂这两个字,真不是形容词
搞物理的人常说“多即不同”。复杂系统的核心在于:当一堆简单个体凑一块,会涌现出无法从单体推导的宏观行为。比如蚁群。
单个蚂蚁的行为大概能用十几行伪代码描述:找吃的、留信息素、跟着信息素走。但几十万只蚂蚁放在一起,它们能搭桥,能打仗,能建地下城,还能……在某些情况下形成一种诡异的“蚂蚁死亡漩涡”——就是一群蚂蚁绕着圈走到死那种。你没法从单只蚂蚁的规则里预测出这种死亡漩涡。超级计算机也不行。
所以复杂系统建模,第一步就是认怂:别想从底层规则直接推出顶层行为。你得换个思路。
多智能体建模:把混乱拆成几千个小家伙
现在主流的方法之一,是搞多智能体仿真。你可以把它理解为微观层面的一种“平行宇宙试验”。
具体做法就是把系统里的每个个体都描述成一个自主体,有自己的状态和行为规则。比如模拟传染病传播,每个人就是一个智能体,身体里装着一个状态机:易感、潜伏、发病、恢复。模型跑起来,几百万个体根据互相接触更新状态,最后你就能看到疫情曲线是怎么飙上去的。
我自己写过这种模型。说实话,跑起来的那一刻确实有点激动。但你别高兴太早——参数敏感性会让你抓狂。有篇论文我记得特别清楚,流感模型里一个接触概率参数从0.05改成0.06,疫情峰值能差出三倍。三倍啊。
你可能会问,那这模型到底有没有用?有用,但前提是你得清楚自己的模型在哪一层。复杂系统建模最忌讳的就是跨界推理。你把微观模型得到的结论直接套到宏观政策上,很容易翻车。
复杂系统多智能体传染病传播模拟图
换个角度:把系统当一张关系网
除了多智能体,另一个常用思路是网络科学。把复杂系统里的实体当节点,把相互作用当边。这个视角特别适合研究那些“牵一发动全身”的问题,比如电网、神经网络、或者社交网络。
你有没有想过,为什么有的网络特别脆弱?一个节点挂了,整个系统崩溃。有的网络就皮实得很?这就是网络拓扑在搞鬼。做复杂系统建模,很多时候你不是在算微分方程,而是在数一条路径到底有多少条岔路。
我之前看过一篇研究气候系统的网络分析论文,把全球气温观测站之间的相关性构建成网络,结果发现那个网络的结构在厄尔尼诺发生前会有明显的相位转变。感觉就像系统在发抖,提前告诉你它要作妖了。挺玄的吧?但数据摆在那里。
气候系统相关系数网络异常检测示意图
黑箱模型:数据爆炸时代的野路子
这两年,深度学习和图神经网络也杀进了复杂系统建模。很多人觉得这就是“终结者”,用一个大网络拟合所有时空数据,什么下游任务都搞定。
我用过几回,怎么说呢。数据充足的场景下,确实能学出一些令人头皮发麻的预测效果。比如股市的高频交易数据,有人说图神经网络能捕捉一些传统指标发现不了的关联。
但问题在于,黑箱模型那层网络权重,说实话你压根不知道它学的是系统的规律,还是某些噪声的巧合。更麻烦的是,复杂系统的场景往往是非稳态的。你拿十年前的数据训练出来的模型,放到今天的场景里,它可能就是在胡编乱造。我记得有个做电力负荷预测的朋友跟我吐槽,说他们模型在中西部地区训练得好好的,换到沿海城市就崩了。笑死。
那么问题来了:到底怎么选
要我说,做复杂系统建模,你得先问自己三个问题。
第一个问题:你要解释还是要预测?解释就老老实实搞机理模型,比如微分方程或者多智能体。预测的话,数据驱动的方法也许更划算。但预测得准备好被现实扇巴掌。
第二个问题:系统的尺度跨越多大?微观和宏观之间有没有强耦合?有的话,你可能需要混合模型。就是那种把机理和神经网络揉在一起的构建方式。这个当前是热门,学术圈管它叫物理信息神经网络,挺神的。
第三个问题:你的数据干净吗?复杂系统里的数据往往是脏的、有缺失的、带偏差的。你要是拿垃圾喂给模型,模型回你一个精美的垃圾,你还以为它多高级。
其实说了这么多,我想表达的是,复杂系统建模不是一个可以一键生成的工具。它更像一门手艺。你得会调参,会跟实地数据反复较劲。甚至有时候你得有那种“算了,先乱跑一把,看看会出来什么”的勇气。
毕竟,模型永远只是现实的某个侧面的影子。影子有时候可以帮你导航,但别指望影子就是路。