优化调度基于matlab粒子群算法求解抽水蓄能电站最佳调度问题含Matlab源码 1968期
Posted 海神之光
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优化调度基于matlab粒子群算法求解抽水蓄能电站最佳调度问题含Matlab源码 1968期相关的知识,希望对你有一定的参考价值。
一、抽水蓄能电站最佳调度问题简介
水沙联调的多目标数学模型
本文研究的抽水蓄能电站修建在多沙河流上,解决这类水库泥沙问题最有效的方法就是依据地形修建拦沙库。拦沙库的主要任务是在水库运行基准年内拦排泥沙,同时因抽水蓄能电站下库在正常运行期由于受泥沙影响,天然径流不能直接进入专用下水库,为补充水库渗漏、蒸发等造成的损失水量,故需要通过拦沙库向下水库补充水量。本文主要研究的是库区水沙联调的多目标规划问题,在满足水位的要求下,寻求水库补水与排沙的协调关系。
1 目标函数
根据拦沙库的主要任务有以下两个目标:一是尽可能在汛期降低拦沙库水位,增加拦沙库排沙效果;二是保证拦沙库有一定的补水能力。将两个目标分别表示为:
(1)式为库容目标函数,式中右端VYt为库区泥沙淤积库容,T为计算时段。(2)式为补水能力目标函数,E为补水能力,即在一定的时间范围内,库水位越高、入库流量越大,水库更容易蓄满水。
观察目标函数(1)、(2),表面上,保持有效库容最大与补水能力最大似乎是相似的、一致的,但如果看到这两个目标函数都与运行水位有关,就不难知道这两个目标是相互矛盾和冲突的。要使拦沙库拦沙效果好,则拦沙库在汛期降低水位,库水位越低,排沙效果越好,但水位过低,在退水后拦沙库不容易蓄满水,影响下水库的补水量,增大水库运行的风险。相反,如若保证拦沙库有一定的补水能力,则拦沙库应在高水位下运行,库区壅水高度的增加,必然加剧淤积,从而减少有效库容。针对目标函数的矛盾性,根据多目标优化理论,采用权重法将优化目标转化为主要目标和次要目标,分别赋予各个目标不同的权重,采用线性加权的方法,将多目标问题转化为单目标问题求解。虽然方程(1)和(2)式是一对相互矛盾的目标函数,但两个目标函数的单位一致,这为线性组合提供了前提条件,故目标函数可以变为:
式中,λ1和λ2为相应权重值,其取值范围是0~1。
2 PSO优化调度模型
粒子群优化算法(PSO-Particle Swarm Optimization)源自对鸟类和鱼类等动物群体行为的研究,其实质是根据个体与环境的适应程度,并通过群体间的信息共享和个体自身经验的总结来不断修正个体的行为策略,从而使整体逐渐“飞行”到最佳区域。在PSO中,N维空间中的每一个粒子代表了优化问题的一个可行解,所有的粒子都有一个由目标优化函数决定的适应值和一个速度决定其飞行的方向和距离。
根据POS算法的思想,可将搜索空间设为T维,用N个粒子对其进行搜索。每个粒子的位置就是一个T维向量,每一维向量表示一个模型的权重,即xi=(xi1,xi2,…,xi T),xit为微粒i在T维空间上的坐标。具体的POS优化调度模型的实现如下:
(1)在各时段允许的库容变化范围内,随机生成N组时段水位变化序列Z1=(z11,z21,…,zT1),…,ZN=(z1N,z2N,…,zTN),即随机初始化N个粒子(T为计算时段,也就是粒子的各种状态),检验每个粒子的状态是否满足水量平衡方程,如果不满足,重新初始化粒子群;
(2)计算粒子群中各粒子的适应度。由于目标函数所求解的是F(t)最大,因此粒子的适应度函数可由目标函数式变化得到:f(t)=c/F,c式中是个常数,在保证f(t)≤1的情况下,为了直观的反映粒子适应度大小,c根据具体情况调节;
(3)产生新一代N个粒子。根据N个粒子的适应度找到每个粒子迄今为止搜索到的最好位置Zp,粒子群此次迭代找到的最好位置Zg以及粒子群迄今为止搜索到的最好位置ZG。每个粒子根据水库水位扰动方程进行更新,扰动方程为:
式中:t=1,2,…T-1;i=1,2,…N;k是迭代次数;ω是惯性权重;c1、c2是加速常数,一般取2;r1、r2是在[0,1]内取值的随机函数;
(4)判断是否达到停止条件。停止条件通常由最大迭代次数和搜索到的最优位置满足适应阈值。若已经达到条件,寻优结束;若没有达到条件则转(2)继续执行。
3 约束条件
流量约束:为了保证下游河道的安全,水库下泄流量不能大于下游允许的安全泄量或其它有些特殊的要求。
水位约束:为保证拦沙库补水能力,任何时刻其水位不得低于设计死水位。
非负约束:以上各约束条件中的变量均满足非负要求。
二、部分源代码
%% 抽水蓄能电站的最佳调度方案研究 火+水+抽
% 粒子群算法版
% 变量定义如下:
% 决策变量:火电出力,抽蓄出力
% x=[Pf(6*24),Pc(2*24)];
clc;
clear;
close all;
%% 算法参数
parameter;
nVar=7*24; % Number of Decision Variables
VarMin=[ones(1,24)*P_minfire(1), ones(1,24)*P_minfire(2), ones(1,24)*P_minfire(3),ones(1,24)*P_minfire(4),...
ones(1,24)*P_minfire(5), ones(1,24)*P_minfire(6),ones(1,24)*(-300)]; % Lower Bound of Variables
VarMax=[ones(1,24)*P_maxfire(1), ones(1,24)*P_maxfire(2),ones(1,24)*P_maxfire(3),ones(1,24)*P_maxfire(4), ...
ones(1,24)*P_maxfire(5),ones(1,24)*P_maxfire(6),ones(1,24)*300]; % Upper Bound of Variables
MaxIt=500; % Maximum Number of Iterations
nPop=500; % Population Size (Swarm Size)
%% 计算
[ bestPosition, fitValue ] = ...
PSOFUN( @fun_objective,nVar,VarMin,VarMax,MaxIt,nPop );
x=bestPosition;
[f,fun,fun1,fun2,six,two,g,g1,h]= jieguo(x);
f
six
two
fun
fun1
fun2
% g;
% [mg ng]=max(g)
% g1;
% [mg1 ng1]=max(g1)
% h;
% [mh nh]=max(h)
%% 各个决策变量的含义
Pfl=six(:,1);
Pf2=six(:,2);
Pf3=six(:,3);
Pf4=six(:,4);
Pf5=six(:,5);
Pf6=six(:,6);
%抽蓄1
Pc1=two(:,1);
% %抽蓄2
% Pc2=two(:,2);
%% 火电出力求和
Pf=zeros(1,24);
for t=1:24
Pf(t)=Pfl(t)+Pf2(t)+Pf3(t)+Pf4(t)+Pf5(t)+Pf6(t) ;
end
%% 水电出力
P_w=sum(P_shui(:))*ones(1,24);
%% 抽蓄出力
P_c=Pc1;
P_c1=zeros(1,24);
P_c0=zeros(1,24);
for t=1:24
if P_c(t)>=0
P_c1(t)=P_c(t);
else
P_c0(t)=P_c(t);
end
end
三、运行结果
四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 向波,宋刚福,周婷,周晓蔚.抽水蓄能电站水沙调度研究[J].水力发电学报. 2012,31(04)
3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除
以上是关于优化调度基于matlab粒子群算法求解抽水蓄能电站最佳调度问题含Matlab源码 1968期的主要内容,如果未能解决你的问题,请参考以下文章
优化调度基于matlab粒子群算法求解经济调度优化问题含Matlab源码 1489期
微电网优化基于matlab粒子群算法求解微网经济调度和环境友好调度优化问题含Matlab源码 2283期