zoukankan      html  css  js  c++  java
  • 拜占庭将军问题之口头协议

    本文介绍了在将军之间直接传送口头消息(Oral Messages)时,解决拜占庭将军问题的算法OM(m),并对其在m=1且n=4时进行了举例说明,最后对OM(m)算法进行了证明。

    起源

    拜占庭位于如今的土耳其的伊斯坦布尔,是东罗马帝国的首都。由于当时拜占庭罗马帝国国土辽阔,为了达到防御目的,每个军队都分隔很远,将军与将军之间只能靠信差传消息。 在战争的时候,拜占庭军队内所有将军和副官必须达成一致的共识,决定是否有赢的机会才去攻打敌人的阵营。但是,在军队内有可能存有叛徒和敌军的间谍,左右将军们的决定又扰乱整体军队的秩序。在进行共识时,结果并不代表大多数人的意见。这时候,在已知有成员谋反的情况下,其余忠诚的将军在不受叛徒的影响下如何达成一致的协议,拜占庭问题就此形成。
     
    拜占庭将军问题实际上反映的是一个协议问题。 拜占庭帝国军队的将军们必须全体一致的决定是否攻击某一支敌军。问题是这些将军在地理上是分隔开来的,并且将军中存在叛徒。而这些叛徒可以采取任意的行动来破坏将军们的共识。 
     
    当这个问题出现的时候,只有满足了N≥3F+1才使得该问题有解。
    比如说将军总数为10,那么叛徒的个数不能大于3,即叛徒的数量不能超过三分之一。实际上这便是少数服从多数的问题。

    前提

    拜占庭将军问题一致性也需要一定的条件作为基础:
    IC1. 所有忠诚副官遵守同一命令
    IC2. 如果发令官是忠诚的,每个忠诚的副官遵守他的命令。
     
    首先,为定义口头消息,拜占庭将军消息系统具有以下假设:
    A1. 每个消息被正确发送。
    A2. 消息的接收者知道是谁发送的消息
    A3. 可以被检测到缺少消息
    假设A1和A2防止叛徒干扰其他两个将军的通信,假设A3防止叛徒通过不发消息干扰一致性达成。
    另外,口头协议算法要求每个将军可以与其他任意将军直接进行通信,Leslie在其原文中的第五章中描述了不需要满足这个条件的算法。

    OM(m)算法

    Lamport针对口头消息(Oral Messages)的情况,提出了口头协议算法OM(m),其中m为非负。OM(m)算法是一个递归算法,用来处理在3m+1个将军中至多存在m个叛徒的情况。
    默认行动:副官如果在指定时间内收不到来自司令的命令,则默认采取“撤退”行动。这是为了防止司令官为叛徒时,通过不发出命令来阻碍达成共识。
    行动函数:算法假设使用majority方法作为行动函数,即当vi的大多数为v时,则majority(v1,...,v{n-1})=v
    注:其实对于行动函数,有两种比较容易想到的选择:
    * vi的大多数值v,如果不存在大多数采取默认行动——“撤退”;
    * 如果vi是个有序的集合,采用其中位数。
    OM(m)算法:采用递归定义,下面分别说明OM(0)和OM(m)的内容。
    当m=0时,
    OM(0)算法
    (1) 司令发送他的值给每个副官;
    (2) 如果副官收到司令的值,使用这个值;否则,使用默认值——“撤退”。
    当m>0时,
    OM(m)算法
    (1) 司令发送他的值给每个副官;
    (2) 对于每个i,令vi为副官i从司令接收到的值;如果没有收到值,则v_i采用默认值——“撤退”。在OM(m-1)算法中,副官i作为司令向另外n-2个副官(不包括OM(m)中的司令)发送值vi
    (3) 对于每个i,对于每个j≠i的j,令vi为副官i在第(2)步中从副官j接收的值;如果没有接收到值,则使用默认值——“撤退”。副官i用majority(v1, ..., v{n-1})作为其值。

    举例:m=1, n=4

    • 当一个副官是叛徒时

    假设副官3是叛徒,下图针对副官2收到的消息对OM(1)进行阐述。
    Algorithm OM(1); Lieutenant 3 a traito
    第一步:司令向每个副官发送他的值v给每个副官;
    第二步:副官1执行OM(0),作为司令向副官2发送v;由于副官3是叛徒,其执行OM(0)向副官2发送了不同的值,假设为x;
    第三步:副官2拥有的行动值集为{v1, v2, v3}={v, v, x},采用majority函数,副官2采取的行动值为v=majority{v1, v2, v3}。
    同理,副官1采取的行动指令也是v,即满足拜占庭将军问题一致性条件IC1和IC2。
    • 当司令为叛徒时

    下图描述了当司令为叛徒,三位副官是忠诚的情况对OM(1)算法进行阐述。
    Algorithm OM(1); The commander a traitor
    第一步:司令为了阻止忠诚副官达成一致,分别向三位副官发送值{x, y, z};
    第二步:每个副官从司令收到的值作为自己的值,并执行OM(0)向其他副官发送;
    第三步:在第三步中,每个副官拥有的值集均为{x, y, z},因此,副官执行行动函数majority得到的结果是一样的。
    由于三位忠诚的将军采取同样的行动,满足拜占庭将军一致性条件IC1。
    从m=1, n=4的例子可以看出,OM(m)算法能够处理拜占庭将军问题。在OM(m)算法中,独立执行了n-1次OM(m-1),且每个OM(m-1)算法独立执行了n-2次OM(m-2)……这就意味着,每个副官可能独立发送多轮消息。为了避免混淆,需要区分每轮消息。最易想到的方法是,每个副官i在为第(2)步的值vi添加前缀i。可以看出,算法OM(m-k)将被调用(n-1)...(n-k)次,发送拥有k个副官序号前缀的值。

    OM(m)算法证明

    本节采用归纳法证明OM(m)算法能够解决拜占庭将军问题。

    引理

    为了证明OM(m)算法,我们首先来证明一条引理:
    对于任意的m和k,如果在多于2k+m个将军中至多存在k个叛徒,则OM(m)算法满足条件IC2。
    证明: 归纳法,针对参数m进行归纳。
    当m=0时,根据假设A1和OM(0)算法,易得如果司令是忠诚的,忠诚的将军按照司令的指令行动,引理是成立的。
    当m>0时,假设在m-1时,引理成立,下面来证明在m时,引理也成立。
    在OM(m)的第一步,司令发送值v给他的n-1个副官;
    在第二步,每个忠诚的副官在n-1个副官中执行OM(m-1)算法。根据假设n>2k+m,则n-1>2k+(m-1),所以根据引理在m-1时成立,可得,每个忠诚的将军从忠诚的将军j处获得的值为vj=v。
    在第三步中,由于叛徒最多有k个,且n-1>2k+(m-1)≥2k,所以n-1个将军中的忠诚将军为大多数。所以第三步每个忠诚的将军获得值majority(v1, ..., v{n-1})=v,满足条件IC2。
    引理得证。

    证明

    下面来证明算法OM(m)能够解决拜占庭将军问题。
    定理 1:对于任意m,如果存在多于3m个将军中至多有m个叛徒时,OM(m)算法满足条件IC1和IC2。
    证明:针对变量m采用归纳法。
    当m=0时,即没有叛徒存在,则很容易证明OM(0)满足条件IC1和IC2。
    假设在m-1时,定理成立,下面证明在m时,定理也成立。
    • 当司令是忠诚的
    令引理 1中的k=m,即多于3m个将军中至多存在m个将军时,OM(m)满足条件IC2。又因为当司令是忠诚的时,条件IC1包含在条件IC2中,所以OM(m)也满足条件IC1。
    • 当司令是叛徒时
    由于至多有m个叛徒,所以至多存在m-1个副官是叛徒。因为将军的数量多于3m,所以副官的数量也多于3m-1,且3m-1>3(m-1)。根据递归假设算法OM(m-1)满足条件IC1和IC2,所以在第三步,对于每个副官j,任意两个忠诚的副官得到相同的vj。(如果副官j是两个中的一个,运用条件IC2;否则,运用条件IC1)。
    所以,任意两个忠诚的副官能获得相同的指令值集{v1, ..., v{n-1}},因此,在OM(m)的第三步中,忠诚将军遵从相同的值,即majority(v1, ..., v{n-1})。所以,算法OM(m)满足条件IC1。
    综上所述,定理 1得证。

    1. Lamport L, Shostak R, Pease M. The Byzantine generals problem[J]. ACM Transactions on Programming Languages and Systems (TOPLAS), 1982, 4(3): 382-401.
  • 相关阅读:
    数学+高精度 ZOJ 2313 Chinese Girls' Amusement
    最短路(Bellman_Ford) POJ 1860 Currency Exchange
    贪心 Gym 100502E Opening Ceremony
    概率 Gym 100502D Dice Game
    判断 Gym 100502K Train Passengers
    BFS POJ 3278 Catch That Cow
    DFS POJ 2362 Square
    DFS ZOJ 1002/HDOJ 1045 Fire Net
    组合数学(全排列)+DFS CSU 1563 Lexicography
    stack UVA 442 Matrix Chain Multiplication
  • 原文地址:https://www.cnblogs.com/jockming/p/12096288.html
Copyright © 2011-2022 走看看