美文网首页
兰伯特为拜占庭将军问题设计的口头协议的再澄清

兰伯特为拜占庭将军问题设计的口头协议的再澄清

作者: 灯下鼠 | 来源:发表于2020-10-05 19:41 被阅读0次

2018年我在一篇文章中,仔细分析过 m = 3, n = 10 的情况下,兰伯特的口头协议如何运行。

文章见:https://www.jianshu.com/p/538e6c9fac81

2020年十一假期,为了设计一套教材,又读了一篇口头协议,发现上文在有些节骨眼上犯了省略的毛病,对于入门读者来说,容易糊涂,特此再澄清一下。

1. 10个平等将军之间的共识,何以转化为“司令-副官”之间的共识?

10个平等将军,互相之间平等的发送命令,这是在 OM(3)启动之前的。

既然每一位都发送了自己的命令,那我们把每一位将军都当做一次“司令”,他做司令的时候,其他9位副官,形成对他的 V_{i}  判断,注意,并非他当司令了,人家就“用他的命令当作他的命令”,因为他可能是奸细,忠实的将军是要判断出这位将军的V_{i} ,而且每一位忠实将军判断出来的V_{i} 必须一致,这是口头协议的作用和目的。

所有的  OM(3)结束后,每一位将军都做了司令,那么每一位忠诚的将军就有了关于其他将军的V_{i} ,而且都一致,于是忠诚将军们按照 Majority(V_{1},V_{2},V_{3},V_{4},V_{5},V_{6},V_{7},V_{8},V_{9},V_{10} ) 判断即可。

所以,在我2018年的那篇文章中,最后统计共要计算 9 x 8 x 7 x 6 = 3024 次,是一轮 OM(3),是7位忠诚将军对“一位”将军所形成的判断,而总共的计算次数应该是 10x3024 = 30240 次。

2.  OM(m)与 OM(m-1)的递归

兰伯特原文是这样的:

(2)对于每个i,vi是每个副官i从司令收到的命令,如果没有收到命令,则默认为撤退命令。副官i在OM(m-1) 中作为发令者将之发送给另外n-2 个副官。

(3)对于每个i,和每个j ≠ i,vj 是副官i 从第2步中的副官j (使用OM(m-1)算法)发送过来的命令,如果没有收到第2步中副官j 的命令,则默认为撤退命令。最后副官i 使用majority(v1,…,vn-1)得到命令。

这是最难理解之处,其中有一个原因是,初学者对“命令消息” 产生了困惑,兰伯特原文还有多数分析文章中并未照顾大家稚嫩的小心灵。

先要注意的是,进入“司令-副官”模式后,我们所谈的“命令消息”,一律都是司令的命令,或者关于司令命令的判断,不是各位副官自己的意见。

所以,在 OM几轮运算中,对于忠诚副官而言,命令消息有两种: 1. 副官收到司令的命令消息;2. 副官根据OM算法所判断的司令的命令消息。

上面引用原文中,第(2)步中“副官i在OM(m-1) 中作为发令者将之发送给另外n-2 个副官”,此处指的原封不动发送司令的命令(当然奸细会乱发,不管他们拉),此时这个步骤类似 OM(3)之前的那个步骤,也就是说,9位平等将军就一个话题要达成一致,而这个话题是“司令所发命令到底是什么”。

那么怎么办? 继续按照原计划办。

9位平等将军先互发一通信息,互相告知“我收到司令所发命令是什么”。

然后,转化为“司令-副官”模式,9位将军,每一位做一次司令,逐一计算。每一位做司令的时候,其他8位就可以形成这位司令关于““我收到司令所发命令是什么””的共识。而这个关于第 j 位副官对““我收到司令所发命令是什么””的认知 ,就用作第(2)步中,OM(2)的输入。

2.  OM(m)的证明

其实可以这么理解,当 m = 3 的时候,如果在 OM(3)时,司令是忠诚的,那很简单,9位忠诚的将军搞完 OM(3)到OM(0)就行。实际上,如果大家知道司令是忠诚的,完全不必到 OM(0),只在 OM(3)这里互相询问下,做个统计就可以搞定。但是,不知道司令是好人啊,没办法还是得搞到底。

因为奸细只有3位,要知道,作为副官的奸细,威力没有作为司令的奸细那么大。

而如果司令是奸细,在搞 OM(3)的时候,相当于消掉了一位奸细的影响,OM(2)的时候,又消掉一位奸细的影响,OM(1)再消一位,所以到 OM(0),直接执行命令即可。

相关文章

网友评论

      本文标题:兰伯特为拜占庭将军问题设计的口头协议的再澄清

      本文链接:https://www.haomeiwen.com/subject/wgeauktx.html