【全部更新】2025金地杯A题山西省大学生数学建模思路代码文章教学:光伏板积灰程度检测及灰尘清洗策略

完整内容请看文章最下面的推广群

我将展示完整的文章、代码和结果
在这里插入图片描述

光伏板积灰程度检测及灰尘清洗策略
摘要
随着光伏发电在新能源体系中的快速普及,其运行维护的智能化需求愈发迫切。尤其是在实际电站运行中,组件表面积灰问题对发电效率造成显著影响,如何高效识别积灰程度、评估清洗收益并制定科学的维护策略成为关键问题。本文依托四个典型光伏电站的运行与环境数据,围绕数据预处理、积灰影响评估与清洗策略优化三个核心问题展开建模研究,并提出一套具备通用性与可推广性的智能运维模型体系。
在问题一中,针对原始数据存在缺失值、粒度不统一、异常值扰动等问题,构建了一个系统化的数据清洗与处理流程。通过自动识别关键字段、使用线性插值与前后填充处理缺失项,并结合3σ法则剔除异常值,最终将所有数据重采样统一到小时级时间尺度。在此基础上,提取发电量、辐照强度及气象特征,为后续模型提供标准化高质量输入。清洗结果显示,四个电站数据完整性显著提升,趋势更加平滑,特征变量间相关性更为清晰。
在问题二中,为量化积灰对发电性能的影响,构建了积灰影响指数 DII(Dust Impact Index)模型。模型基于回归预测的理论发电值与实际观测值之间的偏差定义DII,通过线性回归方法构建发电预测器,并设定阈值触发清洗预警,可引入 LSTM、XGBoost 等非线性方法提升发电预测精度。模型验证表明,DII曲线具备良好的趋势性与区分度,能够准确标记出积灰影响显著的时间段。部分电站中DII的波动与实际发电异常高度一致,展现出良好的预警效果。
在问题三中,进一步引入电价与清洗成本构建了基于成本-收益分析的清洗决策模型。模型计算积灰导致的发电损失并转化为电费损失,与设定的清洗成本进行对比判断是否清洗。结合滚动优化实现动态清洗窗口调整. 结果显示,电站1与电站3在多个时段电费损失超过清洗成本,建议定期执行清洗操作;电站4虽然积灰指数较高,但因装机容量小、经济损失低,清洗频率应适当控制。该模型有效实现了技术指标与运维经济性的桥接,提升了实用价值。
综上所述,本文构建的“数据清洗 + DII建模 + 清洗策略优化”三阶段模型体系不仅有效解决了光伏电站积灰问题的建模难题,也为新能源智能运维系统提供了可落地、可扩展的建模范式,具有重要的工程实用价值与推广前景。

目录
摘要 1
一、 问题重述 3
1.1 问题背景 3
1.2 要解决的问题 3
二、 问题分析 5
2.1 任务一的分析 5
2.2 任务二的分析 5
2.3 任务三的分析 5
三、 问题假设 7
四、 模型原理 8
4.1 整数规划 8
4.2 XGBoost 9
4.3 随机森林 11
4.4 逻辑回归模型 12
五、 模型建立与求解 14
5.1 问题一建模与求解 14
5.2问题二建模与求解 29
5.3问题三建模与求解 34
六、 模型评价与推广 45
6.1模型的评价 45
6.1.1模型缺点 45
6.1.2模型缺点 45
6.2 模型推广 45
七、 参考文献 47
附录【自行黏贴】 48

本问题旨在从三个角度对原始数据进行处理:
数据清洗:剔除异常值,填补缺失项;
时间对齐:将多源数据统一至小时级时间刻度;
字段整合:将每个电站的发电数据、环境监测数据与天气数据整合为同一数据表。
我们首先对四个站点原始数据做可视化, 电站1可视化分析

  1. 发电量时间序列图
    日发电量整体呈现明显的季节性趋势,夏季高、冬季低;
    存在部分波动较大的时段,可能与阴雨天气或积灰有关;
    2024年12月至2025年2月发电量明显下滑,可能是积灰最严重阶段。
  2. 辐照强度趋势
    与发电量高度一致,体现出典型“正午峰值”与“季节下降”规律;
    夏季辐照强度高,达到800~1000W/m²;
    冬季明显低于400W/m²,验证发电量季节性变化与辐照直接相关。
  3. 天气因素趋势
    温度从冬季的 -20°C 到夏季的 30°C;
    湿度整体偏高,尤其在春季和夏季,可能促使积灰附着;
    风速稳定,略有季节性,有助于积灰自然脱落;
    无明显异常缺口,数据完整性良好。
  4. 发电量 vs 辐照强度散点图
    呈现良好的非线性正相关关系;右上角高密度区域表明理想状态(高辐照、高发电);低于主趋势线的点表示可能存在积灰、遮挡或故障。
    在这里插入图片描述

四个电站均呈现明显的季节变化规律,且不同程度受到数据缺失、传感器差异、气象条件影响;
发电量 vs 辐照强度的散点图对发电效率及积灰异常识别提供重要支持;
电站1整体数据质量最佳,可作为建模验证基准;后续可依据此基础,设计不同站点的 DII 模型、预警策略及清洗收益优化模型。数据清洗的高质量处理是后续构建积灰识别模型、制定清洗策略等模型的前提。
下面我们将进行模型建立步骤

  1. 数据清洗模型框架
    设原始数据为时间序列形式的数据表格:

其中,ti 表示时间戳,xij 为第 j 个传感器或指标值。
目标是将这些数据清洗并转换为小时粒度:

  1. 异常值剔除(3σ原则)
    对每个数值型变量 x,根据其样本均值 μ与标准差 σ,定义异常值判断标准:
    xi∈[μ−3σ,μ+3σ]
    若 xi 不满足该范围,则视为异常值,予以剔除处理。

  2. 缺失值填补
    对于清洗后的数据缺口,采用如下方法填补:

时间插值法(线性插值):

边界填补(前向/后向):对头尾缺失采用邻近值补全。

  1. 重采样聚合
    将原始时间戳数据对齐至每小时,以小时为单位对各指标进行平均处理:

电站1 清洗后数据可视化分析
发电量从5月到10月呈现周期性峰值,之后进入冬季显著下降,整体趋势清晰,符合太阳高度角季节性变化;
辐照强度与发电趋势几乎同步,显示数据质量良好;
气象数据如“当前温度”、“最高/最低温度”波动规律明显,日间-夜间对比强;
风速数据完整性好,具备良好建模潜力。

清洗后数据分布连贯、趋势合理;可直接用于建模 DII 指数与发电预测;是最适合作为“基准建模数据”的电站。

在这里插入图片描述

问题二
在这里插入图片描述

问题三:

# 问题三代码:基于问题二中的 DII 指数与电价模型,判断是否进行清洗,并估算清洗收益与成本

# 以电站1为示例,使用之前计算出的DII和预测发电量,评估清洗收益

# 获取电站1数据
df = merged_cleaned_data["电站1"].copy()

# 指定字段(根据实际字段名称)
power_col = '当日累计发电量kwh'
irradiance_col = '辐照强度w/m2'

# 清洗并筛选有效数据
df = df[[power_col, irradiance_col]].dropna()
df = df[df[irradiance_col] > 0]

# 重新建立预测模型
from sklearn.linear_model import LinearRegression

X = df[[irradiance_col]]
y = df[power_col]
model = LinearRegression().fit(X, y)
df['预测发电量'] = model.predict(X)

# 计算 DII 指数
df['DII'] = 1 - df[power_col] / df['预测发电量']
df['DII'] = df['DII'].clip(lower=0)

# 设置电价与清洗成本
电价 = 0.5  # 元/kWh(假设)
清洗成本 = 2 * 4998.3  # 2元/千瓦,乘以电站1装机容量

# 计算每日平均 DII
daily_dii = df['DII'].resample('D').mean()
daily_loss_ratio = daily_dii.clip(upper=1)

# 计算每日发电损失和潜在收益
daily_predicted = df['预测发电量'].resample('D').sum()
daily_actual = df[power_col].resample('D').sum()
daily_loss = (daily_predicted - daily_actual).clip(lower=0)
daily_revenue_loss = daily_loss * 电价

# 设定清洗收益判断规则
清洗建议 = daily_revenue_loss > 清洗成本

# 汇总清洗策略结果
result_df = pd.DataFrame({
    '预测发电量(kWh)': daily_predicted,
    '实际发电量(kWh)': daily_actual,
    'DII日均值': daily_dii,
    '损失电量(kWh)': daily_loss,
    '损失电费(元)': daily_revenue_loss,
    '建议清洗': 清洗建议
})

import seaborn as sns
import matplotlib.pyplot as plt

plt.figure(figsize=(12, 6))
sns.lineplot(data=result_df, y='损失电费(元)', x=result_df.index, label='每日损失电费')
plt.axhline(清洗成本, color='r', linestyle='--', label='清洗成本阈值')
plt.title("电站1 每日损失电费 vs 清洗成本")
plt.xlabel("日期")
plt.ylabel("电费损失(元)")
plt.legend()
plt.tight_layout()
plt.show()

# 返回策略结果
result_df.head(10)

在这里插入图片描述
电站 平均电费损失(元) 平均DII 建议清洗次数
0 电站1 9645.159207 0.417493 145
1 电站2 8248.369643 0.401011 86
2 电站3 8682.135888 0.436157 115
3 电站4 3849.035073 0.430949 159

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值