一张多智能体通信图看起来连在一起,不代表每个人的信息都能传到所有其他人。先定义边的方向,再检查每个节点的可达范围。下面用三个匿名节点的自造图,演示强连通检查;不声称实际网络已成功发消息。
先规定箭头代表什么
本例 u→v 表示 u 的消息可沿一跳转发到 v。链 A→B→C 中,A 可到 B 和 C,但 C 回不到 A。若加 C→A,则每个节点都能沿某条有向路径到达其他节点,形成强连通。这里的可达只看图结构,不考虑延迟、丢包、权限或消息内容。

| 拓扑 | A能到 | B能到 | C能到 | 强连通 |
|---|---|---|---|---|
| A→B→C | B、C | C | 无 | 否 |
| A→B→C→A | B、C | A、C | A、B | 是 |
运行可达范围与强连通检查
在独立环境执行 python -m pip install “networkx==3.6.1″,把下面保存为 topology.py,运行 python topology.py。代码显式加入全部节点,避免孤立个体因为没有边而从图中消失。
import networkx as nx
def inspect(edges):
graph = nx.DiGraph()
graph.add_nodes_from(["A", "B", "C"])
graph.add_edges_from(edges)
reachable = {a: sorted(nx.descendants(graph, a)) for a in sorted(graph.nodes)}
components = sorted(sorted(s) for s in nx.strongly_connected_components(graph))
return reachable, nx.is_strongly_connected(graph), components
chain = inspect([("A","B"),("B","C")])
ring = inspect([("A","B"),("B","C"),("C","A")])
print("chain:", chain)
print("ring:", ring)
assert chain[0]["C"] == [] and chain[1] is False
assert ring[1] is True and ring[2] == [["A","B","C"]]
链图应分成三个强连通分量,环图只有包含 A/B/C 的一个分量。若图是无向图,应使用无向连通概念,不能直接调用要求有向图的 is_strongly_connected。空图也需要单独定义如何处理。
把图检查接回真实通信契约
先列出实际个体名单和允许的信息流,按真实方向画边;发送、接收和转发权限不同,不应随手把单向权限补成双向。节点退场或链接断开后重新计算可达范围,并明确哪些任务必须等所有人的数据。这里没有自动添加边或扩大权限。
强连通只是结构属性。它不能单独保证平均一致性、算法收敛或消息按时送达;更新权重、同步方式和延迟还需分析。正文没有运行真实分布式系统。下一步可在你已有的通信日志中逐条核对边是否真的可用,再将结构检查与超时统计分开报告。
资料与核对依据
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/33331.html