机器学习第四十周周报 WDN GGNN

news2024/7/6 18:28:54

文章目录

  • week40 WDN GGNN
  • 摘要
  • Abstract
  • 一、文献阅读
    • 1. 题目
    • 2. abstract
    • 3. 网络架构
      • 3.1 问题提出
      • 3.2 GNN
      • 3.3 CSI GGNN
    • 4. 文献解读
      • 4.1 Introduction
      • 4.2 创新点
      • 4.3 实验过程
        • 4.3.1 数据获取
        • 4.3.2 参数设置
        • 4.3.3 实验结果
    • 5. 结论
    • 二、GGNN
      • 1. 代码解释
      • 2. 网络结构
      • 小结
      • 参考文献
      • 参考文献

week40 WDN GGNN

摘要

本周阅读了题为Gated graph neural networks for identifying contamination sources in water distribution systems的论文。该研究针对 WDN 中的 CSI 开发了 GGNN 模型。它考虑WDN的拓扑来表示有效CSI的水质数据的时空分布特征。利用水流方向构建邻接矩阵来探索节点间的信息传递,并将传感器站采集的时间序列水质数据作为节点属性输入到GGNN模型中。基于 GGNN 的 CSI 方法的有效性在真实的 WDN 中进行了测试

Abstract

This week’s weekly newspaper decodes the paper entitled Gated graph neural networks for identifying contamination sources in water distribution systems. This study develops a GGNN model for CSI in a WDN. It considers the topology of a WDN to represent the spatiotemporal dis­tribution characteristics of water quality data for effective CSI. Hy­raulic flow directions are used to build the adjacent matrix to explore the information transmission between nodes, and time series water quality data collected by sensor stations are used as node attributes input to the GGNN model. The effectiveness of the GGNN-based CSI method is tested in a real WDN and the main conclusions derived are summarised below.

一、文献阅读

1. 题目

标题:Gated graph neural networks for identifying contamination sources in water distribution systems

作者:Zilin Li, Haixing Liu, Chi Zhang, Guangtao Fu

期刊名:Journal of Environmental Management

链接:https://doi.org/10.1016/j.jenvman.2023.119806

2. abstract

该研究提出了一种用于 WDN(配水管网) CSI(污染源识别) 的门控图神经网络 (GGNN),结合了时空水质数据网络节点之间的流向。通过对各种污染场景进行评估,GGNN 即使在传感器覆盖范围有限的情况下也表现出很高的预测精度。定向连接显着提高了 GGNN CSI 准确性,强调了网络拓扑和流动态在基于 ML(机器学习) 的 WDN CSI 方法中的重要性。具体来说,该方法仅使用 2 小时的传感器数据即可将污染源缩小到 5 个点,准确率达到 92.27%。 GGNN 展示了模型和测量不确定性下的弹性,重申了其在实践中实时实施的潜力。

This study proposes a gated graph neural network (GGNN) for CSI in the WDN, incorporating both spatiotemporal water quality data and flow directionality between network nodes. Evaluated across various contamination scenarios, the GGNN demonstrates high prediction accuracy even with limited sensor coverage. Notably, directional connections significantly enhance the GGNN CSI accuracy, underscoring the importance of network topology and flow dynamics in ML-based WDN CSI approaches. Specifically, the method achieves a 92.27% accuracy in narrowing the contamination source to 5 points using just 2 h of sensor data. The GGNN showcases resilience under model and measurement uncertainties, reaffirming its potential for real-time implementation in practice.

3. 网络架构

3.1 问题提出

假设WDN中的 N s N_s Ns个站点部署了水质传感器,对于一次污染事件,WDN中的水质数据样本可以表示为 X ∈ R N s × N c X ∈ \mathbb {R}^{N_s\times N_c} XRNs×Nc,其中 N c N_c Nc表示特定时间周期 T c T_c Tc内获取的样本数量。将 CSI 表述为一个分类问题。更具体地说,给定第 i 个污染事件的数据样本矩阵 X i X_i Xi,CSI 问题是确定几个潜在网络节点处的污染源,即 y ^ i = f ( X i ) \hat y_i = f(X_i) y^i=f(Xi),其中 f 是具体的污染源分类模型。如果 y ^ i = y i \hat y_i = y_i y^i=yi,则污染源被正确识别,其中 y i y_i yi​ 表示对应的真实污染源节点。

3.2 GNN

GNN 通过消息传递计算每个节点的状态向量,从而能够处理此类图结构数据。这些状态向量捕获有关图的本地和全局信息,对于分类、回归和聚类等各种下游任务很有价值。

在原始的 GNN 模型中,传播被限制在收敛到一个固定点之前进行操作,这限制了其灵活性,特别是对于节点分类等任务。为了克服这个限制,引入了 GGNN。 GGNN 释放了收敛到固定点的要求,并结合了一定数量的时间步长的门控循环单元 (GRU)。每个节点的状态更新考虑其先前的表示 h v ( k − 1 ) h_v^{(k−1)} hv(k1) 及其相邻节点状态 a v ( k ) a_v^{(k)} av(k)​ 的聚合。

首先,节点 v 根据邻接矩阵聚合来自其邻接节点的消息:

image-20240524195752317

其中 x v x_v xv是包含节点v的输入属性的列向量。为了增加GGNN的表达能力,在用作初始隐藏状态之前通常会放大节点属性的大小。

然后,GGNN 使用类似 GRU 的传播步骤来更新节点的状态,可以描述为:

image-20240524200145374

然后,GGNN 使用类似 GRU 的传播步骤来更新节点的状态,可以描述为: 其中 r 和 z 是重置门和更新门; W r , W z , W & U r , U z , U W_r,W_z,W \& U_r, U_z,U Wr,Wz,W&Ur,Uz,U是每层的权重和偏差; σ ( ⋅ ) σ(·) σ() 是 sigmoid 激活函数; ⊙ \odot 是逐元素乘法。

3.3 CSI GGNN

针对 CSI 问题提出的 GGNN 模型如下所示。

image-20240524200842467

1d7b7518718c4be7a98faf1e23bd43c

ed253c60fef5ba737942bb178fd3062

节点 v x v x_v xv 的节点属性通过 ReLU 激活的标准线性组合被映射为原始隐藏状态 h v ( 0 ) h_v^{(0)} hv(0) 从原始空间 R N c \mathbb R^{N_c} RNc 到新空间 R M \mathbb R^M RM​。 M 是隐藏状态的大小。大的 M 值会增加模型的容量,但这可能会导致过拟合问题,并且当 M 太大时使训练变得更加困难。

然后将扩展邻接矩阵 ̂A = [A, AΤ] 和映射节点属性 h(0) 输入到 GGNN,并在固定的 K 步上递归计算,并输出状态矩阵 h(K) ∈ Rn×M。 K是GGNN的传播步数。对于每个节点,GGNN 执行 K 个传播步骤后即可获知 K 个最远邻居的信息。具体来说,当K = 1时,每个节点只能向其直接邻居节点学习。 K值决定了模型的学习能力和效率。较高的 K 值会使模型变慢并增加内存需求,较低的 K 值会减少每个节点可以学习的依赖项数量。

最后,GGNN h ( K ) h^{(K)} h(K) 的输出被展平为向量,并使用线性层和 softmax 层归一化为概率分布 Y ^ \hat Y Y^ Y ^ \hat Y Y^​是概率向量,表示每个节点是污染源的概率。

4. 文献解读

4.1 Introduction

由于以下实际原因,开发快速准确的方法来识别 WDN 中的污染事件源是一项挑战:

  • 首先,由于经济限制,WDN 中部署的传感器数量通常有限,这意味着只能收集空间稀疏的水质数据。
  • 其次,城市用水需求的固有变化增加了污染源识别的不确定性。
  • 第三,由于污染物可能通过管道快速扩散,及时定位污染物对于开发有效算法至关重要

机器学习算法必须解决训练过程中的数据不平衡问题,这主要是由于现实世界 WDN 中缺乏污染事件记录造成的。在现实场景中,污染数据可能会受到传感器测量精度和用户用水需求变化等因素的影响。因此,在实施模型时考虑不确定性的影响至关重要。

4.2 创新点

研究提出了一种用于 CSI 的门控图神经网络(GGNN),它可以通过将多个水质传感器站的数据与 WDN 的拓扑相结合,有效捕获节点的空间相关性。具体贡献如下:

  1. 所提出的基于 GGNN 的 CSI 方法使用模拟工具 EPANET 从不同污染源下的传感器站生成数据,同时考虑需水量和传感器测量的不确定性。
  2. 该方法利用WDN的图结构,结合网络拓扑和水流方向,实现节点和管道之间有效的编队聚合和消息传递。
  3. 使用安装了多个水质传感器的真实 WDN 评估所提出的基于 GGNN 的 CSI 方法的性能,并进行消融研究以估计网络拓扑和水流方向对检测精度的影响。
  4. 还进行了比较评估,将基于 GGNN 的 CSI 方法与广泛采用的随机森林 (RF) 算法进行了基准测试。

4.3 实验过程

4.3.1 数据获取

盐田水网如下

image-20240524211056709

该管网有两个水源(S1 和 S2)、952 个需求节点和 1175 个管道。网络中部署了33个水质传感器站。 S1依靠重力供水,平均需水量为36,000 m3 d−1。 S2有两个出水口,在重力和压力的作用下供水。总平均需求量为 42,000 m3 d−1。该网络具有24小时的需求模式,需求间隔为5分钟。

在研究中,所有污染事件均基于EPANET进行模拟。然后,生成的污染事件样本被分为训练数据集(80%)和测试数据集(20%)。根据污染源、开始时间、持续时间和浓度随机设置污染事件。实际上,WDN 中的每个节点都被假定为潜在的污染源。然而,某些节点中的污染事件可能无法被所有传感器站检测到,并且那些不触发任何水质传感器警报的污染事件将被排除在训练和评估基于GGNN的CSI方法之外。在研究中,每个传感器站的警报阈值Cthre设置为 1 m g L − 1 1 mg L^{−1} 1mgL1。对于每个节点,可以在一天中的每个小时注入污染物,持续6小时,离开源节点的污染物浓度在 50 − 100 m g L − 1 50-100 mg L^{−1} 50100mgL1之间随机设置。每个节点每24h产生Nm个污染事件(默认 N m = 5 N_m=5 Nm=5,即每个节点采样120个污染事件)。当任何传感器站触发警报时,就会收集传感器数据。节点属性Nc的大小受传感器采样间隔t1和传感器数据采集时间Tc的影响。默认采样间隔和数据收集时间分别为 5 分钟和 2 小时。本研究采用不同的 N m ( 1 ∼ 5 ) 、 t 1 ( 5 m i n 、 15 m i n ) 、 T c ( ( ∼ 5 h ) N_m(1\sim 5)、t_1(5min、15min)、T_c((\sim 5h) Nm(15)t1(5min15min)Tc(5h)​取值来改变数据样本大小和节点属性,观察不同数据采样对识别的影响基于 GGNN 的 CSI 方法的性能。

研究中的水力模型是根据不同节点的不同昼夜需求模式进行校准的。然而,WDN的实际运行过程中还存在很多不确定性。在仿真过程中考虑了每个节点的需求模式和传感器测量的不确定性,以评估基于GGNN的CSI方法的鲁棒性。使用正态分布 N ( 0 , σ 2 ) N(0, σ2) N(0,σ2) 和均匀分布 U ( − α , + α ) U(−α, +α) U(α,+α)​ 来模拟 WDN 中每个节点的需求模式和传感器测量中可能存在的噪声,如下所示:

image-20240524211759526

其中 d ( i , j ) , d ′ ( i , j ) d(i, j),d^′(i, j) d(i,j),d(i,j) 是默认和新需求模式下节点 i 在时间步 j 的需水量,c(s, j) 和 c′(s, j) 是传感器节点模拟和监测的浓度值s 在时间步 j。本研究中,σ设置为0、5%、10%、15%和20%,α设置为0、2%、5%、8%和10%。特别地,当默认需求模式和传感器测量准确时,σ和α被设置为0。

4.3.2 参数设置

image-20240524211951776

GGNN模型超参如上,GGNN模型的输出是每个节点作为污染源的概率。以下负对数似然函数用于训练 GGNN 模型:

image-20240524212312387

研究中,单个污染事件只有一个污染源,因此 Y 中真实污染源的概率值为 1,其他元素均为 0。 y ^ v \hat y_v y^v y v y_v yv Y ^ \hat Y Y^ Y Y Y​ 中表示预测的元素以及节点 v 作为污染源的真实概率

基于 GGNN 的 CSI 方法的训练时间根据所使用的数据集而变化。污染源识别过程的执行是瞬时的,因此CSI方法的检测时间主要取决于传感器数据采集时间Tc。所有实验均在 Google Colab Pro 上进行,这是一项可用于深度学习研究的云服务。

T O P c TOP_c TOPc 用于评估训练过程后的模型精度,计算公式:

image-20240524212544403

在研究中,使用四个不同的 c 值(c = 1、3、5 和 10)来评估模型的准确性。

RF是一种用于识别 WDN 污染源的常用机器学习技术,被选为比较基准。所提出的基于 GGNN 的 CSI 方法针对 RF 进行了评估,以评估其在 WDN 内污染源识别方面的性能。

4.3.3 实验结果

关于模型效果的实验

使用默认参数生成的大量污染事件来测试所提出的基于 GGNN 的 CSI 方法的性能。训练过程中的损失函数图如下所示。

image-20240524213043286

下图显示了测试过程中基于 GGNN 的 CSI 方法在不同训练 epoch 数下的性能。

image-20240524213122530

上述实验表明,梯度在训练过程中和训练过程中持续存在。基于GGNN的CSI方法具有很高的稳定性。研究中使用的默认训练周期为 50,以保持基于 GGNN 的 CSI 方法在所有实验中的稳定性。实际中,当训练损失稳定时,可以终止训练过程以减少训练时间。

下表展示了 GGNN 和 RF 在不同评估指标(TOP1、TOP3、TOP5;TOP10)上的预测精度比较。

image-20240524213338135

GGNN在所有预测精度方面均优于 RF。在 TOP1 分类(最可能的污染源)中,GGNN 达到了 51.23% 的准确率,超过 RF 11.84%。

这些结果凸显了 GGNN 模型在定位 WDN 内污染源方面的有效性。此外,这种优异的性能强调了 GNN 相对于 RF 等传统机器学习方法在准确识别污染源方面的潜力。

image-20240524213505087

上图展示了模型对污染事件的预测示例。红十字代表真实的污染源,不透明的灰色圆圈代表预测的污染源。这证明了基于 GGNN 的 CSI 方法在识别 WDN 中可能的污染源方面的有效性。

image-20240524213757907

上图显示了触发警报识别真实污染源的累积准确度曲线,其中给出了在不同数量的传感器警报下正确识别真实污染源的测试样本的累积百分比。基于GGNN的CSI方法仅需要1次警报就可以识别大约一半的污染事件,并且在3次或更少的警报下累积准确率可以占所有识别的污染源样本的80%,这意味着基于GGNN的CSI方法具有良好的性能即使触发的警报较少

网络拓扑和水力流向的影响(消融实验)

使用了三种模型进行比较:有向图、无向图和全连接图,其中每个节点都链接到所有其他节点。所有模型均使用相同的数据集(Nm = 1、t1 = 5min、Tc = 2h、α = 0 和 σ = 0)进行训练和测试。

image-20240524214020407

上表展示了GGNN方法在使用有向、无向和全连接图网络的测试过程中的预测精度。结果表明,在有向图上训练的模型在测试集上达到了最高的准确率,优于在无向图和全连接图上训练的模型。在无向图上训练的模型准确率略低于有向图,而在全连接图上训练的模型在测试集上表现较差(TOP1、TOP3、TOP5、TOP10的预测准确率)小于10%)。

有向图使模型能够捕获液压流方向和节点之间的相互作用,这对于准确的系统识别至关重要。相比之下,全连接图引入了大量不必要的连接。

不同数据采样方法的影响

image-20240524214325270

如上图所示,基于GGNN的5分钟采样间隔输入的CSI方法比15分钟采样间隔输入的方法获得了更高的精度(TOP1,TOP3,TOP5;TOP10)。提高采样频率可以提高基于GGNN的CSI方法的识别性能。

基于GGNN的CSI方法的预测精度可以通过增加一定时间范围内的数据收集时间来提高。

image-20240524215042319

随着更多的样本进行训练,预测精度预计会得到提高,但上图的结果表明,虽然确实出现了增加,但增加的速度很快就趋于平稳。

当Nm = 1时,TOP1、TOP3、TOP5和TOP10分别为40.92%、73.24%、86.00%和95.96%,并随着Nm = 2而增加。然而,当Nm > 2时,改进可以忽略不计。随着污染源定位范围从1个节点扩大到10个节点,预测精度对数据量的敏感度降低,表现为数据量的精度变异性较小。

需求和测量不确定性对识别性能的影响

image-20240524215332239

上表显示了考虑需求和测量不确定性后测试样本的预测精度。基于指标的不同评估,给出了 25 组实验的预测精度的平均值和标准偏差。 TOP1、TOP3、TOP5、TOP10的平均值分别为41.29%、75.08%、87.01%、96.59%。 TOP1 的标准差最大(2.31%),TOP10 的标准差最小(0.30%)

结果表明,不同实验对预测精度影响不大,最大标准差为2.31%,表明CSI的稳健性。而且,随着污染源定位范围的扩大,标准差逐渐变小,表明随着范围的增加,预测精度受需求模式和测量精度的影响较小。

image-20240524215439675

上图显示了 25 组实验中每一组的预测精度,这些实验是为了测试需求和测量不确定性对基于 GGNN 的 CSI 方法的识别性能的影响。

热图表明,传感器测量的精度与模型精度呈负相关,而需求不确定性影响很小,也没有明显的相关性。因此,为了在实践中获得更高的预测精度,更重要的是优先考虑传感器精度而不是需求精度。

5. 结论

得出的主要结论总结如下:

  1. 所提出的 GGNN 方法在多个预测精度方面优于常用的 RF 算法,并且在识别污染源方面表现出强大的性能,即使在检测污染的传感器数量有限的情况下也能证明其有效性。这意味着该模型可以在污染事件的早期阶段有效识别污染源,使水务公司能够及时采取补救措施以减少影响。
  2. 节点之间连接的方向性显着影响基于GGNN的CSI方法的有效性。有向图模型优于无向图和全连接图模型,强调了构建基于 GGNN 的 CSI 方法时网络拓扑和节点之间的水力流动方向的重要性。
  3. 所提出的基于GGNN的预测精度可以随着采样频率的增加而提高。然而,准确性并不总是随着数据收集时间的延长而提高,并且对训练数据的大小不太敏感。在实际应用中,可以采用采样频率较高的水质传感器来提高预测精度,缩短识别时间。
  4. 所提出的基于 GGNN 的 CSI 方法展示了针对变化的需求和测量不确定性的弹性。与水力模型的不确定性(例如WDN中每个节点的需求模式)相比,水质传感器的测量不确定性对识别精度的影响更大。当污染源位于越来越多的节点位置时,需求和测量不确定性对识别性能的影响就会减弱。

GGNN 模型被提出来识别 WDN 中的污染源,但是,它仅在单个污染源的污染事件上进行了测试。

未来的工作可以探索基于 GGNN 的 CSI 方法在涉及两个或多个污染源的污染事件中的性能

二、GGNN

来源论文
Gated Graph Sequence Neural Networks,ICLR 2016
链接:https://arxiv.org/abs/1511.05493
官方实现(Lua):https://github.com/yujiali/ggnn
第三方实现(pytorch):https://github.com/calebmah/ggnn.pytorch

1. 代码解释

@JamesChuanggg的pytorch实现ggnn.pytorch,这个实现的代码相比于官方版本来说,容易读很多

  1. annotation
annotation = np.zeros([n_nodes, n_annotation_dim])
annotation[target[1]-1][0] = 1	
  1. 各时间步实现
class Propogator(nn.Module):
    """
    Gated Propogator for GGNN
    Using LSTM gating mechanism
    """
    def __init__(self, state_dim, n_node, n_edge_types):
        ## 初始化参照源代码
    def forward(self, state_in, state_out, state_cur, A):
        # 入边向量和出边向量
        A_in = A[:, :, :self.n_node*self.n_edge_types]
        A_out = A[:, :, self.n_node*self.n_edge_types:]

        # 入边向量和出边向量分别和图做计算
        a_in = torch.bmm(A_in, state_in)
        a_out = torch.bmm(A_out, state_out)
        a = torch.cat((a_in, a_out, state_cur), 2)

        # 类GRU部分
        r = self.reset_gate(a)
        z = self.update_gate(a)
        joined_input = torch.cat((a_in, a_out, r * state_cur), 2)
        h_hat = self.tansform(joined_input)

        output = (1 - z) * state_cur + z * h_hat

        return output
  1. 网络结构
class GGNN(nn.Module):
    """
    Gated Graph Sequence Neural Networks (GGNN)
    Mode: SelectNode
    Implementation based on https://arxiv.org/abs/1511.05493
    """
    def __init__(self, opt):
        # 初始化参考源代码
    def forward(self, prop_state, annotation, A):
        # prop_state:论文中的h
        # annotation:节点标注
        # A:图
        for i_step in range(self.n_steps):
            # 对于每一个时间步循环
            in_states = []
            out_states = []
            for i in range(self.n_edge_types):
                # 对输入特征做两个分支的全连接,得到入边特征,和出边特征
                # 每一种边都要计算一次
                in_states.append(self.in_fcs[i](prop_state))
                out_states.append(self.out_fcs[i](prop_state))
            # 将所有种类的边得到的特征连接起来
            in_states = torch.stack(in_states).transpose(0, 1).contiguous()
            in_states = in_states.view(-1, self.n_node*self.n_edge_types, self.state_dim)
            out_states = torch.stack(out_states).transpose(0, 1).contiguous()
            out_states = out_states.view(-1, self.n_node*self.n_edge_types, self.state_dim)

            # 用门控图模块更新h
            prop_state = self.propogator(in_states, out_states, prop_state, A)

        join_state = torch.cat((prop_state, annotation), 2)

        output = self.out(join_state)
        output = output.sum(2)

        return output

2. 网络结构

基本概念
GGNN是一种基于GRU的经典的空间域message passing的模型

问题描述
一个图 G = (V, E), 节点v ∈ V中存储D维向量,边e ∈ E中存储D × D维矩阵, 目的是构建网络GGNN。
实现每一次参数更新时,每个节点既接受相邻节点的信息,又向相邻节点发送信息。

image-20240524220521078

image-20240524220605163

小结

研究提出了一种用于 CSI 的门控图神经网络(GGNN),它可以通过将多个水质传感器站的数据与 WDN 的拓扑相结合,有效捕获节点的空间相关性。所提出的基于 GGNN 的 CSI 方法使用模拟工具 EPANET 从不同污染源下的传感器站生成数据,同时考虑需水量和传感器测量的不确定性。该方法利用WDN的图结构,结合网络拓扑和水流方向,实现节点和管道之间有效的编队聚合和消息传递。使用安装了多个水质传感器的真实 WDN 评估所提出的基于 GGNN 的 CSI 方法的性能,并进行消融研究以估计网络拓扑和水流方向对检测精度的影响。还进行了比较评估,将基于 GGNN 的 CSI 方法与广泛采用的随机森林 (RF) 算法进行了基准测试。

参考文献

种用于 CSI 的门控图神经网络(GGNN),它可以通过将多个水质传感器站的数据与 WDN 的拓扑相结合,有效捕获节点的空间相关性。所提出的基于 GGNN 的 CSI 方法使用模拟工具 EPANET 从不同污染源下的传感器站生成数据,同时考虑需水量和传感器测量的不确定性。该方法利用WDN的图结构,结合网络拓扑和水流方向,实现节点和管道之间有效的编队聚合和消息传递。使用安装了多个水质传感器的真实 WDN 评估所提出的基于 GGNN 的 CSI 方法的性能,并进行消融研究以估计网络拓扑和水流方向对检测精度的影响。还进行了比较评估,将基于 GGNN 的 CSI 方法与广泛采用的随机森林 (RF) 算法进行了基准测试。

参考文献

[1] Zilin Li, Haixing Liu, Chi Zhang, Guangtao Fu, “Gated graph neural networks for identifying contamination sources in water distribution systems” [J], Journal of Environmental Management https://doi.org/10.1016/j.jenvman.2023.119806

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

汉明码(海明码)的计算的规则

一.汉明码的由来 1.汉明码(Hamming Code),是在电信领域的一种线性调试码,以发明者理查德卫斯里汉明的名字命名。汉明码在传输的消息流中插入验证码,当计算机存储或移动数据时,可能会产生数据位错误&#x…

mdm 推送证书制作教程

第一步点击获取,点击以后会下载一个zip压缩包 解压以后:会得到四个文件,请务必保存好,待会需要使用 登录apple开发者官网 https://developer.apple.com/account/resources/certificates/list 点击添加证书 找到mdm csr 然后点击…

Python | Leetcode Python题解之第100题相同的树

题目: 题解: class Solution:def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:if not p and not q:return Trueif not p or not q:return Falsequeue1 collections.deque([p])queue2 collections.deque([q])while queue1 and queue2:node…

在Windows上创建RAM Disk

在Windows 10上创建一个与Linux中的tmpfs相似的内存文件系统(一个文件系统,它使用主内存作为存储)通常不是操作系统直接提供的功能。不过,有一些方法可以实现类似的效果。 使用软件创建RAM Disk 有一些第三方软件可以帮助在Wind…

crmeb Pro版/多店版商城付费会员、会员卡功能说明

一、功能介绍 用户开通付费会员后,可获得多项商城优惠,商家可通过此功能锁定重要客户,培养客户消费习惯等 二、操作流程 用户 > 会员管理 > 付费会员 三、功能说明 会员类型 付费卡类型:月卡、季卡、年卡…

集合框框框地架

这一次来介绍一下常用的集合: 首先是两种集合的《家庭系谱图》: 接下来介绍一下集合的种类: Collection Set SetTreeSet:基于红⿊树实现,⽀持有序性操作,例如:根据⼀个范围查找元素的操作。但…

LLM多模态——GPT-4o改变人机交互的多模式 AI 模型应用

1. 概述 OpenAI 发布了迄今为止最新、最先进的语言模型 – GPT-4o也称为“全“ 模型。这一革命性的人工智能系统代表了一次巨大的飞跃,其能力模糊了人类和人工智能之间的界限。 GPT-4o 的核心在于其原生的多模式特性,使其能够无缝处理和生成文本、音频…

基于灰狼优化算法优化支持向量机(GWO-SVM)时序预测

代码原理及流程 基于灰狼优化算法优化支持向量机(GWO-SVM)的时序预测代码的原理和流程如下: 1. **数据准备**:准备时序预测的数据集,将数据集按照时间顺序划分为训练集和测试集。 2. **初始化灰狼群体和SVM模型参数…

机器学习云环境搭建

在 https://support.huaweicloud.com/browsertg-obs/obs_03_1003.html 下载对应版本的 OBS Broswer 软件,如图,红框内的为安装文件,蓝色框内的为对应安装文件的校验文件(无需下载) 以 64 位机为例,下载完…

1.OLED

1.基础知识

【Docker系列】 Docker容器具体信息查询

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

前端 MVC 分层的实践

目录 前言 并未过时的 MVC MVC 的由来 不同版本的 MVC 苹果版本 微软版本 阮一峰版 原生 JS 实现 MVC Model View Controller React 中的 MVC 其他分层 Service format utils 目录 总结 前言 前面我们讲了 JavaScript 面向对象编程,这篇文章我们会…

图书管理系统(Java版本)

文章目录 前言要求1.设置对象1.1.图书1.2.书架2.管理员3.功能的实现 2.搭建框架2.1.登录(login)2.2.菜单2.3.操作方法的获取 3.操作方法的实现3.1.退出系统(ExitOperation)3.2.显示图书(ShowOperation)3.3.查阅图书(FindOperation)3.4.新增图书(AddOperation)3.5.借出图书(Borr…

go-zero 实战(5)

引入Prometheus 用 Prometheus 监控应用 1. 用 docker 启动 Prometheus 编辑配置位置,我将 prometheus.yaml 和 targets.json 文件放在了 /opt/prometheus/conf目录下 prometheus.yaml global:scrape_interval: 15s # 抓取间隔evaluation_interval: 15s # 评估…

宝塔Linux下安装EMQX服务并设置匿名访问

简述 之前有在Windows和Linux下搭建过EMQX服务并且使用方面都没问题,但那都是使用的用户和密码方式访问,且前提都是通过浏览器进入EMQX的配置页面设置的属性; 但这次使用的是腾讯云租用的宝塔Liniux,由于没有浏览器只能通过命令行方式修改EMQX配置以达到目的;由于事先没看…

Android studio关闭自动更新

Windows下: 左上角file - setting - Appearance & Behavier - system setting - update - 取消勾选

【实战】SpringBoot整合Websocket、Redis实现Websocket集群负载均衡

文章目录 前言技术积累什么是Websocket什么是Redis发布订阅Redis发布订阅与消息队列的区别 实战演示SpringBoot整合WebsoketWebsoket集群负载均衡 实战测试IDEA启动两台服务端配置nginx负载均衡浏览器访问模拟对话 前言 相信很多同学都用过websocket来实现服务端主动向客户端推…

案例题(第二版)

案例题目 信息系统架构设计 基本概念 信息系统架构(ISA)是对某一特定内容里的信息进行统筹、规划、设计、安排等一系列的有机处理的活动。特点如下 架构是对系统的抽象,它通过描述元素、元素的外部可见属性及元素之间的关系来反映这种抽象…

初识C语言——第二十八天

代码练习1&#xff1a; 用函数的方式实现9*9乘法表 void print_table(int n) {int i 0;int j 0;for (i 1; i< n; i){for (j 1; j< i; j){printf("%d*%d%-3d ", i, j, i * j);}printf("\n");}}int main() {int n 0;scanf("%d", &a…

2024-5-24 石群电路-15

2024-5-24&#xff0c;星期五&#xff0c;22:15&#xff0c;天气&#xff1a;晴&#xff0c;心情&#xff1a;晴。今天最后一天上班&#xff0c;终于要放返校假啦&#xff0c;开心&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;不过放假也不能耽误…