============================
【第四次追更】
(好生气,刚写完追更居然突然丢失全部内容,这是有力量在阻止我公布真相了,那你要失望了,我熬夜也要把这更补回来!)
有朋友留言对量子实验的具体诠释内容感兴趣,这次追更我们就挑一个经典的量子实验来尝试用游戏式的方式来诠释一下看看吧。
我们来看一个经典的基本量子实验:惠勒延迟选择实验。“延迟实验”是由爱因斯坦的同事约翰·惠勒提出的,也是传说中的世界观颠覆者,人生观毁灭者,因果律杀手,理科生躁郁症的重大致病因素之一,毁人不倦的经典实验。
为了方便不太了解该实验的朋友,我花一点文字把实验的具体设置和过程描述一下,如果熟悉的高手们尽可略过。
如图所示,该实验的具体布置非常简单,一共只用到七件主要的实验仪器,分别是单光子光源,半透镜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游戏一样,玩家开枪的时候给他画个开火的动画,然后根据距离算算子弹飞行时间,等到了时间再根据实际情况算下命中概率和位置,如果命中再画个击中动画就好了,子弹飞行过程?不存在的 所以,这个世界上其实也没有什么光子在飞行,光子被发射后就不存在实体了,有的只是宇宙母机的系统在后台默默的计时和轮检路径事件变化而已。光子也不用千幸万苦的耗费百万年的飞行路程来到我们眼里,或者来到天文台的望远镜的底片上,这些事件在我们抬头仰望星空的时候,就已经被合理的插入到某些粒子的事件序列里了,到了该执行的时候,交互事件就会自然触发,而你眼睛里的视神经细胞就会感受到事件的影响结果。
所以每个微观粒子的飞行运动过程,其实都是系统在后台不断刷新一个未来待执行的路径交互事件序列而已,只要事件还未被执行就可能因为环境变化而改变,所以随便科学家们把路径上的透镜插来插去都没关系,系统最终只会以事件执行前最后一个普朗克时间时事件的刷新结果来执行输出,光子也不用那么劳累隔一会就要去回溯更改历史。那一百万年,它哪里都不在,只有系统在后台假装它在飞行穿越空间而已。
各位码农们,你们是否也认为这样才是最合理的算法呢?
这是一个神奇的思想模式,一旦你们开始用程序员的思维理解量子行为后,很快就可以给各种量子实验加上算法解释,包括什么魔术擦除实验,什么量子纠缠,什么双缝干涉,还有什么猫猫狗狗的,观测者难题也迎刃而解,整个世界顿时全然不同。
熟悉量子力学的朋友也可以来比较下你所知的延迟实验的诠释和游戏版本的相比如何,拿起你的奥卡姆剃刀来挥舞下,看看谁更简洁易懂?
现在,是不是你也觉得这个世界有点不太真实了?
|