从魔兽争霸看Paxos算法(一)

游戏背景:

魔兽争霸3 冰封王座里面有一种地图,总共12支队伍,3V3V3V3。也就是说,这12支队伍分成4股势力。每股势力有3只队伍。任意一股势力完全消灭其他3股势力则获胜出。

现在有这么一股势力,我们称之为 A势力。A势力里面有三只队伍,人族,兽族,精灵族。

在寒冷的冬天,A势力里面的三支队伍都在家修养生息。人族、兽族、精灵族都忙着砍树,挖矿,升级建筑。终于在开春时节兵强马壮,准备出去大干一番。

于是这三支队伍各派出一支小分队侦察外界情况。在这些侦察小分队回来之前,大部队不能贸然行动,否则容易被其他势力伏击。一旦攻击目标选定,至少需要派出两支以上的队伍同时攻击才有胜算。这样,三支队伍都在等待侦察小分队回来通报侦察的情况,然后再协商一致采取行动。

由于侦察分队需要密切关注敌人动向,所以只会派出一两个侦察单位向后方传递消息,其余单位仍然留在原地监视。每个侦察分队都知道己方三支队伍所在地。这些派出去联络大部队的侦察单位不会叛变,即不会传递假消息,但是这些侦察单位可能会在半路上被其他势力截杀,而且这些单位的各自行动速度也有快有慢,而且有时候为了保险会同时派出多个单位向同一支队伍传递同一条消息。

在这种情况下,如何保证A势力每次出击都可以选择同一个敌人,步调一致就成了问题。

协商方案:

我们假设本次出击行动的代号为“正义黎明”。

1、“正义黎明”行动草案分两部分组成,第一部分是草案版本号,第二部分是行动方案,即

行动草案 = <草案版本号,行动方案>

草案版本号是全局单调递增的(可用时间戳实现,在缺乏全局时钟的情况下可以用其他机构实现)。侦察分队提请的草案协商分两阶段进行,第一个阶段是由侦察分队向各个大部队申请批准草案版本号。

2、对“正义黎明”行动,在第一阶段协商(即申请批准草案版本号),如果大部队接到两个侦察分队提出的草案版本号申请,那么草案版本号大的将胜出(即得到批准)。例如针对“正义黎明”行动,人族侦察分队向兽族申请批准草案版本号1001,兽族侦察分队向兽族申请批准草案版本号1002,并且人族侦察单位先到达,那么兽族大部队将会先后批准两个侦察分队的草案版本号申请。但是如果兽族侦察分队先到达,那么由于人族侦察分队申请的草案版本号比先其到达的兽族侦察分队申请的草案版本号小,所以人族草案版本号申请将会被兽族大部队拒绝。

3、如果侦察分队在第一阶段协商(即申请批准草案版本号)时得知大部队已经批准了某个草案的行动方案,那么这个侦察分队以后提交的所有草案的行动方案部分一律只能照抄已批准的这个草案的行动方案。例如,人族侦察分队在向兽族大部队申请批准1003这个起草时间,但是兽族大部队已经批准了兽族侦察分队1002草案的行动方案,那么人族侦察分队向其他大部队提交的1003草案(及以后的所有关于“正义黎明”行动的草案)必须以1002草案的行动方案为行动方案。

模拟协商:

场景1:人族、兽族侦察分队先后发现战机

这是最简单的场景

场景2:人族、兽族侦察分队同时发现战机

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值