我有许多可以通过广播媒体(在本例中为 IR)进行通信的微控制器。每个节点都希望定期向所有其他节点宣布它的存在,但由于它是一种广播媒体,因此同时传输的两个节点会产生冲突,并且两个消息都不会正确传输。
更复杂的是,当节点接收到无效消息时,可靠地确定这是由于碰撞还是由于背景噪声或弱信号似乎并不实际。此外,虽然节点可见性通常是自反的(A 看到 B 意味着 B 可以看到 A),但通常情况下并非所有节点都可以看到所有其他节点。
暂时不考虑外部干扰,似乎一种合理的方法是创建时隙,每个节点在每个时隙中以小的(理想情况下在节点之间相似)概率进行传输。如果有 n 个节点以概率 p 进行传输,则在 (1 - p) n次中不会传输任何消息;在 n * p * (1 - p) n-1次中,只有一条消息将被传输,其余时间将发生冲突。当 n 个节点中的每一个节点传输 1/n 的时间时,成功冲突的发生率最高,这导致相当稳定的 38% 成功传输和 24% 冲突;该值仅随着节点数量的增加而略有变化。
鉴于此,我们似乎可以观察成功传输和/或冲突的速率,并调整我们自己的传输速率以尝试迫使它们接近预期值。我不确定实现这一目标的最佳反馈机制是什么,这样每个人最终都会得到相似的概率。这也没有考虑到外部干扰,这将导致我们不断降低传输速率,以避免不存在的冲突。
什么是最佳算法(上述的改进或完全不同的方法)以最大化每个节点可以在没有冲突的情况下接收的公告消息的比例?