本发明涉及小水电站群的优化调度,是一种基于hadoop的分布式优化调度方法。
背景技术:
小水电是小型水电站的简称。小水电作为优质的、清洁的可再生能源,在发电、防洪、灌溉和供水等方面都起着相当重要的作用。但在过去一段时间里,我国的小水电缺乏合理规划,存在监管不到位、调度不充分等各种问题,因此,科学合理地管理和利用小水电刻不容缓。对小水电进行优化调度能在更大程度上发挥小水电的积极作用,在提升经济效益的同时提升生态效益,有利于促进小水电的可持续发展、推进我国的电网智能化战略。
小水电的优化调度是指将实际问题类比为抽象问题,建立目标函数,并借助数理统计和算法编程寻找小水电调度中的最优解,保证水库能被高效利用,提高发电量和发电效益。早在20世纪40年代,国外的水电站优化调度就已经开始起步,经过数十年的发展,该领域已经有了相对完善的学术成果。到了20世纪80年代,我国的水库调度研究才逐步开始发展。
在水电优化调度算法的研究上,由于启发式方法的出现,使得传统的数学规划法相形见绌。该类求解方法包括了遗传算法(ga)、模拟退火方法(sa)、禁忌搜索算法(ts)、人工神经网络方法(ann)、粒子群算法(pso)、蚁群算法(aco)以及混沌优化算法(coa)等。在启发式方法中,遗传算法当属于研究最多、应用较为成熟的算法,也是最早用于水电站优化调度的方法,之后还出现了许多对其进行改进的研究。
但是,随着生产生活中数据的爆炸式增长,进化算法在处理海量高维数据时,出现了计算复杂、速度慢的缺点。
技术实现要素:
本发明要克服现有技术的上述缺点,提出一种基于hadoop的小水电分布式差分进化调度方法,提高小水电优化调度方法的运算效率。
本发明利用hadoop平台的mapreduce框架实现差分进化算法的分布式计算,同时为差分进化选择了一种新型变异策略,通过采用固定的全局边界,来保持种群的多样性,从而为以发电量为目标的小水电站群的优化调度提供可行的调度方案。
本发明解决其技术问题所采用的技术方案是:
一种基于hadoop的小水电分布式差分进化调度方法,利用hadoop分布式计算平台完成以发电量为目标的分布式差分进化调度;引入了子种群的概念,每个map过程对应的每个子种群各自独立完成差分进化过程中变异、交叉、选择等一系列的进化操作,最后由reduce过程进行汇总筛选,得到适应于目标水电站的最优调度方案,以此提升小水电群的经济效益和生态效益,促进其可持续发展。
基于hadoop的小水电分布式差分进化调度方法,包括如下步骤:
步骤1:建立以发电量最大为目标的数学模型。目标函数设置为小水电站群内n个水电站发电量之和的最大值。
式中,各数学符号含义为:
f:小水电群年发电量,单位为万千瓦时;
t:调度周期总时段数;
i:水电站个数;
ki:第i个水电站的出力系数;
qi(t):水电站i在t时段的发电引用流量;
hi(t):水电站i在t时段的发电水头;
δti:水电站i在t时段的发电时间,单位为s。
另外,小水电优化调度模型的约束条件有:
a.库容约束:
vimin<vi<vimax(1-2)
其中,vimin、vimax分别为第i水库的最小和最大库容值;
b.引用流量约束:
qi,tmin<qi,t<qi,tmax(1-3)
其中,qi,tmin、qi,tmax分别为i水电站在t时段内的最小和最大引用流量;
c.水量平衡:
vi(t)=vi(t-1) (qi(t)-qi(t))(1-4)
其中,vi(t)、vi(t-1)分别表示t和t-1时段的库容值,qi(t)表示t时段区间来水量,qi(t)表示t时段区间下泄流量;
d.非负条件约束:
上述变量均≥0
由于进行长期调度,水库间的水流时间不做考虑。
步骤2:编码及初始化:要对这n个水电站调度周期内的引用流量进行综合调度,需将其作为一个整体,每个个体由该小水电群t时段内的引用流量值组成,即一个t*n维的数组,采用实数编码方式,编码表如表2-1所示。
表2-1水电站编码表
种群规模为np。在种群初始化过程中,读取文件内容,初始化各水电站每个月的来水量以及时段1的库容大小,初始化发电引用流量时以引用流量上下限为边界随机生成种群的所有个体,计算其适应度值并进行存储。
步骤3:进化操作,具体步骤如下:
3.1变异操作;
在差分进化的过程中,种群最先进行变异操作,本发明采用了一种新型变异策略,采用固定的全局边界,利于保持种群的多样性,变异策略如式3-1所示。
xi,j=k*(aj bj) sin(w)*(c*xe,j (1-c)*xr,j)(3-1)
其中,k∈[0,1]为随机数;aj、bj分别为当前种群边界的上下界;xe,j为当前精英解的第j个基因;xr,j为第r个个体的第j个基因,r≠i,w∈[0,2π],c为固定值0.3。
3.2交叉操作;
交叉操作的对象为初始种群与由变异个体组成的种群,采用了二项式交叉方式,即:
其中,
3.3选择操作;
首先依据各水库水电站月初的库容和每个月的来水量,分别采取试验个体和初始种群中个体对应的引用流量方案更新每个月月末的库容值,即:月末库容=月初库容 该月来水量-该月发电引用流量。
若月末库容值不满足库容约束:对低于最小库容值约束的引用流量进行修正,使该月引用流量=月初库容 该月来水量-最小库容,设置该月末库容为最小库容,产生的弃水为0;对高于最大库容值约束的引用流量,先进行标记,后设置该月末库容为最大库容,产生的弃水量=月初库容 该月来水量-引用流量-最大库容,同时用一变量记录该个体弃水量的累加值;对满足库容约束的引用流量,更新弃水量为0。个体中各维更新完毕后分别计算试验个体与初始个体的适应值。
采用如下的约束处理规则选择进入下一代的个体,对于:(1)试验个体与初始个体均未被标记,选取适应值较大的个体;(2)试验个体未被标记,初始个体被标记,则选取试验个体;(3)两者均被标记,选取偏移值较小的个体。最后更新种群中个体的适应值、弃水量和库容值等参数。
步骤4:分布式计算的实现:采用子种群的概念,以hadoop平台的编程框架mapreduce为依托,首先对一定数量个体组成的父种群进行初始化,然后将该初始种群划分为一定数量的、相对独立的子种群,每个子种群独立进化,最后汇总所有子种群,筛选出最优个体。其中,每个map过程处理一个子种群的进化过程,每个子种群进化一定代数后,通过reduce过程对map过程提交的数据进行汇总并筛选出所有子种群中的最优个体,即对应的最优发电用水方案,并将其与对应的最优适应值作为结果共同生成结果文件输出到hdfs。
4.1map过程;
mapreduce处理的数据形式为<key,value>键值对的形式,由于dde-mr基于子种群进行进化,因此将map函数的输入与输出<key,value>对格式分别设置为:
<key1i,value1i>→<key2i,value2i>,i=1,2,...,n(4-1)
其中,n为子种群总个数;key1i是第i个子种群在文件中的起始地址,value1i代表第i个子种群的所有个体;key2i则是第i个子种群的索引,value2i也代表了第i个子种群的所有个体。
map函数的伪代码如下:
4.2reduce过程;
在map过程和reduce过程之间,存在shuffle过程,它对map的输出键值对按照key值进行了初步的排序与分类,传入reduce的数据变成了[key,list[value]]的形式。因此reduce函数的主要工作为:遍历该list中的value值对应的子种群中的所有个体,筛选出适应值最大的个体并输出到hdfs,且设置reducer的个数为1。
reduce函数的伪代码如下:
本发明专利的技术构思为:在小水电优化调度问题上,采用差分进化算法对其进行编码、适应度函数设计以及一系列的进化操作,来处理各个水电站的运行时数据,并对发电引用流量进行优化,得到最优化引用流量方案,为实际调度方案提供数据支持。同时,以hadoop平台的编程框架mapreduce为研究对象,在进化方式上采用子种群的概念,各子种群间独立完成进化过程,分解了传统的基于单个种群的进化任务。
本发明的优点表现在:随着生产生活中数据的爆炸式增长,进化算法在处理海量高维数据时,存在计算复杂、速度慢的缺点,而采用大数据分布式平台hadoop,可以对原有差分进化算法进行改进,使其适应大数据环境下的数据处理和优化调度,具有十分重要的现实意义。以小水电优化调度为应用方向,为提高其运算效率,提出了基于hadoop的小水电分布式差分进化调度方法,能较好地提升小水电群的经济效益和生态效益,促进其可持续发展。
附图说明
图1为本发明的差分进化算法流程图;
图2为本发明的分布式平台架构图;
图3为本发明的整体流程图;
图4为本发明的差分进化算法收敛图;
图5为本发明的试点流域发电量月调度统计图;
图6为本发明的hadoop平台下算法的运行加速比。
具体实施方式
下面结合附图对本发明作进一步描述。
本实施例以江西泸水河流域为试点对象,选取有调节能力的水库电站:社长、岩头陂和东谷电站为研究对象,以发电量最大作为优化目标的调度模型,采用月调度方式,对其12个月内(t=12)的引用流量进行综合调度,调度初期水库库容设为一月初库容值;算法的种群规模np设置为1000,迭代次数为1000。
如图1所示,在对实际研究对象进行编码和适应度函数设计后,首先设置算法的控制参数,包括变异算子、交叉算子以及其他运行所需参数;其次产生初始化种群,并计算种群适应度;接着对种群进行分差分变异操作,产生新的变异个体,构成变异种群;原种群和变异种群进行交叉操作,产生临时种群;然后对临时种群按一定的选择条件进行选择,产生用于下一代进化的新种群,同时记录到目前为止的最优个体;迭代一定次数后,通过判断是否达到初始设定迭代次数来决定是否结束进化。
如图2所示,本发明以服务器虚拟化节点作为hadoop部署载体构建分布式集群,图2为本发明采用的两台服务器的虚拟化架构图,利用服务器虚拟化技术,将服务器的物理资源转变为逻辑资源,使多个操作系统同时在同一主机上运行,在较大程度上提高了资源的利用率,降低了系统的总成本。其中,每台服务器被虚拟化为相当于物理节点的多个虚拟节点,通过交换机互连,使得所有主机之间相互连通、守护进程能正常运行在这些主机之上。
如图3所示,在差分进化算法设计的基础之上,将其与hadoop平台的mapreduce框架进行结合。基于mapreduce设计分布式计算方法的两个主要任务是构建map过程和reduce过程,即定义map函数和reduce函数。其中,map过程用于分解总任务,reduce过程则负责对分解后的多个子任务进行汇总处理。
由此,在设计种群的进化方式上,本文首先对一定数量个体组成的父种群进行初始化,然后将该初始种群划分为一定数量的、相对独立的子种群,每个子种群独立进化,最后汇总所有子种群,筛选出最优个体。与mapreduce框架结合,即每个map过程处理一个子种群的进化过程,每个子种群进化一定代数后,通过reduce过程对map过程提交的数据进行汇总并筛选出所有子种群中的最优个体,即对应的最优发电用水方案,并将其与对应的最优适应值作为结果共同生成结果文件输出到hdfs。
所述基于hadoop的小水电分布式差分进化调度方法,包括如下步骤:
步骤1:建立以发电量最大为目标的数学模型。目标函数设置为3个水电站发电量之和的最大值,调度周期取一年,以月为单位时段,共12个月。
式中,各数学符号含义为:
f:小水电群年发电量,单位为万千瓦时;
t:调度周期总时段数;
i:水电站个数;
ki:第i个水电站的出力系数;
qi(t):水电站i在t时段的发电引用流量;
hi(t):水电站i在t时段的发电水头;
δti:水电站i在t时段的发电时间,单位为s。
另外,小水电优化调度模型的约束条件有:
a.库容约束:
vimin<vi<vimax(1-2)
其中,vimin、vimax分别为第i水库的最小和最大库容值;
b.引用流量约束:
qi,tmin<qi,t<qi,tmax(1-3)
其中,qi,tmin、qi,tmax分别为i水电站在t时段内的最小和最大引用流量;
c.水量平衡:
vi(t)=vi(t-1) (qi(t)-qi(t))(1-4)
其中,vi(t)、vi(t-1)分别表示t和t-1时段的库容值,qi(t)表示t时段区间来水量,qi(t)表示t时段区间下泄流量;
d.非负条件约束:
上述变量均≥0
由于进行长期调度,水库间的水流时间不做考虑。
步骤2:编码及初始化:对三个水电站12个月内的引用流量进行综合调度,将其作为一个整体,每个个体由该小水电群12个月的引用流量值组成,即一个12*3维的数组,采用实数编码方式,编码表如表2-2所示。
表2-2水电站编码表
种群规模np初步设置为1000。在种群初始化过程中,读取文件内容,初始化各水电站每个月的来水量以及1月初的库容大小,初始化发电引用流量时以引用流量上下限为边界随机生成种群的所有个体,计算其适应度值并进行存储。
步骤3:进化操作,具体步骤如下:
3.1变异操作;
在差分进化的过程中,种群最先进行变异操作,本发明采用了一种新型变异策略,采用固定的全局边界,利于保持种群的多样性,变异策略如式3-1所示。
xi,j=k*(aj bj) sin(w)*(c*xe,j (1-c)*xr,j)(3-1)
其中,k∈[0,1]为随机数;aj、bj分别为当前种群边界的上下界;xe,j为当前精英解的第j个基因;xr,j为第r个个体的第j个基因,r≠i,w∈[0,2π],c为固定值0.3。
3.2交叉操作;
交叉操作的对象为初始种群与由变异个体组成的种群,采用了二项式交叉方式,即:
其中,
3.3选择操作;
首先依据各水库水电站月初的库容和每个月的来水量,分别采取试验个体和初始种群中个体对应的引用流量方案更新每个月月末的库容值,即:月末库容=月初库容 该月来水量-该月发电引用流量。
若月末库容值不满足库容约束:对低于最小库容值约束的引用流量进行修正,使该月引用流量=月初库容 该月来水量-最小库容,设置该月末库容为最小库容,产生的弃水为0;对高于最大库容值约束的引用流量,先进行标记,后设置该月末库容为最大库容,产生的弃水量=月初库容 该月来水量-引用流量-最大库容,同时用一变量记录该个体弃水量的累加值;对满足库容约束的引用流量,更新弃水量为0。个体中各维更新完毕后分别计算试验个体与初始个体的适应值。
采用如下的约束处理规则选择进入下一代的个体,对于:(1)试验个体与初始个体均未被标记,选取适应值较大的个体;(2)试验个体未被标记,初始个体被标记,则选取试验个体;(3)两者均被标记,选取偏移值较小的个体。最后更新种群中个体的适应值、弃水量和库容值等参数。
步骤4:分布式计算的实现:采用子种群的概念,以hadoop平台的编程框架mapreduce为依托,首先对一定数量个体组成的父种群进行初始化,然后将该初始种群划分为一定数量的、相对独立的子种群,每个子种群独立进化,最后汇总所有子种群,筛选出最优个体。其中,每个map过程处理一个子种群的进化过程,每个子种群进化一定代数后,通过reduce过程对map过程提交的数据进行汇总并筛选出所有子种群中的最优个体,即对应的最优发电用水方案,并将其与对应的最优适应值作为结果共同生成结果文件输出到hdfs。
4.1map过程;
mapreduce处理的数据形式为<key,value>键值对的形式,由于dde-mr基于子种群进行进化,因此将map函数的输入与输出<key,value>对格式分别设置为:
<key1i,value1i>→<key2i,value2i>,i=1,2,...,n(4-1)
其中,n为子种群总个数;key1i是第i个子种群在文件中的起始地址,value1i代表第i个子种群的所有个体;key2i则是第i个子种群的索引,value2i也代表了第i个子种群的所有个体。
map函数的伪代码如下:
4.2reduce过程;
在map过程和reduce过程之间,存在shuffle过程,它对map的输出键值对按照key值进行了初步的排序与分类,传入reduce的数据变成了[key,list[value]]的形式。因此reduce函数的主要工作为:遍历该list中的value值对应的子种群中的所有个体,筛选出适应值最大的个体并输出到hdfs,且设置reducer的个数为1。
reduce函数的伪代码如下:
如图4所示,以发电量最大为调度目标对泸水河流域的小水电群进行优化调度。采用月调度方式,以2014年为调度目标年份,调度初期水库库容设为实际一月初库容值,引用流量约束、库容约束等均取实际对应数据。按上述步骤根据该年的实际入库径流量对主要的水库型电站求解调度模型得到优化调度仿真结果,包括各时段的发电引用量、库容、弃水量、发电量等。小水电群主要水电站实际调度发电与优化调度发电结果对比如表3-1所示。
表3-1小水电群实际发电与优化发电对比
由调度结果对比得,优化调度下小水电群总发电量基本都得到了提升。同时,对2014年泸水河小水电群实际月发电量与优化调度月发电量进行统计得到图4所示的统计图。可以得出,经优化调度后,小水电群的发电总量基本均超过实际发电量。从仿真结果观察到,小水电群内单独的水电站发电量不一定均有增加,且与每月实际调度相比可能无法达到实际调度值,这是因为在整体调度时为了追求整体最优需要舍弃局部最优来达到整体提升的目标。
如图5所示,为de算法的最优适应值收敛变化曲线,虽前期有波动,但待种群进化至300代左右即收敛到全局最优。
如图6所示,本文引入了加速比的概念来评价并行算法的运行效率。加速比是指在同样的任务与条件下,单个节点执行时间与并行执行时间的比值;加速比越大,并行效果越好。其计算公式如下:
其中,t1为一个任务在单节点状态下的运行时间,tn为该任务在n个节点中并行运行所用的时间。
图中将种群规模为4000的实验运行结果的加速比进行了反馈。当map数较小,即并行任务较少时,因集群中节点之间需要进行通信,集群的运行时间反而比单机运行更长。当map数增加,并行任务数增多,加速比逐渐变大并超过1,在集群环境中运行时,每个作业的运行时间将缩短,加速比将持续增大。由此推知,当问题规模较大、处理作业数较多时,增加集群的规模,即其中的计算节点数目,系统对相同任务的处理能力将会有显著提高,这也说明了差分进化算法在mapreduce框架下处理实际问题能获得较好的加速比。
本说明书实施例所述的内容仅仅是对发明构思的实现形式的列举,本发明的保护范围不应当被视为仅限于实施例所陈述的具体形式,本发明的保护范围也及于本领域技术人员根据本发明构思所能够想到的等同技术手段。
1.基于hadoop的小水电分布式差分进化调度方法,包括如下步骤:
步骤1:建立以发电量最大为目标的数学模型;目标函数设置为小水电站群内n个水电站发电量之和的最大值;
式中,各数学符号含义为:
f:小水电群年发电量,单位为万千瓦时;
t:调度周期总时段数;
i:水电站个数;
ki:第i个水电站的出力系数;
qi(t):水电站i在t时段的发电引用流量;
hi(t):水电站i在t时段的发电水头;
δti:水电站i在t时段的发电时间,单位为s。
另外,小水电优化调度模型的约束条件有:
a.库容约束:
vimin<vi<vimax(1-2)
其中,vimin、vimax分别为第i水库的最小和最大库容值;
b.引用流量约束:
qi,tmin<qi,t<qi,tmax(1-3)
其中,qi,tmin、qi,tmax分别为i水电站在t时段内的最小和最大引用流量;
c.水量平衡:
vi(t)=vi(t-1) (qi(t)-qi(t))(1-4)
其中,vi(t)、vi(t-1)分别表示t和t-1时段的库容值,qi(t)表示t时段区间来水量,qi(t)表示t时段区间下泄流量;
d.非负条件约束:
上述变量均≥0
由于进行长期调度,水库间的水流时间不做考虑;
步骤2:编码及初始化:要对这n个水电站调度周期内的引用流量进行综合调度,需将其作为一个整体,每个个体由该小水电群t时段内的引用流量值组成,即一个t*n维的数组,采用实数编码方式,编码表如表2-1所示;
表2-1水电站编码表
种群规模为np;在种群初始化过程中,读取文件内容,初始化各水电站每个月的来水量以及时段1的库容大小,初始化发电引用流量时以引用流量上下限为边界随机生成种群的所有个体,计算其适应度值并进行存储;
步骤3:进化操作,具体步骤如下:
3.1变异操作;
在差分进化的过程中,种群最先进行变异操作,本发明采用了一种新型变异策略,采用固定的全局边界,利于保持种群的多样性,变异策略如式3-1所示;
xi,j=k*(aj bj) sin(w)*(c*xe,j (1-c)*xr,j)(3-1)
其中,k∈[0,1]为随机数;aj、bj分别为当前种群边界的上下界;xe,j为当前精英解的第j个基因;xr,j为第r个个体的第j个基因,r≠i,w∈[0,2π],c为固定值0.3;
3.2交叉操作;
交叉操作的对象为初始种群与由变异个体组成的种群,采用了二项式交叉方式,即:
其中,
3.3选择操作;
首先依据各水库水电站月初的库容和每个月的来水量,分别采取试验个体和初始种群中个体对应的引用流量方案更新每个月月末的库容值,即:月末库容=月初库容 该月来水量-该月发电引用流量;
若月末库容值不满足库容约束:对低于最小库容值约束的引用流量进行修正,使该月引用流量=月初库容 该月来水量-最小库容,设置该月末库容为最小库容,产生的弃水为0;对高于最大库容值约束的引用流量,先进行标记,后设置该月末库容为最大库容,产生的弃水量=月初库容 该月来水量-引用流量-最大库容,同时用一变量记录该个体弃水量的累加值;对满足库容约束的引用流量,更新弃水量为0;个体中各维更新完毕后分别计算试验个体与初始个体的适应值;
采用如下的约束处理规则选择进入下一代的个体,对于:(1)试验个体与初始个体均未被标记,选取适应值较大的个体;(2)试验个体未被标记,初始个体被标记,则选取试验个体;(3)两者均被标记,选取偏移值较小的个体;最后更新种群中个体的适应值、弃水量和库容值等参数;
步骤4:分布式计算的实现:采用子种群的概念,以hadoop平台的编程框架mapreduce为依托,首先对一定数量个体组成的父种群进行初始化,然后将该初始种群划分为一定数量的、相对独立的子种群,每个子种群独立进化,最后汇总所有子种群,筛选出最优个体;其中,每个map过程处理一个子种群的进化过程,每个子种群进化一定代数后,通过reduce过程对map过程提交的数据进行汇总并筛选出所有子种群中的最优个体,即对应的最优发电用水方案,并将其与对应的最优适应值作为结果共同生成结果文件输出到hdfs;
4.1map过程;
mapreduce处理的数据形式为<key,value>键值对的形式,由于dde-mr基于子种群进行进化,因此将map函数的输入与输出<key,value>对格式分别设置为:
<key1i,value1i>→<key2i,value2i>,i=1,2,...,n(4-1)
其中,n为子种群总个数;key1i是第i个子种群在文件中的起始地址,value1i代表第i个子种群的所有个体;key2i则是第i个子种群的索引,value2i也代表了第i个子种群的所有个体;
map函数的伪代码如下:
4.2reduce过程;
在map过程和reduce过程之间,存在shuffle过程,它对map的输出键值对按照key值进行了初步的排序与分类,传入reduce的数据变成了[key,list[value]]的形式;因此reduce函数的主要工作为:遍历该list中的value值对应的子种群中的所有个体,筛选出适应值最大的个体并输出到hdfs,且设置reducer的个数为1;
reduce函数的伪代码如下: