精华内容
下载资源
问答
  • 基于并行神经网络和遗传算法的光伏发电预测模型
  • 光伏发电预测(一)

    千次阅读 热门讨论 2018-12-30 00:26:17
    最近参加了一个光伏发电预测的比赛,第一次接触这类课题,看了很多关于光伏发电预测和负荷预测的论文,算是入了一个门。主要工作还是在数据清理上和特征工程上。做好了这两项后面的预测过程倒是比较简单。比赛要求:...

    最近参加了一个光伏发电预测的比赛,第一次接触这类课题,看了很多关于光伏发电预测和负荷预测的论文,算是入了一个门。主要工作还是在数据清理上和特征工程上。做好了这两项后面的预测过程倒是比较简单。比赛要求:利用之前若干时段的光伏发电参数,预测未来两个月的正向有功总电量。
    具体见下文。

    一、数据分析

    原始数据表 “data.csv”,提供了用户 A1-A5 的 2016 年 12 月 31 日-2018 年 1 月 1 日 瞬时有功、瞬时无功、A相电流、B 相电流、C 相电流、A 相电压、B 相电压、C 相电压、正向有功总 9 个属性的数据表,共 342768 条数据,其中正向有功为预测对象。截取其中一个月的数据图形如下图1所示,可知预测对象正向有功为累计值,呈其他 8 个属性数据为瞬时值,需对正向有功进行差分处理,转化为瞬时值。另外,每日数据为从晚至早逆序排列,也需逆序处理。

    图1 2016年12月正向有功总值变化图

    图2 2016年12月主要属性变化图

    图3 2016年12月正向有功总值差分变化图

    通过对每日采集点的频数统计,显示每日数据值小于 96 点的日期,缺失情况如图4,发现数据集中存在缺失值,需补充完整。

    图4 A1公司数据缺失日期统计

    二、算法原理

    本次预测算法,采用 python2.7.12(比赛环境要求) 编写,程序分为 LoadData.pyPredictLabel.py 两部分。

    1、LoadData.py

    LoadData.py 程序的主要功能为数据清洗,具体函数如下:
    (1)splitDataSet():主要功能是划分数据:将“data.csv”数据集按用户类型A1-A5划分为五个数据集,以便分别处理和预测。
    (2)reduceDataSet(work):主要功能是对数据进行清洗:其一,根据属性相关性计算结果剔除瞬时无功、A相电流、B相电流、C相电流、A相电压、B相电压、C相电压等7列属性,增加A相功率、B相功率和C相功率3列。其二,由于预测值正向有功是连续数据,按照缺失值等于前期值,补全所有数据缺失点,并计算每日增量,将正向有功累积值转化为瞬时值。其三,将数据表中属性值倒叙累加,得到每天0点时刻瞬时有功、A相功率、B相功率和C相功率的每天累加值,并根据初赛要求,提取所有0点时刻采集的数据。
    (3)loadDataSet(work):主要功能是提取经过数据清晰的训练数据集
    (4)loadWeatherData():主要功能是提取外部天气数据集。
    (5)normData(dataSet):主要功能是对数据进行无量纲归一化处理。
    (6)loadFutureWeatherData():主要功能是提取预测数据集的属性值(2018年8月-9月天气数据)
    (7)saveFile(work):主要功能是保存程序运行的中间数据文件

    2、PredictLabel.py

    PredictLabel.py程序的主要功能是执行样本训练和数据预测,具体函数如下:
    (1)nn_model()主要功能为利用训练样本训练神经网络模型
    (2)nn_model_weather():主要功能利用预测数据训练预测模型
    (3)predictLabel(predictData,trainData,trainLabel,lastLabel):主要功能为执行电力预测,利用训练好的模型(模型为keras中的全连接神经网络nn_model),调用预测数据,输出正向有功预测结果。
    (4)predictDataFunc(predictData,trainData,trainLabel):主要功能为执行属性预测,利用训练好的模型(模型为keras中的全连接神经网络nn_model),调用外部数据,输出属性预测结果。
    (5)concatCSV():主要功能为拼接预测数据表。

    三、方案设计

    1、数据处理

    步骤1:将原始数据划分为A1-A5五个用户数据集;
    步骤2:将用户数据集的缺失数据补全;
    步骤3:根据初赛要求,提取每日0点数据;
    步骤4:将正向有功总值进行每日增量计算,得到正向有功每日瞬时值;

    2、指标筛选

    步骤1:新增A相功率、B相功率和C相功率3列属性;
    步骤2:将瞬时有功、A相功率、B相功率和C相功率数据倒序累加得到累计值;
    步骤3:计算瞬时无功、A相电流、B相电流、C相电流、A相电压、B相电压、C相电压瞬时值和瞬时有功、A相功率、B相功率和C相功率累计值与预测对象正向有功每日瞬时值之间的相关性;
    步骤4:计算外部数据集中日平均气温、日最高气温、日最低气温、日照时长和降水量等属性指标与预测对象瞬时有功之间的相关性;
    步骤5:根据相关性结果,选择高相关性的指标形成用户电量预测数据集(具体为瞬时有功、A相功率、B相功率、C相功率);根据相关性结果,选择高相关性的指标形成瞬时有功预测数据集(具体为日平均气温、日最高气温、日最低气温、日照时长和降水量);

    3、模型优化

    步骤1:在用户电量预测数据集中,选择80%数据样本进行模型训练,以最小 MSE 为标准优化模型参数,重复10次;在瞬时有功预测数据集中,选择80%数据样本进行模型训练,以最小 MSE 为标准优化模型参数,重复10次。
    步骤2:在用户电量预测数据集中,选择剩下20%数据,带入训练好的模型中进行电量预测,计算预测结果的MESE;在瞬时有功预测数据集中,选择剩下20%数据,带入训练好的模型中进行电量预测,计算预测结果的MESE;
    步骤3:根据预测结果MSE,确定预测模型

    4、预测结果

    步骤1:将2018年8月-2018年9月的外部数据作为属性值代入瞬时有功预测模型,得到2018年8月-2018年9月的瞬时有功预测值。
    步骤2:利用步骤一中预测的2018年8月-2018年9月的瞬时有功预测值,调用另一个模型预测2018年8月-2018年9月的每天正向有功的增量的值
    步骤3:将增量累加到2018年7月31日的正向有功值,得到每天的累计正向有功值。

    四、模型效果

    使用K-交叉验证,每次取 0.8 的数据集作为样本,和 0.2 的验证集比较。
    模型1的准确率:80%以上。
    模型2:80%以上。
    最终值(累加后的)准确率:99%左右

    由于最终值是一个累加值,初始值达数千,而每天的增量范围为0-50,因此最终的预测结果非常理想。

    展开全文
  • 光伏发电预测(二)

    千次阅读 热门讨论 2018-12-30 01:06:40
    利用之前若干时段的光伏发电参数,预测未来两个月的每天15分钟一次共96个点的瞬时功率。 先对数据集模糊聚类,再用相似日得出预测日的除了瞬时有功以外的所有参数,最后用神经网络计算预测日的瞬时有功。 一、数据...

    赛题的决赛要求:
    利用之前若干时段的光伏发电参数,预测未来两个月的每天15分钟一次共96个点的瞬时功率。
    先对数据集模糊聚类,再用相似日得出预测日的除了瞬时有功以外的所有参数,最后用神经网络计算预测日的瞬时有功。

    一、数据分析

    原始数据表“data.csv”,提供了用户A1-A10的2016年7月31日-2018年7月1日的瞬时有功、瞬时无功、A相电流、B相电流、C相电流、A相电压、B相电压、C相电压、正向有功总9个属性的数据表,数据采集间隔为15分钟,其中瞬时有功为预测对象。

    二、算法原理

    本次预测算法,采用python2.7.12语言编写,包括data.py、similar_day.py和predict.py。

    1.data.py

    1)data.py程序的主要功能为数据划分和数据预处理,其中主要函数说明如下:
    split_data_set():将原始数据划分为A1-A10的10个数据集;
    wavelet_denosing():利用小波函数对原始数据集进行降噪处理;
    devide_by_month():利用模糊聚类对原始数据进行分类处理;

    2.similar_day

    2)similar_day.py程序的主要功能为寻找相似日, 其中主要函数说明如下:
    day_features():计算预测对象与相应聚类类别中每天的最低温度、最高温度、平均温度、湿度和日照时长等5个特征的欧式距离A;
    real_time_tempreture():计算预测对象与相应聚类类别中每半小时的温度特征的欧式距离B;
    MFOA():利用果蝇算法优化权重f1和f2,使得上述欧式距离A和B的加权距离值最小,相应日期为预测对象的相似日;

    3.predict.py

    3)predict.py程序的主要功能为执行预测过程,其中主要函数说明如下:。
    nn_model(): 将预测对象对应的聚类类别作为训练数据集,并训练神经网络模型,迭代500次;将相似日的数据作为模型输入,带入预测模型得到预测数据;
    concat():将A1-A10的预测结果进行拼接,得到最终预测结果。

    三、方案设计

    1、数据采集及预处理

    步骤1:原始数据划分为A1-A10划分为10个数据集;删除当天无数据的日期数据,并将剩余数据集的缺失数据补全,记为A_1-A_10数据集;
    步骤2:从中国气象局网站(杭州观测站)爬取2016年7月31日至2018年11月30日的每日天气数据,包括最高气温、最低气温、平均气温、日照时长和湿度,对数据进行预处理,记为Wed_Day数据集;
    步骤3:从weatherspark网站爬取杭州萧山国际机场2016年7月31日至2018年11月30日的天气数据,数据采集时间间隔为30分钟,Wed_Halfhour数据集,包括最高气温、最低气温、风速、能见度和云量。

    2、相似日选取

    步骤1:数据降噪处理。对A_1-A_10数据集、Wed_Day和Wed_Halfhour天气数据集进行小波降噪处理;
    步骤2:确定相似日筛选范围。将预测对象时间段8月-11月按气象温度,日照,季节等因素划分为两个时间段即8月-9月和10-11月分别进行预测。相应地缩小样本数据范围,训练集分别对应2016年8月-10月加2017月7月-10月,以及2016年9月-12月加2017年9月至12月;
    步骤3:确定相似日。计算预测对象某一天的Wed_Day和Wed_Halfhour指标与训练集中相应指标的加权欧式距离,权重初始设为0.5和0.5。满足目标条件加权欧式距离最小,采用优化果蝇算法寻优计算,得到最优权重,而最小距离所对应的日期即为该预测对象的相似日。

    3、瞬时有功预测

    步骤1:选取当日预测时段。由于当天数据存在大量重复0值,且规律变化。为了消除0值影响提升预测精度,需选取当日预测时间段:8月-9月预测时间段为5时-19时,10月-11月预测时段为6时-18时;
    步骤2:训练预测模型。分别建立原始数据训练集中瞬时有功与电流、电压、瞬时无功和正向有功之间的神经网络模型,调整参数使得模型达到最优;
    步骤3:确定预测模型输入值。根据相似日选取规则确定预测日期的相似日,将相似日的电流、电压、无功和正向有功等指标作为输入值,带入预测模型,得到输出值;
    步骤4:输出预测结果。将输出值补缺相应0值后,即为该日预测对象的瞬时有功预测值。

    四、模型效果

    缺乏数据,无法有效评估。相似日的算法由于是在包含自己的集合里查找,因此也无法有效评估。

    五、总结

    决赛的难度显而易见,频度太高,外部数据选取也很麻烦。
    几个亮点:

    • 在计算相似日时,权值选择上用了果蝇算法去泛化不同模糊聚类。
    • 在外部数据同样很差的情况下,利用小波去噪后的数据,效果较好。

    由于开发时间不够,第一次对这个项目还比较生疏,主要问题有几点:

    • 1.每天 96 点的频率太高,而外部数据在这个频度上的精度明显不高,在外部数据差的情况,很难有效进行下去。
    • 2.相似日的算法还不好。对于第三步神经网络的预测部分,完全要依靠第二步相似日选取的准确率。
    • 3.原始数据的特征工程做得不够充分。原数据的缺失值和脏数据太多,经常在做相似日的时候回头去处理没处理的脏数据。

    改进策略:

    • 1.想办法提高外部天气数据的精度和可靠性。
    • 2.编程的时候就想到了在一天内分时段去寻找相似时段,可能可以拟合地更好。但是由于外部数据太差,且考虑到编程时间,当即放弃了这个方案
    • 3.多尝试特征工程
    展开全文
  • 基于LSTM的光伏发电预测

    千次阅读 热门讨论 2019-07-15 16:47:37
    所以我选择使用LSTM模型来实现数据预测的问题。     LSTM神经网络的特点是通过一个门来确定是完全保留和完全舍弃之前的信息。他可以将之前的时间序列也参考在模型之内。所以首先我们需要重新生成一个输入...

    本文是博主的《机器学习》课程的作业,很简单,没有涉及到什么十分高深的内容,最终的实现是调用了库。

    我也是一个新手,希望大家多多包容~

    数据我会后面上传,我直接上传原数据,处理数据的过程我感觉也是很有成就感的,大家自己处理数据试试吧!

    数据下载地址:https://download.csdn.net/download/qq_37511129/11356993

     

     

    数据处理

    首先我们来看数据,训练集和测试集的标签并不统一,训练集中很多标签并没有出现在测试集中,所以我们把多余的特征删除。

    剩下的标签有:

    'Temp_Out','Out_Hum','Dew_Pt','Wind_Speed','Wind_Dir','Hi_Dir','Wind_Chill','Heat_Index','THW_Index','THSW_Index',’ Bar’,’Rain’,’Rain_Rate’,'Solar_Rad'。

    通过整理,我们可以看出此次数据集总共有13个特征,给出的数据是每一个传感器在每一分钟记录的数据,总共是11个月的数据。数据量比较大,为了减少计算量,我们需要减少数据量,将数据集降维。

    因为不是每一个特征都对实验结果有很大的影响,所以我们需要一个办法来确定相关程度,然后删除掉相关度不大的特征,实现数据降维。我选择的是皮尔森系数。

    皮尔森相关系数是一种线性相关系数。皮尔森相关系数是用来反映两个变量线性相关程度的统计量。系数越大,说明相关性越强。

    具体的计算结果我就不放出来了,皮尔森系数的计算方法大家也可以直接去网上查一下。

     

     

    相关系数超过0.1的是前十个特征,所以我们就选取前十个特征进行分析。

    我们来看数据分布。首先我定义了如下函数来读取数据,并绘制出各个数据分布。

    1. def drow_pollution():  
    2.     dataset = pd.read_csv('training_data_1.csv', header=0, index_col=(0,1))  
    3.     values = dataset.values  
    4.     # specify columns to plot  
    5.     groups = [0, 1, 2, 3, 5, 6, 7, 8, 9]  
    6.     i = 1  
    7.     # plot each column  
    8.     pyplot.figure(figsize=(10,10))  
    9.     for group in groups:  
    10.         pyplot.subplot(len(groups), 1, i)  
    11.         pyplot.plot(values[:, group])  
    12.         pyplot.title(dataset.columns[group], y=0.5, loc='right')  
    13.         i += 1               
    14.     pyplot.show() 

    绘制出的图像如下:

    图表 1  原始数据分布图像

    个分布图像中可以看出来,很多数据上存在着一些突变,这些突变应该是由于一些外部原因造成的异常值,我们需要处理掉这些异常值。

    我主要选用的方法为3 法,先算出平均值,然后算出标准差,然后根据3来删除掉异常值,具体的代码如下:

    1. import pandas as pd  
    2. dataset = pd.read_csv('training_data.csv', header=0, index_col=(0,1))  
    3. print(dataset.shape)  
    4. groups = [0, 1, 2, 3, 5, 6, 7, 8, 9]  
    5. pyplot.figure(figsize=(10,10))  
    6. for group in groups:  
    7. values = dataset.values  
    8. dataset=dataset[abs((values[:,group]-alues[:,group].mean())/values[:,group].std())<3]  

    删除掉异常值后的结果为:

    图表 2  异常值处理过后的分布图像

    值的分布图像和原分布图像进行对比我们可以明显看出之前的那些异常值已经处理掉了。

    1. 模型构建

    从数据的结构来看,给出的数据是一个时间序列。所以我选择使用LSTM模型来实现数据预测的问题。

     

     

    LSTM神经网络的特点是通过一个门来确定是完全保留和完全舍弃之前的信息。他可以将之前的时间序列也参考在模型之内。所以首先我们需要重新生成一个输入,我们需要定义一个函数,这个函数可以将之前n个时间序列都变成输入,具体实现如下:

    1. def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):  
    2.      # convert series to supervised learning  
    3.         n_vars = 1 if type(data) is list else data.shape[1]  
    4.         df = pd.DataFrame(data)  
    5.         cols, names = list(), list()  
    6.         # input sequence (t-n, ... t-1)  
    7.         for i in range(n_in, 0, -1):  
    8.             cols.append(df.shift(i))  
    9.             names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)]  
    10.         # forecast sequence (t, t+1, ... t+n)  
    11.         for i in range(0, n_out):  
    12.             cols.append(df.shift(-i))  
    13.             if i == 0:  
    14.                 names += [('var%d(t)' % (j+1)) for j in range(n_vars)]  
    15.             else:  
    16.                 names += [('var%d(t+%d)' % (j+1, i)) for j in range(n_vars)]  
    17.         # put it all together  
    18.         agg = pd.concat(cols, axis=1)  
    19.         agg.columns = names  
    20.         # drop rows with NaN values  
    21.         if dropnan:  
    22.             agg.dropna(inplace=True)  
    23.         return agg  

    在有了这个序列转换的函数之后,我们就可以开始构造我们的数据了。首先我们要读入我们的training_data和test_data,运用一个库将数据进行了归一化处理。然后我设置的validation的比例是0.2也就是说training_data中百分之八十的数据是用来训练的,百分之二十的数据用来验证。

    具体实现如下:

    1. def train_test():  
    2.     读取文件,包含头信息  
    3.     training_data = pd.read_csv('training_data_1.csv')  
    4.     test_data = pd.read_csv('test_data.csv')  
    5.     删掉不用的字段  
    6.     feature=['Temp_Out','Out_Hum','Dew_Pt','Wind_Speed','Wind_Dir','Hi_Dir','Wind_Chill','Heat_Index','THW_Index','THSW_Index','Solar_Rad']  
    7.     training_data=training_data[feature]  
    8.     test_data=test_data[feature]  
    9.     ok_y = test_data['Solar_Rad']  
    10.     # dfarray  
    11.     values_1=test_data.values  
    12.     values = training_data.values  
    13.     原始数据标准化  
    14.     scaler = MinMaxScaler(feature_range=(0, 1))  
    15.     scaled = scaler.fit_transform(values[:,:9])  
    16.     scaled_1 = scaler.fit_transform(values_1[:,:9])  
    17.   
    18.     根据过去一小时预测当前  
    19.     n_hours = 1  
    20.     n_features = scaled.shape[1]  
    21.     构造特征,过去三小时与当前数据集合  
    22.     reframed = series_to_supervised(scaled, n_hours, 1)  
    23.     reframed_1 = series_to_supervised(scaled_1, n_hours, 1)  
    24.     values = reframed.values  
    25.     values_1 = reframed_1.values  
    26.     划分训练集与测试集  
    27.     size = 0.8  
    28.     num  = int(values.shape[0]*size)  
    29.     train = values  
    30.     test = values_1  
    31.     train_X, train_y = train[:num, :n_features*n_hours], train[:num, -1]  
    32.     validation_X,validation_y=train[num:, :n_features*n_hours], train[num:, -1]  
    33.     test_X, test_y = test[:, :n_features*n_hours], test[:, -1]  
    34.     # reshape 3D [samples, timesteps, features],将n_hours看成n个独立的时间序列而不是一个整体的  
    35.     train_X = train_X.reshape((train_X.shape[0], n_hours, n_features))  
    36.     validation_X = validation_X.reshape((validation_X.shape[0], n_hours, n_features))  
    37.     test_X = test_X.reshape((test_X.shape[0], n_hours, n_features))  
    38.     return train_X,train_y,test_X,test_y,validation_X,validation_y,scaler,n_hours,n_features,ok_y 

    然后就是模型的训练了。模型训练我直接使用的keras库,首先是确定为一个Sequential模型,然后add LSTM层,Dense代表的是输出的维度,因为只有一个维度,所以设置为1.损失函数使用的是mae,优化器使用的是adam。

    1. def fit_network_1(train_X,train_y,test_X,test_y,validation_X,validation_y,scaler,n_hours,n_features,ok_y):  
    2.     model = Sequential()  
    3.     model.add(LSTM(units=50, input_shape=(train_X.shape[1], train_X.shape[2])))  
    4.     model.add(Dense(1))  
    5.     #model.add(Activation('linear'))  
    6.     model.compile(loss='mae', optimizer='adam')  
    7.     # fit network  
    8.     history = model.fit(train_X, train_y, epochs=20, batch_size=1440, validation_data=(validation_X,validation_y), verbose=2, shuffle=False)  
    9.     # plot history  
    10.     pyplot.plot(history.history['loss'], label='train')  
    11.     pyplot.plot(history.history['val_loss'], label='test')  
    12.     pyplot.legend()  
    13.     pyplot.show()  
    14.     # make a prediction  
    15.     yhat = model.predict(test_X)  
    16.     test_X = test_X.reshape((test_X.shape[0], n_hours*n_features))  
    17.     将预测y与当前时间的x组合  
    18.     inv_yhat0 = concatenate((test_X[:, -n_features:-1], yhat), axis=1)  
    19.     inv_yhat1 = scaler.inverse_transform(inv_yhat0)  
    20.     inv_yhat = inv_yhat1[:,-1]  
    21.     将实际y与当前时间的x组合  
    22.     test_y = test_y.reshape((len(test_y), 1))  
    23.     inv_y0 = concatenate((test_X[:, -n_features:-1],test_y), axis=1)  
    24.     print('inv_y0')  
    25.     print(inv_y0.shape)   
    26.     inv_y1 = scaler.inverse_transform(inv_y0)  
    27.     inv_y = inv_y1[:,-1]  
    28.     # calculate RMSE  
    29.     rmse = sqrt(mean_squared_error(inv_y, inv_yhat))  
    30.     print('Test RMSE: %.3f' % rmse)  

     

    运行的结果如下:

     

    算出的RMSE为2.210(每一次的结果都会有一些偏差),但大体的结果基本稳定在这个值左右。

    展开全文
  • 光伏发电作为一种新型清洁能源,其将太阳辐射转化为电能,降低了人类对于化石能源的依赖,减少了因为化石能源的燃烧等造成的污染排放,进而提供了一种安全可靠的清洁能源。光伏电站的发电量不仅受到太...
    f62123eb3c9322ac9c5324513738ef32.pnga922874637176b4ed1aa13d155148f28.gif

           能源是人类生存和发展的重要基石。随着社会的飞速发展,人类对于能源的需求日益增多,且随着在能源经济中扮演重要角色的化石能源的日渐减少,越来越多的研究开始探讨可再生能源的应用前景。光伏发电作为一种新型清洁能源,其将太阳辐射转化为电能,降低了人类对于化石能源的依赖,减少了因为化石能源的燃烧等造成的污染排放,进而提供了一种安全可靠的清洁能源。

           光伏电站的发电量不仅受到太阳辐照度和工作温度的影响,而且同四季、昼夜及阴晴等气象条件有较强的相关性。由于光伏发电具有间歇性和波动性的特点,导致了其在大规模并网发电的过程中存在不稳定性,由此提高了光伏电站规划设计和运行维护的难度。因此,如果能够准确预测未来短期内光伏发电的负荷及太阳辐照度情况,就可以提前做出相应的运行调度策略,这对于提升光伏电站的运行效率具有重要意义。已有一些利用传统工程方法和统计方法[1-5]

    对光伏发电进行预测的研究,但是由于这些方法大多需要建立极其复杂的线性模型,难以应用到实际场景中;此外,光伏发电系统效率受外界因素( 如太阳辐照度) 的影响,是典型的外生变量的非线性模型[5]。因此,传统的工程方法和统计方法设计出的线性模型很难适用于这种多变的场景。

           人工智能技术作为新一代模拟人脑工作来解决复杂问题的技术,正在越来越多的应用于生产和生活中。光伏发电由于自身间歇性和波动性造成的发电效率瓶颈也有望通过人工智能算法来解决,已经有一些研究尝试使用人工智能算法来完成对光伏发电过程中各个环节的预测,其中包括使用深度学习来预测光伏发电负荷及太阳辐照度[6-9],以及使用模糊逻辑[10]、遗传算法[11-12] 等人工智能算法来完成对负荷的预测。

           本文简述了人工智能算法在光伏发电预测的各个环节中的应用,并对这些算法进行了简单的对比和总结,最后对人工智能算法在光伏发电领域的深度应用进行了展望。

    1 人工智能算法在光伏发电预测中的应用

           在光伏发电过程中,为了进一步提升光伏电站的运行效率,需要更实时、更精细地把控复杂的能源供求关系。在能源的需求侧,准确的电力负荷预测是一项重要内容,可以通过控制AGC/AVC 来经济合理地调节光伏电站的电力负荷,从而有效降低光伏电站的发电成本,提升运行效率。在能源供应侧,由于受到太阳辐照度和工作温度的影响,光伏电站在不同时段的输出功率也不相同。

           因此,如果能够有效预测不同时段的太阳辐照度情况,可以根据预测出的电力负荷及太阳辐照度来制定合理的光伏电站调度策略,对于提升光伏电站的运行效率及降低运行成本具有重要意义。

    2 电力负荷预测

           电力负荷预测是指在充分考虑各种因素影响的情况下,运用一套数学方法来处理历史负荷值和未来负荷值之间的关系,从而预估将来某个时刻光伏电站的发电负荷值。提高光伏电站的电力负荷预测水平,有利于调度调节、优化制定区域内的光伏电站建设规划,可提高光伏电站的经济效益和社会效益。精准的电力负荷预测已成为实现光伏电站智能化建设管理运营的重要内容。根据需要预测的未来某个时间段的长短,电力负荷预测可以分为:近期负荷预测(2 周以内)、短期负荷预测(1~2 年)、中期负荷预测(3~6年),以及长期负荷预测(7 年以上)。

           其中,近期负荷预测主要是针对光伏电站的日常调度,其可决定每天甚至1 天中某个时段内,哪些发电设备投入运行可以刚好满足用户的用电需求,从而降低光伏电站的发电成本,提升发电效率。因此,精准的近期负荷预测对于提升光伏电站的运行效率和降低运行成本具有重要意义,近几年,对于电力负荷预测的研究也主要集中在近期负荷预测上。传统的近期负荷预测方法包括时间序列法和回归分析法。

           时间序列法是指按照一定的时间间隔对电力负荷进行采样,从而获取光伏电站的历史负荷数据,建立数学模型,以确定负荷随时间变化的数学表达式,可对未来某个特定时间点或时间段的负荷进行预测。例如在文献[13] 中,研究人员使用了时间序列法来预测电站的未来电力负荷,该方案采用了温特线性和季节指数平滑法,包括3 个基础公式和1 个预测方程,如式(1)~式(4) 所示。

           总体平滑公式为:

    263e9913931cb28a4b1b21d7d6fd4919.png

           式中,St 为周期为t 时的季节成分;α 为平滑参数,根据经验值获取;x t 为周期为t 时的时间序列;I t 为周期为t 时的趋势成分;St–1为周期为t–1 时的季节成分;bt –1 为周期为t–1时的局部成分。

           趋势平滑公式为:

    8e6d733e0ded39ce9812f2286bd9f03f.png

           式中,γ 为平滑参数,根据经验值获取;bt为周期为t 时的局部成分。

           季节平滑公式为:

    1d02fa740fec9d4b8faa7499bdb1fe29.png

           式中,It–L 为周期为t–L 时的趋势成分,其中,L 为季节性的长度;β 为平滑参数,根据经验值获取。

           预测方程为:

    bb6e3b491e631577a1892999b5118a76.png

           式中,It+m–L 为周期为t+m–L 时的趋势成分;m 为预测周期;Ft+m 为周期为t+m 时的预测值。由式(1)~式(4) 可以看出,时间序列法具有数据少、计算速度快、能反映负荷变化的连续性的优点。但该方法的缺点是对脏数据的处理要求高,原始时间序列要有平稳性,对天气因素不敏感,难以解决节假日、天气变化较大时近期负荷预测误差较大的问题。

           回归分析法则是利用历史负荷数据找到变化规律,考虑其他可能影响负荷的因素,建立自变量( 历史负荷数据和其他影响负荷的因素)和因变量( 未来特定时刻的负荷) 之间的回归模型,从而确定模型参数,最终推断未来时刻的负荷值。例如在文献[14] 中,研究人员采用多变量时间序列线性回归的方法对电站的未来电力负荷进行了预测。

           回归分析法的优点是操作简单、预测速度快,能很好地表达各个因素与负荷之间的关系,对于新情况有较好的拟合。回归分析法的缺点在于对分布规律和历史样本数据的准确度要求较高,因此对于建立回归方程比较复杂和困难,导致预测精度较低。

           根据长期的电力系统运行经验,对电力负荷预测建立的数学模型是一个非常复杂的非线性系统,且影响负荷的因素极多,包括气温、节假日、电力事故等。若要获取较高的预测精度,则需要将更多的影响因素纳入模型之中,但是前文提到的时间序列法和回归分析法等传统方法很难精确描述负荷和影响因素之间的复杂关系,导致最终的预测结果和实际负荷之间会出现偏差。

           人工智能算法具有较强的自适应、自学习能力,可以将采集到的历史负荷数据和影响负荷的因素的历史数据作为人工智能算法的输入,以此可以训练出负荷值的模型,而且并不需要明确的数学关系表达式。其中,神经网络作为人工智能算法的代表,已经开始应用于电力负荷预测中。

           人工神经网络是一种在不同程度和层次上模仿人脑神经系统的信息处理功能的运算模型,对自然界某种算法或函数进行逼近。人工神经网络有大量的神经元,能够根据外部环境的变化对内部结构进行调整,即神经网络是一种具备自适应、自组织和实时学习能力的系统。

           例如在文献[15] 中,研究人员采用了基于LSTM 神经网络的负荷预测方法,LSTM 是一种时间递归神经网络。在该研究中,首先对历史负荷数据进行预处理,以识别和去除数据中的脏数据,然后选择合适的输入量和标签来利用神经网络进行训练。由于该研究主要是预测未来某几天的24 h 全天候电力负荷值,根据电力负荷的历史数据得出工作日和休息日的电力负荷变化趋势,从而得出“每周休息日的用电负荷会下降”这一结论。

           该研究采用了迭代预测法,将7 天作为1 个周期,将7 天的历史负荷数据作为特征向量滚动预测,最后确定神经网络的网格结构,此时确定神经网络输入、输出的节点个数尤为重要。该研究采用了单模型多变量预测方法,即设置24 个输出节点,分别代表1 天的24 个小时,同时预测1 天内各个小时的电力负荷。在传统方法中,若采用此种结构的网络,网络结构将会极为复杂,有上千个参数需要训练更新,将会极大地影响网络的运算速度和预测精度;但是采用LSTM 这种时间递归神经网络,在合理的处理输入数据,并且确定了网络结构后,可以收到很好的效果。

           此外还有一些人工智能算法是采用其他的神经网络对负荷进行预测,例如最基础的人工神经网络、BP 神经网络、Elman 神经网络、RBF 神经网络,以及小波神经网络等,虽然名称和内部原理各有不同,但是整体处理逻辑与上述LSTM神经网络基本相同。还有一些研究采用的是仿生智能算法对负荷进行预测,例如遗传算法、蚁群算法等,同样可以得到不错的效果。

    3 太阳辐照度预测

           太阳辐照度是影响光伏电站发电效率的重要指标。在对光伏发电系统的性能进行分析时,太阳辐照度是非常重要的参数。太阳辐照度可以通过实地测量获得,也可以通过理论计算获取。如何精确可靠地预测太阳辐照度已成为太阳能发电领域的重要课题。与预测电力负荷类似,传统的预测太阳辐照度的数学模型有很多,如半正弦模型、Collars-Pereira & Rabl 模型、Hottel Model 和Threlkeld&Jordan 模型[16-19]。但这些模型的建立都基于特定地区的太阳辐照度数据,所以地域性强,通用性较差;且在阴天时模型预测的太阳辐照度误差大,模型预测不能方便有效地完成从阴天向晴天的转换,预测效果波动较大。

           神经网络同样被广泛地应用于太阳辐照度的预测中,例如在文献[6] 中,研究人员采用了径向基函数(RBF) 神经网络和多层感知器(MLP) 神经网络对太阳辐照度进行预测,且这2 种神经网络都收到了较好的效果。此外,为了减少特征集中的信息冗余,采取了长短时记忆网络进行训练和降低最优特征集维度的措施,提高了预测精度。

    4 光伏发电与人工智能算法深度融合

           目前来看,人工智能算法在光伏发电领域的应用已经取得了一定的成果,包括对电力负荷、太阳辐照度及输出功率的预测在内,都达到了相对精确的程度[20-29]。

           在光伏发电系统中,其运行管理工作还存在一些问题,如缺乏自动化、智能程度偏低等,且各项功能系统之间未能充分发挥协同作用。因此,如何有效归纳各类数据,提取其中的有效信息,深度建立它们之间的关系,需要人工智能算法发挥关键作用。人工智能算法能实现管理优化,可有效整合有系统,发挥各系统彼此间的协同效用,极大化地发掘现有数据的潜在价值。

    5 结论

           本文对当前人工智能算法在光伏发电领域各个环节的负荷预测、太阳辐照度预测的应用研究进行了综述,由于人工智能算法具有传统算法不具备的优点,因此收到了良好效果。随着光伏发电规模在所有发电方式中的占比的扩大,人工智能算法将越来越广泛的应用于光伏发电领域的各项预测及管理中。

    作者 |  杨留锋

    单位 |  协鑫新能源控股有限公司

    来源 | 《太阳能》杂志2020 年 第8 期( 总第316 期)

    4b8204d92bab1de942807a6c766a4926.png4da1088ef3438fb12c12fe763c8d2156.png84b2d0fd6e34cebfe7354aff55f59a68.png
    展开全文
  • 最后,运用南昌地区夏季和冬季晴天、阴天、雨天光伏发电历史数据在MATLAB应用平台编程实现对GM-RBF神经网络预测模型的预测精度进行验证,得出基于GM-RBF神经网络光伏发电预测模型在夏季晴天预测误差为6.495%、夏季...
  • 基于 GM-RBF 神经网络光伏发电预测模型在夏季晴天预测误差为 6.495%、夏季阴天预测误差为 12.146%、夏季雨天 预测误差为 21.531%、冬季晴天预测误差为 8.457%、冬季阴天预测误差 14.379%、冬季雨 天预 测 误 差为 18...
  • 针对点预测类方法无法消除预测误差的不足,文中提出一种光伏发电功率短期预测方法。该方法采用极端学习机为光伏发电功率预测的回归预测方法,并结合三角形隶属函数模糊信息粒化的思路,将一定时间窗口的光伏发电功率...
  • 针对光伏发电的不确定性导致频率波动和电力系统不稳定带来的不利影响,本文采用改进模块化神经网络(MNN)对光伏发电功率进行预测,即利用回声状态网络代替MNN中原训练子模块模型。首先按季节输入历史数据;再经任务...
  • 通过对影响光伏发电量产生的因素进行分析比较,在模糊双曲正切模型的基础上,建立一种光伏发电量的短期预测模型。该模型既属于模糊模型,也属于神经网络模型的范畴。可以利用其强大的学习能力,以光伏发电系统的历史...
  • 基于GBDT和神经网络的光伏发电组合预测.pdf
  • 为提高部分数据缺失情况下智能电网光伏发电功率预测精度,提出一种基于双维度顺序填补框架与改进Kohonen天气聚类的光伏发电功率预测模型。采用双维度顺序填补方法补齐缺失数据,基于完整数据分析光伏发电功率影响...
  • 利用PVSYSTEM系统产生的数据分析了光伏发电系统输出功率的主要影响因素,并且建立了基于泄露积分型回声状态网(Leaky-ESN)对光伏发电系统输出功率的预测模型。Leaky-ESN比起其他的神经网络具有训练方法简单,预测...
  • 受天气状况、辐照度、温度、湿度等气象因素的影响,光伏系统的输出具有很强的非线性和非平稳性的特点,光伏发电预测精度较低。该文根据光伏系统的历史发电数据和实际气象数据,采用模糊识别与RBF神经网络相结合的...
  • 网络精细化的光伏发电功率预测方法。该预测模型利用卷积神经网络并融合了因果卷积和膨胀卷积;在卷积特征 上,使用跨层连接;在损失函数上,增加了自适应影响因子;在特征工程上,将数值气象预报发布的多个预测数 据...
  • 针对光伏发电功率预测精度不高的问题,提出一种基于相似日和云自适应粒子群优化(CAPSO)算法优化Spiking神经网络(SNN)的发电功率预测模型。考虑到季节类型、天气类型和气象等主要影响因素,提出以综合相似度指标进行...
  • 光伏发电功率预测系统功能规范,国家能源局 发 布,2016-06-01实施,NB/T 32031-2016
  • 光伏发电功率受自然环境影响具有明显的波动性、间歇性与随机性,对光伏发电进行短期功率的概率预测可以有效缓解给电网调度、能量管理等方面带来的诸多不利影响。提出一种基于改进深度受限玻尔兹曼机(RBM)算法的光伏...
  • 摘要:光伏发电的大规模发展给发电企业对于场站的管理带来了极大挑战,发电量预测涉及到制定运维检修计划、评估投资损益等诸多事宜,随着电力市场进一步开放,高准确率的预测结果对于新能源场站越发重要。...
  • 第一部分:光伏发电量和用电量的概率预测研究综述(1) 目录 3. Forecasting techniques 3.1. Statistical approach 3.1.1. Parametric 3.1.2. Nonparametric 3.2. Physical approach 3.2.1. Parametric 3.2.2. ...
  •   总结:太阳辐照度预测用在PV系统的物理模型中,而光伏发电预测用于提供发电计划。   另一方面,已知电力消耗是可以预测的,并被视为一个成熟的领域[13],大中型公用事业在日前市场中实现 3 %或更低的预测误差...
  • 光伏发电量和用电量的概率预测研究综述(1) 光伏发电量和用电量的概率预测研究综述(2) 目录 4.3. Day-ahead 4.4. Comparison between PSPF and PLF 5. Discussion 6. Conclusion Acknowledgments 4.3. Day-ahead...
  • 2019-2025年中国光伏发电行业市场深度调研及前景趋势预测报告.pdf
  • 点击上方蓝字关注“公众号”MATLAB基于BP神经网络的光伏发电太阳辐照度预测光伏发电功率主要受太阳辐照度影响,所以准确预测太阳辐照度对光伏功率预测十分重要。程序采用小波分解先对辐照度数据进行分解,然后再用bp...
  • 点击上方蓝字关注“公众号”MATLAB基于BP神经网络的光伏发电太阳辐照度预测光伏发电功率主要受太阳辐照度影响,所以准确预测太阳辐照度对光伏功率预测十分重要。程序采用小波分解先对辐照度数据进行分解,然后再用bp...
  • 光伏产业蓬勃发展,光伏发电占比逐步提升。光伏产业自2012年以来持续回暖,目前已进入...根据IHS的数据预测,未来三年内全球将建造约272GW光伏电站,至2050年,全球光伏累计装机量有望达到4600GW,光伏发电量将占...
  • 2008-2009年中国光伏发电用逆变器市场分析及预测报告
  • 行业文件
  • 光伏产业自2012年以来持续回暖,目前已进入蓬勃...根据IHS的数据预测,未来三年内全球将建造约272GW光伏电站,至2050年,全球光伏累计装机量有望达到4600GW,光伏发电量将占全球总发电量的16%,成为全球最大的电力...
  • 想在matlab上利用SVR对光伏发电历史数据进行一个拟合回归,但由于本人是一个刚入坑小白,对于样本集的设置,程序的编写并不是很懂,有偿找一个大神教导。 有意愿的可以私聊我联系方式

空空如也

空空如也

1 2 3 4 5 6
收藏数 104
精华内容 41
关键字:

光伏发电预测