当前位置: 首页 > news >正文

第三十八周周报:文献阅读 +BILSTM+GRU+Seq2seq

目录

摘要

Abstract

文献阅读:耦合时间和非时间序列模型模拟城市洪涝区洪水深度

现有问题

提出方法

创新点

XGBoost和LSTM耦合模型

XGBoost算法

​编辑

LSTM(长短期记忆网络)

耦合模型

研究实验

数据集

评估指标

研究目的

洪水深度预测

实验结果

LSTM变体

Bidirectional LSTM(双向LSTM)

GRU(门循环控制单元)

Seq2seq模型

编码器-解码器(encoder-decoder)架构

Seq2seq训练

双向LSTM对乘客数量进行预测


摘要

本周阅读的文献,提出了一种基于XGBoost和LSTM算法的城市洪泛区洪水模拟耦合模型,该模型强调降雨和雨后洪水的全过程,利用降雨数据构,通过XGBoost算法构建非时间序列回归模型来模拟和预报洪水深度,降雨后,通过LSTM算法利用时间序列原理,在降雨后进行持续预测。有效的预测洪水深度,解决了雨后洪水深度预测问题。双向LSTM通过两层LSTM可以提供更丰富的上下文信息,将前向和后向的输出进行拼接得到最终结果,可以获得更全面的序列信息。GRU在LSTM的基础上简化门控即减少了参数,从而有效降低过拟合的风险,减小了时间、空间复杂度的负担。Seq2seq模型常用的就是LSTM或者GRU作为编码-解码结构,用于通过一个序列生成另一个序列,且两者之间不等长,常用于机器翻译等。

Abstract

The literature read this week proposes a coupled model for urban flood simulation based on XGBoost and LSTM algorithms. The model emphasizes the entire process of rainfall and post rainfall floods, and uses rainfall data to construct a non time series regression model using XGBoost algorithm to simulate and predict flood depth. After rainfall, the LSTM algorithm utilizes the principle of time series to make continuous predictions after rainfall. Effectively predicting flood depth solves the problem of predicting flood depth after rain. Bidirectional LSTM can provide richer contextual information through two layers of LSTM, concatenating forward and backward outputs to obtain the final result, which can obtain more comprehensive sequence information. On the basis of LSTM, GRU simplifies gating by reducing parameters, effectively reducing the risk of overfitting and reducing the burden of time and space complexity. The Seq2seq model commonly uses LSTM or GRU as the encoding decoding structure, which is used to generate another sequence from one sequence, and the two are not of equal length, commonly used in machine translation, etc.

文献阅读:耦合时间和非时间序列模型模拟城市洪涝区洪水深度

Coupling Time and Non-Time Series Models to Simulate the Flood Depth at Urban Flooded Area | Water Resources Management

2023 Water Resources Management 

现有问题

造成城市洪水的主要原因是短时强降雨,因此,目前许多非时间序列研究都倾向于使用降雨数据作为驱动,然而这种方式面临着雨后洪水预报的实现和精度要求的问题。短时强降雨后仍存在的洪水潜在后果严重,并且雨后时期,城市洪水的关键因素降雨不再影响洪水的消退过程,意味着洪水从高位到干枯的过程是一个受淹没区地理结构影响的完整时间序列。

提出方法

提出XGBoost回归模型和LSTM回归模型相结合的方法对郑州市部分洪涝区进行洪水深度预测。其中极端梯度增强(XGBoost)算法在多维非时间数据处理和回归预测方面具有高精度和高效率的优点,LSTM算法在时间序列数据的分析和预测方面表现出很大的优势。

创新点

  1. 考虑雨后洪水的存在,将洪水过程分为降雨和雨后两个阶段。
  2. 通过XGBoost和LSTM模型,对洪水的整个过程进行了完整的分阶段预测。
  3. 利用了非时间序列和时间序列模型的优点,弥补了使用单一模型的缺点,提高了结果的准确性。

XGBoost和LSTM耦合模型

XGBoost算法

XGBoost(eXtreme Gradient Boosting)又叫极度梯度提升树,是一种用于大规模并行化的提升树集成算法,针对分类或回归问题,是目前最快、集成最好的决策树算法。在相同配置和场景仿真下,XGBoost算法在保证仿真结果准确性的同时,效率比同类算法快数倍。XGBoost算法由多个相关CART树共同决定,即下一决策树的输入样本将与前一决策树的训练和预测结果相关联。XGBoost模型的预测输出结果是多个基础模型结果的和

XGBoost算法的结构

它是采用多个基学习器,每个基学习器都比较简单。基本思路就是不断生成新的树,每棵树都是基于上一颗树和目标值的差值来进行学习,从而降低模型的偏差。最终模型结果的输出如下:y_{i}=\sum_{k=1}^{K}f_{k}(x_{i}),即所有树的结果累加起来才是模型对一个样本的预测值。那在每一步如何选择/生成一个较优的树,那就是由目标函数来决定。

LSTM(长短期记忆网络)

LSTM网络依靠三个门(输入门i_{t}、输出门o_{t}和遗忘门f_{t})来控制信息流进出允许梯度流过长序列的记忆块,在LSTM中,第一阶段是遗忘门,遗忘层决定哪些信息需要从细胞状态中被遗忘,下一阶段是输入门,输入门确定哪些新信息能够被存放到细胞状态中,最后一个阶段是输出门,输出门确定输出什么值,具有很强的适应时间序列的长(静态)期和短(循环)期动态特性的能力

耦合模型

降雨是降雨期洪水的主导驱动因素,因此为了提高效率,可以利用降雨数据来模拟和预报洪水深度。相反,在降雨后没有更新数据的情况下,XGBoost模型的可操作性和可信度下降。因此采用LSTM算法,利用时间序列原理,在降雨后进行持续预测。以雨致洪水为例,将其分为降雨期和雨后两个不同时期,以降雨结束点作为洪水过程的分割点。

研究实验

数据集

13个降雨事件和洪水数据构成了本研究的原始数据库。降雨数据和洪水数据采集时间间隔不同,需要对数据进行处理以满足需求。基于降水观测站数据,采用空间插值的Kriging方法对降水过程进行线性插值。将线性插值方法应用于洪水数据处理,使采集的降雨和洪水数据的时间粒度统一到2分钟级别。

评估指标

选取平均相对误差(Mean Relative Error)、Nash-Sutcliffe效率系数(Nash-Sutcliffe Efficiency coefficient)和合格率(合格率MRE、NSE和QR)作为模型的定量评价指标。y_{c}y_{o}分别为预测值和实测值;\bar{y_{o}}为测量值的平均值;c和n分别为合格样品数量和总样品数量。较低的MRE值和较高的NSE和QR值表明了该模式的性能优势。

研究目的

  • 将洪涝的过程分为降雨期和雨后期两个阶段;
  • 利用降雨数据,利用XGBoost算法构建非时间序列回归模型预测降雨期洪水深度;
  • 基于XGBoost回归模型预测的数据,采用LSTM算法建立时间序列模型,预测雨后汛期洪水深度;
  • 利用XGBoost和LSTM算法的耦合模型预测不同回归期降雨淹没区的洪水深度。

洪水深度预测

1. 降雨期间的洪水深度预测

利用XGBoost算法建立非时间序列回归模型,预测洪水深度。该模型以降雨资料为预测因子,将降雨期的洪水过程划分为若干段。模型输入数据包括被淹地区、t时刻的降雨强度和累积平均降雨量,以及t+1时刻的洪水深度,数据被存储为一组数据向量,并加载到XGBoost回归模型中。选取前10个降雨洪水数据作为模型的训练数据,剩余数据用于检验模型的预测性能。采用基于控制变量法的连续优化方法确定XGBoost模型的主要参数迭代次数、学习率和最大深度,利用对各淹没点建立的训练好的XGBoost回归模型对降雨期洪水进行模拟。

2. 降雨后洪水深度预测

降雨数据不再适用于降雨后期的洪水预测,降雨后的洪水深度数据为不受外界影响的时间序列数据,因此,利用LSTM神经算法构建时间序列模型,对雨后地面洪水进行持续预测。输入窗口的大小和隐藏层的数量等参数需要人工确定,其余剩余参数通过内部函数优化选择。输入窗口的大小为a×b。由于只考虑一维的洪水深度数据,所以将b定义为常数1。为了达到最佳的预测效果,采用网格搜索方法对参数进行优化。同样,将前10次降雨事件下的洪水深度数据作为训练数据,将最后一次降雨事件下的洪水深度数据作为测试数据。

对比研究

为了验证模型的有效性,将LSTM模型与XGBoost回归模型进行比较,将相同的数据应用于XGBoost模型和LSTM模型。如表所示,经验证的三个降雨事件的LSTM和XGBoost模型得到的平均NSE分别为0.90和0.86。LSTM模型的MRE值较低,表明LSTM模型对雨后期城市洪水深度的预测精度更高。

实验结果

对3次降雨事件的模拟结果进行分析,降雨期间XGBoost模型、降雨后LSTM模型和XGBoost与LSTM模型耦合模型模拟的洪水深度平均误差分别为8.87%、9.77%和9.13%,满足洪水预测的要求。同时,利用NSE和QR来评价模型的效率和精度。耦合模型的平均NSE为0.96,平均预测合格率为90.3%。结果表明,XGBoost与LSTM算法的耦合模型在洪水预报中是有效可行。

为了评估模拟值与实测值的差异,通过间隔10 min的系统采样生成拟合曲线如右图,结果表明,耦合模型预测值与实测值具有较强的一致性

LSTM变体

Bidirectional LSTM(双向LSTM)

LSTM只能实现单向的传递,无法编码从后到前的信息。当我们语句是承前启后的情况时,自然能完成。但是当语句顺序倒过来,关键次在后面了,LSTM就无能为力了。在更细粒度的分类时,如对于强程度的褒义、弱程度的褒义、中性、弱程度的贬义、强程度的贬义的五分类任务需要注意情感词、程度词、否定词之间的交互。举一个例子,“这个餐厅脏得不行,没有隔壁好”,这里的“不行”是对“脏”的程度的一种修饰,通过BiLSTM可以更好的捕捉双向的语义依赖。

双向LSTM结构中有两个 LSTM 层,一个从前向后处理序列,另一个从后向前处理序列。这样,模型可以同时利用前面和后面的上下文信息。在处理序列时,每个时间步的输入会被分别传递给两个 LSTM 层,然后它们的输出会被合并。通过双向 LSTM,我们可以获得更全面的序列信息,有助于提高模型在序列任务中的性能。

双向神经网络的单元计算与单向的是相通的。但是双向神经网络隐藏层要保存两个值,一个参与正向计算,另一个值参与反向计算,处理完成后将两个LSTM的输出拼接起来

Q:为什么LSTM中经常使用的是双向LSTM?

双向结构的设计可以提高模型的表示能力和性能,特别是好地捕捉序列中的信息、在处理复杂序列数据时。以下是为什么经常使用两层双向LSTM的一些原因:

  1. 更丰富的上下文信息: 两层LSTM可以提供更丰富的上下文信息。第一层LSTM将原始输入序列的信息进行初步处理,然后将其作为更丰富的输入提供给第二层LSTM。这有助于模型更好地捕捉输入序列中的特征和模式。
  2. 更强的特征表示: 两层LSTM可以逐步提取更抽象、更高级别的特征表示。第一层LSTM将原始数据进行编码,然后第二层LSTM在第一层的基础上进一步提取更有意义的特征。这有助于提高模型的表达能力,从而更好地建模序列数据
  3. 双向信息:双向LSTM可以从两个方向(正向和反向)分别获取序列数据的信息。

GRU(门循环控制单元)

虽然LSTM能够抑制梯度消失问题,但需要以增加时间复杂度和空间复杂度作为代价。GRU在LSTM基础上将忘记门和输入门合并成一个新的门即更新门, GRU包含两个门:更新门与重置门

  • 重置门:负责控制忽略前一时刻的状态信息\textbf{h}_{t-1}的程度,重置门的值越小说明忽略的越多。
  • 更新门:定义了前面记忆保存到当前时间步的量,更新门的值越大说明上一时刻的状态信息h_{t-1}带入越多。

如果我们将重置门设置为 1,更新门设置为 0,那么我们将再次获得标准 RNN 模型。这两个门控向量决定了哪些信息最终能作为门控循环单元的输出,它们能够保存长期序列中的信息,使得重要信息可以跨越长时间步骤传递,且不会随时间而清除或因为与预测不相关而移除。

GRU的优势:

  • 参数更少:从而有效降低过拟合的风险,因此模型泛化能力较好,并且在反向传播的过程中,随着反向传播深度的加深,对应需要反向传播路径相比于LSTM大量减少,从而减小了时间、空间复杂度的负担。
  • 训练速度较快: 由于GRU的参数较少,它通常比LSTM更快地训练。
  • 对短序列有优势:GRU在某种程度上减少了梯度消失的问题,使其更容易捕捉到短序列中的相关信息。

GRU的缺点:

  • 信息保存不如LSTM: GRU的门控机制相对简单,因此它不太适合捕捉长期依赖关系。在某些任务中,尤其是处理需要长期记忆的序列数据时,LSTM可能表现更好。
  • 性能不稳定:GRU在某些任务中可能表现得不如LSTM稳定,因为它在不同数据集和问题上的性能差异较大。在一些情况下,LSTM可能更可靠。

Seq2seq模型

所谓Seq2seq(Sequence to Sequence),即序列到序列模型,就是一种能够根据给定的序列,通过特定的生成方法生成另一个序列的方法,同时这两个序列可以不等长。这种结构又叫Encoder-Decoder模型,即编码-解码模型,其是RNN的一个变种,为了解决RNN要求序列等长的问题。同时,Seq2Seq使用的都是RNN单元,一般为LSTM和GRU。

编码器-解码器(encoder-decoder)架构

Encode一般有两种方式,将RNN最后一个状态做一个变换得到语义向量C,或者将输入序列的所有隐含状态做一个变换得到语义向量C。

 Decoder负责根据语义向量生成指定的序列,即解码。解码器使用另外一个 RNN ,基于输入序列的编码信息和输出序列已经看见的或者生成的词元来预测下一个词元,从而连续生成输出序列的词元。最简单的方式是将语义向量C作为初始状态输入到Encoder的RNN中,得到输出序列。此时上一时刻的输出会成为当前时刻的输入,而且语义向量C只作为初始状态参与运算,后面运算与C无关。第二种方式语义向量C参与序列所有时刻的运算,上一时刻的输出仍然作为当前时刻的输入,但C参与每个时刻的运算。

但需注意的是:

  • 编码器是一个RNN,读取输入句子(可以是双向的)
  • 解码器使用另一个RNN来输出
  • 编码器是没有输出的RNN
  • 编码器最后时间步的隐藏状态用作解码器的初始隐藏状态

编码器可以是单向的循环神经网络,其中的隐藏状态只依赖于输入子序列,这个子序列是由输入序列的开始位置到隐藏状态所在的时间步的位置(包括隐藏状态所在的时间步)。组成编码器也可以是双向的循环神经网络,其中隐藏状态依赖于两个输入子序列,两个子序列是由隐藏状态所在的时间步的位置之前的序列和之后的序列(包含隐藏状态所在的时间步),因此隐藏状态对整个序列的信息都进行了编码。双向不能做语言模型,但是双向可以做翻译;双向可以做编码器,但不能做解码器,解码器需要做预测,编码器不需要。

Seq2seq训练

<bos> 表示序列开始词元,代表一个句子的开始,它是解码器的输入序列的第一个词元

<eos> 表示序列结束词元,代表一个句子的结束(解码器输出的句子长度是可以变化的,一旦输出序列生成此词元,模型就会停止预测)

RNN 做编码器可以输入任意长度的序列,最后返回最后时刻的隐藏状态,使用 RNN 编码器最终的隐状态来初始化解码器的隐状态,解码器一直输出,直到看到句子的结束标志为止

  • 训练时将特定的开始词元(“<bos>”)和原始的输出序列(不包括序列结束词元“<eos>”)拼接在一起作为解码器的输入,这也称为强制教学(teacher forcing,因为原始的输出序列(词元的标签)被送入了解码器)
  • 也可以将来自上一个时间步的预测得到的词元作为解码器的当前输入
  • 训练和推理是不同的:编码器是相同的,但是在训练的时候,解码器是知道目标句子的,它知道真正的翻译是什么样子的,所以解码器的输入(每个 RNN 时刻的输出)所使用的实际上是真正的目标句子的输入,所以就算是在训练的时候翻译错了,下一个时刻的输入还是正确的输入,也就是说,在训练的时候所使用的是真正的目标句子来帮助训练,这样就降低了预测长句子的难度。

双向LSTM对乘客数量进行预测

import numpy
import matplotlib.pyplot as plt
from pandas import read_csv
import math
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.layers import Bidirectional
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error
#matplotlib inline#加载数据集:航空乘客数据集
dataframe = read_csv('airline-passengers.csv', usecols=[1], engine='python')
dataset = dataframe.values
# 将整型变为float
dataset = dataset.astype('float32')# X是给定时间(t)的乘客人数,Y是下一次(t + 1)的乘客人数。
# 将值数组转换为数据集矩阵,look_back是步长。
def create_dataset(dataset, look_back=1):dataX, dataY = [], []for i in range(len(dataset)-look_back-1):a = dataset[i:(i+look_back), 0]# X按照顺序取值dataX.append(a)# Y向后移动一位取值dataY.append(dataset[i + look_back, 0])return numpy.array(dataX), numpy.array(dataY)# fix random seed for reproducibility
numpy.random.seed(7)# 数据缩放
scaler = MinMaxScaler(feature_range=(0, 1))
dataset = scaler.fit_transform(dataset)# 将数据拆分成训练和测试,2/3作为训练数据
train_size = int(len(dataset) * 0.67)
test_size = len(dataset) - train_size
train, test = dataset[0:train_size,:], dataset[train_size:len(dataset),:]
print("原始训练集的长度:",train_size)
print("原始测试集的长度:",test_size)# 构建监督学习型数据
look_back = 1
trainX, trainY = create_dataset(train, look_back)
testX, testY = create_dataset(test, look_back) 
print("转为监督学习,训练集数据长度:", len(trainX))
# print(trainX,trainY)
print("转为监督学习,测试集数据长度:",len(testX))
# print(testX, testY )
# 数据重构为3D [samples, time steps, features]
trainX = numpy.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))
testX = numpy.reshape(testX, (testX.shape[0], 1, testX.shape[1]))
print('构造得到模型的输入数据(训练数据已有标签trainY): ',trainX.shape,testX.shape)# 创建BILSTM模型
model = Sequential()
model.add(Bidirectional(LSTM(4, input_shape=(1, look_back))))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(trainX, trainY, epochs=100, batch_size=1, verbose=2)# 打印模型
model.summary()# 开始预测
trainPredict = model.predict(trainX)
testPredict = model.predict(testX)# 逆缩放预测值
trainPredict = scaler.inverse_transform(trainPredict)
trainY = scaler.inverse_transform([trainY])
testPredict = scaler.inverse_transform(testPredict)
testY = scaler.inverse_transform([testY])# 计算误差
trainScore = math.sqrt(mean_squared_error(trainY[0], trainPredict[:,0]))
print('Train Score: %.2f RMSE' % (trainScore))
testScore = math.sqrt(mean_squared_error(testY[0], testPredict[:,0]))
print('Test Score: %.2f RMSE' % (testScore))#用于绘图的班次预测
trainPredictPlot = numpy.empty_like(dataset)
trainPredictPlot[:, :] = numpy.nan
trainPredictPlot[look_back:len(trainPredict)+look_back, :] = trainPredict# 用于绘图的偏移测试预测
testPredictPlot = numpy.empty_like(dataset)
testPredictPlot[:, :] = numpy.nan
testPredictPlot[len(trainPredict)+(look_back*2)+1:len(dataset)-1, :] = testPredict
Train Score: 22.97 RMSE
Test Score: 48.23 RMSE

相关文章:

第三十八周周报:文献阅读 +BILSTM+GRU+Seq2seq

目录 摘要 Abstract 文献阅读&#xff1a;耦合时间和非时间序列模型模拟城市洪涝区洪水深度 现有问题 提出方法 创新点 XGBoost和LSTM耦合模型 XGBoost算法 ​编辑 LSTM&#xff08;长短期记忆网络&#xff09; 耦合模型 研究实验 数据集 评估指标 研究目的 洪…...

天津最新web前端培训班 如何提升web技能?

随着互联网的迅猛发展&#xff0c;web前端成为了一个热门的职业方向。越来越多的人希望能够通过学习web前端技术来提升自己的就业竞争力。为了满足市场的需求&#xff0c;许多培训机构纷纷推出了web前端培训课程。 什么是WEB前端 web前端就是web给用户展示的东西&#xff0c;…...

Linux下QT生成的(.o)、(.a)、(.so)、(.so.1)、(.so.1.0)、(.so.1.0.0)之间的区别

记录一下遇到的问题&#xff1a;Linux系统下Qt编译第三方动态库会生成多个.so文件&#xff0c;不了解的小伙伴可能很疑惑&#xff1a; &#xff08;1&#xff09;Linux 下 QT 生成的&#xff08;.o&#xff09;、&#xff08;.a&#xff09;和&#xff08;.so&#xff09;三个文…...

线性代数 --- 为什么LU分解中L矩阵的行列式一定等于正负1?

以下是关于下三角矩阵L的行列式一定等于-1的一些说明 笔者的一些话(写在最前面)&#xff1a; 这是一篇小文&#xff0c;是我写的关于求解矩阵行列式的一篇文章中的一部分。之所以把这一段专门提溜出来&#xff0c;是因为这一段相对于原文是可以完全独立的&#xff0c;也是因为我…...

Redisson 源码解析 - 分布式锁实现过程

一、Redisson 分布式锁源码解析 Redisson是架设在Redis基础上的一个Java驻内存数据网格。在基于NIO的Netty框架上&#xff0c;充分的利用了Redis键值数据库提供的一系列优势&#xff0c;在Java实用工具包中常用接口的基础上&#xff0c;为使用者提供了一系列具有分布式特性的常…...

玩转贝启科技BQ3588C开源鸿蒙系统开发板 —— 开发板详情与规格

本文主要参考&#xff1a; BQ3588C_开发板详情-开源鸿蒙技术交流-Bearkey-开源社区 BQ3588C_开发板规格-开源鸿蒙技术交流-Bearkey-开源社区 厦门贝启科技有限公司-Bearkey-官网 1. 开发板详情 RK3588 核心板是一款由贝启科技自主研发的基于瑞芯微 RK3588 AI 芯片的智能核心…...

Qt pro文件

1. 项目通常结构 2.pri文件 pri文件可定义通用的宏&#xff0c;例如创建一个COMMON.pri文件内容为 COMMON_PATH D:\MyData 然后其它pri或者pro文件如APPTemplate.pro文件中通过添加include(Common.pri) &#xff0c;QtCreator就会自动在项目结构树里面创建对应的节点 3.变量…...

实验笔记之——服务器链接

最近需要做NeRF相关的开发,需要用到GPU,本博文记录本人配置服务器远程链接的过程,本博文仅供本人学习记录用~ 连上服务器 首先先确保环境是HKU的网络环境(HKU AnyConnect也可)。伙伴已经帮忙创建好用户(第一次登录会提示重新设置密码)。用cmd ssh链接ssh -p 60001 <u…...

微服务-java spi 与 dubbo spi

Java SPI 通过一个案例来看SPI public interface DemoSPI {void echo(); } public class FirstImpl implements DemoSPI{Overridepublic void echo() {System.out.println("first echo");} } public class SecondImpl implements DemoSPI{Overridepublic void ech…...

redis复习笔记03(小滴课堂)

Redis6常见数据结构概览 0代表存在&#xff0c;1代表不存在。 1表示删除成功&#xff0c;0表示失败。 查看类型&#xff0c;默认string类型。 也可以设置set类型。 list类型。 查看key的过期时间&#xff1a; Redis6数据结构之String类型介绍和应用场景 批量设置&#xff1a; …...

【Spring Cloud】关于Nacos配置管理的详解介绍

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《Spring Cloud》。&#x1f3af;&#x1f3af; &am…...

基于Java SSM框架实现校园网络维修系统项目【项目源码】

基于java的SSM框架实现校园网络维修系统演示 java简介 Java主要采用CORBA技术和安全模型&#xff0c;可以在互联网应用的数据保护。它还提供了对EJB&#xff08;Enterprise JavaBeans&#xff09;的全面支持&#xff0c;java servlet API&#xff0c;JSP&#xff08;java serve…...

项目框架构建之3:Nuget服务器的搭建

本文是“项目框架构建”系列之3&#xff0c;本文介绍一下Nuget服务器的搭建&#xff0c;这是一项简单的工作&#xff0c;您或许早已会了。 1.打开vs2022创建Asp.net Web应用程序 框架选择.net framework4.8&#xff0c;因为nuget服务器只支持.net framework。 2.选择空项目和保…...

外包干了1个月,技术退步一大半。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入广州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…...

167. 木棒(dfs剪枝,经典题)

167. 木棒 - AcWing题库 乔治拿来一组等长的木棒&#xff0c;将它们随机地砍断&#xff0c;使得每一节木棍的长度都不超过 50 个长度单位。 然后他又想把这些木棍恢复到为裁截前的状态&#xff0c;但忘记了初始时有多少木棒以及木棒的初始长度。 请你设计一个程序&#xff0…...

用HTML的原生语法实现两个div子元素在同一行中排列

代码如下&#xff1a; <div id"level1" style"display: flex;"><div id"level2-1" style"display: inline-block; padding: 10px; border: 1px solid #ccc; margin: 5px;">这是第一个元素。</div><div id"…...

C++进阶--map和set的介绍及使用

map和set的介绍及使用 一、关联式容器与键值对关联式容器键值对pair树形结构的关联式容器 二、set2.1 set的介绍2.2 set的使用2.2.1 set的模板参数列表2.2.2 set的构造2.2.3 set的迭代器2.2.4 set的容量2.2.5 set修改操作2.2.6 set的使用举例 三、multiset3.1 multiset的介绍3.…...

MIML-DA

图3呢&#xff1f;且作者未提供代码...

[ROS2 Foxy]#1.3 安装使用 turtlesim

官网教程: https://docs.ros.org/en/foxy/Tutorials/Turtlesim/Introducing-Turtlesim.html 1.turtlesim安装和使用 turtlesim是一个轻量级的模拟程序,用来学习ROS2 .通过turtlesim来介绍ROS2在一个基础的水平上都要做了那些事,以此让我们了解将来在真的 robot或者模拟器上使用…...

嵌入式培训机构四个月实训课程笔记(完整版)-Linux系统编程第三天-Linux进程(物联技术666)

更多配套资料CSDN地址:点赞+关注,功德无量。更多配套资料,欢迎私信。 物联技术666_嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记-CSDN博客物联技术666擅长嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记,等方面的知识,物联技术666关注机器学习,arm开发,物联网,嵌入式硬件,单片机…...

1-01初识C语言

一、概述 C语言是贝尔实验室的Ken Thompson&#xff08;肯汤普逊&#xff09;、Dennis Ritchie&#xff08;丹尼斯里奇&#xff09;等人开发的UNIX 操作系统的“副产品”&#xff0c;诞生于1970年代初。 Thompson和Ritchie共同创作完成了Unix操作系统&#xff0c;他们都被称为…...

Python字符串

定义字符串 Python中要定义一个字符串&#xff0c;有比较多的一种方式。 示例代码&#xff1a; s "你好&#xff0c;张大鹏" print(s, type(s))s 你好&#xff0c;张大鹏 print(s, type(s))s """你好&#xff0c;张大鹏""" prin…...

PHP 基础编程 1

文章目录 前后端交互尝试php简介php版本php 基础语法php的变量前后端交互 - 计算器体验php数据类型php的常量和变量的区别php的运算符算数运算符自增自减比较运算符赋值运算符逻辑运算 php的控制结构ifelseelse if 前后端交互尝试 前端编程语言&#xff1a;JS &#xff08;Java…...

Android studio BottomNavigationView 应用设计

一、新建Bottom Navigation Activity项目: 二、修改bottom_nav_menu.xml: <itemandroid:id="@+id/navigation_beijing"android:icon="@drawable/ic_beijing_24dp"android:title="@string/title_beijing" /><itemandroid:id="@+i…...

51单片机串行口相关知识

51单片机串行口相关知识 串行通信概念 计算机与外部通信方式就两种&#xff1a; 并行通信串行通信 两种通信方式的特点以及适用场景&#xff1a; 名称特点适用场景并行通信速度快&#xff0c;效率高&#xff0c;成本高适合短距离高速通信&#xff0c;如计算机内部各硬件之…...

IDEA 每次新建工程都要重新配置 Maven的解决方案

文章目录 IDEA 每次新建工程都要重新配置 Maven 解决方案一、选择 File -> New Projects Setup -> Settingsfor New Projects…二、选择 Build,Execution,Deployment -> Build Tools -> Maven IDEA 每次新建工程都要重新配置 Maven 解决方案 DEA 每次新建工程都要…...

SecOC中新鲜度值和MAC都按照完整的值来生成,但是在发送和认证的时候只会截取一部分。这边截取的部分一般取多长?由什么参数设定?

新鲜度值(Freshness Value, FV)和消息验证码(Message Authentication Code, MAC)是SecOC协议中用于保证数据的真实性和新鲜度的重要信息。它们的长度取决于不同的因素,如加密算法、安全级别、通信带宽等。 一般来说,FV和MAC的长度越长,安全性越高,但也会占用更多的通信…...

信源编码与信道转移矩阵

目录 一. 信息论模型 二. 点对点通信模型 三. 信源编码 四. 信道转移矩阵 4.1 二进制对称信道 4.2 二进制擦除信道 五. 小结 &#xff08;1&#xff09;信道直射与反射 &#xff08;2&#xff09;信道散射 &#xff08;3&#xff09; 信道时变性 一. 信息论模型 194…...

React 实现拖放功能

介绍 本篇文章将会使用react实现简单拖放功能。 样例 布局侧边栏拖放 LayoutResize.js import React, {useState} from "react"; import { Button } from "antd"; import "./LayoutResize.css";export const LayoutResize () > {const […...

马克思主义基本原理笔记

马克思主义哲学、政治经济学、科学社会主义理论 哲学 马克思主义中国化的理论成果&#xff1a;毛泽东思想、邓小平理论、三个代表重要思想、科学发展观 物质和意识哪个是本原&#xff0c;是哲学的基本问题 辩证法认为世界上的事物都是相互联系的、运动发展的&#xff0c;形…...

环球旅行社网站建设规划书论文/百度推广最简单方法

当类似Bash的脚本以二进制形式执行而没有shebang时&#xff0c;如何确定由谁执行&#xff1f;我猜想 使用 shebang运行普通脚本是由binfmt_scriptLinux模块处理的&#xff0c;该模块检查shebang&#xff0c;解析命令行并运行指定的脚本解释器。但是&#xff0c;如果有人在没有脚…...

做网站最简单/软文广告范例大全

目录第一章 Discord账号注册第二章 Discord创建服务器第三章 Discord创建机器人3.1、创建应用3.2、创建机器人3.3、配置机器人3.4、添加机器人第四章 Discord机器人开发准备4.1、推荐资料4.2、创建工程4.3、添加依赖4.4、获取Token4.5、编写主类第五章 Discord机器人开发初级5.…...

wordpress安装好后怎么用/seo查询官方网站

华数tv电视版是华数针对智能电视打造的视频应用&#xff0c;安装了华数TV的智能电视可享受免费高清正版电影、电视剧内容。华数TV实时更新最新的院线大片&#xff0c;与电视台同步上线最新剧集内容&#xff0c;以高清影像、最新内容让用户获得最极致的影音体验。华数TV视频客户…...

网站搭建公司官网/新版阿里指数官网

1、Oracle中可以把查询的结果根据结果集中的表结构和数据形成一张新表。 CREATE TABLE 表名 AS SELECT语句&#xff0c;例如&#xff1a; CREATE TABLE INFOS1 AS SELECT * FROM INFOS; 使用上面命令创建的新表中&#xff0c;不存在任何约束&#xff0c;并且把查询的数据一起插…...

西安市建设和住房保障局网站/如何优化关键词提升相关度

正如大家在之前公告中所看到的&#xff0c;多个SAP应用程序已获得认证可在 Azure虚拟机中运行&#xff0c;未来还会有更多 SAP应用程序获得认证。对于希望在 Azure中运行 SAP应用程序的客户来说&#xff0c;这是个激动人心的进展&#xff0c;更多详情&#xff0c;请单击此处。在…...

外贸询盘网站/百度推广登陆平台登录

C 循环 有的时候&#xff0c;可能需要多次执行同一块代码。一般情况下&#xff0c;语句是顺序执行的&#xff1a;函数中的第一个语句先执行&#xff0c;接着是第二个语句&#xff0c;依此类推。 编程语言提供了允许更为复杂的执行路径的多种控制结构。 循环语句允许我们多次…...