# Powerload-Classification-and-Prediction-System **Repository Path**: duyu09/Powerload-Classification-and-Prediction-System ## Basic Information - **Project Name**: Powerload-Classification-and-Prediction-System - **Description**: Power Load Classification and Prediction System Based on Deep Learning Algorithms. 基于深度学习算法的电力负载分类与预测系统(该项目已参加2024年第17届中国大学生计算机设计大赛4C2024) - **Primary Language**: Python - **License**: Not specified - **Default Branch**: main - **Homepage**: https://github.com/duyu09/Powerload-Classification-and-Prediction-System - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2024-12-02 - **Last Updated**: 2025-10-25 ## Categories & Tags **Categories**: mathlibs **Tags**: None ## README
### 系统设计思路
- **AI模型:** 采用级联模型结构,将任务分为分类分解与预测两个级联的模块。分类采用深度全连接神经网络模型去处理,根据时间窗的特征,实现分类;分解任务通过分类任务去实现;预测模型受生成式语言模型的启发而设计,采用了以`Transformer`结构和为核心的深度神经网络两个模型通过电器类型标签相关联。
- **系统架构:** 采用适于现代化超算服务平台的“应用分布,算力集中”云端协同架构。包含边缘设备(电能表)、分布式的后端和数据库、位于超算中心的分类与预测AI模型,以及位于移动设备的微信小程序客户端。这样的设计可以在一定程度上解决前文所提及的大规模用户并发请求造成模型无法及时推理的问题。
- **前端与后端设计:** 我们主要使用了微信开发者工具进行前端开发,波形绘制使用了ECharts库中提供的折线图组件。前台轮询查询数据。为提高性能,后端程序使用C++17构建Server,其基于单Reactor多线程架构。服务器系统核心由日志记录、线程池管理、IO多路复用、HTTP处理、缓冲区管理和阻塞队列等模块组成。HTTP请求报文通过分散读方式读入,并利用有限状态机与正则表达式进行高效解析。
| 模型工作流图 | 系统宏观架构 |
| ------ | ------ |
|
|
|
### 模型详细设计
- **分类分解模型:** 特征工程方面:先将输入的数据加窗处理,再将功率数值进行分组。接着,统计每个时间窗内落入各组的样本数量,得到频数分布。为了得到特征向量,我们对每个时间窗的频数进行归一化处理,即除以窗长。最后,使用PCA算法进行特征矩阵压缩。模型设计方面:选用全连接神经网络`FNN`,输入该时间窗对应的特征向量,输出对应电器类别的独热编码。我们使用3层全连接神经网络模型(28, 14, 7) 进行数据分类任务(7种单电器);使用3层全连接神经网络模型(84, 42, 21) 进行功率标签分解任务(21种电器两两组合)。选用模型时,我们对比了全连接网络与`GRU`(循环门控单元)的性能。经过超参数的调整,两者分别可达到91%和90%的最高准确率,也就是说,两者的效果都比较好并且相差无几。但是经过实验与上线测试说明,`GRU`由于要关注其他时间窗,其推理功耗明显大于全连接网络。另一方面,假定每个时间窗之间是互相时序不相关的,这样模型可以专注的处理每一个时间窗中的特征而做出判断,并将标签数据传给预测模型的嵌入层进一步处理,预测模型再利用时序特性进行预测,各司其职。综上两种原因而选择采用全连接网络。以下是分类模型结构示意图:
### 部署与使用方法
- **客户端:** 项目使用微信小程序作为客户端前端,只需将`WeChat_client`目录用微信开发者工具打开,然后发布或使用第三方工具打包即可。
- **分布式后端(客户端服务):** 项目使用`C++ 17`标准开发客户端服务模块后端,该程序针对`Linux`系统开发,不跨平台。使用CMake在Linux系统下构建二进制可执行文件。进入CPP_backend目录,然后执行以下参考命令:
```bash
mkdir build
cd build
cmake ..
make
```
在build目录下即会生成可执行文件`webserver`,运行时需确保`SQLite`数据库文件`powerload.db`文件位于与`webserver`相同的目录下。若不方便使用C++后台,可以使用基于Python Flask的后台代替,两者功能上完全等效,但是效率略有降低。(文件位置:`/Python_backend/app.py`)
- **分布式后端(数据计算)与 AI模型计算中心端** 该部分代码位于`Python_backend`目录下。提供基于Flask HTTP通信方案的代码组合(`app-backend.py`与`app-ai.py`)与基于`Rabbit MQ`的通信方案代码组合(`app-backend-mq.py`与`app-ai-mq.py`),可以选择其中一组成组运行,建议先启动AI模型端,再启动分布式后端。分类分解与预测模型二进制文件分别位于classify目录与prediction目录下,后端会自动调用这些模型。
- **模型训练:** 确保`dataset`目录存在于`Python_backend`目录下,`dataset`目录中包含若干`CSV`文件,该文件的文件名应为标签名(对应电器或电器组合的名称)。
执行以下命令可以分别训练分类分解模型(用时:CPU环境3分钟左右)与数值预测模型(用时:CPU环境2小时左右)。
```bash
Python ./classify/Classification_Train_v6.3.py
Python ./classify/prediction.py
```
可以根据数据集特点与其他情况,自行调整超参数,修改代码:
数值预测模型训练代码(`prediction.py`)中,以下位置的代码可能需要改动:
```python
# 下列代码位于主函数
batches, labels_batched, categories, category2filename_dict = data_process("./dataset")
model = train(batches, labels_batched, categories, category2filename_dict, num_heads=27, num_blocks=6, \
lr=0.00004, epochs=13, static_vector_len=7, total_number_categories=21)
torch.save(model, "model-large.pt")
# 下列代码位于data_process函数
data = get_data(os.path.join(directory, filename + ".csv"), skip_header=1, usecol=4)
```
分类分解模型训练代码(`Classification_Train_v6.3.py`)中,以下位置的代码可能需要改动:
```python
# 下列代码位于文件开头处
dc = r'../dataset' # 读取该目录下的所有CSV文件
model_save_path = r'Classification-Model-v6.3-2.2.keras' # 保存模型文件路径
matrix_save_path = r'Classification_feature-2.2.mat' # 特征矩阵文件路径
dict_save_path = r"label2index_dict.pkl" # 保存标签与数字编码对应的字典
pca_save_path = r"pca.pkl" # 保存PCA对象
testRate = 0.15 # 测试集占数据集的比例 0.15
frameLength = 800 # 帧长度 800
step = 800 # 统计特征步长 800
max_value = 3000000 # 功率最大值 3000000
eps = 75 # 神经网络训练迭代次数 75
lamb = 0.001 # L1正则化惩罚系数 0.001
pca_n_components = 67 # PCA保留方差的比例(信息保留程度) 0.96
es_patience = 3 # 早停阈值(检测损失函数) 3
power_column = -1 # 功率值在数据集中的字段数(-1为倒数第1个字段)
```
### 客户端GUI示例图
以下示例图中分别展示了用户登录、个人主页、实时数据波形及分类分解,以及功率数值预测波形 共4个界面。
### 项目展示视频
-----
### 著作权声明
Copyright © 2024 _The research and development group for Power Load Classification and Prediction System Based on Deep Learning Algorithm, Faculty of Computer Science & Technology, Qilu University of Technology (Shandong Academy of Sciences)_ .
齐鲁工业大学(山东省科学院)计算机科学与技术学部 “基于深度学习算法的电力负载分类与预测系统项目”研究与开发小组 保留所有权利。
- 研究与开发小组成员名单:
- **杜宇** (英语:_DU Yu_;越南语:_ĐỖ Vũ_;齐鲁工业大学(山东省科学院)计算机科学与技术学部, No.202103180009)
- **姜川** (英语:_JIANG Chuan_;越南语:_KHƯƠNG Xuyên_;齐鲁工业大学(山东省科学院)计算机科学与技术学部, No.202103180020)
- **李晓语** (英语:_LI Xiaoyu_;越南语:_LÝ Hiểu Ngữ_;齐鲁工业大学(山东省科学院)计算机科学与技术学部, No.202103180001)
- **李庆隆** (英语:_LI Qinglong_;越南语:_LÝ Khánh Long_;齐鲁工业大学(山东省科学院)计算机科学与技术学部, No.202103180027)
- **张一雯** (英语:_ZHANG Yiwen_;越南语:_TRƯƠNG Nhất Văn_;齐鲁工业大学(山东省科学院)计算机科学与技术学部, No.202103180051)
- 指导教师:
- **贾瑞祥**老师 (英语:_JIA Ruixiang_;越南语:_GIẢ Thụy Tường_;齐鲁工业大学(山东省科学院)计算机科学与技术学部, 软件工程系讲师)
- **陈静**老师 (英语:_CHEN Jing_;越南语:_TRẦN Tĩnh_;山东省计算中心(国家超级计算济南中心))
本项目基于我们自定义的开源协议(许可证)开放源代码,在您通过任何方式获得源代码前,请仔细阅读并充分理解许可证的全部内容。许可证文件为[LICENSE文件](./LICENSE)
- 其它说明:
- **本项目已参加2024年第17届中国大学生计算机设计大赛 _4C2024_ 人工智能实践赛赛道。**
- 本项目的LOGO由智谱清言`CogView`AI绘图工具绘制,用作LOGO时有修改。LOGO寓意:主体金属环象征仪表盘,我们的项目是非侵入式电力监测系统;环内的条纹象征着电力数据波形,同时它也可看作是城市里林立的高楼大厦,象征着我们的系统可以服务于城市电力系统的运转;背景是木制桌面,象征着我们的系统助力绿色发展、减少碳排放。
-----
### 特别感谢
- **齐鲁工业大学 (山东省科学院)** (英语:_Qilu University of Technology (Shandong Academy of Sciences)_;越南语:_Đại học Công nghiệp Tề Lỗ (Viện Khoa học tỉnh Sơn Đông)_)
### 友情链接
- 兰州交通大学 电子与信息工程学院