蔡志远继续解释道:
“比如,现在一共有五名将军,其中两名将军认为应该进攻,而另外两名将军认为应该撤退。
“这时候,第五名将军是个叛徒,他告诉进攻的将军‘我也会进攻’,又告诉撤退的将军‘我也会撤退’。
“于是,想要进攻的将军认为,现在有三支军队同意进攻,超过了半数,所以明天应该进攻。
“而想要撤退的将军认为明天应该撤退。
“最后的结果,就是两个将军进攻,两个将军撤退,导致战争失败。
“这就是‘去中心化’所带来的问题,因为这五个将军都是平级的,没有一个拥有绝对权限的指挥者,所以在互相商量策略的过程中,就会产生这样的问题。”
郑杰恍然点头:“原来如此!那这个办法怎么解决呢?也没办法验证具体是哪个将军在说谎吧?”
蔡志远解释道:“其实要解决这个问题很简单:多问几遍就行了。
“假设我是其中一名将军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人房间’开黑店,那就是我们来扮演‘答题人’,而其他社区后进入房间的玩家扮演‘出题人’。
“我们‘答题人’一方的目标是,达成一致选项,这样就能拿到额外奖励,从‘出题人’身上赚签证时间;
“而反过来,‘出题人’一方的目标是,让我们无法达成一致选项。
“比较简单的方