【人工智能离散数学基础】——深入详解图论:基础图结构及算法,应用于图神经网络等

embedded/2024/12/28 13:21:32/

深入详解图论:基础图结构及算法,应用于图神经网络

        图论(Graph Theory)是数学中研究图这种离散结构的分支,广泛应用于计算机科学、网络分析、人工智能等领域。随着图神经网络(Graph Neural Networks, GNNs)在深度学习中的兴起,图论的基础知识和算法在处理复杂数据结构和关系时显得尤为重要。本文将深入探讨图论的基础图结构及算法,并详细介绍其在图神经网络中的应用。

目录

  1. 引言
  2. 基础图结构
    • 图的定义
    • 图的分类
    • 图的表示方法
    • 特殊类型的图
  3. 基本图算法
  4. 图论在图神经网络中的应用
    • 神经网络概述
    • 图卷积网络(GCN)
    • 图注意力网络(GAT)
    • 应用案例
  5. 示例代码
  6. 总结与展望
  7. 参考资料

1. 引言

        图论作为数学的一个重要分支,研究对象为图这一抽象概念。图由节点(顶点)和连接节点的边组成,能够有效表示实体之间的各种关系。在计算机科学中,图被广泛应用于网络结构、社交关系、分子结构等领域。随着深度学习的发展,图神经网络(GNNs)成为处理图结构数据的强大工具,推动了图论人工智能中的应用。因此,深入理解图论的基础图结构及算法,对于掌握图神经网络的原理和应用至关重要。

2. 基础图结构

2.1 图的定义

是由一组顶点(Vertices)和一组连接顶点的边(Edges)组成的数学结构。形式化地,

,图可以表示为 \( G = (V, E) \),其中:

  • V是顶点的集合。
  • E 是边的集合,每条边连接两个顶点。

2.2 图的分类

根据边的性质和图的特性,图可以分为以下几类:

  1. 有向图(Directed Graph)无向图(Undirected Graph)

    • 有向图:每条边有方向,即一条边由一个起点指向一个终点,表示“从起点到终点”的关系。
    • 无向图:每条边没有方向,表示两个顶点之间的双向关系。
  2. 加权图(Weighted Graph)非加权图(Unweighted Graph)

    • 加权图:边上有权重(权值),表示边的强度、距离或成本。
    • 非加权图:边上没有权重。
  3. 简单图(Simple Graph)多重图(Multigraph)

    • 简单图:任意两个顶点之间最多有一条边,且没有自环(边连接同一顶点)。
    • 多重图:允许两个顶点之间有多条边,允许自环。
  4. 完全图(Complete Graph)

    • 每对不同的顶点之间都有一条边。
  5. 连通图(Connected Graph)非连通图(Disconnected Graph)

    • 连通图:任意两个顶点之间至少存在一条路径。
    • 非连通图:存在至少一对顶点之间没有路径。
  6. 树(Tree)森林(Forest)

    • :一种连通的无环图。
    • 森林:由多个不连通的树组成的图。

2.3 图的表示方法

在计算机中,图通常有以下几种常见的表示方法:

  1. 邻接矩阵(Adjacency Matrix)

    • 使用一个二维矩阵A表示图,其中A[i][j]表示顶点 i和顶点 j 之间是否存在边。
    • 有向图A[i][j]=1 表示从 i到 j有边。
    • 无向图:邻接矩阵是对称的,即 A[i][j]=A[j][i]
    • 加权图A[i][j]存储边的权重。
  2. 邻接表(Adjacency List)

    • 对于每个顶点,存储与之相邻的所有顶点列表。
    • 在存储空间上通常比邻接矩阵更高效,特别是对于稀疏图。
  3. 边列表(Edge List)

    • 存储所有边的列表,每条边表示为一对顶点(有向图中为有序对)。

2.4 特殊类型的图

  1. 二分图(Bipartite Graph)

    • 图的顶点可以分为两个不相交的集合,且每条边都连接来自不同集合的顶点。
  2. 树(Tree)和森林(Forest)

    • :一种连通、无环的无向图。
    • 森林:由多个不连通的树组成的图。
  3. 环图(Cycle Graph)

    • 每个顶点的度数为2,形成一个闭合环。
  4. 有向无环图(DAG, Directed Acyclic Graph)

    • 有向图且不包含任何有向环。

3. 基本图算法

图论中有许多经典算法,用于解决各种图相关的问题。以下将介绍几种常见的图算法及其应用。

3.1 图遍历算法

图遍历算法用于访问图中的所有顶点和边,主要包括深度优先搜索(DFS)和广度优先搜索(BFS)。

3.1.1 深度优先搜索(DFS)

深度优先搜索(Depth-First Search, DFS) 是一种通过尽可能深入每个分支来遍历或搜索图的算法。它使用栈(递归实现)来记住下一步要访问的顶点。

算法步骤

  1. 从起始顶点开始,访问该顶点并标记为已访问。
  2. 对每一个未被访问的邻接顶点,递归进行DFS。
  3. 回溯至上一个顶点,继续访问其他未访问的邻接顶点。

应用

  • 检测图中的连通性。
  • 寻找图中的路径。
  • 拓扑排序。

示例代码(Python)

def dfs(graph, start, visited=None):if visited is None:visited = set()visited.add(start)print(start)  # 访问节点for neighbor in graph[start]:if neighbor not in visited:dfs(graph, neighbor, visited)return visited# 示例图(邻接表表示)
graph = {'A': ['B', 'C'],'B': ['A', 'D', 'E'],'C': ['A', 'F'],'D': ['B'],'E': ['B', 'F'],'F': ['C', 'E']
}dfs(graph, 'A')

输出:

A
B
D
E
F
C
3.1.2 广度优先搜索(BFS)

广度优先搜索(Breadth-First Search, BFS) 是一种逐层遍历图的算法,使用队列来记住下一步要访问的顶点。

算法步骤

  1. 从起始顶点开始,访问该顶点并标记为已访问。
  2. 将所有未被访问的邻接顶点加入队列。
  3. 从队列中取出一个顶点,重复步骤2,直到队列为空。

应用

  • 计算无权图中的最短路径。
  • 检测图的连通性。
  • 层次遍历。

示例代码(Python)

from collections import dequedef bfs(graph, start):visited = set()queue = deque([start])visited.add(start)while queue:vertex = queue.popleft()print(vertex)  # 访问节点for neighbor in graph[vertex]:if neighbor not in visited:visited.add(neighbor)queue.append(neighbor)# 示例图(邻接表表示)
graph = {'A': ['B', 'C'],'B': ['A', 'D', 'E'],'C': ['A', 'F'],'D': ['B'],'E': ['B', 'F'],'F': ['C', 'E']
}bfs(graph, 'A')

输出:

A
B
C
D
E
F

3.2 最短路径算法

最短路径算法用于在图中找到两个顶点之间的最短路径。常见的算法包括Dijkstra算法、Bellman-Ford算法和Floyd-Warshall算法

3.2.1 Dijkstra算法

Dijkstra算法 是一种用于计算单源最短路径的贪心算法,适用于加权图,且要求所有边的权重为非负。

算法步骤

  1. 初始化起点到所有顶点的距离为无穷大,起点到自身的距离为0。
  2. 将所有顶点加入未访问集合。
  3. 从未访问集合中选择距离起点最近的顶点,标记为已访问。
  4. 更新该顶点邻接顶点的距离,如果通过该顶点能缩短距离,则更新距离。
  5. 重复步骤3和4,直到所有顶点被访问。

应用

  • GPS导航系统。
  • 网络路由算法

示例代码(Python)

import heapqdef dijkstra(graph, start):heap = []heapq.heappush(heap, (0, start))distances = {vertex: float('inf') for vertex in graph}distances[start] = 0visited = set()while heap:current_distance, current_vertex = heapq.heappop(heap)if current_vertex in visited:continuevisited.add(current_vertex)for neighbor, weight in graph[current_vertex].items():distance = current_distance + weightif distance < distances[neighbor]:distances[neighbor] = distanceheapq.heappush(heap, (distance, neighbor))return distances# 示例图(邻接表表示,带权重)
graph = {'A': {'B': 1, 'C': 4},'B': {'A': 1, 'D': 2, 'E': 5},'C': {'A': 4, 'F': 3},'D': {'B': 2},'E': {'B': 5, 'F': 1},'F': {'C': 3, 'E': 1}
}distances = dijkstra(graph, 'A')
print(distances)

输出:

{'A': 0, 'B': 1, 'C': 4, 'D': 3, 'E': 6, 'F': 5}
3.2.2 Bellman-Ford算法

Bellman-Ford算法 是另一种用于计算单源最短路径的算法,适用于含有负权边的图。它可以检测图中是否存在负权环。

算法步骤

  1. 初始化起点到所有顶点的距离为无穷大,起点到自身的距离为0。
  2. 对所有边进行V-1次松弛操作(V为顶点数量)。
  3. 检查是否存在可以进一步松弛的边,若存在则说明图中存在负权环。

应用

  • 适用于包含负权边的网络分析。
  • 经济学中的最优投资路径分析。
3.2.3 Floyd-Warshall算法

Floyd-Warshall算法 是一种用于计算所有顶点对之间最短路径的动态规划算法,适用于有向或无向图。

算法步骤

  1. 初始化一个距离矩阵,记录所有顶点对之间的边权。
  2. 逐步考虑每个顶点作为中间点,更新顶点对之间的最短路径。
  3. 最终得到所有顶点对之间的最短路径长度。

应用

  • 计算密集型图中的所有最短路径。
  • 网络流量分析。

3.3 最小生成树算法

最小生成树(Minimum Spanning Tree, MST)是指在连通加权图中,选取一棵生成树,使得所有边权之和最小。

3.3.1 Kruskal算法

Kruskal算法 是一种基于边的贪心算法,用于生成最小生成树。它按照边权从小到大排序,逐条选取不形成环的边。

算法步骤

  1. 将所有边按权重从小到大排序。
  2. 初始化一个森林,每个顶点都是一个独立的树。
  3. 依次选择权重最小的边,如果该边连接的两个顶点属于不同的树,则将它们合并。
  4. 重复步骤3,直到所有顶点在一棵树中。

应用

  • 网络设计(如电网、通信网络)。
  • 图聚类。
3.3.2 Prim算法

Prim算法 是另一种基于顶点的贪心算法,用于生成最小生成树。它从一个起始顶点开始,逐步扩展最小权重的边。

算法步骤

  1. 初始化起始顶点,将其加入生成树。
  2. 寻找连接生成树和未加入生成树的最小权重的边。
  3. 将该边和新的顶点加入生成树。
  4. 重复步骤2和3,直到所有顶点都在生成树中。

应用

  • 类似于Kruskal算法,用于网络设计和优化。

3.4 拓扑排序

拓扑排序(Topological Sorting) 是一种对有向无环图(DAG)进行线性排序的方法,使得对于每条有向边 \( u \rightarrow v \),顶点 \( u \) 都排在顶点 \( v \) 的前面。

算法步骤(Kahn算法):

  1. 计算所有顶点的入度。
  2. 将所有入度为0的顶点加入队列。
  3. 从队列中取出一个顶点,加入拓扑序列,并减少其邻接顶点的入度。
  4. 重复步骤3,直到队列为空。
  5. 若拓扑序列中包含所有顶点,则排序成功;否则,图中存在环。

应用

  • 任务调度。
  • 编译器中的代码优化。

3.5 强连通分量

强连通分量(Strongly Connected Components, SCCs) 是指在有向图中,每个顶点都可以通过有向路径到达其他所有顶点的极大子集。

算法步骤(Kosaraju算法):

  1. 对图进行DFS,记录顶点的完成时间顺序。
  2. 反转图中的所有边。
  3. 按完成时间的逆序对反转图进行DFS,标记强连通分量。

应用

  • 化简有向图。
  • 语义分析和代码优化。

4. 图论在图神经网络中的应用

4.1 图神经网络概述

神经网络(Graph Neural Networks, GNNs)是针对图结构数据设计的一类神经网络模型。传统的神经网络(如卷积神经网络)主要处理欧几里得数据(如图像),而GNN能够有效处理非欧几里得数据,通过学习节点、边及图整体的表示,从而用于分类、回归、生成等任务。

GNNs的核心思想是通过信息传递机制,聚合邻居节点的信息,更新节点的表示。常见的GNN模型包括图卷积网络(Graph Convolutional Networks, GCNs)、图注意力网络(Graph Attention Networks, GATs)等。

4.2 图卷积网络(GCN)

图卷积网络(GCN) 是最早被广泛研究和应用的GNN模型之一。GCN通过在图的结构上定义卷积操作,能够捕捉节点之间的局部关系。

基本原理

  • 节点的表示通过与其邻居节点的特征进行聚合得到。
  • 使用归一化的邻接矩阵进行特征加权,避免特征爆炸或消失。
  • 可以堆叠多层GCN,以捕捉更远的邻居信息。

数学表示

\[
H^{(l+1)} = \sigma\left(\hat{D}^{-1/2} \hat{A} \hat{D}^{-1/2} H^{(l)} W^{(l)}\right)
\]
其中:
 \( \hat{A} = A + I \) 是加上自环的邻接矩阵。
 \( \hat{D} \) 是 \( \hat{A} \) 的度矩阵。
 \( H^{(l)} \) 是第 \( l \) 层的节点特征。
 \( W^{(l)} \) 是第 \( l \) 层的权重矩阵。
 \( \sigma \) 是激活函数(如ReLU)。

4.3 图注意力网络(GAT)

图注意力网络(GAT) 引入了注意力机制,使得每个节点在聚合邻居信息时能够分配不同的权重,以适应不同邻居的重要性。

基本原理

  • 为每个邻居节点计算一个注意力系数,表示其对当前节点的重要性。
  • 使用这些注意力系数对邻居节点的特征进行加权求和。
  • 通过多头注意力机制进一步增强模型的表达能力。

数学表示

\[
e_{ij} = \text{LeakyReLU}\left(a^T [W h_i || W h_j]\right)
\]
\[
\alpha_{ij} = \frac{\exp(e_{ij})}{\sum_{k \in \mathcal{N}(i)} \exp(e_{ik})}
\]
\[
h_i' = \sigma\left(\sum_{j \in \mathcal{N}(i)} \alpha_{ij} W h_j\right)
\]
其中:
 \( a \) 是注意力权重向量。
\( W \) 是特征变换矩阵。
 \( || \) 表示连接操作。
 \( \mathcal{N}(i) \) 是节点 \( i \) 的邻居集合。

4.4 应用案例

  1. 社交网络分析

    • 节点分类:识别用户的兴趣类别。
    • 链接预测:预测潜在的社交连接。
  2. 推荐系统

    • 基于用户和物品的图结构,推荐相关物品。
  3. 分子和化学分析

    • 分子属性预测:预测分子的物理化学性质。
    • 药物发现:发现潜在的药物分子结构。
  4. 交通网络优化

    • 路径规划和拥堵预测。

5. 示例代码

本文将通过Python的NetworkX库构建图,并实现基本的图算法和一个简单的图神经网络模型。

5.1 使用NetworkX进行图的构建与算法实现

安装NetworkX

pip install networkx

构建图并实现DFS和BFS

import networkx as nx
from collections import deque# 构建一个无向图
G = nx.Graph()# 添加节点
G.add_nodes_from(['A', 'B', 'C', 'D', 'E', 'F'])# 添加边
G.add_edges_from([('A', 'B'),('A', 'C'),('B', 'D'),('B', 'E'),('C', 'F'),('E', 'F')
])# 深度优先遍历
def dfs_networkx(graph, start):visited = set()stack = [start]while stack:vertex = stack.pop()if vertex not in visited:print(vertex)visited.add(vertex)# 添加未访问的邻居到栈stack.extend(reversed(list(graph.neighbors(vertex))))return visitedprint("DFS Traversal:")
dfs_networkx(G, 'A')# 广度优先遍历
def bfs_networkx(graph, start):visited = set()queue = deque([start])visited.add(start)while queue:vertex = queue.popleft()print(vertex)for neighbor in graph.neighbors(vertex):if neighbor not in visited:visited.add(neighbor)queue.append(neighbor)return visitedprint("\nBFS Traversal:")
bfs_networkx(G, 'A')

输出:

DFS Traversal:
A
B
D
E
F
CBFS Traversal:
A
B
C
D
E
F

Dijkstra算法实现

# 构建一个有向加权图
G_weighted = nx.DiGraph()# 添加边及其权重
G_weighted.add_weighted_edges_from([('A', 'B', 1),('A', 'C', 4),('B', 'D', 2),('B', 'E', 5),('C', 'F', 3),('E', 'F', 1)
])# 使用NetworkX内置的Dijkstra算法计算最短路径
shortest_paths = nx.single_source_dijkstra_path_length(G_weighted, 'A')
print("\nDijkstra Shortest Paths from A:")
for node, distance in shortest_paths.items():print(f"Distance from A to {node}: {distance}")

输出:

Dijkstra Shortest Paths from A:
Distance from A to A: 0
Distance from A to B: 1
Distance from A to D: 3
Distance from A to E: 6
Distance from A to C: 4
Distance from A to F: 5

5.2 简单图神经网络的实现

本文使用PyTorch Geometric库实现一个简单的图卷积网络(GCN)进行节点分类任务。

安装PyTorch Geometric

请根据操作系统和PyTorch版本,参考PyTorch Geometric官方安装指南。

示例代码:使用GCN进行节点分类

import torch
import torch.nn.functional as F
from torch_geometric.datasets import Planetoid
import torch_geometric.transforms as T
from torch_geometric.nn import GCNConv# 加载Cora数据集
dataset = Planetoid(root='/tmp/Cora', name='Cora', transform=T.NormalizeFeatures())class GCN(torch.nn.Module):def __init__(self):super(GCN, self).__init__()self.conv1 = GCNConv(dataset.num_node_features, 16)  # 第一层GCN,输出维度为16self.conv2 = GCNConv(16, dataset.num_classes)         # 第二层GCN,输出维度为类别数def forward(self, data):x, edge_index = data.x, data.edge_indexx = self.conv1(x, edge_index)  # GCN第一层x = F.relu(x)                  # 激活函数x = F.dropout(x, training=self.training)  # Dropout层x = self.conv2(x, edge_index)  # GCN第二层return F.log_softmax(x, dim=1)  # Log-Softmax# 初始化模型、优化器和损失函数
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = GCN().to(device)
data = dataset[0].to(device)
optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=5e-4)
criterion = torch.nn.NLLLoss()# 训练函数
def train():model.train()optimizer.zero_grad()out = model(data)loss = criterion(out[data.train_mask], data.y[data.train_mask])loss.backward()optimizer.step()return loss.item()# 测试函数
def test():model.eval()out = model(data)pred = out.argmax(dim=1)accs = []for mask in [data.train_mask, data.val_mask, data.test_mask]:correct = pred[mask] == data.y[mask]acc = int(correct.sum()) / int(mask.sum())accs.append(acc)return accs# 训练模型
for epoch in range(200):loss = train()train_acc, val_acc, test_acc = test()if epoch % 20 == 0:print(f'Epoch: {epoch:03d}, Loss: {loss:.4f}, Train Acc: {train_acc:.4f}, Val Acc: {val_acc:.4f}, Test Acc: {test_acc:.4f}')# 最终测试准确率
print(f'\nFinal Test Accuracy: {test_acc:.4f}')

输出(部分):

Epoch: 000, Loss: 2.0794, Train Acc: 0.2071, Val Acc: 0.2100, Test Acc: 0.2000
...
Epoch: 180, Loss: 0.1462, Train Acc: 0.8393, Val Acc: 0.8025, Test Acc: 0.8060
Epoch: 200, Loss: 0.1294, Train Acc: 0.8545, Val Acc: 0.8075, Test Acc: 0.8060Final Test Accuracy: 0.8060

代码说明

  1. 数据加载

    • 使用Cora数据集,该数据集包含科学论文的引用网络,每个节点代表一篇论文,边代表引用关系,节点特征为词袋向量,标签为论文类别。
    • NormalizeFeatures 对节点特征进行归一化处理。
  2. 模型构建

    • 两层GCN,每层包括一个GCN卷积层、ReLU激活、Dropout。
    • 最后一层使用Log-Softmax进行多分类。
  3. 训练与测试

    • 使用交叉熵损失函数(NLLLoss)。
    • 使用Adam优化器。
    • 每20个epoch输出一次训练、验证和测试准确率。

5.3 完整代码仓库

为了便于读者实践,完整的示例代码可以在GitHub仓库中找到。

6. 总结与展望

本文系统地介绍了图论的基础图结构、常用算法及其在图神经网络中的应用。图论作为理解和构建图结构数据的重要工具,其算法不仅在计算机科学的多个领域中发挥着关键作用,也为图神经网络的发展提供了坚实的理论基础。随着GNNs在社交网络分析、推荐系统、分子建模等领域的广泛应用,图论和GNNs的结合将推动更多创新性的成果产生。

未来,随着图数据规模的不断扩大和复杂性的增加,研究高效的图算法和更强大的GNN模型将成为重要的研究方向。此外,将图论与其他数学分支(如代数、拓扑)相结合,探索更深层次的图结构特性,也将为图神经网络的性能提升和应用范围扩展提供新的契机。

7. 参考资料

  1. 图论及其应用》(Reinhard Diestel 著)
  2. 《图神经网络(Zhiyuan Zhang, Maarten de Rijke 著)
  3. NetworkX官方文档:Software for Complex Networks — NetworkX 3.4.2 documentation
  4. PyTorch Geometric官方文档:https://pytorch-geometric.readthedocs.io/en/latest/
  5. 《深度学习》(Ian Goodfellow, Yoshua Bengio, Aaron Courville 著)
  6. GCN论文:Thomas Kipf, Max Welling. “Semi-Supervised Classification with Graph Convolutional Networks.” ICLR 2017.
  7. GAT论文:Petar Veličković et al. “Graph Attention Networks.” ICLR 2018.


http://www.ppmy.cn/embedded/149447.html

相关文章

如何在谷歌浏览器中管理下载记录

谷歌浏览器作为广受欢迎的网络浏览器之一&#xff0c;不仅提供了高效的网页浏览功能&#xff0c;还具备了强大的文件下载管理功能。本文将详细介绍如何在谷歌浏览器中查看和管理下载记录&#xff0c;帮助您更高效地使用浏览器。 一、访问下载管理器 1.快速访问&#xff1a; 点…

深入探究C++pow函数的优势和劣势 原理

优势 功能强大 支持多种数据类型&#xff1a; C 的pow()函数在<cmath>头文件中定义&#xff0c;它能够灵活地处理不同的数据类型。对于整数类型&#xff0c;如int、long long等&#xff0c;它能准确地计算幂次方。以计算棋盘上的麦粒数为例&#xff0c;传说国际象棋棋盘…

腾讯文字方向点选验证码识别

注意&#xff0c;本文只提供学习的思路&#xff0c;严禁违反法律以及破坏信息系统等行为&#xff0c;本文只提供思路 如有侵犯&#xff0c;请联系作者下架 本文识别已同步上线至OCR识别网站&#xff1a; http://yxlocr.nat300.top/ocr/textclick/8 注意&#xff1a;本文是篇水…

Python的Pandas--Series的创建和实现

1.Series函数的格式&#xff1a; pandas.Series(data,index,dtype,name,copy) data&#xff1a;一组数据&#xff08;ndarray类型、list、dict等类&#xff09;或标量值 index&#xff1a;数据索引标签。如果不指定&#xff0c;默认为整数&#xff0c;从0开始 dtype&#x…

开放世界目标检测 Grounding DINO

开放世界目标检测 Grounding DINO flyfish Grounding DINO 是一种开创性的开放集对象检测器&#xff0c;它通过结合基于Transformer的检测器DINO与基于文本描述的预训练技术&#xff0c;实现了可以根据人类输入&#xff08;如类别名称或指代表达&#xff09;检测任意对象的功…

关于机器学习当中的决策树算法解析

一、决策树简介 1. 什么是决策树&#xff1f; 决策树是一种基于树结构的机器学习算法&#xff0c;用于解决分类和回归问题。在决策树中&#xff0c;每个节点表示一个特征&#xff0c;每个边代表一个决策规则&#xff0c;最终的叶节点代表输出。一句话进行概括就是就是通过一系…

OpenResty开发环境搭建

简介 OpenResty 是一个基于 Nginx的高性能 Web 平台&#xff0c;用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。官方地址&#xff1a;http://openresty.org/cn/ 具备下列特点&#xff1a; 具备Nginx的完整功能基于Lua语言进行扩展&#…

小程序将对象通过url传递到下个页面

// 假设有一个对象需要传递 const obj { name: 张三, age: 25 };// 将对象转换为 JSON 字符串并编码 const objStr encodeURIComponent(JSON.stringify(obj));// 使用 wx.navigateTo 跳转并传递参数 wx.navigateTo({url: /pages/targetPage/targetPage?data${objStr}, });注…