基于粒子群算法的水电站中长期发电优化调度
在该算例中,主要是以三峡的水电站为研究的对象。以中长期的时间轴为研究时间段,这里选取的是一年的时间。在这一年的时间跨度内,分为了12个时间段,每个时间段大致有30天的时间。通过各个时间段的数据,再加上对于粒子群的惯性权重和学习因子的进一步改进来进行对于三峡电站的中长期的一个发电的优化调度。通过将基于普通的一个PSO算法的实验结果和改进后的一个PSO调度结果相比较,得到最后的最优解,即最大的发电量仿真结果和最大的发电效益仿真结果。部分主体代码如下:
未改进的PSO:
clear
%% load data
DATA1=xlsread('库容.xlsx');
DATA2=xlsread('三峡来水概率月径流.xml');
DATA3=xlsread('三峡电站发电约束表.xml');
DATA4=xlsread('三峡入库流量水头损失.xml');
global vtlist;
vtlist=DATA4(:,1:2);
global q;
%q=sum((DATA2(:,1)./sum(DATA2(:,1))).*DATA2(:,2:end));
q=[6390 6390 6390 6390 6390 22400 22400 22400 22400 15300 7740 7740];
global vhlist;
vhlist=DATA1;
global minS;
global maxS;
global minP;
global maxP;
global minV;
global maxV;
minS=4000;
maxS=98800;
minP=499;
maxP=2240;
minV=0;
maxV=393;
%% PSO
N = 20;
d = 24;
ger = 300;
Ub = [];
Lb = [];
for i=1:12
Lb=[Lb 0];
Ub=[Ub 50000];
end
for i=1:12
Lb=[Lb -4000];
Ub=[Ub 4000];
end
for i=1:d
limit(i,1)=Lb(i);
limit(i,2)=Ub(i);
end
vlimit = [Lb-Ub;Ub-Lb;];
vlimit1=ones(1,N)'*vlimit(1,:);
vlimit2=ones(1,N)'*vlimit(2,:);
%w = 0.8;
wmax=0.9;
wmin=0.4;
c1min = 0.5;
c2min = 0.5;
c1max = 2.5;
c2max = 2.5;
x=[];
for i = 1:d
x(:,i) = limit(i, 1) + (limit(i, 2) - limit(i, 1)) * rand(N, 1);
end
v = rand(N, d);
xm = x;
ym = zeros(1, d);
fxm = ones(N, 1)*(-inf);
fym = -inf;
iter = 1;
record = zeros(ger, 1);
fx=zeros(1,N);
wlist=zeros(1,ger);
c1list=zeros(1,ger);
stopcount=0;
stopcountlist=zeros(1,ger);
T0=4;
while iter <= ger
iter
w=0.5;
c1=2.0;
c2=1.0;
wlist(iter)=w;
c1list(iter)=c1;
stopcountlist(iter)=stopcount;
for i=1:N
fx(i) = callfit(x(i,:));
end
for i = 1:N
if fxm(i) < fx(i)
fxm(i) = fx(i);
xm(i,:) = x(i,:);
end
end
stopcount=stopcount+1;
if fym < max(fxm)
stopcount=0;
[fym, nmax] = max(fxm);
ym = xm(nmax, :);
end
v = v * w + c1 * rand * (xm - x) + c2 * rand * (repmat(ym, N, 1) - x);
v(v < vlimit(1,:)) = vlimit1(v < vlimit(1,:));
v(v > vlimit(2,:)) = vlimit2(v > vlimit(2,:));
x = x + v;
for ii=1:d
x(x(:,ii) > limit(ii,2),ii) = limit(ii,2);
x(x(:,ii) < limit(ii,1),ii) = limit(ii,1);
end
record(iter) = fym;
% x0 = 0 : 0.01 : 20;
% plot(x0, f(x0), 'b-', x, f(x), 'ro');title('状态位置变化')
% pause(0.1)
iter = iter+1;
end
figure(1);plot(record,'black-');xlabel('迭代次数');ylabel('发电量/亿千瓦时');title('发电量与迭代次数关系');
figure(2);plot(wlist,'black-');xlabel('迭代次数');ylabel('权重');title('惯性权重与迭代次数关系');
figure(3);plot(c1list,'black-');xlabel('迭代次数');ylabel('c1权重');title('学习因子C1与迭代次数关系');
hold on
figure(5);plot(stopcountlist,'black-');xlabel('迭代次数');ylabel('停滞次数');title('PSO最优解停滞次数与迭代次数关系');
figure(6);plot(vhlist(:,1),vhlist(:,2));xlabel('水位/米');ylabel('库容量/亿立方米');title('水位与库容量关系');
disp(['最大值:',num2str(fym)]);
disp(['变量取值:',num2str(ym)]);
printx(ym);
x=ym;
改进后的PSO:
clear
%% load data
DATA1=xlsread('库容.xlsx');
DATA2=xlsread('三峡来水概率月径流.xml');
DATA3=xlsread('三峡电站发电约束表.xml');
DATA4=xlsread('三峡入库流量水头损失.xml');
global vtlist;
vtlist=DATA4(:,1:2);
global q;
%q=sum((DATA2(:,1)./sum(DATA2(:,1))).*DATA2(:,2:end));
q=[6390 6390 6390 6390 6390 6390 22400 22400 15300 15300 7740 7740];
global vhlist;
vhlist=DATA1;
global minS;
global maxS;
global minP;
global maxP;
global minV;
global maxV;
minS=4000;
maxS=98800;
minP=499;
maxP=2240;
minV=0;
maxV=393;
%% PSO
N = 20; % 初始种群个数
d = 24; % 空间维数
ger = 100; % 最大迭代次数
Ub = [];%优化参数上界
Lb = [];%优化参数下界
for i=1:12
Lb=[Lb 0];
Ub=[Ub 50000];
end
for i=1:12
Lb=[Lb -4000];
Ub=[Ub 4000];
end
for i=1:d
limit(i,1)=Lb(i);
limit(i,2)=Ub(i);
end
vlimit = [Lb-Ub;Ub-Lb;];% 设置速度限制
vlimit1=ones(1,N)'*vlimit(1,:);
vlimit2=ones(1,N)'*vlimit(2,:);
%w = 0.8; % 惯性权重
wmax=0.9;
wmin=0.4;
c1min = 0.5; % 自我学习因子
c2min = 0.5; % 群体学习因子
c1max = 2.5;
c2max = 2.5;
x=[];
for i = 1:d
x(:,i) = limit(i, 1) + (limit(i, 2) - limit(i, 1)) * rand(N, 1);%初始种群的位置
end
v = rand(N, d); % 初始种群的速度
xm = x; % 每个个体的历史最佳位置
ym = zeros(1, d); % 种群的历史最佳位置
fxm = ones(N, 1)*(-inf); % 每个个体的历史最佳适应度
fym = -inf; % 种群历史最佳适应度
iter = 1;
record = zeros(ger, 1); % 记录器
fx=zeros(1,N);
wlist=zeros(1,ger);
c1list=zeros(1,ger);
c3list=zeros(1,ger);
c4list=zeros(1,ger);
stopcount=0;
stopcountlist=zeros(1,ger);
T0=4;%停滞步数
while iter <= ger
iter
w=wmax-(iter/ger)^2*(wmax-wmin);%改进惯性权重
c1=c1min+(c1max-c1min)*(iter/ger);
c2=c2min+(c2max-c2min)*(iter/ger);
wlist(iter)=w;
c1list(iter)=c1;
stopcountlist(iter)=stopcount;
if stopcount>=T0
c3=rand();
c4=rand();
else
c3=1;
c4=1;
end
c3list(iter)=c3;
c4list(iter)=c4;
for i=1:N
fx(i) = callfit(x(i,:));
end% 个体当前适应度
for i = 1:N
if fxm(i) < fx(i)
fxm(i) = fx(i); % 更新个体历史最佳适应度
xm(i,:) = x(i,:); % 更新个体历史最佳位置
end
end
stopcount=stopcount+1;
if fym < max(fxm)
stopcount=0;
[fym, nmax] = max(fxm); % 更新群体历史最佳适应度
ym = xm(nmax, :); % 更新群体历史最佳位置
end
v = v * w + c1 * rand * (c3.*xm - x) + c2 * rand * (c4.*repmat(ym, N, 1) - x);% 速度更新
% 边界速度处理
v(v < vlimit(1,:)) = vlimit1(v < vlimit(1,:));
v(v > vlimit(2,:)) = vlimit2(v > vlimit(2,:));
x = x + v;% 位置更新
% 边界位置处理
for ii=1:d
x(x(:,ii) > limit(ii,2),ii) = limit(ii,2);
x(x(:,ii) < limit(ii,1),ii) = limit(ii,1);
end
record(iter) = fym;%最大值记录
% x0 = 0 : 0.01 : 20;
% plot(x0, f(x0), 'b-', x, f(x), 'ro');title('状态位置变化')
% pause(0.1)
iter = iter+1;
end
figure(1);plot(record,'black-');xlabel('迭代次数');ylabel('发电量/亿千瓦时');title('发电量与迭代次数关系');
figure(2);plot(wlist,'black-');xlabel('迭代次数');ylabel('权重');title('惯性权重与迭代次数关系');
figure(3);plot(c1list,'black-');xlabel('迭代次数');ylabel('c1权重');title('学习因子C1与迭代次数关系');
figure(4);plot(c3list,'black-');xlabel('迭代次数');ylabel('权重');title('扰动因子与迭代次数关系');
hold on
plot(c4list,'r--')
legend('c3扰动因子','c4扰动因子');
figure(5);plot(stopcountlist,'black-');xlabel('迭代次数');ylabel('停滞次数');title('PSO最优解停滞次数与迭代次数关系');
figure(6);plot(vhlist(:,1),vhlist(:,2));xlabel('水位/米');ylabel('库容量/亿立方米');title('水位与库容量关系');
disp(['最大值:',num2str(fym)]);
disp(['变量取值:',num2str(ym)]);
printx(ym);
x=ym;
基于粒子群算法的水电站中长期发电优化调度相关推荐
- 【选址优化】基于粒子群算法求解配电网抢修选址优化问题含Matlab源码
1 简介 基于粒子群算法求解配电网抢修选址优化问题. 2 部分代码 function DrawCircle(Circle1, Circle2, r, 3600, s)plot(model.trou ...
- 【优化选址】基于粒子群算法实现无线传感器网络覆盖优化附matlab代码
1 简介 无线传感器网络是将大量的传感器感知节点散布在监测区域中,通过节点之间的无线信息传输形成的自组网.由于无线传感器网络工作环境复杂,传感器节点更换电源不便,网络的覆盖控制问题成为研究核心,它决定 ...
- 电气论文:基于粒子群算法的梯级水火电力系统优化调度【有代码】
系列文章目录 个人电气博文传送门:学好电气全靠它,个人电气博文目录(持续更新中-) 本文基本文字加代码共27页. 提示:专栏解锁后,可以查看该专栏所有文章. 文章目录 系列文章目录 一.梯级水电站基本 ...
- 【有序充电】基于粒子群算法实现电动汽车充电动态优化策略附matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.
- 【微电网优化】基于粒子群算法求解热电联供型微电网经济运行优化问题含Matlab源码
1 简介 面对全球环境污染和能源危机的双重压力,世界各国将焦点转向太阳能.风能等清洁可再生能源.微电网是组织和利用可再生能源发电的重要途径之一.本文以微电网的能量优化调度为研究对象,建立了微电网能量优 ...
- 基于粒子群算法的混合储能容量配置matlab 以风光互补发电储能系统为背景,以年运行成本最低为目标
基于粒子群算法的混合储能容量配置matlab 以风光互补发电储能系统为背景,以年运行成本最低为目标,根据负荷和发电量的缺额等制定超级电容和蓄电池配置方案,采用粒子群算法得到蓄电池和超级电容的个数,有详 ...
- 基于粒子群算法优化的Elman神经网络数据预测-附代码
基于粒子群算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于粒子群算法优化的Elman神经网络数据预测 - 附代码 1.Elman 神经网络结构 2.Elman 神经用络学习过程 3.电 ...
- 【微电网优化】基于粒子群算法求解混合储能系统容量优化问题含Matlab源码
1 简介 为了提高供电的稳定性.可靠性,实现日夜发电,在太阳能.风能资源比较丰富的区域,建立风能.太阳能互补发电系统.但是由于系统投入成本过高,风.光又存在间歇性和不稳定性等问题,需要配置储能系统来平 ...
- 基于信息熵确立权重的topsis法_一种基于改进多目标粒子群算法的受端电网储能优化配置方法与流程...
本发明涉及受端电网中储能的规划问题,具体涉及一种基于改进多目标粒子群算法的受端电网储能优化配置方法. 背景技术: 随着煤炭等非可再生.高污染的能源总量日益减少,我国的电能结构正由火力发电向低碳化的清洁 ...
最新文章
- 空洞卷积aspp 学习笔记
- C++ 接口(抽象类)
- 生物信息学搞计算机,生物信息学前景展望,谈谈感想(已经停止)
- 深度学习数据集中数据差异大_使用差异隐私来利用大数据并保留隐私
- 区间覆盖全部类型及部分精选习题汇总详解(贪心策略)
- ipsec_profile
- UI: 自定义 UISegmentedControl
- python点击屏幕_Python屏幕操作
- mysql多个left join
- java indexof 参数_Java indexOf() 方法
- stm32学习(一)STM32简单介绍(初步了解单片机与STM32)
- 溢出部分用省略号表示
- php开发游戏玩家属性,游戏数值策划属性篇(一)
- 【论文简述】Rethinking Depth Estimation for Multi-View Stereo: A Unified Representation(CVPR 2022)
- HBase数据库使用TTL清理过期数据
- ssssssssss
- 医院预约挂号小程序 毕业设计毕业论文 开题报告和效果图参考(基于微信小程序毕业设计题目选题课题)
- android 墨迹天气背景,GitHub - xiangzhihong/android: 仿墨迹天气折线,以及背景滚动效果...
- 蓝桥杯c语言试题寒假作业,寒假作业--蓝桥杯
- html网页接单广告词,网站广告词
热门文章
- nodejs addon binding osg
- Windows远程控制家里的电脑
- 做为一名大数据新手,如何成为大数据工程师?附上学习路线
- vue+element 使用iconfont (阿里图标库)
- IPFS/FIL10月15日迎来又一轮减产 对投资者有什么影响?
- android 11.0 12.0app安装黑名单(限制app安装)
- window.onload的使用
- java 项目启动异常 Command line is too long.
- Excel - 斜线表头制作
- idea中摸鱼插件_推荐几款我常用的IDEA插件~网友:妈耶~飞起来咯!