私は、ブロードキャスト メディア (この場合は IR) を介して通信できる多数のマイクロコントローラーを持っています。各ノードは定期的に他のすべてのノードに自分の存在を通知したいと考えていますが、ブロードキャスト メディアであるため、2 つのノードが同時に送信すると衝突が発生し、どちらのメッセージも正しく送信されません。
さらに複雑なことに、ノードが無効なメッセージを受信した場合、これが衝突によるものなのか、バックグラウンド ノイズや弱い信号によるものなのかを確実に判断することは現実的ではないようです。また、ノードの可視性は通常再帰的ですが (A が B を見ているということは、B が A を見ていることを意味します)、通常、すべてのノードが他のすべてのノードを見ることができるわけではありません。
外部干渉はさておき、合理的なアプローチはタイムスロットを作成することであり、各ノードは各タイムスロットで小さい (理想的にはノード間で同様の) 確率で送信します。確率 p で送信するノードが n 個ある場合、メッセージは (1 - p) n回送信されません。n * p * (1 - p) n-1の時間だけ 1 つのメッセージが送信され、残りの時間は衝突が発生します。成功する衝突の最大発生率は、n ノードのそれぞれが 1/n の時間で送信するときに発生し、これにより、かなり安定した 38% の成功した送信と 24% の衝突が発生します。この値は、ノード数の増加に伴ってわずかに変化します。
それを考えると、成功した送信および/または衝突のレートを観察し、独自の送信レートを調整して、それらを期待値に近づけようとすることができるように思われます。私が確信していないのは、これを達成するための最良のフィードバックメカニズムが何であるかということです. これはまた、存在しない衝突を回避するために運命づけられた努力で伝送速度を低下させ続ける原因となる外部干渉を考慮していません.
各ノードが衝突せずに受信できるアナウンス メッセージの割合を最大化するための最適なアルゴリズム (上記の改良またはまったく異なるアプローチ) は何ですか?