何建强,张玉萍,滕志军
(1.商洛学院,陕西 商洛 726000;2.商洛市人工智能研究中心,陕西 商洛 726000;3.北京四方继保自动化股份有限公司,北京 100085;4.东北电力大学 现代电力系统仿真控制与绿色电能新技术教育部重点实验室,吉林 吉林 132012)
风能作为一种可再利用的、清洁的新型替代能源,能够优化能源结构,增强能源供应能力,保障能源安全可靠。由于风具有随机性、间歇性和不可控性,导致风电具有间断性,致使风电并网会增加电力系统运行的不稳定性,极大地影响电网的供电质量。因此,科学、准确的预测风电场的输出功率能够平衡大规模风电对电网的影响,促进风电健康持续地发展。文献[2]和文献[3]阐述了由于风电的间断性,致使风电功率预测大多主要集中于短期预测。目前短期预测技术被广泛研究和应用,主要研究方法有物理法、统计方法、机器学习法和空间相关性法。文献[4]对风电功率预测的物理方法和统计方法进行了综述。物理预测方法由于受风电场所处环境地形和地貌以及周围大气环境的影响比较大,所以预测精度往往相对低。统计方法建模相对简单、计算速度快、预测成本低,但是输入的预测参数单一,不断地扩大预测时间尺度会降低预测精度。文献[5-7]对卡尔曼滤波法、时间序列法、最小二乘法、灰色预测法等常用的统计方法在风电功率预测中的应用进行研究,但都存在易陷入局部最优的缺点。机器学习方法预测精度相对较高,但预测模型比较复杂,建模相对困难,而且样本训练需要大量历史数据的支持,训练速度慢。常用的方法有小波分析法,BP神经网络法、SVM等方法。文献[8]提出的人工神经网络法是风电功率短期预测当中最常用的预测方法,具有非线性映射、自学习、容错性和泛化能力强等优点。但单一的预测方法具有不足之处,为克服单一方法预测的不足,组合预测法成为近年来风电功率预测研究的热点,它是将一些统计方法和学习方法相结合,提高预测精度。文献[9-12]提出了空间相关法,将其作为继物理模型、统计学之后的第3种模型,它是一种通过邻近风电场气象信息对目标风电场进行预测的方法。文献[13]结合空间相关性的方法,建立了预测模型,解决了风速突变造成预测精度低的问题。但由于风速时变性较强,预测的最大误差很难控制,有时预测可能完全失效。
为解决单一模型在风电功率预测中的局限性,本文针对文献[14]中提出的KNN算法在短期风电功率预测中的不足,提出了基于K-means和改进KNN算法的风电功率预测,该算法针对大量的历史样本集和预测样本集,建模简单,运算速度快,预测准确率高。以吉林省某风电场365天的实际数据为样本,对本文预测方法的优越性进行了分析验证。
K
个样本相似或最邻近,而且这K
个最邻近的样本大多数是同一个类别,那么此样本也被标记为该类别。重点强调的是特征空间中的每个样本必须已被正确分类。KNN算法在本质上采用的是投票分类决策机制,通过最邻近样本的类别决策待分类样本的类别,决策前需要遍历整个样本空间,决策时只依靠最近邻的少数样本。KNN算法的优点是适合类域交叉或者大量重叠的待分类样本集。本文利用样本回归特性对样本进行功率预测,即对于一个预测样本,首先获取样本的K
个最邻近已分类样本,然后计算其属性的平均值,将该平均值作为预测样本的属性值。K
值进行预测时,每个样本对应每个不同的K
值都要遍历一次特征空间,那么随着特征空间的扩大,就会成倍的增加运算量,也就会成倍的降低运算速度。同时在分类过程中,如果特征空间样本类别不平衡时,一部分样本容量较大,另一部分样本容量较小,随着K
值的逐渐增大,选取样本的误判率就会增大,针对这一情况本文对KNN算法进行了改进。改进策略是:同一个预测样本,在同一个特征空间中,针对不同的K
值,只需要遍历一次整体样本空间。首先提取预测样本的最大K
值,此时遍历整体样本空间,提取K
个最相似的样本,重点是要对选取的K
个样本按相似程度的从高到低进行排列,并且将这K
个相似样本保存到相似队列中。这样如果预测样本想提取K
-1个相似样本的话,就不需要再遍历整体特征空间了,只需要从相似队列中提取前K
-1个样本即可。这种改进策略是通过增加存储空间来加快预算速度。因为对于现在的计算机来说,存储空间越来越大。假设一个风电场有100台风机,每分钟记录一项风机的运行状态,运行状态中包括20个属性,那么10年的记录也只有38.5 G。所以存储空间不是风电功率预测的压力。因此,利用存储空间换取高效的预测空间是值得的。改进的KNN算法包括两个过程,第一个过程是计算预测样本选取最多近邻样本时对应的K
值,同时对获取的相似样本集合从高到低按照相似程度排序,并存至优先级队列中;第二个过程是当K
值减小时,从已存储的优先级队列中直接获取相似样本集,根据相似距离决定相似权重,从而用训练样本的加权功率值来计算预测样本的功率值。获取最长优先级队列的核心步骤如下。第一步:确定最近邻样本个数最多时对应的K
值,给出已知类别的训练样本集(或者叫做特征空间)D
;第二步:设每一个预测样本为z
=(x
′,y
′),开始执行for循环forz
=(x
′,y
′);第三步:计算z
与每个训练样本(x
,y
)∈D
间的相似距离d
(x
′,x
′);第四步:选择与预测样本z
最相似的K
个训练样本D
⊆D
,同时记录这K
个样本与z
的相似距离;第五步:按照与z
相似程度对D
从高到低排序,将结果存至优先级队列PriorityQueue中;第六步:end for;//结束for循环,并保存好本次预测的优先级队列。
本文通过相似历史数据建立模型,实现风电功率的预测。将风向、风速和风机变桨角度这3个参数作为输入参数,选取不受时间序列影响而且样本集合的相似度比较高的数据作为样本数据。在输入参数后会自动寻找与之相似的样本数据集合,并匹配对应的风电功率数据,以此来对未来的输出功率进行推算,预测模型框架如图1所示。最后,通过吉林省某风电场实际数据来对预测模型的有效性和预测准确度进行检验。
图1 预测模型框架图
由于本文所提改进的KNN算法通过相似历史数据进行预测时采用的数据分类方法与K-means聚类算法思想一致,因此在对历史样本进行分类时采用K-means算法,该方法在增加选中相似样本概率的同时,也保障了预测的准确性。该算法进行历史样本分类的过程如下。
Input:N
//为区别改进KNN中的K
,此处用N
表示划分子类的个数;{Y
}//
历史样本集,其中包含j
个对象。Outout:N
个子类。具体执行流程如下。
第一步:从历史样本集{Y
}中随机选择N
个样本作为初始分类的中心。第二步:比较新读取样本对象和各个类中对象的均值,然后将其分配至最相似的类中。
第三步:对每个类的中心进行更新,重新对每个类中对象的均值进行计算。
第四步:until每个类的中心不再变化结束。
其中:{Y
}表示历史样本集合,其中每个样本均包含风向、风速和风机变桨角度3个维度;N
为将要划分子类的个数。以吉林省某风电场2019年2月的历史数据为例,每隔一分钟记录一次风电机组的运行状态,一共29天,每台机组的历史样本数量为41 760条。以其中某一台的风机的历史样本记录为例,利用Clementine软件中的K-means聚类模型得出的聚类结果如2图所示。
图2 某台风机的历史数据聚类结果
n
(k
)提高为n
(k
)。改进KNN的算法流程如图3所示。图3 改进KNN算法流程
算法的具体执行过程如下:
1)初始化预测样本X
和K
值的集合。2)获取最大K
值,赋于K
,K
仅搜索K
对应的相似历史样本集合。3)选取相似度计算公式。
本文在计算预测样本和历史样本的相似度时,选用适用于数值型数据的欧氏距离和曼哈顿距离计算公式,分别如公式(1)和公式(2)所示。
(1)
(2)
式中,X
和Y
分别表示第i
个预测样本和第j
个历史样本。风向、风速和风机变桨角度为每个样本3个维度,z
为维数。4)获取最大优先级队列PQ(X
,K
)。在历史样本中随机选取K
个样本,按相似距离大排序,生成优先级队列PQ(X
,K
)。遍历历史样本集,并计算其与预测样本的相似距离。若相似距离比PQ(X
,K
)中最后一个样本的相似距离大,则继续遍历下一个历史样本,否则移除PQ(X
,K
)中最后元素,将当前遍历样本值放入PQ(X
,K
)尾部,并按照相似程度重新自动排序,遍历完所有历史样本,得到最终PQ(X
,K
)。5)其余K
值,从最终PQ(X
,K
)中提取对应的相似样本优先级子队列。如K
=K
时,提取PQ(X
,K
)中前m
个历史样本,作为K
的PQ(X
,K
)。6)计算PQ(X
,K
)中多数类别所有样本输出功率的平均值,将其作为预测样本X
的预测值。计算公式如公式(3)所示:(3)
式中,powerpr
(X
,K
)表示预测样本X
选取K
个相似样本的功率值;表示样本类别是C
的第j
个相似历史样本,z
表示类型编号。AVG()为计算多数类样本功率的加权平均值。7)计算所有K
值下X
对应的预测值,结束预测。最终功率预测值对应K
值选取时,要根据不同风机运转情况通过实验数据来进行确定最佳K
值。图4 风电功率预测系统架构图
图5 系统整体功能模块
本文采用C/S架构设计风电功率预测系统,将预测模型转换为计算机可以完成的功能,保障风电功率预测的高效性、稳定性和安全性。风电功率预测系统整体架构分为3层,依次为基础数据层、功能服务层和用户层。每一层之间是相互独立且具有一定的联系,风电功率预测系统架构图如图4所示。
4.1.1 基础数据层
基础数据层又包括3部分。第一部分是风电实时数据的采集与整理;第二部分是数据存储,将整理完毕的实时数据,存储于数据库中,可以永久性的使用,并定期维护;第三部分建立数据访问接口。
4.1.2 功能服务层
功能服务层主要是指风电功率预测系统需要完成的功能应用。本系统的应用服务主要有基础数据更新模块、实时数据展现模块、风电数据清洗模块、风电功率预测模块、预测误差分析模块、用户管理模块、系统设置模块、辅助模块等。
4.1.3 用户层
用户层是与用户直接相关的部分。用户层是用户与系统进行交互的终端。用户可以输入相关数据或者点击相关操作,实现需要的功能。
采用java语言实现风电功率预测系统的整体功能,选用关系型数据库MySQL作为数据库管理系统。系统主要包括用户管理模块、核心模块和系统设置模块。系统整体功能模块图如图5所示。
用户管理模块主要包括用户注册模块、用户登录模块、信息修改模块等。用户注册模块主要是新用户在使用系统前进行用户注册。为了确定用户账号的安全性,系统引入MD5加密技术,对用户的密码以及密码修改提示答案采用密文的形式存储。这样可以防止非法用户的入侵,保障系统的安全性。用户登录模块是任何一个软件系统的基础模块。该系统的用户登录模块需要用户通过多方面的认证合格,才可以进入系统。主要包括权限认证、岗位认证、用户名、密码、验证码等合法验证。
用户修改模块主要方便用户对自身基本信息的更新。
系统设置模块包括系统用户权限管理、系统数据备份、系统数据还原。用户权限管理模块主要是根据风电功率预测系统中用户的岗位类别、职称类别等判定用户的角色,并按照一定的安全策略为每种角色设置相应的权限。每个用户只可以访问自身权限范围内的内容。本系统的权限设置管理主要包括功能级权限管理和数据级权限管理。数据备份模块是系统容灾方案的一种。本系统考虑到电力系统属于专用网、风电数据的存储量大、不易恢复等特性,采用数据库备份方案。数据库备份即在备份机上创建数据库的拷贝版本,定期更新备份。系统数据恢复模块是指将丢失的或者异常数据恢复到正常的状态。本系统主要应用版本恢复将系统数据库中的数据恢复到前一个备份版本,使数据恢复正常。
核心模块的主要功能为风电实时数据存储、实时数据查询、实时数据处理、风电训练样本分类、风电功率预测、误差分析和历史预测结果查询。该模块的UML活动图如图6所示。
图6 风电功率预测系统UML活动图
风电实时数据存储模块主要用于获取风电场的实时数据。通过I/O读取程序,获取已经存储于记事本的风电功率实时采集数据。按照每一行为一个记录的方式,将获取的数据存入已经创建好的MySQL数据库,作为风电功率预测的数据源。
风电实时数据显示模块主要协助用户根据自己的意愿选择要浏览的风电数据。用户可以按照时间段模式进行预览。风电实时数据处理模块主要是清洗那些由于采集、传输和记录过程中导致的异常数据、缺省数据或者记录不完整的数据。利用相邻时间点数据的加权平均值修补缺省值和更正不完善的数据。
风电训练样本分类模块是由于预测模型需要输入具有确定类别的风电训练样本。该模块主要是将K-means聚类算法用java语言实现。
风电功率预测模块是系统的核心模块。该模块同样也是利用java语言实现预测算法的过程。该模块留有输入、输出两个接口。输入接口主要是输入训练样本和预测样本。输出接口就是输出风电功率的预测结果。
历史预测结果查询模块可以查询预测完毕的结果。一般用户可以通过预测时间段查询预测结果,也可以根据预测误差率或者准确率来查询预测结果。
K
值的集合为[1,100],分别利用曼哈顿距离和欧氏距离寻找相似样本。不同K
值下两种距离计算方法的预测结果对比如7和图8所示。图7 不同K值下曼哈顿距离计算方法的预测结果
图8 不同K值下欧氏距离计算方法的预测结果
由图7和图8可以看出,当K
=48时,曼哈顿距离计算方法预测结果最好,平均绝对误差最低。当K
=50时,欧氏距离计算方法预测结果较好,预测误差也远低于国家规定范围。预测功率与实际功率值的对比结果分别如图9和图10所示。从图7和图8的预测误差率中可以看出,预测误差随着K
值的增加逐渐降低,增加到一定值后,随着K
值的增加又逐渐升高。其与K
值的变化关系如图11所示。通过大量的实验发现,当K
值在45~55时,预测准确率最高。图9 K=48时未来24小时功率预测值与实际值对比
图10 K=50时未来24小时功率预测值与实际值对比
图11 预测误差与K值的关系
本文将预测结果和文献[17-18]中的预测结果按照误差分析方法进行了对比,预测误差对比结果如表1所示。从对比结果中可以看出采用本文的方法,平均绝对误差和均方根误差预测误差率分别最大下降1.08和0.48个百分点。在相同的条件下,本文的方法在预测时间最大提高了5.45个百分点。可见,本文的预测方法提高了预测准确度。
表1 预测误差对比
改进的KNN预测模型在预测过程中不断地剔除训练样本中异常的或者影响预测准确度的样本,从而修正预测模型,使得预测模型的预测准确率不断自动地提升。因此,实验数据表明在对20台风机功率的预测中,误差率越来越低,每台风机的平均误差都小于15%,满足目前风电功率预测系统的要求。
K
值,仍是下一步需要重点研究的内容。