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

工业数学模型——高炉煤气发生量预测(三)

1、工业场景

冶金过程中生产的各种煤气,例如高炉煤气、焦炉煤气、转炉煤气等。作为重要的副产品和二次能源,保证它们的梯级利用和减少放散是煤气能源平衡调控的一项紧迫任务,准确的预测煤气的发生量是实现煤气系统在线最优调控的前提。

2、数学模型

本次研究主要采用了长短记忆模型(LSTM)预测了正常工况下的高炉煤气发生量。后续研究方向希望将正常工况扩展到变化工况条件下,例如休风、减产、停产、检修等条件下煤气发生量,并引入更多特征维度,例如:焦比、煤比、风量、富氧、风温、风压、炉内压差等。下面重点介绍一下LSTM网络结构。

长短期记忆网络(LSTM,Long Short-Term Memory)是一种时间循环神经网络,是为了解决一般的RNN(循环神经网络)存在的长期依赖问题而专门设计出来的,所有的RNN都具有一种重复神经网络模块的链式形式。
在这里插入图片描述这张图片是经典的LSTM网络结构的图片,但是不好理解,图片把多维的空间结构压缩成了二维图片,所以需要大家脑补一下,回放到立体空间中去理解。相对比RNN 通过时间步骤地更新隐藏状态和输出结果。而LSTM 通过输入门、遗忘门和输出门来控制隐藏状态的更新和输出。在这里不过多的去讲解模型结构,大家可以从网上了解一下,LSTM网络模型作为世纪霸主被广泛应用于自然语言处理、语音识别、图像处理等领域。总之很厉害!

3、数据准备

本次数据收集了1#高炉从4月12日0点到4月16日0点72小时的煤气累计发生量数据,时间间隔为60000ms也就是1分钟一次点位数据,通过计算获取5760个分钟级的煤气发生量数据。
如图:第一个字段是数采时序库中的点位标识,第二个字段是时间,第三个字段是当前煤气发生量累计值,第四个字段是计算获得的当前分钟内煤气发生量。

在这里插入图片描述

4、模型构建

class LSTM(nn.Module):"""LSMT网络搭建"""def __init__(self, input_size, hidden_size, num_layers, output_size, batch_size):super().__init__()self.input_size = input_sizeself.hidden_size = hidden_sizeself.num_layers = num_layersself.output_size = output_sizeself.num_directions = 1  # 单向LSTMself.batch_size = batch_sizeself.lstm = nn.LSTM(self.input_size, self.hidden_size, self.num_layers, batch_first=True)self.linear = nn.Linear(self.hidden_size, self.output_size)def forward(self, input_seq):batch_size, seq_len = input_seq.shape[0], input_seq.shape[1]h_0 = torch.randn(self.num_directions * self.num_layers, self.batch_size, self.hidden_size)c_0 = torch.randn(self.num_directions * self.num_layers, self.batch_size, self.hidden_size)output, _ = self.lstm(input_seq, (h_0, c_0))pred = self.linear(output)pred = pred[:, -1, :]return pred

5、模型训练

①数据预处理:加载数据文件,原始数据文件为csv(通过1#高炉84小时内煤气发生量累计值,时间间隔为60000ms,计算出84小时内每分钟的发生量)将数据分为训练集:验证集:测试集=3:1:1。

def load_data(file_name):"""加载数据文件,原始数据文件为csv(通过1#高炉24小时内煤气发生量累计值,时间间隔为60000ms,计算出24小时内每分钟的发生量):param file_name csv文件的绝对路径:return 训练集、验证集、测试集、训练集中最大值、训练集中最小值训练集:验证集:测试集=3:1:1"""dataset = pd.read_csv('D:\\LIHAOWORK\\' + file_name, encoding='gbk')train = dataset[:int(len(dataset) * 0.6)]val = dataset[int(len(dataset) * 0.6):int(len(dataset) * 0.8)]test = dataset[int(len(dataset) * 0.8):len(dataset)]max, nin = np.max(train[train.columns[3]]), np.min(train[train.columns[3]])  # 分钟内发生量是csv中第四个字段return train, val, test, max, nin

②数据组装:把数据组装成训练、验证、测试需要的格式。实质是90个顺序数据为一组作为输入值x,第91个作为真实发生值y,如此循环。

def process_data(data, batch_size, shuffle, m, n, k):"""数据处理:param data 待处理数据:param batch_size 批量大小:param shuffle 是否打乱:param m 最大值:param n 最小值:param k 序列长度:return 处理好的数据"""data_3 = data.iloc[0:, [3]].to_numpy().reshape(-1)  #data_3 = data_3.tolist()data = data.values.tolist()data_3 = (data_3 - n) / (m - n)feature = []label = []for i in range(len(data) - k):train_seq = []train_label = []for j in range(i, i + k):x = [data_3[j]]train_seq.append(x)train_label.append(data_3[i + k])feature.append(train_seq)label.append(train_label)feature_tensor = torch.FloatTensor(feature)label_tensor = torch.FloatTensor(label)data = TensorDataset(feature_tensor, label_tensor)data_loader = DataLoader(dataset=data, batch_size=batch_size, shuffle=shuffle, num_workers=0, drop_last=True)return data_loader

③模型训练:输入大小为1;隐藏层大小为128,隐藏层数为1,输出大小为1,批量大小为5,学习率为0.01,训练次数3。

def train(Dtr, Val, path):"""训练:param Dtr 训练集:param Val 验证集:param path 模型保持路劲"""input_size = 1hidden_size = 128num_layers = 1output_size = 1epochs = 5model = LSTM(input_size, hidden_size, num_layers, output_size, batch_size=5)loss_function = nn.MSELoss()optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=1e-4)# optimizer = torch.optim.SGD(model.parameters(), lr=0.05, momentum=0.9, weight_decay=1e-4)scheduler = StepLR(optimizer, step_size=30, gamma=0.1)# start trainingfor epoch in tqdm(range(epochs)):train_loss = []for (seq, label) in Dtr:y_pred = model(seq)loss = loss_function(y_pred, label)train_loss.append(loss.item())optimizer.zero_grad()loss.backward()optimizer.step()scheduler.step()# validationmodel.eval()val_loss = []for seq, label in Val:y_pred = model(seq)loss = loss_function(y_pred, label)val_loss.append(loss.item())print('epoch {:03d} train_loss {:.8f} val_loss {:.8f}'.format(epoch, np.mean(train_loss), np.mean(val_loss)))model.train()state = {'models': model.state_dict()}torch.save(state, path)

训练过程如下:
在这里插入图片描述

④模型测试:

def test(Dte, path, m, n):"""测试:param Dte 测试集:param path 模型:param m 最大值:param n 最小值"""pred = []y = []input_size = 1hidden_size = 128num_layers = 1output_size = 1model = LSTM(input_size, hidden_size, num_layers, output_size, batch_size=5)model.load_state_dict(torch.load(path)['models'])model.eval()for (seq, target) in tqdm(Dte):y.extend(target)with torch.no_grad():y_pred = model(seq)pred.extend(y_pred)y, pred = np.array(y), np.array(pred)y = (m - n) * y + npred = (m - n) * pred + n# 出图x = [i for i in range(len(y))]x_smooth = np.linspace(np.min(x), np.max(x), 1000)y_smooth = make_interp_spline(x, y)(x_smooth)plt.plot(x_smooth, y_smooth, c='green', marker='*', ms=1, alpha=1, label='true')y_smooth = make_interp_spline(x, pred)(x_smooth)plt.plot(x_smooth, y_smooth, c='red', marker='o', ms=1, alpha=1, label='pred')plt.grid(axis='y')plt.legend()plt.show()

直接对比图:红色线为模型在测试数据集上的预测值,绿色线为真实的发生值。
在这里插入图片描述有点密密麻麻,我们可以看一下局部
在这里插入图片描述在这里插入图片描述⑤滚动测试30分钟内发生值,利用前90分钟的真实发生值预测第91分钟的发生值,再将第91分钟的发生值加入到输入中,预测第92分钟的发生值,以此类推,预测30分钟内的高炉煤气发生量。

def test_rolling(Dte, path, m, n):"""滚动测试,预测30条:param Dte 测试集:param path 模型:param m 最大值:param n 最小值"""pred = []y = []input_size = 1hidden_size = 128num_layers = 1output_size = 1model = LSTM(input_size, hidden_size, num_layers, output_size, batch_size=1)model.load_state_dict(torch.load(path)['models'])model.eval()i = 0  # 控制滚动预测的长度,这里计划通过前90分钟内的发生量预测后30分钟内的发生量for (seq, target) in tqdm(Dte):y.extend(target)with torch.no_grad():seq = seq.numpy().tolist()[0]seq.extend(pred)  # 预测值追加到后面seq = seq[-90:]   # 截取后90条数据,滚动预测seq = torch.tensor(seq).resize(1, 90, 1)y_pred = model(seq)pred.extend(y_pred)i = i + 1if i >= 30:  # 控制滚动预测的长度,这里计划通过前90分钟内的发生量预测后30分钟内的发生量breaky, pred = np.array(y), np.array(pred)y = (m - n) * y + npred = (m - n) * pred + n# 出图x = [i for i in range(len(y))]x_smooth = np.linspace(np.min(x), np.max(x), 1000)y_smooth = make_interp_spline(x, y)(x_smooth)plt.plot(x_smooth, y_smooth, c='green', marker='*', ms=1, alpha=1, label='true')y_smooth = make_interp_spline(x, pred)(x_smooth)plt.plot(x_smooth, y_smooth, c='red', marker='o', ms=1, alpha=1, label='pred')plt.grid(axis='y')plt.legend()plt.show()

出图
在这里插入图片描述有点过分拟合
调整参数num_layers = 2 增加dropout=0.3 后
在这里插入图片描述整体效果不是很理想,可能再调一下参会好一些。
目前的完整代码如下:

import pandas as pd
import numpy as np
import torch
from matplotlib import pyplot as plt
from scipy.interpolate import make_interp_spline
from torch import nn
from torch.optim.lr_scheduler import StepLR
from torch.utils.data import DataLoader, TensorDataset
from tqdm import tqdmdef load_data(file_name):"""加载数据文件,原始数据文件为csv(通过1#高炉24小时内煤气发生量累计值,时间间隔为60000ms,计算出24小时内每分钟的发生量):param file_name csv文件的绝对路径:return 训练集、验证集、测试集、训练集中最大值、训练集中最小值训练集:验证集:测试集=3:1:1"""dataset = pd.read_csv('D:\\LIHAOWORK\\' + file_name, encoding='gbk')train = dataset[:int(len(dataset) * 0.6)]val = dataset[int(len(dataset) * 0.6):int(len(dataset) * 0.8)]test = dataset[int(len(dataset) * 0.8):len(dataset)]max, nin = np.max(train[train.columns[3]]), np.min(train[train.columns[3]])  # 分钟内发生量是csv中第四个字段return train, val, test, max, nindef process_data(data, batch_size, shuffle, m, n, k):"""数据处理:param data 待处理数据:param batch_size 批量大小:param shuffle 是否打乱:param m 最大值:param n 最小值:param k 序列长度:return 处理好的数据"""data_3 = data.iloc[0:, [3]].to_numpy().reshape(-1)  #data_3 = data_3.tolist()data = data.values.tolist()data_3 = (data_3 - n) / (m - n)feature = []label = []for i in range(len(data) - k):train_seq = []train_label = []for j in range(i, i + k):x = [data_3[j]]train_seq.append(x)train_label.append(data_3[i + k])feature.append(train_seq)label.append(train_label)feature_tensor = torch.FloatTensor(feature)label_tensor = torch.FloatTensor(label)data = TensorDataset(feature_tensor, label_tensor)data_loader = DataLoader(dataset=data, batch_size=batch_size, shuffle=shuffle, num_workers=0, drop_last=True)return data_loaderclass LSTM(nn.Module):"""LSMT网络搭建"""def __init__(self, input_size, hidden_size, num_layers, output_size, batch_size):super().__init__()self.input_size = input_sizeself.hidden_size = hidden_sizeself.num_layers = num_layersself.output_size = output_sizeself.num_directions = 1  # 单向LSTMself.batch_size = batch_sizeself.lstm = nn.LSTM(self.input_size, self.hidden_size, self.num_layers, dropout=0.3, batch_first=True)self.linear = nn.Linear(self.hidden_size, self.output_size)def forward(self, input_seq):batch_size, seq_len = input_seq.shape[0], input_seq.shape[1]h_0 = torch.randn(self.num_directions * self.num_layers, self.batch_size, self.hidden_size)c_0 = torch.randn(self.num_directions * self.num_layers, self.batch_size, self.hidden_size)output, _ = self.lstm(input_seq, (h_0, c_0))pred = self.linear(output)pred = pred[:, -1, :]return preddef train(Dtr, Val, path):"""训练:param Dtr 训练集:param Val 验证集:param path 模型保持路劲"""input_size = 1hidden_size = 128num_layers = 2output_size = 1epochs = 3model = LSTM(input_size, hidden_size, num_layers, output_size, batch_size=5)loss_function = nn.MSELoss()optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=1e-4)# optimizer = torch.optim.SGD(model.parameters(), lr=0.05, momentum=0.9, weight_decay=1e-4)scheduler = StepLR(optimizer, step_size=30, gamma=0.1)# start trainingfor epoch in tqdm(range(epochs)):train_loss = []for (seq, label) in Dtr:y_pred = model(seq)loss = loss_function(y_pred, label)train_loss.append(loss.item())optimizer.zero_grad()loss.backward()optimizer.step()scheduler.step()# validationmodel.eval()val_loss = []for seq, label in Val:y_pred = model(seq)loss = loss_function(y_pred, label)val_loss.append(loss.item())print('epoch {:03d} train_loss {:.8f} val_loss {:.8f}'.format(epoch, np.mean(train_loss), np.mean(val_loss)))model.train()state = {'models': model.state_dict()}torch.save(state, path)def test(Dte, path, m, n):"""测试:param Dte 测试集:param path 模型:param m 最大值:param n 最小值"""pred = []y = []input_size = 1hidden_size = 128num_layers = 2output_size = 1model = LSTM(input_size, hidden_size, num_layers, output_size, batch_size=5)model.load_state_dict(torch.load(path)['models'])model.eval()for (seq, target) in tqdm(Dte):y.extend(target)with torch.no_grad():y_pred = model(seq)pred.extend(y_pred)y, pred = np.array(y), np.array(pred)y = (m - n) * y + npred = (m - n) * pred + n# 出图x = [i for i in range(len(y))]x_smooth = np.linspace(np.min(x), np.max(x), 1000)y_smooth = make_interp_spline(x, y)(x_smooth)plt.plot(x_smooth, y_smooth, c='green', marker='*', ms=1, alpha=1, label='true')y_smooth = make_interp_spline(x, pred)(x_smooth)plt.plot(x_smooth, y_smooth, c='red', marker='o', ms=1, alpha=1, label='pred')plt.grid(axis='y')plt.legend()plt.show()def test_rolling(Dte, path, m, n):"""滚动测试,预测30条:param Dte 测试集:param path 模型:param m 最大值:param n 最小值"""pred = []y = []input_size = 1hidden_size = 128num_layers = 2output_size = 1model = LSTM(input_size, hidden_size, num_layers, output_size, batch_size=1)model.load_state_dict(torch.load(path)['models'])model.eval()i = 0  # 控制滚动预测的长度,这里计划通过前90分钟内的发生量预测后30分钟内的发生量for (seq, target) in tqdm(Dte):y.extend(target)with torch.no_grad():seq = seq.numpy().tolist()[0]seq.extend(pred)  # 预测值追加到后面seq = seq[-90:]   # 截取后90条数据,滚动预测seq = torch.tensor(seq).resize(1, 90, 1)y_pred = model(seq)pred.extend(y_pred)i = i + 1if i >= 30:  # 控制滚动预测的长度,这里计划通过前90分钟内的发生量预测后30分钟内的发生量breaky, pred = np.array(y), np.array(pred)y = (m - n) * y + npred = (m - n) * pred + n# 出图x = [i for i in range(len(y))]x_smooth = np.linspace(np.min(x), np.max(x), 1000)y_smooth = make_interp_spline(x, y)(x_smooth)plt.plot(x_smooth, y_smooth, c='green', marker='*', ms=1, alpha=1, label='true')y_smooth = make_interp_spline(x, pred)(x_smooth)plt.plot(x_smooth, y_smooth, c='red', marker='o', ms=1, alpha=1, label='pred')plt.grid(axis='y')plt.legend()plt.show()if __name__ == '__main__':Dtr, Val, Dte, m, n = load_data("4.csv")Dtr = process_data(Dtr, 5, False, m, n, 90)Val = process_data(Val, 5, False, m, n, 90)#Dte = process_data(Dte, 5, False, m, n, 90)Dte = process_data(Dte, 1, False, m, n, 90)train(Dtr, Val, "D:\\LIHAOWORK\\model.pth")#test(Dte, "D:\\LIHAOWORK\\model.pth", m, n)test_rolling(Dte, "D:\\LIHAOWORK\\model.pth", m, n)

相关文章:

工业数学模型——高炉煤气发生量预测(三)

1、工业场景 冶金过程中生产的各种煤气,例如高炉煤气、焦炉煤气、转炉煤气等。作为重要的副产品和二次能源,保证它们的梯级利用和减少放散是煤气能源平衡调控的一项紧迫任务,准确的预测煤气的发生量是实现煤气系统在线最优调控的前提。 2、…...

pnpm - Failed to resolve loader: cache-loader. You may need to install it.

起因 工作原因需要研究 vue-grid-layout 的源码,于是下载到本地。因为我习惯使用 pnpm,所以直接用 pnpm i 安装依赖,npm run serve 启动失败。折腾了一番没成功。 看到源码里有 yarn.lock,于是重新用 yarn install 安装依赖&…...

CSS transition和animation的用法和区别

Transition和Animation在CSS中都是用于实现元素状态变化的效果,但它们在用法和特性上存在明显的区别。 Transition transition是过度属性,主要强调的是元素状态的过渡效果。 它通常用于在元素的状态发生变化时,平滑地过渡到一个新的状态。…...

书籍推荐(附上每本书的看点)

1、《FPGA深度解析》,这本书的FIFO部分我觉得讲得很好; 2、《verilog数字系统设计教程》,夏宇闻老师的蓝皮书,这本书里包含很多考试知识点; 3、《SOC设计方法和实现》郭炜老师写的,我觉得他的低功耗设计讲得很好; 《高级FPGA设计结…...

LLM理解v1

答疑 什么是知识库? LLM(Large Language Models,大型语言模型)如GPT系列,通常是基于海量的文本数据进行训练的。它们通过分析和理解这些数据来生成回答、撰写文章、解决问题等。当我们提到LLM的“本地知识库”时&…...

ubuntu 22.04 -- cmake安装

安装方式一:源码安装 1、下载安装包 官网下载:下载链接:Download CMake 也可以使用命令行下载 wget https://github.com/Kitware/CMake/releases/download/v3.26.5/cmake-3.26.5.tar.gz2、解压并安装 # 1、解压 tar -zxvf cmake-3.26.5.…...

字符串算法题(第二十四天)

344. 反转字符串 题目 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须**原地修改输入数组**、使用 O(1) 的额外空间解决这一问题。 示例 1: 输入&#xff1…...

【Linux】应用层协议序列化和反序列化

欢迎来到Cefler的博客😁 🕌博客主页:折纸花满衣 🏠个人专栏:题目解析 🌎推荐文章:C【智能指针】 前言 在正式代码开始前,会有一些前提知识引入 目录 👉🏻序列…...

使用Canal同步MySQL 8到ES中小白配置教程

🚀 使用Canal同步MySQL 8到ES中小白配置教程 🚀 文章目录 🚀 使用Canal同步MySQL 8到ES中小白配置教程 🚀**摘要****引言****正文**📘 第1章:初识Canal1.1 Canal概述1.2 工作原理解析 📘 第2章&…...

关于部署ELK和EFLK的相关知识

文章目录 一、ELK日志分析系统1、ELK简介1.2 ElasticSearch1.3 Logstash1.4 Kibana(展示数据可视化界面)1.5 Filebeat 2、使用ELK的原因3、完整日志系统的基本特征4、ELK的工作原理 二、部署ELK日志分析系统1、服务器配置2、关闭防火墙3、ELK ElasticSea…...

实验室信息系统源码 saas模式java+.Net Core版开发的云LIS系统全套源码可二次开发有演示

实验室信息系统源码 saas模式java.Net Core版开发的云LIS系统全套源码可二次开发有演示 一、技术框架 技术架构:Asp.NET CORE 3.1 MVC SQLserver Redis等 开发语言:C# 6.0、JavaScript 前端框架:JQuery、EasyUI、Bootstrap 后端框架&am…...

PCB---Design Entry cis 绘图 导出

修改纸张大小: 画图前准备:导入 画图: 习惯: 电源朝上 地朝下 配置pbc_footprint编号: 都配置好编号就可以导出了 导出:...

vue 一键更换主题颜色

这里提供简单的实现步骤,具体看自己怎么加到项目中 我展示的是vue2 vue3同理 在 App.vue 添加 入口处直接修改 #app { // 定义的全局修改颜色变量--themeColor:#008cff; } // 组件某些背景颜色需要跟着一起改变,其他也是同理 /deep/ .ant-btn-primar…...

WebKit内核游览器

WebKit内核游览器 基础概念游览器引擎Chromium 浏览器架构Webkit 资源加载这里就不得不提到http超文本传输协议这个概念了: 游览器多线程HTML 解析总结 基础概念 百度百科介绍 WebKit 是一个开源的浏览器引擎,与之相对应的引擎有Gecko(Mozil…...

Qt 拖放功能详解:理论与实践并举的深度指南

拖放(Drag and Drop)作为一种直观且高效的用户交互方式,在现代图形用户界面中扮演着重要角色。Qt 框架提供了完善的拖放支持,允许开发者在应用程序中轻松实现这一功能。本篇博文将详细阐述Qt拖放机制的工作原理,结合详…...

Springboot+Vue项目-基于Java+MySQL的企业客户管理系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…...

【Linux学习】Linux指令(四)

文章标题 🚀zip/unzip指令:🚀tar指令(重要):🚀uname –r指令:🚀关机指令🚀几个常用操作 🚀zip/unzip指令: zip 与 unzip的安装 yum i…...

阿里云服务器 使用Certbot申请免费 HTTPS 证书及自动续期

前言 Certbot是一款免费且开源的自动化安全证书管理工具,由电子前沿基金会(EFF)开发和维护,是在Linux、Apache和Nginx服务器上配置和管理SSL/TLS证书的一种机制。Certbot可以自动完成域名的认证并安装证书。 一、 安装软件 1.1…...

统一SQL-number/decimal/dec/numeric转换

统一SQL介绍 https://www.light-pg.com/docs/LTSQL/current/index.html 源和目标 源数据库:Oracle 目标数据库:Postgresql,TDSQL-MySQL,达梦8,LightDB-Oracle 操作目标 通过统一SQL,将Oracle中的numb…...

软件测试入门学习笔记

系统测试流程规范 一.研发模型 1.瀑布模型 从可行性研究(或系统分析)开始,需求 2.增量迭代模型 3.敏捷开发模型 二.质量模型...

31. 下一个排列

题目描述 整数数组的一个排列 就是将其所有成员以序列或线性顺序排列。 例如,arr [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的下一个排列是指其整数的下一个字典序更大的排列。更正式地&…...

Android笔记: mkdirs不生效失败

Manifest已经配置权限,代码中也动态获取权限,mkdirs一直返回false File.mkdirs()方法创建文件夹失败 1、动态申请读写权限 <!--SDCard写权限--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!--SDCard读权…...

需要添加的硬币的最小数量(Lc2952)——贪心+构造

给你一个下标从 0 开始的整数数组 coins&#xff0c;表示可用的硬币的面值&#xff0c;以及一个整数 target 。 如果存在某个 coins 的子序列总和为 x&#xff0c;那么整数 x 就是一个 可取得的金额 。 返回需要添加到数组中的 任意面值 硬币的 最小数量 &#xff0c;使范围 …...

军工保密资质介绍及申请要求

军工保密资质介绍 军工保密资质是指国家对从事军工研发、生产、销售等活动的企事业单位进行的一种资质认证。该资质的核心目标是保护国家军事机密和军事技术秘密&#xff0c;确保国家安全和国防利益。军工保密资质的认证标准非常严格&#xff0c;涉及企业的安全管理、技术保密…...

ES6的编程风格

ES6 提出了两个新的声明变量的命令&#xff1a;let和const。其中&#xff0c;let完全可以取代var&#xff0c;因为两者语义相同&#xff0c;而且let没有副作用。 var命令存在变量提升效用&#xff0c;let命令没有这个问题 if (true) {console.log(x); // ReferenceErrorlet x…...

springboot 载入自定义的yml文件转DTO

json解析的pom引入 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-json</artifactId><version>5.8.20</version></dependency>resources目录下的my-data.yml project:data:- name: service-genbase-package:…...

webpack-(plugin,本地服务器,路径别名,安装vue)

安装vue npm i vue-loader -D npm i vue 编写一个vue文件&#xff1a; 在index.html中设置 一个id为app的div 将vue文件挂载到app中 vue比较特殊&#xff0c;除了使用loader外&#xff0c;还使用了plugin const path require("path"); const { VueLoaderPlugin …...

http请求头导致了dial tcp:lookup xxxx on 10.43.0.10:53 no sunch host

事实证明人有的时候也不能太偷懒&#xff0c;太偷懒容易给自己埋坑。 问题的背景&#xff1a; web端调用服务A&#xff0c;服务A异步调用服务B。服务A有四个场景需要调用服务B&#xff0c;所以&#xff0c;服务A中封装了一个公用的方法&#xff0c;唯一的区别是&#xff0c;场…...

想要设计放大电路,必须掌握哪些?

放大电路是电子系统中的核心组成部分&#xff0c;其设计好坏将直接影响到整个系统的性能&#xff0c;对电子工程师来说&#xff0c;在设计放大电路时&#xff0c;必须掌握且关注多方面&#xff0c;以此确保电路的稳定性和放大效果&#xff0c;那么需要注意哪些&#xff1f; 1、…...

每天五分钟计算机视觉:基于卷积操作完成滑动窗口的图片分类?

本文重点 我们前面学习了使用不同大小的滑动窗口来滑动图片,然后切分成许多小的图片,然后依次应用到我们已经训练好的图像分类模型中,但是这种方式效率太低了,本节课程我们学习一种新的方式,来看一下如何并行识别这些剪切的图片。 原始结构 首先我们先来看一下,如何把…...

UI设计/交互设计/视觉设计项目汇报/作品集Figma/PPT模板

作为UI设计/交互设计/视觉设计师&#xff0c;创建作品集对于向潜在客户或雇主展示您的技能、创造力和风格至关重要。以下分步指南可帮助您创建令人印象深刻的作品集&#xff1a; 选择您的最佳作品&#xff1a;选择您最强大且最相关的设计项目&#xff0c;将其纳入您的作品集。…...

25、Lua 学习笔记之三(高阶话题)

Lua 学习笔记之三 高阶话题迭代实例代码有关迭代的描述 协作线程实例代码有关协作线程的描述 高阶话题 迭代 实例代码 --迭代 local function enum(array)local index 1return function()local ret array[index]index index 1return retend endlocal function foreach(a…...

企业网盘搭建——LNMP

php包链接&#xff1a;https://pan.baidu.com/s/1RElYTQx320pN6452N_7t1Q?pwdp8gs 提取码&#xff1a;p8gs 网盘源码包链接&#xff1a;https://pan.baidu.com/s/1BaYqwruka1P6h5wBBrLiBw?pwdwrzo 提取码&#xff1a;wrzo 目录 一.手动部署 二.自动部署 一.手动部署 …...

Go语言异常处理方式

Go 语言没有传统的异常处理机制&#xff0c;如 Java、C 或 Python 中的 try-catch 语句。取而代之&#xff0c;Go 采用了基于返回错误值和 panic/recover 机制的混合模式来进行错误处理。以下是 Go 语言中处理异常&#xff08;或称错误&#xff09;的两种主要方式&#xff1a; …...

时序分析基本知识点

【FPGA开发/IC开发之时序约束最全面的归纳总结】时序路径基本概念及时序约束分析方法_时序约束指令-CSDN博客...

ELK(Elasticsearch+Logstash+Kibana)日志分析系统

目录 前言 一、ELK日志分析系统概述 1、三大组件工具介绍 1.1 Elasticsearch 1.1.1 Elasticsearch概念 1.1.2 关系型数据库和ElasticSearch中的对应关系 1.1.3 Elasticsearch提供的操作命令 1.2 Logstash 1.2.1 Logstash概念 1.2.2 Logstash的主要组件 1.2.3 Logsta…...

【投稿优惠-EI稳定检索】2024年地理信息技术与遥感测绘国际学术会议(ICGITRSM 2024)

2024 International Conference on Geographic Information Technology and Remote Sensing Mapping (ICGITRSM 2024) ●会议简介 2024年地理信息技术与遥感测绘国际学术会议将聚焦于地理信息技术及遥感测绘领域的最新发展与应用。本次会议汇聚了来自世界各地的顶尖专家和学者…...

MySQL的内外连接

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;MySQL &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容主要介绍了MySQL中的内外连接 文章目录 MySQL的内外连接…...

Pandas连接MySQL数据库

pandas是一个强大的Python工具包&#xff0c;能够快速帮助我们做很多数据处理。但是在利用pandas连接数据库时&#xff0c;也会遇到很多问题&#xff0c;在此我总结了一个相对较为简单的连接范式&#xff0c;供大家参考学习。 先上代码&#xff1a; import pandas as pd# 数据…...

2024华中杯数学建模参考思路+完整代码+后续成品论文预约

&#xff08;完整版资料获取在文末哦&#xff09; 关于24年华中杯的更新进度&#xff0c;大家可以参考我们前年比赛。 22年华中杯思路&#xff1a; 大家也可以看这一篇 A题思路 一订单包含多种货品&#xff0c;每种商品有不同的数量&#xff0c;题目没说订单的需求时间&am…...

ARM_day8:基于iic总线的通信

一、IIC总线的基本概念&#xff1a; iic总线是一种带应答的同步的、串行、半双工的通信方式&#xff0c;支持一个主机对应多个从机。它有一根SCL&#xff08;时钟线&#xff09;和一根SDA&#xff08;数据线&#xff09;组成&#xff0c;由于只有一根数据线&#xff0c;所以它是…...

33、Lua Cocos2d-x使用Luajit实现加密

项目要求对lua脚本进行加密&#xff0c;查了一下相关的资料 &#xff0c;得知lua本身可以使用luac将脚本编译为字节码(bytecode)从而实现加密&#xff0c;试了一下&#xff0c;确实可行。下面是使用原生的lua解释器编译字节码&#xff1a; 新建一个名为1.lua的文件&#xff0c;…...

spring 集成 mybatis

spring 集成 mybatis 1、spring对junit的支持1.1、对junit4的支持1.2 对junit5的支持 2、Spring6集成MyBatis3.52.1 实现步骤2.2 实现 1、spring对junit的支持 1.1、对junit4的支持 依赖 <?xml version"1.0" encoding"UTF-8"?> <project xml…...

rtpengine 的端点学习模式

端点学习模式&#xff08;endpoint-learning&#xff09; delayed|immediate|off|heuristic delayed 延迟模式&#xff0c;等待 3 秒钟&#xff0c;然后再提交到端点地址 immediate 立即模式&#xff0c;收到第一个 rtp 包之后立即学习&#xff0c;不等 3 秒 off 关闭模式…...

Windows 安装 A UDP/TCP Assistant 网络调试助手

Windows 安装 A UDP/TCP Assistant 网络调试助手 0. 引言1. 下载地址2. 安装和使用 0. 引言 需要调试一个实时在线聊天程序&#xff0c;安装一个UDP/TCP Assistant 网络调试助手&#xff0c;方便调试。 1. 下载地址 https://github.com/busyluo/NetAssistant/releases 2. 安…...

web自动化系列-selenium的3种等待方式(十一)

在ui自动化测试中&#xff0c;几乎出现问题最多的情况就是定位不到元素 &#xff0c;当你的自动化在运行过程中 &#xff0c;突然发现报错走不下去了 。很大概率就是因为找不到元素 &#xff0c;而找不到元素的一个主要原因就是页面加载慢 &#xff0c;代码运行速度快导致 。 …...

每日OJ题_完全背包④_力扣279. 完全平方数(一维和二维)

目录 力扣279. 完全平方数 问题解析 解析代码 优化代码&#xff08;相同子问题分析和滚动数组&#xff09; 力扣279. 完全平方数 279. 完全平方数 难度 中等 给你一个整数 n &#xff0c;返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数&#xff0c;其值…...

web项目中jsp页面不识别el表达式

如果使用el表达式出现下图问题 ** 解决办法 ** 这是因为maven创建项目时&#xff0c;web.xml头部声明默认是2.3&#xff0c;这个默认jsp关闭el表达式 修改web.xml文件开头的web-app的版本 <?xml version"1.0" encoding"UTF-8"?> <web-app x…...

【Python基础】字典

文章目录 [toc]什么是字典键值对示例键异常 遍历列表什么是遍历遍历字典的键keys()方法 遍历字典的值values()方法 遍历字典的键值对items()方法 字典操作增加键值对修改键值对查询键值对get()方法 删除键值对delclear()方法 个人主页&#xff1a;丷从心 系列专栏&#xff1a;…...

2024HW --> 安全产品 Powershell无文件落地攻击

在HW中&#xff0c;除了了解中间件&#xff0c;web漏洞&#xff0c;这些攻击的手法&#xff0c;还得了解应急响应&#xff0c;安全产品&#xff0c;入侵排查&#xff0c;溯源反制...... 那么今天&#xff0c;就来说一下安全产品&#xff08;安全公司我就不说了&#xff0c;这个…...

基于DEXPI标准的xml转成svg图片的测试

通过对java代码的一顿反编译&#xff0c;这个功能逐渐实现了。也打了日志&#xff0c;通过编码实现了svg的视图的裁剪大小。选择xml文件然后选择文件夹&#xff0c;程序自动进行转换&#xff0c;最后生成svg文件。 最后的xml转换后的成品如下图&#xff1a; 通过与达美盛的工具…...

WebGL软件的开发框架

WebGL&#xff08;Web Graphics Library&#xff09;是一种用于在网页浏览器中实现3D图形渲染的JavaScript API。它允许开发者利用图形处理单元&#xff08;GPU&#xff09;来实时渲染复杂的3D场景&#xff0c;从而创建出令人惊叹的交互式体验。在WebGL开发中&#xff0c;有一些…...

可视化大屏:地图都有哪些样式,看过来!

...

Stable Diffusion超详细教程!本地部署 Stable Diffusion

前言 目前市面上比较权威&#xff0c;并能用于工作中的AI绘画软件其实就两款&#xff1a; Midjourney&#xff08;MJ&#xff09;Stable-Diffusion&#xff08;SD&#xff09; MJ需要付费使用&#xff0c;而SD开源免费&#xff0c;但是上手难度和学习成本略大&#xff0c;并…...

YOLOV8环境部署(GPU版本)

一、安装&#xff43;&#xff55;&#xff44;&#xff41;和&#xff43;&#xff55;&#xff44;&#xff4e;&#xff4e; 1、安装cuda之前先打开英伟达控制面板查看自己的显卡信息 2、“帮助”—>“系统信息”—>“组件”&#xff0c;然后看第三行的信息“Nvidia …...

两步将 CentOS 6.0 原地升级并迁移至 RHEL 7.9

《OpenShift / RHEL / DevSecOps 汇总目录》 说明 本文介绍如何将一个 CentOS 6.0 的系统升级并转换迁移到 RHEL 7.9。 本文是《在离线环境中将 CentOS 7.X 原地升级并迁移至 RHEL 7.9》阶进篇。 所有被测软件的验证操作可参见上述前文中对应章节的说明。 准备 CentOS 6.…...