【机器学习】使用Python实现图神经网络(GNN):图结构数据的分析与应用

在这里插入图片描述

🔥 个人主页:空白诗

在这里插入图片描述

文章目录

    • 一、引言
    • 二、图神经网络的基础知识
      • 1. 图的基本概念和术语
      • 2. 传统的图分析方法
      • 3. 图神经网络的基本原理
      • 4. GNN的基本模型
    • 三、主要的图神经网络模型
      • 1. 图卷积网络(Graph Convolutional Network, GCN)
      • 2. 图注意力网络(Graph Attention Network, GAT)
      • 3. 图自编码器(Graph Autoencoder)
      • 4. 图对抗网络(Graph GANs)
    • 四、图神经网络的应用场景
      • 1. 社交网络分析
      • 2. 生物信息学
      • 3. 化学分子图
      • 4. 交通网络
      • 5. 自然语言处理
    • 五、总结

在这里插入图片描述


一、引言

在现代数据分析中,图数据因其能够自然地表示对象及其相互关系,越来越受到关注。图结构在许多实际应用中普遍存在,如社交网络中的用户关系、化学分子中的原子和键、生物信息学中的基因交互网络、交通系统中的道路和交叉口等。传统的数据分析方法在处理这些复杂的图结构数据时常常力不从心,难以充分挖掘其中的潜在信息。

图神经网络(Graph Neural Networks, GNNs)作为一种新兴的机器学习方法,能够有效地处理和分析图结构数据。GNNs通过传播机制(message passing)在图的节点和边之间传播信息,捕捉复杂的节点间关系和图的全局结构,从而实现对图数据的深层次理解和高效处理。近年来,随着深度学习技术的发展,GNNs在多个领域取得了显著的成果,成为研究热点。

本文旨在系统地介绍图神经网络的基本原理、主要模型及其在不同应用场景中的实际案例。首先,我们将概述图的基本概念及传统图分析方法,接着深入探讨GNN的主要模型和应用,最后讨论当前GNN研究面临的挑战与未来发展方向。通过本文的介绍,读者将能够全面了解图神经网络这一强大工具在图结构数据分析中的潜力与应用前景。


二、图神经网络的基础知识

在这里插入图片描述

1. 图的基本概念和术语

在深入理解图神经网络之前,首先需要了解图的基本概念及其相关术语。

  • 节点(Node):图中的基本元素,表示实体或对象。
  • 边(Edge):连接节点的线,表示节点间的关系。
  • 邻接矩阵(Adjacency Matrix):用矩阵形式表示图中节点之间连接关系的矩阵。

例如,一个简单的无向图可以表示为:

节点 A
节点 B
节点 C
  • 图的类型
    • 无向图(Undirected Graph):边没有方向。
    • 有向图(Directed Graph):边具有方向。
    • 加权图(Weighted Graph):边带有权重,表示关系的强度。

2. 传统的图分析方法

在图神经网络之前,传统的图分析方法主要包括:

  • 最短路径算法:如Dijkstra算法,用于计算两个节点之间的最短路径。
  • PageRank算法:用于评估节点在图中的重要性,广泛应用于网页排名。

3. 图神经网络的基本原理

图神经网络通过一种称为传播机制(Message Passing)的过程来实现信息在图中节点和边之间的传递与更新。具体来说,GNN的基本原理包括以下几个步骤:

  1. 消息传递(Message Passing):每个节点从其邻居节点接收信息。
  2. 信息聚合(Aggregation):将接收到的邻居节点信息进行聚合,通常使用求和、平均或最大值等操作。
  3. 状态更新(Update):根据聚合的邻居信息和节点自身的信息更新节点状态。

可以用下图示来表示消息传递和信息聚合过程:

Update
Aggregation
Message Passing
发送消息
发送消息
发送消息
发送消息
发送消息
发送消息
聚合邻居消息
使用新状态
节点 B的最终状态
节点 B的新状态
节点 B
节点 A
节点 C

4. GNN的基本模型

图神经网络的基本模型通过上述过程在多层网络中逐层传播和聚合信息。以下是几种主要的GNN模型:

  • 图卷积网络(Graph Convolutional Network, GCN):利用卷积操作在图上进行信息聚合,能够捕捉局部图结构特征。
  • 图注意力网络(Graph Attention Network, GAT):引入注意力机制,为每个邻居节点分配不同的权重,从而实现更灵活的信息聚合。
  • 图自编码器(Graph Autoencoder):通过编码器-解码器结构实现图数据的自监督学习。
  • 图对抗网络(Graph GANs):利用生成对抗网络在图结构数据中生成和判别节点及边的信息。

通过对这些模型的理解,可以更好地应用GNN处理实际的图结构数据。接下来,我们将详细介绍这些主要的图神经网络模型及其应用。


三、主要的图神经网络模型

图神经网络(GNN)在近年来的发展中涌现出多种模型,每种模型都有其独特的优势和应用场景。以下是几种主要的GNN模型及其基本原理和应用示例。

1. 图卷积网络(Graph Convolutional Network, GCN)

GCN利用卷积操作在图结构数据上进行信息聚合,能够有效捕捉局部图结构特征。GCN的核心思想是通过节点的邻居节点信息来更新该节点的表示。

GCN的前向传播公式为:

H ( l + 1 ) = σ ( D − 1 2 A D − 1 2 H ( l ) W ( l ) ) H^{(l+1)} = \sigma \left( D^{-\frac{1}{2}} A D^{-\frac{1}{2}} H^{(l)} W^{(l)} \right) H(l+1)=σ(D21AD21H(l)W(l))

其中, H ( l ) H^{(l)} H(l)表示第 l l l层的节点特征矩阵, A A A表示邻接矩阵, D D D表示度矩阵, W ( l ) W^{(l)} W(l)表示第 l l l层的权重矩阵, σ ( ⋅ ) \sigma(\cdot) σ()表示激活函数。

以下是一个简单的GCN代码示例:

import torch
import torch.nn as nn
import torch.nn.functional as F
import networkx as nx
from torch_geometric.datasets import Planetoid
from torch_geometric.nn import GCNConv

# 加载数据集
dataset = Planetoid(root='/tmp/Cora', name='Cora')

class GCN(nn.Module):
    def __init__(self):
        super(GCN, self).__init__()
        self.conv1 = GCNConv(dataset.num_node_features, 16)
        self.conv2 = GCNConv(16, dataset.num_classes)

    def forward(self, data):
        x, edge_index = data.x, data.edge_index
        x = self.conv1(x, edge_index)
        x = F.relu(x)
        x = F.dropout(x, training=self.training)
        x = self.conv2(x, edge_index)
        return F.log_softmax(x, dim=1)

# 模型训练和评估代码略

2. 图注意力网络(Graph Attention Network, GAT)

GAT引入了注意力机制,为每个邻居节点分配不同的权重,从而实现更灵活的信息聚合。注意力机制使得模型能够根据邻居节点的重要性来更新节点的表示。

GAT的核心思想是通过注意力机制计算邻居节点的权重:

e i j = LeakyReLU ( a T [ W h i ∥ W h j ] ) e_{ij} = \text{LeakyReLU}(\mathbf{a}^T [\mathbf{W} \mathbf{h}_i \parallel \mathbf{W} \mathbf{h}_j]) eij=LeakyReLU(aT[WhiWhj])

α i j = exp ⁡ ( e i j ) ∑ k ∈ N i exp ⁡ ( e i k ) \alpha_{ij} = \frac{\exp(e_{ij})}{\sum_{k \in N_i} \exp(e_{ik})} αij=kNiexp(eik)exp(eij)

以下是一个简单的GAT代码示例:

import torch
import torch.nn as nn
import torch.nn.functional as F
from torch_geometric.datasets import Planetoid
from torch_geometric.nn import GATConv

# 加载数据集
dataset = Planetoid(root='/tmp/Cora', name='Cora')

class GAT(nn.Module):
    def __init__(self):
        super(GAT, self).__init__()
        self.conv1 = GATConv(dataset.num_node_features, 8, heads=8, dropout=0.6)
        self.conv2 = GATConv(8*8, dataset.num_classes, heads=1, concat=True, dropout=0.6)

    def forward(self, data):
        x, edge_index = data.x, data.edge_index
        x = F.dropout(x, p=0.6, training=self.training)
        x = self.conv1(x, edge_index)
        x = F.elu(x)
        x = F.dropout(x, p=0.6, training=self.training)
        x = self.conv2(x, edge_index)
        return F.log_softmax(x, dim=1)

# 模型训练和评估代码略

3. 图自编码器(Graph Autoencoder)

图自编码器通过编码器-解码器结构实现图数据的自监督学习,主要用于图的重构和表示学习。

以下是一个简单的图自编码器代码示例:

import torch
import torch.nn.functional as F
from torch_geometric.nn import GCNConv

class GAE(nn.Module):
    def __init__(self, in_channels, out_channels):
        super(GAE, self).__init__()
        self.conv1 = GCNConv(in_channels, 2 * out_channels)
        self.conv2 = GCNConv(2 * out_channels, out_channels)

    def encode(self, x, edge_index):
        x = F.relu(self.conv1(x, edge_index))
        return self.conv2(x, edge_index)

    def decode(self, z, edge_index):
        return torch.sigmoid((z[edge_index[0]] * z[edge_index[1]]).sum(dim=1))

    def forward(self, data):
        z = self.encode(data.x, data.edge_index)
        return self.decode(z, data.edge_index)

# 模型训练和评估代码略

4. 图对抗网络(Graph GANs)

图对抗网络通过生成对抗网络(GAN)的框架来处理图结构数据,生成高质量的图数据表示。

以下是一个简单的图对抗网络代码示例:

import torch
import torch.nn as nn
import torch.optim as optim
from torch_geometric.datasets import Planetoid
from torch_geometric.nn import GCNConv

class Generator(nn.Module):
    def __init__(self, in_channels, out_channels):
        super(Generator, self).__init__()
        self.conv1 = GCNConv(in_channels, 2 * out_channels)
        self.conv2 = GCNConv(2 * out_channels, out_channels)

    def forward(self, x, edge_index):
        x = F.relu(self.conv1(x, edge_index))
        return self.conv2(x, edge_index)

class Discriminator(nn.Module):
    def __init__(self, in_channels):
        super(Discriminator, self).__init__()
        self.conv = GCNConv(in_channels, 1)

    def forward(self, x, edge_index):
        return torch.sigmoid(self.conv(x, edge_index))

# 模型训练和评估代码略

通过这些模型,可以在不同的应用场景中选择合适的图神经网络,以实现对图结构数据的有效处理和分析。在实际应用中,通常需要根据具体的数据特点和任务要求,对模型进行调整和优化。


四、图神经网络的应用场景

图神经网络(GNN)因其强大的建模能力和灵活性,在许多领域都有广泛的应用。以下是几个主要的应用场景及其具体案例:

1. 社交网络分析

在社交网络中,用户之间的关系可以自然地表示为图结构。GNN在以下几个方面有显著的应用:

  • 用户推荐:通过捕捉用户之间的关系和行为模式,GNN可以预测用户的兴趣,推荐可能感兴趣的朋友或内容。例如,Pinterest使用PinSage(一种基于GCN的模型)来进行内容推荐。
用户 A
内容 B
内容 C
用户 D
内容 E

代码示例(以PinSage为例):

import torch
import torch.nn.functional as F
from torch_geometric.nn import GCNConv

class PinSage(torch.nn.Module):
    def __init__(self, in_channels, out_channels):
        super(PinSage, self).__init__()
        self.conv1 = GCNConv(in_channels, out_channels)
        self.conv2 = GCNConv(out_channels, out_channels)

    def forward(self, x, edge_index):
        x = F.relu(self.conv1(x, edge_index))
        x = self.conv2(x, edge_index)
        return F.log_softmax(x, dim=1)

# 数据加载和模型训练代码略
  • 社区检测:GNN可以有效识别社交网络中的社区结构,将相似的用户分组。例如,Twitter利用GNN来检测和分析网络中的兴趣社区。
社区 2
社区 1
用户 E
用户 D
用户 F
用户 B
用户 A
用户 C

代码示例(社区检测):

import torch
import torch.nn as nn
import torch_geometric.nn as pyg_nn

class CommunityDetectionGNN(nn.Module):
    def __init__(self, in_channels, hidden_channels, out_channels):
        super(CommunityDetectionGNN, self).__init__()
        self.conv1 = pyg_nn.GCNConv(in_channels, hidden_channels)
        self.conv2 = pyg_nn.GCNConv(hidden_channels, out_channels)

    def forward(self, x, edge_index):
        x = F.relu(self.conv1(x, edge_index))
        x = self.conv2(x, edge_index)
        return F.log_softmax(x, dim=1)

# 数据加载和模型训练代码略

2. 生物信息学

生物信息学中存在大量的图结构数据,如基因-蛋白质相互作用网络、蛋白质结构图等。GNN在以下几个方面表现出色:

  • 蛋白质-蛋白质相互作用预测:通过建模蛋白质之间的相互作用网络,GNN可以预测未发现的蛋白质交互关系,帮助揭示生物过程的机制。
蛋白质 A
蛋白质 B
蛋白质 C
蛋白质 D

代码示例(蛋白质相互作用预测):

import torch
import torch.nn as nn
from torch_geometric.nn import GCNConv

class ProteinInteractionGNN(nn.Module):
    def __init__(self, in_channels, hidden_channels, out_channels):
        super(ProteinInteractionGNN, self).__init__()
        self.conv1 = GCNConv(in_channels, hidden_channels)
        self.conv2 = GCNConv(hidden_channels, out_channels)

    def forward(self, x, edge_index):
        x = F.relu(self.conv1(x, edge_index))
        x = self.conv2(x, edge_index)
        return torch.sigmoid(x)

# 数据加载和模型训练代码略
  • 药物发现:GNN可以用来分析化合物分子的结构,预测其生物活性,从而加速新药的发现。例如,GraphDTA使用GNN来预测药物-靶点的结合亲和力。
药物 A
靶点 B
药物 C
靶点 D

代码示例(药物发现):

import torch
import torch.nn as nn
from torch_geometric.nn import GCNConv

class DrugTargetGNN(nn.Module):
    def __init__(self, in_channels, hidden_channels, out_channels):
        super(DrugTargetGNN, self).__init__()
        self.conv1 = GCNConv(in_channels, hidden_channels)
        self.conv2 = GCNConv(hidden_channels, out_channels)

    def forward(self, x, edge_index):
        x = F.relu(self.conv1(x, edge_index))
        x = self.conv2(x, edge_index)
        return torch.sigmoid(x)

# 数据加载和模型训练代码略

3. 化学分子图

化学分子可以表示为图结构,其中节点代表原子,边代表化学键。GNN在以下几个方面有重要应用:

  • 分子性质预测:通过建模分子的图结构,GNN可以预测分子的物理化学性质,如溶解度、稳定性等。这在材料科学和药物设计中尤为重要。例如,ChemProp使用GCN来预测分子的各种性质。
碳原子
氧原子
氢原子
氢原子
氢原子
氢原子

代码示例(分子性质预测):

import torch
import torch.nn as nn
from torch_geometric.nn import GCNConv

class MolecularPropertyGNN(nn.Module):
    def __init__(self, in_channels, hidden_channels, out_channels):
        super(MolecularPropertyGNN, self).__init__()
        self.conv1 = GCNConv(in_channels, hidden_channels)
        self.conv2 = GCNConv(hidden_channels, out_channels)

    def forward(self, x, edge_index):
        x = F.relu(self.conv1(x, edge_index))
        x = self.conv2(x, edge_index)
        return x

# 数据加载和模型训练代码略
  • 新药研发:通过分析分子图结构,GNN可以生成具有特定性质的新分子,帮助化学家设计新药。
新分子 A
属性 B
新分子 C
属性 D

代码示例(新药研发):

import torch
import torch.nn as nn
from torch_geometric.nn import GCNConv

class DrugDiscoveryGNN(nn.Module):
    def __init__(self, in_channels, hidden_channels, out_channels):
        super(DrugDiscoveryGNN, self).__init__()
        self.conv1 = GCNConv(in_channels, hidden_channels)
        self.conv2 = GCNConv(hidden_channels, out_channels)

    def forward(self, x, edge_index):
        x = F.relu(self.conv1(x, edge_index))
        x = self.conv2(x, edge_index)
        return x

# 数据加载和模型训练代码略

4. 交通网络

在交通系统中,路网可以表示为图结构,其中节点代表交叉口,边代表道路。GNN在以下几个方面具有应用前景:

  • 路径优化:通过分析交通路网的图结构,GNN可以优化路径选择,提高交通效率。
交叉口 A
交叉口 B
交叉口 C
交叉口 D

代码示例(路径优化):

import torch
import torch.nn as nn
from torch_geometric.nn import GCNConv

class TrafficPathOptimizationGNN(nn.Module):
    def __init__(self, in_channels, hidden_channels, out_channels):
        super(TrafficPathOptimizationGNN, self).__init__()
        self.conv1 = GCNConv(in_channels, hidden_channels)
        self.conv2 = GCNConv(hidden_channels, out_channels)

    def forward(self, x, edge_index):
        x = F.relu(self.conv1(x, edge_index))
        x = self.conv2(x, edge_index)
        return x

# 数据加载和模型训练代码略
  • 交通流量预测:GNN可以通过建模历史交通数据,预测未来的交通流量,帮助交通管理部门做出更好的决策。例如,ST-GCN使用GNN来进行交通流量预测,效果显著。
流量数据
流量数据
流量数据
流量数据
交叉口 A
交叉口 B
交叉口 C
交叉口 D

代码示例(交通流量预测):

import torch
import torch.nn as nn
from torch_geometric.nn import GCNConv

class TrafficFlowPredictionGNN(nn.Module):
    def __init__(self, in_channels, hidden_channels, out_channels):
        super(TrafficFlowPredictionGNN, self).__init__()
        self.conv1 = GCNConv(in_channels, hidden_channels)
        self.conv2 = GCNConv(hidden_channels, out_channels)

    def forward(self, x, edge_index):
        x = F.relu(self.conv1(x, edge_index))
        x = self.conv2(x, edge_index)
        return x

# 数据加载和模型训练代码略

5. 自然语言处理

在自然语言处理(NLP)领域,文本数据可以表示为图结构,如句子之间的关系、词语之间的依赖关系等。GNN在以下几个方面有广泛应用:

  • 句子关系建模:通过建模句子之间的关系,GNN可以提升问答系统和文本分类的性能。例如,Text GCN利用GCN对文档进行分类。
句子1
词1
词2
句子2
词3

代码示例(句子关系建模):

import torch
import torch.nn as nn
from torch_geometric.nn import GCNConv

class TextGCN(nn.Module):
    def __init__(self, in_channels, hidden_channels, out_channels):
        super(TextGCN, self).__init__()
        self.conv1 = GCNConv(in_channels, hidden_channels)
        self.conv2 = GCNConv(hidden_channels, out_channels)

    def forward(self, x, edge_index):
        x = F.relu(self.conv1(x, edge_index))
        x = self.conv2(x, edge_index)
        return F.log_softmax(x, dim=1)

# 数据加载和模型训练代码略
  • 知识图谱:GNN可以用来处理和推理知识图谱中的信息,提升知识图谱的完备性和准确性。例如,R-GCN使用GNN来推理知识图谱中的实体关系。
实体1
关系1
实体2
关系2
实体3
关系3

代码示例(知识图谱推理):

import torch
import torch.nn as nn
from torch_geometric.nn import RGCNConv

class KnowledgeGraphGNN(nn.Module):
    def __init__(self, in_channels, hidden_channels, out_channels, num_relations):
        super(KnowledgeGraphGNN, self).__init__()
        self.conv1 = RGCNConv(in_channels, hidden_channels, num_relations)
        self.conv2 = RGCNConv(hidden_channels, out_channels, num_relations)

    def forward(self, x, edge_index, edge_type):
        x = F.relu(self.conv1(x, edge_index, edge_type))
        x = self.conv2(x, edge_index, edge_type)
        return F.log_softmax(x, dim=1)

# 数据加载和模型训练代码略

这些案例展示了图神经网络在不同领域中的广泛应用和巨大潜力。通过结合领域知识和先进的图神经网络技术,可以进一步推动各领域的研究和应用进展。


五、总结

图神经网络(GNN)凭借其强大的建模能力和灵活性,在许多领域展现了巨大的潜力和广泛的应用。在社交网络分析中,GNN能够通过用户之间的关系和行为模式进行精准的用户推荐和社区检测,显著提升社交平台的用户体验。在生物信息学领域,GNN通过建模基因-蛋白质相互作用网络和蛋白质结构图,促进了蛋白质-蛋白质相互作用预测和新药发现,推动了生命科学的进步。化学分子图的建模使得GNN在分子性质预测和新药研发方面表现优异,帮助科学家加速材料科学和药物设计的进程。在交通网络中,GNN通过对交通路网的分析,优化了路径选择和交通流量预测,提高了交通系统的效率和安全性。在自然语言处理领域,GNN通过建模句子之间的关系和处理知识图谱,提升了文本分类、问答系统和知识图谱推理的性能。

这些应用案例不仅展示了GNN在不同领域中的广泛适用性和巨大潜力,还体现了GNN在处理复杂图结构数据方面的独特优势。未来,随着研究的深入和技术的发展,图神经网络有望在更多领域产生深远影响,为解决复杂的现实问题提供强有力的工具。通过不断探索和优化GNN模型,将进一步推动各领域的创新和进步。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/726207.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

086. 分隔链表

题目链接 一、题目描述 (一) 题目 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。 (二) 示例 示例 1: 输入&a…

2024.6.16 机器学习周报

目录 引言 Abstract 文献阅读 1、题目 2、引言 3、创新点 4、匹配问题 5、SuperGlue架构 5.1、注意力图神经网络(Attentional Graph Neural Network) 5.2、最佳匹配层(Optimal matching layer) 5.3、损失 6、实验 6.…

数据分析第三讲:numpy的应用入门(二)

NumPy的应用(二) 数组对象的方法 获取描述统计信息 描述统计信息主要包括数据的集中趋势、离散程度和频数分析等,其中集中趋势主要看均值和中位数,离散程度可以看极值、方差、标准差等,详细的内容大家可以阅读《统计…

【Java】已解决java.sql.SQLException异常

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决java.sql.SQLException异常 在Java中,java.sql.SQLException是一个通用的异常类,用于表示在数据库操作中发生的错误。无论是类型错误、数据类型不匹配…

YOLOv10改进 | 注意力篇 | YOLOv10引入iRMB

1. iRMB介绍 1.1 摘要:本文重点关注开发现代、高效、轻量级的模型来进行密集预测,同时权衡参数、FLOP 和性能。 反向残差块(IRB)作为轻量级 CNN 的基础设施,但基于注意力的研究尚未认识到对应的部分。 这项工作从统一的角度重新思考高效IRB和Transformer有效组件的轻量级…

国际版游戏陪练源码电竞系统源码支持Android+IOS+H5

🎮电竞之路的得力助手 一、引言:电竞新纪元,陪练小程序助力成长 在电竞热潮席卷全球的今天,每一个电竞爱好者都渴望在竞技场上脱颖而出。然而,独自一人的游戏之路往往充满了挑战和困难。幸运的是,国际版游…

Flutter框架高阶——Window应用程序设置窗体窗口背景完全透明

文章目录 1.修改 main.cpp1)C 与 Win32 API2)EnableTransparency()3)中文注释 2.编写 Flutter 代码1)bitsdojo_window2)window_manager3)区别对比4)同时使用(1)设置初始化…

全球AI视频技术竞赛加速:Runway即将推出更优更快的第三代AI视频模型|TodayAI

Runway即将在未来几天推出其更优更快的第三代AI视频模型,这是新一代模型中最小的一个。据公司透露,这款名为Gen-3的模型将带来“在真实度、一致性和动态效果上的重大提升”,同时在速度上也有显著的加快。 去年六月,Runway首次推出…

【每日刷题】Day70

【每日刷题】Day70 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 922. 按奇偶排序数组 II - 力扣(LeetCode) 2. 905. 按奇偶排序数组 - 力扣&…

数据库 | 试卷三

1.数据库的网状模型应满足的条件是( ) A.允许一个以上结点无双亲,也允许一个结点有多个双亲 B.必须有两个以上的结点 C.有且仅有一个结点无双亲,其余结点都只有一个双亲 D.每个结…

模拟原神圣遗物系统-小森设计项目,需求分析

需求分析 我操控某个角色的圣遗物时发现,一开始玩啥也不懂慢慢了解,今天才想起要不做一个 ,然后开始想需求 跟Ai聊技术 聊着聊着 发现圣遗物 这个东西有点意思 本来今天打算写一下数据库 的外键想起了一些高兴的事情(美人鱼&#…

数字孪生技术及其广泛应用场景探讨

通过将实际物理世界中的物体或系统建模、模拟和分析,数字孪生技术可以提供更精确、更可靠、更高效的解决方案。数字孪生技术在智能制造、城市建设、智慧物流等众多领域中得到了广泛的应用。 通过将数据可视化呈现在虚拟环境中,我们可以更清晰地观察和理…

搜索引擎数据库介绍

搜索引擎数据库的定义 搜索引擎数据库是一类专门用于数据内容搜索的NoSQL数据库,是非结构化大数据处理分析领域中重要的角色。搜索引擎数据库使用索引对数据中的相似特征进行归类,并提高搜索能力。通过对索引和检索过程的优化,以处理大量文本…

安装vue时候发现npm淘宝镜像不能使用,报出:npm.taobao.org和registry.npm.taobao.or

2024.3.12 安装vue时候发现npm淘宝镜像不能使用,需要重新更换源,简单来说就是更换镜像 使用 npm config get registry 查看当前的镜像; npm config get registry 使用npm config set registry http://mirrors.cloud.tencent.com/npm/ &…

【GD32F303红枫派使用手册】第二十节 SPI-SPI NAND FLASH读写实验

20.1 实验内容 通过本实验主要学习以下内容: SPI通信协议,参考19.2.1东方红开发板使用手册 GD32F303 SPI操作方式,参考19.2.2东方红开发板使用手册 NAND FLASH基本原理 SPI NAND介绍 使用GD32F303 SPI接口实现对GD5F1GQ5UEYIGY的读写…

VB从右向左移动的Label

Label的ForeColor设置成红色&#xff0c;BackColor设置成Transparent. Public Class Form1Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.TickLabel1.Left Label1.Left - 100If Label1.Left Label1.Width < 0 ThenLabel1.Left WidthEnd If…

Tailwindcss 提取组件

背景 随着项目的发展&#xff0c;您不可避免地会发现自己需要重复使用常用样式&#xff0c;以便在许多不同的地方重新创建相同的组件。这在小组件&#xff08;如按钮、表单元素、徽章等&#xff09;中最为明显。在我的项目中是图表标题样式如下&#xff1a; <div class&qu…

工业园安全生产新保障:广东地区加强可燃气体报警器校准检测

广东&#xff0c;作为我国经济的重要引擎&#xff0c;拥有众多工业园区。 这些工业园区中&#xff0c;涉及化工、制药、机械制造等多个领域&#xff0c;每天都会产生和使用大量的可燃气体。因此&#xff0c;可燃气体报警器的安装与校准检测&#xff0c;对于保障工业园区的安全…

从手动到智能:电子行业PLM安规管理的转型之旅

随着科技的飞速发展&#xff0c;电子产品已经成为我们生活中不可或缺的一部分。然而&#xff0c;这些产品在给人们带来便利的同时&#xff0c;也可能带来触电、火灾、有害辐射等安全隐患。为了保护消费者的生命财产安全&#xff0c;国家对电子产品实施了严格的安全标准&#xf…

【SpringCloud】负载均衡(Spring Cloud LoadBalancer)

负载均衡 当服务流量增大时&#xff0c;通常会采用增加机器的方式进行扩容。负载均衡就是用来在多个机器或者其他资源中&#xff0c;按照一定的规则合理分配负载。其中的实现可以分成客户端负载均衡和服务端负载均衡。 服务端负载均衡 在服务端进行负载均衡的算法分配。 比…