直接说,这个时钟,就是战场中行动允许的令牌好了!
- 双方不论实际运算用的CPU时钟也好,自然的太阳历时间也好,在EB 中都不存在!
- 双方只有获得EB时钟的授权才可以给出行动指令
- EB时钟单位是"秒",即EB根据内部约定的固定节拍,定期统一向双方发送"秒"通告
- 每EB“秒”的开始由EB决定发布,
* 结束~俺建议是收到双方的一次行动指令为结束
* 这样可以确保将来分布式对战时,EB时钟的统一性
* 但是有个上限,比如说 13自然秒,以避免网络等问题时,EB无限等待下去...
是也乎?
> 比如对战的双方 P1, P2 各自采用了不同的算法。 P1 需要运算 10000 次(CPU 频率) 可以得出结论,并发出行动指令。 而P2
> 要运算500000次 可以得出结论,并发出行动指令
>
> 如果我们固定使用1秒的时间节拍情况下:
>
> 慢的机器可能 P2 没有算完,时钟节拍就到下一拍了。 这个时候相当于 P1 开始行动,而P2 原地没动。 当P2 在若干拍后算完,此时已经时过境迁,P2
> 开始运算前考虑的战场环境已经完全变了,P2 算出来的结果已经无用,需要重新算了。所以 P1 痛宰P2.
>
> 而如果用一台快的机器,P1, P2 都能在1秒内算完。 此时虽然P1 提前算完,但是还是要等节拍到了才能生效。 因此P1,P2 就正常对战起来。
> 而由于P2 考虑因素更多, P2 获胜了
>
> 这种比赛结果的不确定性,显然不利于大家积极参加游戏。
>
>
> 这就是所谓 “时钟要保障每台不同的机器有相同的运算结果” ;
> 我的初步构想是要在系统启动后,对于机器运算速度进行测速(比如运行一些标准的复杂运算), 也就是获得比如该机器进行10000万次标准运算的时间。
> 并以此为基准,确定该机器上的每次时钟节拍应该是多少毫秒. 当然也不可能100% 相同,但是至少相对公平些。
>
>
>
>
> >
>
--
http://zoomquiet.org 人生苦短,Pythonic!-)
Time is unimportant, only life important!
应该是令牌这词儿,原先代表的技术的误解,
不过,用这词儿,容易理解;
> 另一个问题是这样的一种令牌传递,让整个系统不再是一个并行的erlang 程序了,而是一个串行/准串行的程序。不能体现erlang 的优势了。
>
>
> eb0 构想的运行模式不同:
>
> 1. 战场独立运行, 每次接收到world clock 指令的时候,计算一次战场状态。 然后对于处于wait 状态的战士,去指令队列中取下一个指令。
> 如果有指令的话就开始下一个动作。 没有的话就继续wait.
>
> 1. 决策程序独立运行。 自己看着战场时间和战场状态最新情况; 按照自己的决策,发出自己的指令。 如果前面有未执行的指令,就冲掉老指令。
> 如果指令发的时机不对,错过了这个节拍,那么战士空等一拍,下拍执行这个指令
>
> (注意两个 1 不是笔误, 他们是并行的没有先后关系)
>
> 这样玩家编写决策程序的时候,没有任何限制。没有限制就不会违反限制。狂发消息只会堵塞自己,不会干扰战场的运作和别人的指令。
>
> 大家都是real time 进行决策(在战场运算状态的时候,也可以同时算自己的方案), 而不是回合制的决策。
> 如果按照上述令牌制的话,由于决策程序是大家自己写的,狡猾的指挥官仍然会在没有令牌的时候去偷偷的提前算方案。
>
俺解释的和 老范的没有冲突,还是描述问题哪!
俺同意, EB 的令牌机制必须是面向 erlang 的 ;-) 即,并发,无状态,无依赖!
那么,对于 EB 时钟的疑问其实已经引发了相关文档的需求,
什么是 EB 时钟/节拍/行动令牌?...
俺是建议,就战场守护神程序来说,应该作到:
- 和EB时钟配合,根据当前配置的节拍来接收行动命令并处理
- 忽略双方非法行动命令
- 输出规范的对战进程日志
这里的`非法行动命令` 就是基于当前所谓 "秒令牌" 的概念
+ EB时钟按照当前配置,定期发布 "秒令牌"
- 不是发布给特定的战士或是"决策程序"(所谓,红军/兰军; 战队)
- 俺建议是种广播
- 真正的定向发布目标,只有战场守护神
+ 双方"决策程序"(所谓,红军/兰军; 战队) 可以根据自身资源,自由进行任意计算,不受此 "秒令牌" 影响
+ 战场守护神 根据 "秒令牌" 的节拍接收双方"决策程序"(所谓,红军/兰军; 战队)的行动命令,并进行胜负核算,以及战报日志更新
- 所谓`非法行动命令`的判定就在这时可能发生:
1. 在每次 "秒令牌" 广播后,双方都只能有一组合法行动指令,即针对所有现存战士的行动指令一次
1. 在每次 "秒令牌" 广播后,批量行动指令提交,战场守护神将仅接收第一组,其它的认为是非法,忽略之!
1. 在每次 "秒令牌" 广播后,直到下一次 "秒令牌" 广播,若哪一方,一直没有行动指令提交,则:
- 建议 战场守护神 就当"决策程序"(所谓,红军/兰军; 战队) 发出了同样的指令,重复上次指令进行核算
- 因为,这和真实战争类似, 如果没有新的命令到来,部队一般就是依照老命令行动的!
以上!
PS:
- 刚刚老范已经自爆了个 允许的Hacking 方向 ~ 可以自行计算,不管 EB 时间节拍的!
- 其实,既然EB 中的行动规则是既定的
- 既然EB 中可以获得当前双方的整体位置
- 那么就可以如象棋程序一样,可以进行预演,推导出最合理的行动了!!!!!!!! ~ 真正的AI 领域了!
--
http://zoomquiet.org 人生苦短,Pythonic!-)
usage 7-zip to replace WinRAR/WinZip; You can get the truely Freedom 4 software.
咔咔咔!好故事,应该整理到维基中!
这是讲给玩家,理解实时,以及分布式的好故事!
>
> 某一天,max,老范,zoom三人使用EB的“真人”方式进行了一场惊心动魄的战斗。
>
既然是故事剧本,俺推荐以后类似 口头解说系列的文章,使用统一的规格;
参考:
http://wiki.woodpecker.org.cn/moin/PkmPlatfromStory
() => 场景说明;
{} => 设定说明;
<> => 分镜,导演立旨说明等等;
> 角色分配:
> max:时间管理者
应该追加一个:
比如说 karlcpp: 主持人(战场守护)
> 老范:红方
盲人
> zoom:蓝方
聋子
> 棋盘:4x4
> 棋子:每人4个
围观的: 1~1000000
>
> 战斗在一个月黑风高的夜晚开始了,深夜花园里四处静悄悄~,只有三个怪叔叔蹲在地上,咬着手电筒玩游戏。
(真实场景是这样的:
karlcpp:在天安门广场上搭了个台子,用一些旧电视拼了个大屏幕,
+ 免费组织EB游戏
+ 并讲解给过路打酱油的;
+ 通过各种渠道,定期通报对战双方的行动指令,并立即计算哪个棋子没有血了,挂了!
max: 在昆明家中,因有只巨高级的劳力士手表,所以,指定为本次对战的 "时钟",所作的事儿,
+ 就是根据karlcpp这次比赛的规定:
+ 每隔 1分钟 面对摄像头,吼一声:“又一秒!”
+ 并同时举一下写着"又一秒"的牌子
老范: 在成都家里,摸着自制的EB对战棋盘,听着电脑里的声音,将自个儿想走的棋路对麦克风说出来
zoomq: 在珠海公司里,用3屏电脑参战:
+ 一个播放 max 的网络表演(每隔 1分钟 举一下写着"又一秒"的牌子)
+ 一个播放 karlcpp 在天安门那儿主持进行的战场说明
+ 一个运行自个儿写的程序,根据 karlcpp 通报的棋盘和棋子的行动,不断输入自个儿的程序,
+ 并将结果(自个儿棋子的行动)通过邮件发送给 karlcpp
)
>
> 第0轮
> 【max拿这计时器】
> 『计时器 = 节拍管理器』
> 『max = 战场守护神』
> max:战斗开始吧!每轮的执行时间是1分钟。
>
> 第1轮
> 【老范与zoom在纸上挥笔疾书,写下了他们对四个棋子的操控(移动,战斗……)】
> 『纸条 = 信息传递』
> 【max的计时器时间到了】
> max:时间到,两位,上交纸条吧。
> 【max根据纸条上的指令,移动棋盘上的棋子】
> 【max移动完棋子,将纸条放到了一个盒子里】
> 『盒子 = 战场情况记录器』
战场守护神 ;-)
>
> 第2轮开始
> 【老范和zoom看着棋盘上的棋子,各怀鬼胎,时而苦思冥想,时而奋笔疾书,在计时器的滴答中,第2轮结束了】
> max:时间到,两位,上交纸条吧。
> 【max移动棋子中~】
> 老范:靠,我要执行最前面一行的。
> max:shit,我只按你最后写的来做,你第一个棋子写了两条指令,我只按最后一条来弄。
> 『信息之按最后的为准』
> zoom:哇!!!!(惨叫ing)
> 【zoom偷偷摸摸的想抽回纸条,挨了max一板砖】
zoomq 再次写个纸条给max 或是 邮件给karlcpp;
- 被无视
只有这个俺有意见,最好可以按照上次的指令复用;
>
> zoom:哇!!!!(惨叫ing) 为什么又打我
> 【zoom偷偷摸摸的想看老范盒子里的纸条,又挨了max一板砖】
> max: 别人的神秘盒子是私有的,你偷偷摸摸干嘛?
>
这其实是不现实的吧,
因为战场守护一直在通告战报,至少可以知道历史纸条们...
>
> n轮后:
> zoom面带微笑躺在血泊中(经常想偷回纸条,挨了不少板砖,但是奇迹性的胜利了)。
> 老范捶胸顿足(多写了很多指令,互相冲突,最后自己都搞不清楚自己要怎么动了,经常性决策失误,败了~)
> max躺在床上,睡觉ing(做这种移动棋子的体力活,太累了!)
> karlcpp 在家看录像, 呵呵,老范,zoom 你们的套路我都明白了, 明天看我怎么收拾你们。
>
>
>
>
>
--
http://zoomquiet.org 人生苦短,Pythonic!-)
Free as in Freedom! 哲思自由软件社区:http://zeuux.org
好的! 为了 EB 核心程序的简单,俺认为应该当没有指令;
但是这也提醒所有 战队开发者,应该将历史指令保留,以便减少决策运算,,,,可以简单复用!
对于战场守护神,如果战队程序白痴的想对已经死亡的战士下令,,,,
那个在现实战争中,这也是常见的,
作为EB 中高于世人的存在, 守护神,就当放了个屁,不管就好了...
当然的,未来,如果大家的决策程序,对战时,经常战平时,这种狗屁指令,就可以视作指挥力不足,
可以考虑记入胜利核算公式了.... ;-)
..
>> max: 别人的神秘盒子是私有的,你偷偷摸摸干嘛?
>>
> zoom: 这其实是不现实的吧, 因为战场守护一直在通告战报,至少可以知道历史纸条们...
> 老范: 这点很关键,盒子里面是别人未来计划的动作,当然要保密。 战场守护不通报战报。他只是更新battle_field 那个表。
> 大家通过battle_field 总是能看到别人战士的位置,以及别人战士正在做什么动作,但是看不到别人脑子里想的下一步干什么的计划(符合自然规律)。
> 历史纸条估计都已经过去时了,对于进一步战斗决策没有用了。
>
明确,可以看到的消息范畴是明确的,
只是对于已知数据的可能性,有不同想象...
--
http://zoomquiet.org 人生苦短,Pythonic!-)
过程改进乃是催生可促生靠谱的人的组织! (PE keeps evolving organizations which promoting
people be good!)
-----原始邮件-----
发件人:"Karl Ma" <kar...@gmail.com>
发送时间:2009年7月5日 星期日
收件人:erlang...@googlegroups.com
主题:[erlang-china:2220] Re: [ECUG:469] Re: 恶狼战役: “时钟要保障每台不同的机器有相同的运算结果” 的进一步解释
-----原始邮件-----
发件人:"老范" <fanyu...@gmail.com>
发送时间:2009年7月7日 星期二
收件人:erlang...@googlegroups.com, "ECUG~erlang中文用户组" <ec...@googlegroups.com>
主题:[erlang-china:2236] Re: [ECUG:469] Re: 恶狼战役: “时钟要保障每台不同的机器有相同的运算结果” 的进一步解释
讨论请公开;
这是公共智力资产了!
建议使用 IRC
--
http://zoomquiet.org 人生苦短,Pythonic!-)
>
> 你看我们是否约个时间,组织一次EB 参与者 IRC 讨论会。 把大家关心的问题再充分讨论一下?
>
关心的问题,请老范先代为列出来,在专门维基中,并给出参考链接,以便大家先预习;
> 由于大家都是业余玩的最好是找个晚上的时间。
具体时间,俺建议是 固定到周521:00~22:00 定时,定议題不拖时间;
在此之前,请大家先练习加入 #erlbattle 房间,使用 IRC ;-)
--
http://zoomquiet.org 人生苦短,Pythonic!-)
KM乃是培育可催生自学习型组织的文化氛围!
> -----原始邮件----- > 发件人: "Zoom.Quiet" <zoom....@gmail.com> > 发送时间: 2009年7月7日 星期二 > 收件人: erlang...@googlegroups.com, "ECUG~erlang中文用户组" <ec...@googlegroups.com> > 抄送: > 主题: [erlang-china:2248] Re: [ECUG:469] Re: 恶狼战役: “时钟要保障每台不同的机器有相同的运算结果” 的进一步解释 > > 2009/7/7 郎咸武 <langx...@163.com>: > > 老范:有些问题后面再和你讨论 > > 讨论请公开; > 这是公共智力资产了! > > 建议使用 IRC > > > 在2009-07-07,"老范" <fanyu...@gmail.com> 写道: > > > > -----原始邮件----- > > 发件人:"老范" <fanyu...@gmail.com> > > 发送时间:2009年7月7日 星期二 > > 收件人:erlang...@googlegroups.com, "ECUG~erlang中文用户组" > > <ec...@googlegroups.com> > > 主题:[erlang-china:2236] Re: [ECUG:469] Re: 恶狼战役: “时钟要保障每台不同的机器有相同的运算结果” > > 的进一步解释 > > > > 咸武: > > > > 攻击格子和攻击人这个约定也是和自然界法则相同的。 (我们游戏中大部分规则都是按照自然法则,或者物流定律来定的) > > > > 当你向前挥出一刀, 敌人可能跑了,就没砍到; 现在一般的网游都是只要挥刀的时候对方在,就算砍到。 我们是刀落下的时候,对方在才算砍到。。 > > > > > > Regards > > > > 老范 > > > > > > 2009/7/6 郎咸武<langx...@163.com> > >> > >> > >> 我记得有个文档中明确说明一点,当战士发起攻击的时候不是针对的人,而是针对的“格子”。文档中还明确说明这样攻击会造成误伤,因为在发起攻击到生效,格子的敌人可能走了,也有可能换了新的敌人。 > >> 以上回答针对(老范:这个是这样考虑的,上一次比如发的是攻击指令,这轮可能前面的人都死了,或者走了, 是否有必要复用原来的指令? > >> 可以再发一个,也是等价的。) > >> > >> > >> > >> 在2009-07-05,"Karl Ma" <kar...@gmail.com> 写道: > >> > >> -----原始邮件----- > >> 发件人:"Karl Ma" <kar...@gmail.com> > >> 发送时间:2009年7月5日 星期日 > >> 收件人:erlang...@googlegroups.com