神的模仿犯 第263节
但这也确实勾起了所有人的好奇心。
李仁淑看了看参与了游戏的五人,问道:“你们谁来讲解?”
蔡志远看向郑杰:“你先讲吧,主要是第一阶段和『4人房间』的情况。
“然后再由我和杨雨婷讲解另外两个房间的情况。”
郑杰颇受鼓舞地点了点头:“好的!”
在这次游戏中,他也算是独当一面地进入了『4人房间』从第1社区的玩家身上赚取了大量的签证时间。
虽然从结果上来看这几乎是有手就行,而且收益也只能算是个添头,但对于郑杰来说,也仍旧算是一次重大的进步。
很快,三人互相补充,讲完了游戏的全过程。
杨雨婷颇为坦诚地说道:“所以,其实这次我们四个都是被带飞的,我也没起到什么太大的作用。
“不仅是第一阶段要测出各种奖惩数值,第二阶段还要考虑每个房间不同的情况,并分配数字牌、确定玩家进入房间的顺序,这些条件未免太苛刻了。
“第二阶段的准备时间很短,只有15分钟,但凡有任何的疏漏,都有可能产生非常严重的后果。
“第1社区就是因为在第一阶段漏测了数值,导致战术安排全错。”
她看向蔡志远:“我到现在都有点想不明白,这么多事情,你是怎么在那么短的时间内想清楚的?”
虽说之前蔡志远确实在社区的复盘环节表现不错,但在此之前,他在游戏内的表现确实并不算突出。
所以众人会感到惊讶也是很正常的。
蔡志远看了看众人:“你们为什么又用这种眼神看着我,难道你们又忘了我的本职工作是什么了吗?
“我再强调一遍,我是写算法的。
“这游戏对我来说,完全是专业对口。
“因为我在看完第二阶段的规则之后就立刻意识到了,这游戏就是以『拜占庭容错算法』为核心进行设计的。
“所以我根本不用去推演三个房间的具体情况,只要简单地套一下公式,就能立刻想到最优策略。”
郑杰愣住了,他听到了一个从没听过的名词。
“拜占庭容错算法?那是……什么东西?”
蔡志远解释道:“我在进入第二阶段之后的第一时间就跟你说过,我们不要拿『4人房间』的房主,因为这就是个陷阱。
“原因很简单,4人房间,在有1名出题人的情况下,必然有3名答题人。而这其中,有一名自由人。
“自由人可以看成是『拜占庭容错算法』里面的恶意节点,这样的结构无法达成容错算法的基础要求,所以是行不通的。
“换言之,自由人在这个房间里为所欲为。
“至于这个算法的内容也很简单,可以这样理解:在一个去中心化的分布式结构中,恶意节点的数量必须少于三分之一,否则就无法达成『拜占庭容错』,给不出一致的回答。”
众人的表情仍旧迷茫。
郑杰轻咳两声:“蔡哥,我认为有必要先从这个什么『拜占庭算法』的科普开始讲起。”
蔡志远想了想:“好吧,那我简单解释一下。
“简单来说,拜占庭容错算法又叫做拜占庭将军问题。
“假设现在有一座非常坚固的城堡,想要打下这座城堡,就需要许多支不同的军队一起发起进攻。
“如果这些军队无法达成一致,只有一部分军队进攻,那么战斗就必然失败。
“所以,这些军队的将军互相约定,在进攻之前大家互相通气,每支军队都派出信使向其他军队传递信息:进攻或者撤退。
“如果超过半数的将军决定进攻,那么第二天大家就约好一起进攻;如果超过半数的将军决定撤退,那么第二天大家就约好一起撤退。
“这看起来是个没什么太大问题的方案,对吧?”
众人点了点头。
蔡志远继续说道:“但现在的问题在于,这些将军里面可能会出现叛徒。”
第312章 拜占庭容错算法
蔡志远继续解释道:
“比如,现在一共有五名将军,其中两名将军认为应该进攻,而另外两名将军认为应该撤退。
“这时候,第五名将军是个叛徒,他告诉进攻的将军『我也会进攻』,又告诉撤退的将军『我也会撤退』。
“于是,想要进攻的将军认为,现在有三支军队同意进攻,超过了半数,所以明天应该进攻。
“而想要撤退的将军认为明天应该撤退。
“最后的结果,就是两个将军进攻,两个将军撤退,导致战争失败。
“这就是『去中心化』所带来的问题,因为这五个将军都是平级的,没有一个拥有绝对权限的指挥者,所以在互相商量策略的过程中,就会产生这样的问题。”
郑杰恍然点头:“原来如此!那这个办法怎么解决呢?也没办法验证具体是哪个将军在说谎吧?”
蔡志远解释道:“其实要解决这个问题很简单:多问几遍就行了。
“假设我是其中一名将军A,而将军B告诉我他要和我一起进攻。
“如果我信了,那就有可能会被骗,因为将军B有可能是叛徒,他可能只跟我说了进攻,跟别人说了撤退。
“所以,这时候我应该再去问将军C,我问他:‘将军B跟你说的是进攻还是撤退?’
“然后我再去挨个问其他所有的将军,汇总将军B给他们说的所有信息。
“其他将军告诉我的『将军B给他们的信息』也不一定真实,因为其他将军里面可能也有叛徒,可能存在『将军B跟他们说进攻,他们却告诉我将军B说了撤退』这种情况。
“所以,我挨个问一遍『将军B对你们说了什么』,如果『进攻』比较多,那我就把将军B的意见记为『进攻』;
“然后再挨个问一遍『将军C对你们说了什么』,如果『撤退』比较多,那我就把将军C的意见记为『撤退』。
“就这样,我通过反复套娃的方式,不断地排除少数派答案,最后得出的结论,就是更准确的『多数派答案』。
“在满足『拜占庭容错』的情况下,我们强制要求所有将军都遵守这一套策略,并且必须坚决执行最终的结论。
“那我们就可以确保大家一起进攻或者一起撤退。”
郑杰有些困惑:“在满足『拜占庭容错』的情况下?也就是蔡哥你之前说过的,叛徒人数必须少于三分之一?”
蔡志远点了点头:“是的。
“我们用3名将军的情况来举个例子:
“假设3名将军里面,将军C是叛徒,故意传递错误的信息。
“将军A会首先向将军B和C说『进攻』。
“但是将军B接到命令之后无法确认将军A是不是叛徒,所以他要先问将军C,『将军A给你的命令是什么』,而将军C是叛徒,所以会故意说『将军A给我的命令是撤退』。
“因为只有三个将军,所以将军B就无法判断将军A和将军C到底哪个是叛徒,因为『进攻』和『撤退』的命令各一票,无法形成多数。
“同理,将军B在执行这个策略的时候,也没法判断将军A和将军C哪个是叛徒。
“这是最简单的一种情况,如果将军的数量变多,比如同时有7个将军,其中有2个是叛徒的话,情况会变得复杂很多,要套娃很多次才能最终得到结论。
“所以我才说,这种问题不需要自己真的推算,只要记住结论就行了。
“结论就是,当叛徒人数达到三分之一或者更多时,这个问题就不可解。
“反过来说,想要让这个问题可解,就要把叛徒人数控制在少于三分之一的情况。
“套一下三个房间的人数,就一目了然了。
“『4人房间』,3人答题,所以只要有1名恶意自由人,这个问题就不可解。
“『8人房间』,7人答题,在房间中有3名恶意自由人的情况下,不可解。
“『13人房间』,12人答题,在房间中有4名恶意自由人的情况下不可解。”
郑杰恍然大悟:“原来如此!
“所以蔡哥你用这个公式套了一下,立刻就知道『8人房间』其实是最安全的,因为我们只需要进入1名己方的自由人占位置,这个问题就一定可解。”
秦瑶还是没明白:“等一下,虽然我听得还是不太明白,但这个公式我记住了。
“我现在的疑问是,这个拜占庭问题,具体是怎么套到游戏规则里的?”
郑杰自告奋勇地说道:“我来解释吧!
“在第二阶段进入房间之后,实际上是『答题人』和『出题人』之间的博弈。
“比如说,我们在『8人房间』开黑店,那就是我们来扮演『答题人』,而其他社区后进入房间的玩家扮演『出题人』。
“我们『答题人』一方的目标是,达成一致选项,这样就能拿到额外奖励,从『出题人』身上赚签证时间;
“而反过来,『出题人』一方的目标是,让我们无法达成一致选项。
“比较简单的方法是,『出题人』一方的普通玩家,只要故意跟我们选择不同选项就可以了。
“所以,我们才需要设置房间规则,强制这些玩家必须提交多数派选项。
“『提交建议』这个功能,实际上就是在模拟『拜占庭容错算法』的运算过程,每个玩家都必须强制发送当前的多数派建议,但是会有一定的时间间隔。
“所以在一遍一遍地发送之后,除自由人以外,所有普通答题人的建议会变成同一个选项。
“之后,游戏规则会强制这些玩家提交这个选项,就达成了『全员一致』的目标。
“但就像蔡哥说的,『提交建议』的模拟过程,本身需要『多数派建议达到一定数量』之后才能成立。
