wl迭代以哪个节点为最后零件点进行计算呢,怎么实现图不变性的
好问题让我详细解释 WL 迭代的计算机制和图不变性的实现原理。已查看文件face_graph_builder.cs非常好的问题让我详细解释 WL 迭代的计算机制和图不变性原理 WL 迭代的核心机制❌没有最后节点的概念WL 算法的关键特点是所有节点同时参与计算没有先后顺序之分。看你的代码实现// wl_graph_kernel.cs 第 43-72 行for(intiter1;iteriterations;iter){// 为每个节点生成新标签varnewLabelsnewDictionaryint,string();foreach(varnodeingraph.Nodes){// 收集邻居标签并排序varneighborLabelsnode.NeighborIds.Select(neighborIdgraph.Nodes[neighborId].CurrentLabel).OrderBy(labellabel)// ← 关键排序保证不变性.ToList();// 构造新标签当前标签 排序后的邻居标签集合stringcombinedLabelCombineLabels(node.CurrentLabel,neighborLabels);newLabels[node.Id]combinedLabel;}// 统一更新所有节点的标签foreach(varnodeingraph.Nodes){node.CurrentLabelnewLabels[node.Id];}}迭代过程示意假设有一个简单的零件图迭代 0初始: 节点 1: 圆柱面 —— 邻居[节点 2, 节点 3] 节点 2: 平面 —— 邻居[节点 1, 节点 3] 节点 3: 平面 —— 邻居[节点 1, 节点 2] 迭代 1: 节点 1: Hash(圆柱面_ (平面平面)) 节点 2: Hash(平面_ (圆柱面平面)) 节点 3: Hash(平面_ (圆柱面平面)) 注意节点 2 和节点 3 标签相同结构对称️ 图不变性的实现原理1️⃣排列不变性Permutation Invariance问题如果给节点重新编号相似度结果应该不变解决方案对邻居标签排序// 关键代码varneighborLabelsnode.NeighborIds.Select(neighborIdgraph.Nodes[neighborId].CurrentLabel).OrderBy(labellabel)// ← 字母排序.ToList();示例场景 A节点 1 的邻居是 [节点 5平面, 节点 3圆柱面] 场景 B节点 1 的邻居是 [节点 3圆柱面, 节点 5平面] 不排序 场景 A → 圆柱面_ (平面圆柱面) 场景 B → 圆柱面_ (圆柱面平面) ❌ 结果不同 排序后 场景 A → 圆柱面_ (平面圆柱面) 场景 B → 圆柱面_ (平面圆柱面) ✅ 结果相同2️⃣同构不变性Isomorphism Invariance问题两个结构相同的图节点编号不同应该得到相同的标签分布解决方案WL 迭代的消息传递机制图 A: 图 B: ①--② ⑤--④ | | | | ③--④ ⑦--⑥ 虽然节点编号不同但拓扑结构相同 迭代 0: 图 A: [圆柱面平面平面圆柱面] 图 B: [圆柱面平面平面圆柱面] 迭代 1: 图 A: [H1, H2, H2, H1] (H1Hash(圆柱面_ (平面平面))) 图 B: [H1, H2, H2, H1] ✅ 标签频率完全相同3️⃣尺度不变性通过统计向量问题如何比较节点数不同的图解决方案使用标签频率向量而非具体节点// wl_graph_kernel.cs 第 113-127 行privatestaticDictionarystring,intCountLabelFrequencies(PartGraphgraph){varfrequencynewDictionarystring,int();foreach(varnodeingraph.Nodes){if(!frequency.ContainsKey(node.CurrentLabel)){frequency[node.CurrentLabel]0;}frequency[node.CurrentLabel];// ← 只统计次数不管具体位置}returnfrequency;}示例零件 A10 个面: 标签 L1: 4 次标签 L2: 6 次 → 向量 A [L1:4, L2:6] 零件 B20 个面结构类似: 标签 L1: 8 次标签 L2: 12 次 → 向量 B [L1:8, L2:12] 余弦相似度计算 A·B 4×8 6×12 104 ||A|| √(4²6²) 7.21 ||B|| √(8²12²) 14.42 similarity 104 / (7.21×14.42) ≈ 1.0 ✅ 完整的不变性保证不变性类型保证机制代码位置排列不变性邻居标签排序OrderBy(label label)同构不变性WL 消息传递迭代细化标签平移/旋转不变性基于拓扑而非坐标FaceType作为初始标签尺度不变性频率向量归一化余弦相似度公式节点编号不变性使用哈希标签HashLabel()函数 总结WL 迭代不以某个特定节点为终点而是全局并行更新所有节点在每轮迭代中同时更新标签局部聚合每个节点聚合其邻居的信息统计表征最终用标签频率向量表示整张图图不变性通过以下机制保证✅ 邻居排序 → 排列不变性✅ 消息传递 → 同构不变性✅ 频率统计 → 尺度不变性✅ 哈希压缩 → 编号无关性这使得 WL 图核能够稳定地捕捉零件的拓扑结构本质而不受节点编号、坐标系、缩放等因素影响。需要我画个示意图进一步说明吗
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2433326.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!