我有一个相当有趣的问题,之前可能已经解决了,但我不太确定该去哪里。
我正在开发一个系统,其中包括:
我正在尝试开发一种算法和实现:
例如一些应该有效的示例拓扑是:
4 个节点都可以互相看到
A-B
|X|
C-D
排长队最多只能看到4个邻居
A-B-C-D-E-F-G-H-I
|
X-Y-Z
示例 1 -A 和 B 彼此靠近,算法决定 B 应该向右移动
1000 2000 3000 4000
0 250 500 750 0 250 500 750 0 250 500 750 0 250 500 750 0
| | | | | | | | | | | | | | | | |
A A A A A
>> >>>>
B B B B
Time ------------------------------------------------------------------------------>
示例 2 - A 和 B 对齐,算法决定 C 应该向左移动
1000 2000 3000 4000
0 250 500 750 0 250 500 750 0 250 500 750 0 250 500 750 0
| | | | | | | | | | | | | | | | |
A B A B A B A B A
<< <<<<
C C C C
Time ------------------------------------------------------------------------------>
无线电通信是未确认/广播信标,因此无法确认 RF 链路。然而,如果节点在自己的信标中包含邻居的标识符,那么它们就可以共享足够的信息。
例如在上面的示例 2 中,如果 A 可以听到 B,则 A 的信标可以包括“B 比我晚 250 毫秒”。同样,如果 B 可以听到 A,那么 B 的信标可能会包含“A 比我晚 750 毫秒”。
有了这种类型的信息,这个问题开始看起来很像网络图问题,其中每个节点都可以根据它可以听到的节点以及它们依次可以听到的节点从自身向外构建。我研究过诸如生成树协议之类的东西来寻求灵感,但还没有太多运气。
虽然它看起来像一个网络图问题,但问题实际上是如何改变信标的时间。
本质上,该算法回答了“我应该移动自己的信标吗?如果是,朝哪个方向移动?”的问题,但它考虑到了:
Sooooo,在写了很多文字之后,我的问题确实是:
顺便说一句:我对无线电/MAC 层解决方案不感兴趣,这确实是一个应用程序问题!
我从来没有抽出时间来解决这个“插槽”的想法。相反,我们的节点只是远离了任何冲突。 IE。我们没有尝试开发槽算法的解决方案,而是做了一些尝试均匀间隔的东西,但这可能会导致振荡。
我建议你将其分成两个分布式算法,你可以找到书面的。
1)分布式时钟同步。使用 NTP 等算法,让所有节点都同意一个共同的时间基准。此时,也许在一段时间内,可能还没有一个共同的协议来及时分隔不同的传输,但是您可以使用 http://en.wikipedia.org/wiki/ALOHAnet#The_ALOHA_protocol 虽然这是一个问题.
2)分布式图形着色。一个起点是http://en.wikipedia.org/wiki/Graph_coloring#Parallel_and_distributed_algorithms。我什至不认识那里命名的算法,但至少看起来有你可以参考的工作。在“分散算法”下,他们还引用了无线信道分配的应用程序,因此其中一些可能非常接近您想要的。