天天看点

【潮流计算】基于matlab粒子群算法优化电力系统潮流计算【含Matlab源码 2157期】

一、粒子群算法简介

1 标准粒子群优化(PSO)算法

PSO算法根据对环境的适应度将群体中的个体移动到好的区域,将每个个体看作是D维搜索空间中的一个粒子,根据粒子本身的飞行经验和群体中其他同伴的飞行经验调整下一步飞行方向,从而搜索到最好的空间位置解。设第i个粒子的位置表示为一个D维的位置坐标xi=(xi1,xi2,…,xiD),它经过的个体最好位置记为pi=(pi1,pi2,…,piD),也称为 pbest。群体中所有粒子经历过的最好位置的索引号用g表示,即pg,也称为gbest。粒子i的速度用 vi=(vi1,vi2,…,viD)表示,对于粒子i的第d维(1≤d≤D)情况,有如下的坐标、速度迭代变换:

【潮流计算】基于matlab粒子群算法优化电力系统潮流计算【含Matlab源码 2157期】

式中:ω为惯性权重系数;c1和c2为加速度常数,c1和c2代表每个粒子的历史最好位置pbest和群体所有粒子历史最好位置gbest的统计加速项的权重,c1代表粒子i对个体历史最优的认知程度,c2代表粒子i对群体最优领导者的认知程度,适当地调整c1和c2的数值,有利于寻找全局最优解以及局部最优解;pbest是本身所找到的最优解,根据适应度在每次迭代后进行比较;gbest是群体所有粒子历史所找到的最优解,根据适应度在每次迭代后进行比较;rand1()和rand2()代表两个在[0,1]范围里变化的随机数值。2 电力系统最优潮流(optimal power flow, OPF)

2.1 目标函数

电力系统中的最优一般以发电成本最小为目标,其数学模型如下:

【潮流计算】基于matlab粒子群算法优化电力系统潮流计算【含Matlab源码 2157期】

2.2 等式约束

节点功率平衡方程:

【潮流计算】基于matlab粒子群算法优化电力系统潮流计算【含Matlab源码 2157期】

2.3 不等式约束

【潮流计算】基于matlab粒子群算法优化电力系统潮流计算【含Matlab源码 2157期】

以上模型中,式(13)至式(16)依次为:电源有功功率上下界约束;无功源无功功率上下界约束;节点电压上下界约束;线路传输功率潮流约束。式中:SB为系统所有节点集合;SG为所有发电机集合;SR为所有无功源集合;SL为所有支路集合;PGi,QGi为发电机i的有功、无功功率;PDi,QDi为节点i的有功、无功负荷;Ui,θi为节点i的电压幅值与相角, θij=θi-θj;Gij,Bij为节点导纳矩阵第i行第j列元素的实部与虚部;PL为线路的有功潮流,设线路L两端节点为i,j。

等式非线性功率方程常采用牛顿-拉夫逊法进行迭代求解,牛顿-拉夫逊法将非线性问题经过泰勒展开,并略去二次以上项,化非线性问题为近似线性问题求解。对初值经过多次的修正迭代,最终找到目标解。

2.4 构建罚函数

本文采用罚函数的方法构造适合于PSO算法的优化目标函数,将不等式约束条件化为等式问题:

【潮流计算】基于matlab粒子群算法优化电力系统潮流计算【含Matlab源码 2157期】

式中:右边第一项为燃料耗费;第二项是不等式约束的相关物理量的越限罚函数之和;λX是罚因子。Xlim定义如下:

【潮流计算】基于matlab粒子群算法优化电力系统潮流计算【含Matlab源码 2157期】

在电力系统中X可以是电压U上下界、机组有功功率P上下界、无功功率Q上下界、线路传输功率Pij上下界等物理量。

3 仿真实验结果

3.1 粒子飞行搜索状态的限制

PSO算法是属于随机搜索算法,因此很难处理等式约束问题。特别是当可行域很小的时候,很难找到最优解。采用一些方法加强求解能力:

a)当粒子不满足等式约束时,粒子继续飞行跳跃,避开不可行解的空间,直到找到可行解为止;

b)当粒子非常接近g而速度又接近于0时,粒子将在很小的空间里飞行,将失去全局搜索能力,需重新初始粒子;

c)粒子速度接近于0时,重新初始粒子;

d)采用足够大的罚函数,将粒子限制在可行空间里。

3.2 算法流程

a)初始设定微粒的随机速度和位置;

b)计算每个微粒的适应值;

c)对每个微粒,将其适应值与所经历过的最好位置P 的适应值进行比较,若较好,则将其作为该微粒的当前最好位置;

d)对每个微粒,将其当前最好适应值与全局所经历过的最好位置的适应值进行比较,若较好,则将其作为当前的全局最好位置;

e)通过位置、速度迭代方程式(1)、式(2)迭代;

f)若未达到结束条件,则返回步骤b。

为了考察改进粒子群算法与标准粒子群算法的性能,我们利用MATLAB6对粒子群算法以及改进粒子群算法进行了模拟比较。

【潮流计算】基于matlab粒子群算法优化电力系统潮流计算【含Matlab源码 2157期】

图1 PSO算法程序流程图

二、部分源代码

clc
 clear
 close all
 %% NR load flow analysis
 nbus = 30;
 busdata = busdatas(nbus);
 linedata = linedatas(nbus);
 resultWithoutDG = nrloadflow(nbus,busdata,linedata);
 dim = 10;
 Pmin=3; %minimum power of solar DG unit
 if nbus==30
 Pmax=30; %maximum power of solar DG unit in MW
 else
 Pmax=100;
 end
 %% potential bus selection
 R=linedata(:,3);
 sourcbus=linedata(:,1);
 destintnbus=linedata(:,2);
 % del=180/pi*del;
 for ii=1:size(linedata,1)
 alpha(ii)=(R(ii)/(abs(resultWithoutDG.V(sourcbus(ii)))…
 *abs(resultWithoutDG.V(sourcbus(ii)))))…
 *cos(resultWithoutDG.del(sourcbus(ii))…
 -resultWithoutDG.del(destintnbus(ii)));
 beta(ii)=(R(ii)/(abs(resultWithoutDG.V(sourcbus(ii)))…
 *abs(resultWithoutDG.V(sourcbus(ii)))))…
 *sin(resultWithoutDG.del(sourcbus(ii))…
 -resultWithoutDG.del(destintnbus(ii)));
 SV(ii)=alpha(ii).*resultWithoutDG.Pi(destintnbus(ii))…
 -beta(ii).*resultWithoutDG.Qi(destintnbus(ii));
 end[sv,ind]=sort(SV,‘descend’);
 po=destintnbus(ind);
 [poo,ia,ic]=unique(po);
 temp=po(sort(ia));
 loadBusLocation = temp(1:dim);
 %% GA optimisation
 fitness= @(x) objf(x,loadBusLocation,resultWithoutDG,nbus);
 options = gaoptimset(‘MutationFcn’,@mutationadaptfeasible,‘PopulationSize’,20);
 options = gaoptimset(options,‘PlotFcns’,{@gaplotbestf}, …
 ‘Display’,‘iter’,‘Generations’,80);
 [GAx,fval] = ga(fitness,dim,[],[],[],[],Pmin.*ones(1,dim)…
 ,Pmax.*ones(1,dim),[],options);
 finalGAresults= resultcalc(GAx,loadBusLocation,resultWithoutDG,nbus);
 %% PSO optimisation
 [PSOx,objval]=PSO(loadBusLocation,resultWithoutDG,nbus,dim,Pmax,Pmin);
 finalPSOresults= resultcalc(PSOx’,loadBusLocation,resultWithoutDG,nbus);
 FIG1 = figure(‘Name’, ‘PSO Optimization’,‘NumberTitle’,‘off’);
 figure(FIG1)
 plot(1./objval)
 grid on;
 ylabel(‘VL (pu)’);
 xlabel(‘time (sec)’);
 title(‘PSO optimisation’)
 %% Result plotting
 % volatge magnitude plot
 FIG2 = figure(‘Name’, ‘BUS VOLTAGE’,‘NumberTitle’,‘off’);
 figure(FIG2)
 bar([finalPSOresults.V,finalGAresults.V,resultWithoutDG.V],‘group’)
 xlim([0 nbus+1])
 ylim([0.95,1.1])
 grid on;
 legend(‘PSO optimised’,‘GA optimised’,‘Without DG’)
 xlabel(‘Bus number’)
 ylabel(‘Volatge Magnitude in p.u.’)
 title(‘Bus Voltage’)
 % power loss comparison
 FIG3 = figure(‘Name’, ‘Total Active Power loss’,‘NumberTitle’,‘off’);
 figure(FIG3)
 bar([sum(finalPSOresults.Lpij);sum(finalGAresults.Lpij);sum(resultWithoutDG.Lpij)])
 grid on;
 title(‘Total Active Power loss in MW’)
 ylabel(‘Active Power loss(MW)’)
 set(gca,‘Xtick’,0)
 text(0.8,-0.2,‘PSO tuned’)
 text(1.8,-0.2,‘GA tuned’)
 text(2.8,-0.2,‘Without Optimisation’)
 % printresult      

三、运行结果

【潮流计算】基于matlab粒子群算法优化电力系统潮流计算【含Matlab源码 2157期】
【潮流计算】基于matlab粒子群算法优化电力系统潮流计算【含Matlab源码 2157期】
【潮流计算】基于matlab粒子群算法优化电力系统潮流计算【含Matlab源码 2157期】

四、matlab版本及参考文献

继续阅读