深度分析:我们的世界真的存在造物主吗?(中,12000字)

发布者:凉月入秋 2023-4-24 20:12

我们来看一个经典的基本量子实验:惠勒延迟选择实验。

“延迟实验”是由爱因斯坦的同事约翰·惠勒提出的,也是传说中的世界观颠覆者,人生观毁灭者,因果律杀手,理科生躁郁症的重大致病因素之一,毁人不倦的经典实验。

为了方便不太了解该实验的朋友,我花一点文字把实验的具体设置和过程描述一下,如果熟悉的高手们尽可略过。

该实验的具体布置非常简单,一共只用到七件主要的实验仪器,分别是单光子光源,半透镜O,全反射镜A和B,半透镜C和两只接收器(探测器)。所谓半透镜,就是一种半镀银的透镜,有50%的概率会反射光线,50%的概率会让光线直接通过。

我们先不在C处放置透镜和接收器。如果这时从光源处发射一只光子,那么光子会怎样传播呢?不太熟悉量子物理的朋友可能会说,那光子应该50%概率走上边,沿着OAC路径传播,50%概率走下边,沿着OBC路径传播。这样说也没错,如果现在光呈现出粒子特性的话,的确会如此。

但是,我们都知道光具备波粒二象性,它还可能像波一样传播。如果像波一样,那么光就会同时走上下两条路径,同时到达C点。这时候,如果你在C点放置一个屏幕的话,同时沿着两条路径到达的光波还会与自身发生干涉现象,在屏幕上呈现出干涉图案来。

那么,光到底会呈现出粒子特性还是波动特性呢?答案是,取决于实验者所采取的观测手段而定!

如果实验者在OAC或者OBC的路径上放探测器,检查光子具体从哪条路径传播,那么光子就马上会呈现出粒子特性,只会从一条具体的路径传播,在C点屏幕的干涉图案就消失了。而如果我们不去检测光子走的哪条路径,故意忽视光子的路径信息的话,光子就会呈现波动特性,干涉图案又出现了。

说到这里,可能不熟悉量子力学的朋友已经有点纳闷了,为什么观测的方式会决定光子的行为,光子又是如何得知我们会怎样观测它呢?但其实,这还不是这个实验最离谱的地方。科学家们决定再将实验推进一步,科学家们决定让光子先出发,等光子已经经过了透镜A或者B之后,再决定如何观测。

具体的做法就是在C点,我们再准备一个半镀银的透镜和两只探测器,然后我们就可以先等光子发射,然后精确的控制时间,计算光子的飞行时间,等到光子已经经过了A或者B点之后,再决定是否插入C半透镜,那么现在就可能有两种情况:

1. 不插入C半透镜,那么检测器可以准确的了解光子从哪条路径而来,光子呈现出粒子特性,只有两个探测器检测到光子的概率均为50%

2. 插入C半透镜,那么不同路径而来光子再一次经过了半透镜的概率反射,我们将无法判断光子具体的路径信息,光子就呈现出了波动特性,并在C点发生自我干涉,经过调整可使一边的探测器始终能检测到光子。

这样,我们就可以不同的探测器输出模式来判断光子究竟展现的何种特性,以及插入C半透镜有没有影响光子之前的行为。结果实际实验中先发生的光子行为果然非常诡异和后发生的观测手段完美匹配了起来,实验说明实验者在C点插入半透镜的行为虽然在光子经过AB点的时间点之后,但是却影响了光子在整个传播过程中的特性表现。

这就好像是两者之间的因果关系被倒置了一般,我们居然用置后的观测手段的改变反过来影响了之前发生的光传播事件,真实世界为什么会发生这种事?

从实验逻辑上来看,实验中事件发生的顺序似乎是这样的: 单光子发射 → 经过半透镜O → 经过镜子A或B → 半透镜C被插下 → 回溯修改传播路径 → 经过半透镜C → 到达探测器 这已经完全不能理解了是吧,而且科学家们还在此基础上继续推进了一步,他们决定将实验中OA和OB的距离继续加大到星际空间的尺度,采用引力透镜来代替实验中的普通透镜。

结果大家猜怎样?实验结果果然与距离大小无关,光子依然我行我素。

不过在这个实验里,将尺度放大到这么夸张的地步后,给人的感觉就非常毛骨悚然了。假设OA和OB的距离有一百万光年,那会发生什么?也就是说,我们可以等光子发射后,飞行了快一百万年之后,再决定是否插下半透镜C,观测手段一旦改变,光子就得去修改之前一百万年的传播路径,这可以想象吗?

那么,这漫长的一百万年的岁月里,这颗光子究竟在哪里呢?是同时在OA和OB吗?还是哪里都不在呢?它怎么有能力去改变百万年前发生的事情呢?

好了,我们先放下这个细思极恐的问题,来看看游戏版本的延迟实验诠释吧,也许世界还有救。

我们先定义下这个游戏的开发需求: 有一位会发射隐形火球的法师,他发射的隐形火球既能像粒子一样飞行,也可以像波一样传播,至于究竟什么时候会怎样我们先放一边。

接着我们又设计了一些道具,包括两块可以一半概率反射火球法术的魔晶O和C,然后还有两个魔法反射镜,两个当做目标的挨打小精灵。

好了,按图摆好位置后,一个魔法版的延迟实验我们就可以布置出来了。

接着,我们抓了一位码农,让他来完成这个实验的整个过程。 码农愁眉苦脸的琢磨了一会后,考虑到计算资源的紧张,他发现他不能无止境的计算火球每时每刻的位置和状态,这样做既消耗资源,又没有意义,他应该在关键时刻计算火球的命中结果就好了。

那应该在什么时候进行计算呢,码农分析了一下火球飞行的全过程,他发现有几个时间点可以选择:

第一个时间点就是火球刚刚发射的时候,这时候发射路径方向已经确定,因此全路径情况系统基本都已经得知,但是缺点是在火球飞行的过程中路径上的情况随时随地都会变化,所以系统需要关注路径上任何变化,这样计算量比跟踪火球还大了,所以此时计算过早了;

第二个时间点是路程中遇到交互事件的时候计算,比如遇到魔晶,或者中途跳进来的小精灵等等,但是这种事件太多了,比如说火球碰到了空气中的灰尘算不算呢,如果可能事件这么多,连续进行跟踪计算岂不是和实时计算也没区别了,起不到节省资源的作用。那么能不能找个时间统一结算呢?那什么时间统一结算最合适呢?

码农思考了一下感觉应该在观测之前的最后一刻计算最好,因为这样计算不会漏掉任何路径。所以码农选择了第三个时间点,也就是观测前的最后一刻进行火球飞行的全路径结算。 码农决定这样来安排整个实验的事件过程:

1. 先计算出火球的飞行路径,遍历所有会到达目标点(观测点)的可能路径,然后播放火球发射动画;

2 系统每隔一个普朗克时间就判断下所有路径上火球应该到达位置上有无观测事件发生,如果没有的话系统就继续idle,进入空闲等待状态;

3 一旦当系统检测到有观测事件即将发生以后,立刻根据观测点位置回溯检查传播路径上的所有交互事件,并进行概率计算。因为系统并没有记录任何过程变化,所以系统只能用当前的路径情况进行计算。又因为现在是用概率进行叠加计算,所以再小的路径概率也会叠加进来,而不会被丢弃。系统会回溯观测点到发射点的所有可能传播路径,并以当前的路径情况以波函数的形式把传播路径上的一切交互事件全部混合一起进行概率计算,以得到最后的总概率函数;

4.系统根据最后计算出的最终概率输出观测结果,最后再重置火球的函数。 码农测试了一下,按这个终点结算的算法非常节省系统开销,而且结果误差也很小,完美实现了客户需求。唯一的问题就是在最后计算的时候,因为系统已经没有火球飞行过程中路径的变化信息了,所以只能以最后一刻的路径情况来进行概率结算,但是与节省的资源相比,这点小破绽还是可以容忍的。

现在大家是否明白了,码农的这个算法其实非常省事,他并没有关注火球(光子)在传播过程中遇到的任何事件,他默认到检测点的时候当前的路径情况就是火球(光子)在飞跃过程中所经历的实际情况,这样的做法在玩家看来当然会出现因果倒置的错觉,因为玩家在路径上那些趁火球(光子)飞过之后做的事情其实毫无意义,因为码农只到最后才结算全路径的概率,所以,火球(光子)击中目标那一时刻路径的现状才是真正能影响最后结果的。而之前发生的任何事件,都被系统无情的忽略了。

之前玩家在插入魔晶C的时候,以为火球已经越过了AB魔法反射镜,正在前往魔晶C的飞行路径上,但我们现在知道了,这个所谓飞行中的火球只不过是玩家的想象而已,它并不存在,而这个过程中系统后台其实什么都没干,只是在发呆和等待而已,玩家那些插来取出的行为其实都只不过是瞎忙活而已。直到后台发觉火球马上就要击中目标点小精灵的最后一刻,才会把最新的路径情况代入到火球的波函数里计算出最终命中概率,并进一步得到最终粒子位置结果。

所以这个算法中,有交互(观测)才有输出,和外部无交互的时候,系统idle就好了,用不着时时刻刻的去移动火球位置,也不用时时刻刻更新火球的状态。所以在每个火球的交互行为(被观察)之间,火球没有任何行为发生,它只待在代码里,等待观测事件的发生而已。

这个看起来很偷鸡的算法,其实很好的反应出了一个称职码农的技术修养,一个优秀的程序员肯定是只关注用户所需要的输出结果,所以系统在没有观测事件的时候,当然没有必要将一个物体在三维坐标系里移来移去浪费系统开销,一切粒子运动过程在码农眼里都毫无意义。

就像设计FPS游戏一样,玩家开枪的时候给他画个开火的动画,然后根据距离算算子弹飞行时间,等到了时间再根据实际情况算下命中概率和位置,如果命中再画个击中动画就好了,子弹飞行过程?不存在的。所以,这个世界上其实也没有什么光子在飞行,光子被发射后就不存在实体了,有的只是宇宙母机的系统在后台默默的计时和轮检路径事件变化而已。

光子也不用千幸万苦的耗费百万年的飞行路程来到我们眼里,或者来到天文台的望远镜的底片上,这些事件在我们抬头仰望星空的时候,就已经被合理的插入到某些粒子的事件序列里了,到了该执行的时候,交互事件就会自然触发,而你眼睛里的视神经细胞就会感受到事件的影响结果。

所以每个微观粒子的飞行运动过程,其实都是系统在后台不断刷新一个未来待执行的路径交互事件序列而已,只要事件还未被执行就可能因为环境变化而改变,所以随便科学家们把路径上的透镜插来插去都没关系,系统最终只会以事件执行前最后一个普朗克时间时事件的刷新结果来执行输出,光子也不用那么劳累隔一会就要去回溯更改历史。

那一百万年,它哪里都不在,只有系统在后台假装它在飞行穿越空间而已。

各位码农们,你们是否也认为这样才是最合理的算法呢? 这是一个神奇的思想模式,一旦你们开始用程序员的思维理解量子行为后,很快就可以给各种量子实验加上算法解释,包括什么魔术擦除实验,什么量子纠缠,什么双缝干涉,还有什么猫猫狗狗的,观测者难题也迎刃而解,整个世界顿时全然不同。

熟悉量子力学的朋友也可以来比较下你所知的延迟实验的诠释和游戏版本的相比如何,拿起你的奥卡姆剃刀来挥舞下,看看谁更简洁易懂? 现在,是不是你也觉得这个世界有点不太真实了?

既然我们的脑洞已经开到这个程度了,大家还在热烈关注本话题,那么看来只好把我们的洞继续往深处挖挖看罗。

续接前文说到,我们已经反复讨论了假设世界虚拟化的可能性,那么如果真的这个世界是虚拟的,对我们有什么帮助呢,比如说我们用程序员的思维能获得更多对当前世界的理解吗? 更有价值的内容暂时也没有能力去推演,不过我们还是可以从理解量子力学的角度来看看,用程序员思维我们能不能够更理解量子现象呢?

比如,光为什么会具有波粒二象性? 从程序实现的角度思考,光的本质就是概率+波动方程编写出的一个算法函数。在光传播中触发的交互事件在不被观测的时候,宇宙母系统(后面我们简称系统)就会默认事件只有发生的概率而没有实质发生,那么一切事件都会先叠加成一个类似脚本的执行序列。

一旦我们进行观测,该脚本就会立刻被执行输出具体结果,光子也看上去就有了具体的位置,表现的更像粒子了。而之前脚本叠加的阶段,则充分展现了波函数的特征。

我们理解这个逻辑之后,也可以用来做一些思想实验,比如我们尝试在延迟选择实验基础上多搞一些花样看看。

比如说:我们可以在惠勒实验中,等待光子发射之后,计算时间在其经过了半透镜O之后,去改变O的反射率,将反射率从50%调整为30%(我想通过某些液晶技术应该可以实现瞬时的调整吧),那么在C点再进行观测的话,光子走OAC路径和OBC路径的概率会发生变化吗?

答案应该是会,因为概率计算只会以观测前最后一刻的路径信息为准,在观测的时候透镜的反射率是多少,光子在不同路径的传播概率就应该是多少。 我们还会发现在光子传播的整个过程中,系统基本只记录和叠加各种交互事件概率,输出都是等到最后观测的时候才发生。为什么这个宇宙系统不喜欢记录具体的数值,而只记录概率呢?

因为这套处理体系不擅长记录具体精确的数值! 如果我们把粒子看做一个计算函数的话,我们会发现系统记录粒子的精确数值,包括各种内禀属性,位置,速度等等的能力非常弱,每类属性只能保存一个当前值,一旦刷新的话,之前保存的值就会被丢弃。

而且粒子函数里保存的带精度的数值之间还需要共享有限的储存容量。如果我们要求某一个值输出的足够精确的话,其他数值就无法保持精度了。比如速度和位置这两项就共用了同一个输出字节空间,某一项输出占用的小数空间太大,另一项就只能被迫减少小数位数,这就是所谓海森堡的测不准现象,我怀疑这套算法在设计的时候似乎并没有考虑到有人会要求输出这么多项精确的数值结果。

但是反过来,这套算法保存概率和处理概率运算的能力却非常非常的强。

粒子在各种交互事件里发生属性改变的概率,只要不要求输出结果,系统都可以瞬间完成概率的各种改变和运算。 所以,我们用这种特性制造出来的量子计算机也同样如此,量子比特非常擅长保存和运算概率,但是具体的数值却需要依靠经典方式来存储。而这种概率的叠加过程计算,用经典计算机来模拟就非常的消耗资源了,因为需要不断的记录海量的中间状态,且计算量随着粒子和事件的数量指数上升。

模拟宇宙的这台超级母机也是量子的,所以它非常讨厌具体数值,讨厌追求精确。在它擅长的这套处理模式下模拟出的整个宇宙其实是一个以时间为轴,各种粒子不断叠加交互概率的混沌汤。无数的粒子不断的产生,运动,碰撞,分裂,相互纠缠,退相干,湮灭,这个过程中无数的概率事件都重重叠叠的记录到个每一个粒子的函数内部里,这整个宇宙就是一大个无比复杂的概率演算场,而概率其实才是这个宇宙的最底层最重要的数学机制。

有人说,这个体系似乎也很讨厌观测者的存在,观测者不断的打断系统自然的概率演算,不仅要求输出结果,还要刷新粒子状态。那如果观测者太多的话,是否会导致系统效率下降呢? 要思考这个问题之前,我们需要了解清楚的一个问题是,你怎么知道这个系统里究竟有多少的观测者呢?或者进一步追问,怎样才算观测者呢?

不熟悉量子理论的朋友经常会问类似这样的问题:在量子世界里,怎么才叫做观测?婴儿看算吗?动物看算吗?摄像机看算吗?AI看算吗?

比如,在薛定谔的猫这个思想实验里,有只鹦鹉在盒子里看到了猫的状态,这算观测吗?

其实这个问题的答案很简单,如果一只鹦鹉看到了,但是它无法说话,不能告诉你的话,那么这只鹦鹉就和盒子里的即死又活的猫就一起进入到一种量子状态了,准确说是鹦鹉看到盒子里的情况后,脑子理解后发生改变的部分加入到这整个量子的波函数体系里去了。

对于你来说,只要你无法知道具体的信息,那么无论谁看了都没用。 所以整个世界里发生的量子事件,对你来说谁看到了都不算观测,如果没有最终告诉你的话,那么一切和事件相关的人或者事都只是继续卷入到概率事件中而已,而你才是最终坍缩一切量子态的终结者!

神奇吧,你就是这么的优秀,你才是(你的)世界的唯一的主角!你玩的,其实是一个单机游戏,你没有玩的内容,都只是不占资源的静态代码而已。现在你不担心系统会被玩崩了吧,所以大家放心生娃吧,就算无限增加人口数量也不会拖慢系统效率的。

这还真不是胡扯,在量子物理学里,这个概念有个名称叫做“人本原理”。说白了就是一切你无法观测的世界与你无干,你只会存在在你可以观察的世界里,你的主观意识才是推动世界真实存在的唯一原因。 (不信?你试试用枪对准自己脑袋来一发,保证不会死。因为你因为死亡导致意识消失的话,那你就不会存在在一个没有你的意识的世界里。只要有任何极小的概率导致你不死,那么你必定会存在在那个世界里,在你的世界里,你当然会活得好好的。)

看过这段话的朋友请务必不要相信,切切不要在我的世界里尝试自杀,也不要因此就走上了挑战极限运动的道路,在我世界里你真的会死的,而我不保证你还有存活的概率,请不要让我因此产生愧疚感。

好了,很晕是吧。这也可能就是量子物理发展下去最终会撞上的无解的哲学壁垒:主观与客观的认知之墙。究竟这个世界到底是在我们的主观认知里存在,还是真实的客观存在呢?换个说法,我们究竟玩的是个单机游戏呢,还是个网络游戏呢?物理学到这里已经无能为力了。

我们身处在这个世界之中,受到这个世界的规则约束之下,可能永远也不能真正得知真相。我们无法顺着网线爬到另外一台终端前看看有没有活人在操作同一个游戏里的角色,我们每个人都无法跳出我们当前的世界维度来认知和理解这个世界,这可能就是人类科学发展的真正极限所在了。

幸好我们的科学不关心此事,科学从来不去研究这些所谓终极的,本质的,不可知的,而又毫无现实意义的问题。

科学只研究当下我们所能理解的客观规律,哪怕我们玩的是个单机游戏,那也当做网络游戏来看待,哪怕客观世界并不存在,我们同样还是当做客观世界来看待。科学只关心对我们有帮助的东西,管它究竟是虚幻的还是真实的。

所谓科学精神,其实是一种哪怕真相很可怕,甚至永不可知,但是我们还是满怀希望去探索可知的文明生存哲学。依靠这套哲学,人类哪怕永远无法突破当前的世界维度,也同样能享受文明存在的价值和意义! 是啊,多好的世界啊,与其痴问上天,不如认真在这个红尘里打打滚。

除了上面举例的延迟选择实验,还有没有其他的类似现象能用虚拟世界的设想来诠释?我认真思考了一下。

其实,几乎所有我了解的量子实验都可以用类似的思想来解释,但是因为过于复杂,不利于大家理解,所以我不想再描述更复杂的量子实验了。但我最近正好在看一些游戏类的帖子,在看到一篇有关3D游戏的帖子的时候正好想到了一个类似的对应现象可以谈谈。

而这个现象涉及到量子的另外一个诡异的行为,这个诡异行为就是所谓的“量子隧穿效应”。

所谓量子的隧穿效应,就是指粒子在某些尺度下,会随机的直接越过一些高能的位势垒,通俗说就是穿墙而过了。只要墙壁足够薄的情况下,基本粒子靠近墙壁的时候都有可能概率直接穿过临近的墙壁屏障而出现在墙壁的另一边。这听起来自然也是违背常识的,为什么尺度小的一定程度,阻挡对于粒子来说就可以偶尔消失掉?

这在经典物理学中是无法解释的,一个小球想要穿过哪怕是极薄的纸,也不可能既不付出任何能量,也不弄破这张纸。可是在量子世界里,粒子就是这样诡异的越过了足够薄的障碍。

也正是存在这个隧穿效应,才导致我们现在的微电子芯片技术发展到1纳米时代就碰上了继续缩小尺寸的物理学障碍。芯片里阻隔电子的材料如果尺寸小到5纳米以下,量子隧穿效应导致的漏电现象就不可忽视了,如果尺寸进一步减小,那么漏电问题将更加严重,从而导致芯片的逻辑电路无法正常工作。这个问题已经成为芯片技术继续发展需要克服的最大障碍了。

当然,反过来,科学家也利用这个效应开发了很多具备实用价值的应用。比如隧道电子扫描技术等等,利用隧穿效应制作的隧道扫描电子显微镜可以帮助我们看到原子尺度的微观世界,这充分说明量子隧穿效应确实是真实存在且已经直接进入到日常技术的应用领域了。

不过我们的重点是,怎样理解这个效应呢?如果按照量子理论的一些传统理论,是用量子具备不确定原理来解释,量子具有一些不确定的能量,偶尔它们可以从虚无中凭空“借”到了一些能量,然后借助这些能量就越过了墙壁,从而实现了凭空穿墙……是不是听起来也很玄幻?

好了,那按本文的习惯,我们先看看游戏中有没有这个现象。 游戏中不仅有,而且还相当的普遍!游戏中的这个现象简单说就是3D物体的运动穿模。

什么是3D物体的运动穿模呢?就是说,在3D游戏中,运动物体有时候会在碰撞的时候穿过障碍物体,或者是穿到地形里面去。

游戏里的看太多了,来个现实世界的穿模 这其实是一个游戏BUG,为啥会出现这个现象呢,3D游戏的程序员都很清楚,这其实是一个碰撞检测算法的精度问题。在3D游戏里,运动物体看上去像是连续运动的,比如一辆汽车,或者一个火球,但实际上呢这些运动物体的位置却是间断更新的,因为在计算机的计算过程里不可能有什么真正连续的事件,任何运动其实都是离散的。

就像在游戏中被投出去的石头虽然程序是用抛物线方程来计算飞行时间和位置的关系,但是实际上石头的位置却不是像理想抛物线一样连续的,石头在飞行中有没有碰到某个物体却必须要隔一会才能通过检测它和其它物体之间的相对距离关系来判定。而这个检测时间间隔就是碰撞算法的循环时间间隔。

如果这个循环时间间隔设置的太大,那么就可能出现石头在上一次检测的时候还没有碰到物体,而下一次检测的时候已经穿过了物体的穿模BUG现象。但是系统是不可能把这个时间设置成为无限小的,甚至不能设置的太小,尤其是在多物体运动的场景下。

因为在同一场景下,运动的物体越多,那么需要检测的相对关系就越多,系统需要检测每个物体和其他所有物体之间的相对位置,而这个检测数量显然是运动物体的数量的阶乘关系,所以每多一个运动物体,那么计算量就会上升一个数量级。

这其实也是3D游戏中一个重要的算法优化问题,在3D游戏里,往往需要用各种二叉树四叉树来不断的优化碰撞算法以尽量减小指数级上升的运算量。同时在游戏团队里,3D游戏的关卡策划们也知道不要把运动物体设计太多,还有不要把运动物体设计的太小或者过大,错误的需求不利于减少运算量。至于到底能设计多少就非常需要经验了,所以往往会有些还不懂行的新策划在一通天马行空的乱设计后承接到了来自程序员的致命怒火。

那说回我们这个现实世界就很有趣了,现实世界里大多数我们肉眼可见,甚至显微镜可见的领域里,物体相对运动时候都呈现了非常良好的碰撞关系,完全符合牛顿力学的经典描述。但是,如果我们这个世界是虚拟的,往极限上去想,就一定会到最后出现算法精度覆盖不到的现象。果然,到了量子尺度下,这个现象出现了!

这就是所谓的量子隧穿的真正原因,这个虚拟宇宙的开发者没有考虑到(或者觉得没有必要考虑到)我们会去观察如此之小的尺度下的运动碰撞现象,虚拟宇宙里的碰撞算法的检测精度也是有极限的,当两个足够小的物体靠的足够近的时候,粒子的基本运动就会导致穿模BUG!于是,隧穿出现了,量子毫无道理的出现在了墙壁的另一边,这不是依靠凭空借来的能量实现的,这只是系统觉得没必要用更小的时间间隔来检测粒子的碰撞事件。

从算法角度上思考,其实我们也可以看出来隧穿的几个特点:

1.虚拟系统里的碰撞算法检测的循环时间肯定是远大于宇宙最小时间单位“普朗克时间”的,因为循环里还需要容纳大量的检测运算过程;

2.隧穿肯定是概率性的,因为量子位置输出因为有精度限制,所以存在随机,检测结果在一些边界情况时自然也有概率性的结果。但是,墙壁越薄,出现的概率自然也就越大,这很好理解。

最后,我们来看一个隧穿效应里面最难以解释的现象:”超光速隧穿“。根据量子理论中能量时间的不确定性原理,量子穿越屏障的时间和屏障的能垒高度是成反比的,也就是说,屏障能量越高,穿越时间反而越短,如果这个屏障的宽度足够的话,那么足够高能的屏障就会导致粒子以穿越光速的速度穿过了屏障,这和相对论中指出的光速是宇宙最大速度就冲突了。

理论物理学家们就这个现象争论不休,并且提出了各种各样的新的假设和说法来解释这个现象,试图一方面要坚决捍卫光速是宇宙速度绝对上限的地位,另一方面又要能解释出量子超光速穿墙的现象是咋回事。这些先进理论弯弯绕绕复杂无比,一般人建议不要去了解,以免出现头脑过载的症状。所以我们这些凡人还是回到地面来,想想看怎么用我们初中二年级的水平来理解这个最尖端的科学问题吧。

其实,这个问题同样也可以抓一个游戏程序员来拷问拷问。 比如,你是某个网络赛车游戏公司的老板,今天你很生气,因为游戏里某条赛道的最新成绩被刷新到了一个恐怖的令人惊奇的地步,有玩家只用了几秒钟就完成了比赛,很显然这是游戏出现BUG被人利用了,于是你叫来了游戏的运营经理和研发经理开会。

“你们谁来跟我解释一下,这个变态的成绩玩家是怎样做到的?”你作为老板有权要求下属们给你一个合理的解释。

运营经理连忙回答:“我了解过了,这是玩家利用BUG实现的。” 研发经理感觉很奇怪,说到:"应该不可能啊,这种BUG理论上是不可能出现的。”

于是你问道:“为什么不可能出现呢?” 研发经理说:“因为我们游戏里的赛车其实是有速度上限的,无论玩家怎样改装赛车,都不可能超过这个速度上限。”

“为什么不可能超过上限呢?难道玩家没有某种手段绕过这个限制吗?”

“不可能绕过的,因为这个速度上限并不是我们为了防止玩家刷BUG设置的,而是我们游戏的底层机制决定的。因为赛车在我们游戏里运动需要不断的改变位置,而我们游戏里面物体改变位置的最小单位和最小时间单位都是确定的,所以从理论上就会有一个最大速度,玩家无论用什么办法都不可能让赛车超过这个速度。因为这个速度就是我们游戏能保证赛车连续运动的极限,再快,赛车在玩家眼里就会出现瞬移了,这种现象从我们的底层算法上就是无法出现的,我们的赛车在程序空间中,只能一格一格的移动,不能跳格!”

你听完,觉得研发经理说的很有道理,于是就非常疑惑的问运营经理:“那么我们的玩家是怎么做到的呢?”

运营经理说:“我也不太懂这个原理,但是我能把玩家的操作重现给你们看。”

于是运营经理进入游戏,选择赛道开始比赛。只见运营经理在赛道上找到一个合适的位置,飞快的把车撞进了路边的一个崖壁,经理试了几次后成功了。某一次几乎是一瞬间,车没有被崖壁正常的弹回去,而是从另外一边的崖壁被飞快的弹了出来,这个穿越过程似乎没有花费任何时间,于是经理就重现出了玩家的变态成绩。

办公室里一阵寂静,你和研发经理两人面面相觑。

研发经理毕竟是211毕业的高材生,他想了一会就恍然大悟道:“原来是这样,我实在没有想到会出现这种情况,这其实是赛道旁边的崖壁太薄了造成的。”

“崖壁太薄为什么造成这个BUG?”你一脸的疑惑。

“是这样的”,研发经理已经完全理解了问题所在:“我们游戏里面的碰撞检测是有时间间隔的,程序会每隔一会检测赛车模型的中心和各种阻挡物之间的距离关系,一旦距离小于某个值就会视作发生碰撞,将车弹回去。但是这个崖壁阻挡太薄了,玩家的车速高到某个程度的时候,撞进来又正好在两次检测的空隙之间的时候,车的中心就穿过了这个崖壁才被检测到碰撞,但是因为模型已经越过了崖壁,于是碰撞程序就把车移到了另一边,所以赛车就穿墙而过了。这个移动是碰撞算法造成的,和正常的移动不一样,所以没有受最小移动距离的限制,所以就超过了游戏的最高车速。”

“碰撞算法有这么高的能力,能帮助赛车超过游戏的最高运动速度?”

“是的,游戏设置最高运动速度的底层原因是因为物体不能在空间中超过最小单位作跳跃,否则就会出现瞬移,如果有瞬移现象,那么就可能出现两个物体同时瞬移到同一个位置的可能。所以要求物体连续运动的本质上也是避免不同物体会同时出现在同一个最小空间单位里。但是,碰撞算法的底层原因也是为了避免不同的物体同时出现在同一个空间里,所以,游戏存在最高速度其实并不是原因或者目的,而是只是现象,更本质底层机制的其实避免不同物体的空间重叠,所以一旦出现这种空间重叠,这时候弹出物体几乎是不需要所谓速度的,系统会以最快的节奏把模型瞬移出去。当然,也不是完全无时间消耗的瞬移,重新绘制物体还是要花费一点时间的,但这也远超最高速度了。“

“哦”,你和运营经理总算弄明白了这个BUG的底层原因,于是你又问道:“那我们要怎样避免玩家再利用这个BUG呢?”

研发经理想了一下说:“很简单,把墙加厚点就行了。”

运营经理有点质疑:“这好像没有从本质上解决问题吧?”

研发经理耸耸肩:“这就是最省事的办法了,如果你觉得要从底层来彻底解决这个问题的话,首先我觉得没必要,因为减小检测间隔会极大的增加系统的负担,需要买更强大更贵的服务器,而且绝大多数情况下对玩家体验也不带来什么明显改善。其次,修改底层算法风险很大,搞不好会把整个游戏搞宕机,老板你看呢?”

“去让关卡策划和美术把崖壁改厚点,顺便检查下还有没有其他赛道需要修改。”你感觉作为老板,决策起来一点难度都没有。

在结束会议之前,你有点不放心,又问了下研发经理:“你确定崖壁改厚了,就不会再出现这个BUG了吧。”

研发经理一看就是一个很严谨的人,他斟酌了一会说:“理论上,还是有穿过的几率,因为我们的检测时间也有随机性,只要玩家尝试的次数足够多,再厚的阻挡也有穿过的概率,只是这个概率极小极小。”

“好吧,那就这样吧”,你作为老板深刻的理解不要为极小概率的事情去发愁的简单道理,这种问题,留给知友们去操心就好了。

请成功穿过墙的朋友留言打卡,虽然上面的场景对话是我虚拟出来的情节,但是大家应该明白这段对话指的是什么。

从上面程序员和老板的对话中,其实我们得到了一个非常惊人的看待宇宙基础规律的视角,比如我们可以不把光速是当前时空速度上限当作是一种最底层的初始规律,而是把它视作一种现象,那么这个宇宙必然还有更底层的规律导致了这种现象的出现。

大家都在看

返回顶部