拜占庭将军问题 The Byzantine Generals problem(一)

拜占庭将军问题 The Byzantine Generals problem(一)

最近看到拜占庭错误和非拜占庭错误的问题,有兴趣看了下论文,做个笔记,不好请轻拍,欢迎指正错误~~
论文:The Byzantine Generals problem[https://people.eecs.berkeley.edu/~luca/cs174/byzantine.pdf]

问题描述

拜占庭将军问题讲述一群拜占庭将军带兵围城后,在需要相互通信(口头信息)的情况下如何达成一个一致战斗计划的问题,具体要求如下:
A:忠诚将领要达成一致的计划(进攻或者撤退)
B:存在少部分叛徒的情况下,叛徒不能让忠诚的将领们选择了对他们不利的计划(很难形式化什么样的才算是不利的计划,不利的情形很难定义)
在B条件很难操作的情形下,关注A。即忠诚将领要达成一致的计划,且不被叛徒干扰。

定义

v(i) :第i个将军的信息 ,v(1) ,…,v(n)
将军们观察敌人情况,然后通过互相发送信息(进攻Or撤退)来获得各自的信息,最终的共同计划可以通过 多数票,多数决议决定。

条件A的细化:
1.每个忠诚将领 获得的 v(1) ,…,v(n)相同。
针对B:
2.如果第i个将领是忠诚的,他发送的v(i)必须被每一个忠诚的将领使用。
重写条件1 为:
1’ 任意两个忠诚的将军使用相同的v(i)。

条件1’和2 针对单个将军如何发送他的value给其他人。在关注单点发送命令的情况下。将问题转换为:一个总司令将军发送命令值给其下属:
IC1.所有忠诚的将军遵守相同的命令
IC2.如果司令是忠诚的,那么每一个忠诚的将军要遵守其发送的命令。

IC1和IC2 称为 interactive consistency conditions(相互一致性条件?)。如果将军是忠诚的 IC2可推出IC1。

证明:问题只在忠诚将领人数超过三分之一下有解

证明在口头信息的情形下 3个将军里有一个叛徒(阴影为叛徒)的情况下问题无解。
图一显示了 在司令和其中一个将领是忠诚的情况下,将领1只要简单地遵循命令进攻,就能遵循IC2。
(图一)
图二显示了在司令为叛徒的情况下,将领1将收到和图一一致情形的信息,将领1无法分辨谁为叛徒的情形下,他只能遵守司令的命令进攻。而将领2也是和将领1相同的情形,遵守将军的命令撤退。从而违反了IC1。
图二
具体的证明使用了反证法(略)。非精确命令下该情形也无解(略)。

问题的解(口头信息情形下)

为了对付m个叛徒至少有3m+1个将军。
假设前提:

  1. 信息的发送过程是正确的。
  2. 接收信息的人知道谁发出的信息
  3. 没有收到信息的情况可以被发现

口头信息算法Oral Message algorithms OM(m), ∀mN, m>0,司令向n-1个将领发送命令。算法遵循多数票原则,定义函数 majority(v1 ,…,vn-1)的值为其众数。函数majority(v1 ,…,vn-1)有以下两个选值情况:

  1. 如果存在众数vi,否则默认值为 撤退 。
  2. 选择值中的中位数。

算法使用第一种选值方法:
Algorithm OM(0).
(1)司令发送信息给将领们。
(2)将领们遵循司令命令,如果没有收到则使用 撤退。
Algorithm OM(m),m>0.
(1)司令发送信息给将领们。
(2)对每一个将领i,令vi为将领i收到的命令,如果没有收到则使用 撤退。将领i作为算法OM(m-1) 的司令 发送v*i给余下的n-2个将领。
(3)对每一个 ij , i <>j,令vj为第二步(2)将领i从将领j获得的信息,如果没有收到则使用 撤退。领i使用majority(v1 ,…,vn-1)的值作为最终命令值。

为了理解算法是如何运行的 ,举例 m=1,n=4的情形。
m=1 的情形下,执行两轮算法 OM(1) ,OM(0).迭代。
图三, OM(1) ,司令发送信息vOM(0),针对将领2分析,将领2获得将领1和3发送的信息 从而其确定正确的v = majority(v,v ,x)。
图三
图四,的情况下 每一个忠诚的将领都得到majority(x,y ,z)。
图四
该迭代算法OM(m),调用n-1次算法OM(m-1),每一个算法OM(m-1)再分别调用n-2次的OM(m-2),如此至m=0。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
拜占庭将军问题Byzantine Generals Problem)是指在分布式系统中,存在多个节点(将军)之间需要达成一致的决策,但其中部分节点可能是不可信的(可能发送错误信息或者故意篡改信息)。该问题要求设计一种算法,使得系统能够在存在不可信节点的情况下仍然能够达成一致的决策。 拜占庭容错算法(Practical Byzantine Fault Tolerance, PBFT)是一种解决拜占庭将军问题的算法。简要流程如下: 1. 提案阶段:一个主节点(提议者)向其他节点发送提案消息,包含了要达成一致的决策内容。 2. 预备阶段:每个接收到提案的节点会将提案广播给其他节点,并等待其他节点的响应。在预备阶段,每个节点会收集到大多数节点的响应。 3. 收集阶段:在预备阶段后,每个节点会将收到的消息汇总,并向其他节点发送自己收集到的消息。 4. 决策阶段:每个节点根据收集到的消息进行判断,如果收集到的消息中大多数节点达成了一致的决策,则该节点也接受该决策。 5. 完成阶段:一旦节点接受了某个决策,它会向其他节点发送接受消息,以便通知其他节点它的决策。 6. 完成确认:节点接收到其他节点的完成消息后,如果收到了大多数节点的完成消息,则认为整个系统达成了一致的决策。 PBFT 算法通过多个阶段的消息交互和多数节点的确认来解决拜占庭将军问题,保证了节点之间的一致性。该算法适用于拜占庭容错要求较高的分布式系统,但也会带来一定的性能开销。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值