AOI 的优化
去年写过几篇过于 AOI 模块的设计。将 AOI 服务独立出来的设计早就确定,并且一定程度上得到了其他项目组的认可。(在公司内部交流中,已经有几个项目打算做此改进)
最近一段时间,我在这方面做进一步的工作。(主要是实现上的)
首先,基于 KISS 的考虑,删除了原有协议中的一些不必要的细节。比如,不再通知 AOI 模块,对象的移动速度。移动速度虽然对优化很有意义,但毕竟是一冗余数据。考虑这些,容易掉入提前优化的陷阱。
其次,增加了一条设置默认关心区域的协议。这是出于实用性考虑。
原本的考虑中,我希望应用者按需为每对实体设置 AOI 消息。但是,当场景中实体过多时,将浪费大量的进程间通讯带宽(内存和处理速度上倒是可以优化)。往往,一个 AOI 实体不会关于过远的其它实体,所以增加一条协议,可以缩减大量的模块间交互。即,那些老死不相往来的实体间的消息就直接过滤掉了。
在实现上,我采用的最简单的了望塔方案。如果应用层需要让每个实体最多关心半径为 100 米内的其它实体,那么就按合适的间隔(比如也是 100 米)设置一个了望塔对象,由了望塔通知它,附近有哪些东西。
了望塔对应用层是不可见的,它只是一个具体的实现方案。而这个通知协议也只保证大略的信息。只是通知实体,附近(不一定是严格的设定半径,但一定大于应用层设定的范围)实体的增删。
应用层根据这条协议维持自己私有的一个可见集合,再结合其它 AOI 协议得到精确的 AOI 消息。
了望塔的分布应该怎样设置?
一开始我首先想到的是简单的按 2D 网格分布。但是这个方案不到 20 秒就被否定,因为直觉告诉我它不是最优的。然后我试图寻找更好的方法。比如交错开排布。
__ __ __ / \__/ \__/ \ \__/ \__/ \__/ / \__/ \__/ \ \__/ \__/ \__/
画出来后,同事说,这不就是移动通讯中用的蜂窝网吗?
是啊,很容易证明这就是最优的分布方案。因为每个实体只需要被三个了望塔监控就可以了,而不是 2D 矩形网格方案的四个。六边形的外接圆之间的覆盖面积比例(重复区域)也比正方形的小。
实现时,我们可以生成多级的蜂窝网应付不同的应用层需求。
Comments
Posted by: Lynn | (23) July 18, 2015 09:12 PM
Posted by: 独孤残云 | (22) June 7, 2010 05:28 PM
Posted by: Anonymous | (21) February 14, 2010 03:26 AM
Posted by: lichking | (20) October 14, 2009 11:35 AM
Posted by: d | (19) September 27, 2009 10:39 AM
Posted by: sjinny | (18) September 25, 2009 10:41 PM
Posted by: vêtements hommes | (17) September 25, 2009 02:42 PM
Posted by: analyst | (16) September 25, 2009 11:09 AM
Posted by: Cloud | (15) September 25, 2009 10:46 AM
Posted by: mmosquito | (14) September 25, 2009 09:55 AM
Posted by: mmosquito | (13) September 25, 2009 09:38 AM
Posted by: Cloud | (12) September 25, 2009 01:23 AM
Posted by: analyst | (11) September 25, 2009 12:01 AM
Posted by: sjinny | (10) September 24, 2009 10:58 PM
Posted by: Cloud | (9) September 24, 2009 03:31 PM
Posted by: mmosquito | (8) September 24, 2009 10:58 AM
Posted by: Louis | (7) September 22, 2009 11:48 AM
Posted by: sjinny | (6) September 21, 2009 12:51 AM
Posted by: Cloud | (5) September 20, 2009 12:58 PM
Posted by: sjinny | (4) September 20, 2009 01:41 AM
Posted by: yuanhj7908 | (3) September 19, 2009 06:55 AM
Posted by: sjinny | (2) September 18, 2009 10:08 PM
Posted by: anders0913 | (1) September 18, 2009 04:36 PM