💥1 概述
基于粒子群优化算法的最优潮流问题是电力系统中的一个重要优化问题,旨在通过调整发电机的出力、变压器的变比和线路的潮流分配,使得电力系统中的功率损耗最小,从而达到经济运行和电能质量要求。
下面是基于粒子群优化算法的最优潮流求解步骤:
1. 确定优化目标:最优潮流问题的优化目标通常为最小化功率损耗,可以定义为目标函数。目标函数可以由潮流方程和功率损耗公式组成。
2. 确定问题约束:最优潮流问题还涉及到一系列约束条件,包括电压限制、功率平衡条件、线路容量限制等。这些约束条件需要在优化过程中得到满足。
3. 设计粒子表示:将潮流问题转化为一个多维优化问题,需要将各个调节变量编码成粒子的位置。其中,调节变量包括发电机出力、变压器变比和线路潮流等。
4. 初始化粒子群:随机生成一组粒子初始位置和速度,代表个体解,同时需要设置全局最优位置和最优适应度。
5. 更新粒子位置和速度:通过粒子群优化算法,根据各粒子的历史最优位置和全局最优位置,更新粒子的位置和速度。更新公式中的参数和系数可以根据实际情况进行调整。
6. 评估适应度:根据更新的粒子位置,计算相应的适应度值,即目标函数值。
7. 更新最优解:根据适应度值的比较,更新局部最优位置和全局最优位置。
8. 终止条件:定义一定的终止条件,如达到最大迭代次数、适应度值足够小等,终止优化过程。
9. 输出优化结果:输出全局最优位置对应的调节变量值,即最优潮流解。
基于粒子群优化算法的最优潮流求解能够提供电力系统经济运行的一系列优化调度方案,从而实现功率损耗最小化、供需平衡和线路安全运行的目标。
最优潮流(OPF)问题在电力系统运行中很重要。OPF 问题的目标是通过在满足某些操作约束的同时优化特定目标来确定电力系统的最佳运行状态。
本文说明了如何使用元启发式方法解决 OPF 问题。
📚2 运行结果
30节点数据:
function Data=IEEE_30_bus_Data basemva = 100; accuracy = 0.001; maxiter = 50; % IEEE 30-BUS TEST SYSTEM (American Electric Power) % Bus Bus Voltage Angle ---Load---- -------Generator----- Injected % No code Mag. Degree MW Mvar MW Mvar Qmin Qmax Mvar busdata=[1 1 1.06 0.0 0.0 0.0 0.0 0.0 0 0 0 2 2 1.043 0.0 21.70 12.7 40.0 0.0 -40 50 0 3 3 1.0 0.0 2.4 1.2 0.0 0.0 0 0 0 4 3 1.06 0.0 7.6 1.6 0.0 0.0 0 0 0 5 2 1.01 0.0 94.2 19.0 0.0 0.0 -40 40 0 6 3 1.0 0.0 0.0 0.0 0.0 0.0 0 0 0 7 3 1.0 0.0 22.8 10.9 0.0 0.0 0 0 0 8 2 1.01 0.0 30.0 30.0 0.0 0.0 -10 40 0 9 3 1.0 0.0 0.0 0.0 0.0 0.0 0 0 0 10 3 1.0 0.0 5.8 2.0 0.0 0.0 -6 24 19 11 2 1.082 0.0 0.0 0.0 0.0 0.0 0 0 0 12 3 1.0 0 11.2 7.5 0 0 0 0 0 13 2 1.071 0 0 0.0 0 0 -6 24 0 14 3 1 0 6.2 1.6 0 0 0 0 0 15 3 1 0 8.2 2.5 0 0 0 0 0 16 3 1 0 3.5 1.8 0 0 0 0 0 17 3 1 0 9.0 5.8 0 0 0 0 0 18 3 1 0 3.2 0.9 0 0 0 0 0 19 3 1 0 9.5 3.4 0 0 0 0 0 20 3 1 0 2.2 0.7 0 0 0 0 0 21 3 1 0 17.5 11.2 0 0 0 0 0 22 3 1 0 0 0.0 0 0 0 0 0 23 3 1 0 3.2 1.6 0 0 0 0 0 24 3 1 0 8.7 6.7 0 0 0 0 4.3 25 3 1 0 0 0.0 0 0 0 0 0 26 3 1 0 3.5 2.3 0 0 0 0 0 27 3 1 0 0 0.0 0 0 0 0 0 28 3 1 0 0 0.0 0 0 0 0 0 29 3 1 0 2.4 0.9 0 0 0 0 0 30 3 1 0 10.6 1.9 0 0 0 0 0]; % busdata=[1 1 1.06 0 0 0 % 2 2 1.043 0 21.7 12.7 % 3 3 1 0 2.4 1.2 % 4 3 1.06 0 7.6 1.6 % 5 2 1.01 0 94.2 19 % 6 3 1 0 0 0 % 7 3 1 0 22.8 10.9 % 8 2 1.01 0 30 30 % 9 3 1 0 0 0 % 10 3 1 0 5.8 2 % 11 2 1.082 0 0 0 % 12 3 1 0 11.2 7.5 % 13 2 1.071 0 0 0 % 14 3 1 0 6.2 1.6 % 15 3 1 0 8.2 2.5 % 16 3 1 0 3.5 1.8 % 17 3 1 0 9 5.8 % 18 3 1 0 3.2 0.9 % 19 3 1 0 9.5 3.4 % 20 3 1 0 2.2 0.7 % 21 3 1 0 17.5 11.2 % 22 3 1 0 0 0 % 23 3 1 0 3.2 1.6 % 24 3 1 0 8.7 6.7 % 25 3 1 0 0 0 % 26 3 1 0 3.5 2.3 % 27 3 1 0 0 0 % 28 3 1 0 0 0 % 29 3 1 0 2.4 0.9 % 30 3 1 0 10.6 1.9 ]; % Line code % Bus bus R X 1/2 B = 1 for lines % nl nr p.u. p.u. p.u. > 1 or < 1 tr. tap at bus nl % linedata=[ 1 2 0.0192 0.0575 0.02640 1 % 1 3 0.0452 0.1852 0.02040 1 % 2 4 0.0570 0.1737 0.01840 1 % 3 4 0.0132 0.0379 0.00420 1 % 2 5 0.0472 0.1983 0.02090 1 % 2 6 0.0581 0.1763 0.01870 1 % 4 6 0.0119 0.0414 0.00450 1 % 5 7 0.0460 0.1160 0.01020 1 % 6 7 0.0267 0.0820 0.00850 1 % 6 8 0.0120 0.0420 0.00450 1 % 6 9 0.0 0.2080 0.0 1.078 % 6 10 0 .5560 0 1.069 % 9 11 0 .2080 0 1 % 9 10 0 .1100 0 1 % 4 12 0 .2560 0 1.032 % 12 13 0 .1400 0 1 % 12 14 .1231 .2559 0 1 % 12 15 .0662 .1304 0 1 % 12 16 .0945 .1987 0 1 % 14 15 .2210 .1997 0 1 % 16 17 .0824 .1932 0 1 % 15 18 .1070 .2185 0 1 % 18 19 .0639 .1292 0 1 % 19 20 .0340 .0680 0 1 % 10 20 .0936 .2090 0 1 % 10 17 .0324 .0845 0 1 % 10 21 .0348 .0749 0 1 % 10 22 .0727 .1499 0 1 % 21 22 .0116 .0236 0 1 % 15 23 .1000 .2020 0 1 % 22 24 .1150 .1790 0 1 % 23 24 .1320 .2700 0 1 % 24 25 .1885 .3292 0 1 % 25 26 .2544 .3800 0 1 % 25 27 .1093 .2087 0 1 % 28 27 0 .3960 0 1.068 % 27 29 .2198 .4153 0 1 % 27 30 .3202 .6027 0 1 % 29 30 .2399 .4533 0 1 % 8 28 .0636 .2000 0.0214 1 % 6 28 .0169 .0599 0.0065 1]; linedata=[ 1 2 0.0192 0.0575 0.0264 1 1 3 0.0452 0.1852 0.0204 1 2 4 0.057 0.1737 0.0184 1 3 4 0.0132 0.0379 0.0042 1 2 5 0.0472 0.1983 0.0209 1 2 6 0.0581 0.1763 0.0187 1 4 6 0.0119 0.0414 0.0045 1 5 7 0.046 0.116 0.0102 1 6 7 0.0267 0.082 0.0085 1 6 8 0.012 0.042 0.0045 1 6 9 0 0.208 0 1.078 6 10 0 0.556 0 1.069 9 11 0 0.208 0 1 9 10 0 0.11 0 1 4 12 0 0.256 0 1.032 12 13 0 0.14 0 1 12 14 0.1231 0.2559 0 1 12 15 0.0662 0.1304 0 1 12 16 0.0945 0.1987 0 1 14 15 0.221 0.1997 0 1 16 17 0.0824 0.1923 0 1 15 18 0.107 0.2185 0 1 18 19 0.0639 0.1292 0 1 19 20 0.034 0.068 0 1 10 20 0.0936 0.209 0 1 10 17 0.0324 0.0845 0 1 10 21 0.0348 0.0749 0 1 10 22 0.0727 0.1499 0 1 21 22 0.0116 0.0236 0 1 15 23 0.1 0.202 0 1 22 24 0.115 0.179 0 1 23 24 0.132 0.27 0 1 24 25 0.1885 0.3292 0 1 25 26 0.2544 0.38 0 1 25 27 0.1093 0.2087 0 1 28 27 0 0.396 0 1.068 27 29 0.2198 0.4153 0 1 27 30 0.3202 0.6027 0 1 29 30 0.2399 0.4533 0 1 8 28 0.0636 0.2 0.0214 1 6 28 0.0169 0.0599 0.0065 1]; % Cost % Coefficients CostCoeff = [0 2.00 .00375; 0 1.75 .01750; 0 1.00 .06250; 0 3.25 .00834; 0 3.00 .02500; 0 3.00 .02500]; GeneratorInd=[1; find(busdata(:,2)==2)]; LoadInd=find(busdata(:,2)==3); % NG: the number of generators. NG=length(GeneratorInd); % NL: the number of load buses. NL=length(LoadInd); % nbus The number of buses nbus = max(max(linedata(:,1)), max( linedata(:,2))); % nbr: the number of transmission lines. nbr=length(linedata(:,1)); BusTypes=busdata(:,2); NodeList=busdata(:,1); QCInd=[ 10 12 15 17 20 21 23 24 29]; % Shunt VAR compensation N掳 of lines. TInd=[11 12 15 36]; % Transformer tap settings T N掳 of lines. NQC=length(QCInd); NT=length(TInd); Data.NQC=NQC; Data.NT=NT; VmLim=ones(30,1)*[.95 1.1]; VmLim([GeneratorInd],2)=1.1; VmMin=VmLim(:,1); VmMax=VmLim(:,2); Data.VmMin=VmMin; Data.VmMax=VmMax; PLim=zeros(30,2); PLim(GeneratorInd,:) = [50 200; 20 80; 15 50; 10 35; 10 30; 12 40]; PGMin=PLim(GeneratorInd,1); PGMax=PLim(GeneratorInd,2); Data.PGMin=PGMin; Data.PGMax=PGMax; PG1Min=PLim(1,1); PG1Max=PLim(1,2); Data.PG1Min=PG1Min; Data.PG1Max=PG1Max; QLim=zeros(30,2); QLim(GeneratorInd,:) = [-20 200; -20 100; -15 80; -15 60; -10 50; -15 60]; % QLim= [busdata(:,9) busdata(:,10)]; QLimMin=QLim(:,1); QLimMax=QLim(:,2); Data.QLimMin=QLimMin; Data.QLimMax=QLimMax; QCLim = ones(length(QCInd),1)*[0 5]; QCMin=QCLim(:,1); QCMax=QCLim(:,2); Data.QCMin=QCMin; Data.QCMax=QCMax; TLim = ones(length(TInd),1)*[.9 1.1]; TMin=TLim(:,1); TMax=TLim(:,2); Data.TMin=TMin; Data.TMax=TMax; Data.QCInd=QCInd; Data.TInd=TInd; Data.busdata=busdata; Data.linedata=linedata; Data.Ybus0=[]; Data.GeneratorInd=GeneratorInd; Data.LoadInd=LoadInd; Data.CostCoeff=CostCoeff; Data.basemva=basemva; Data.nbus=nbus; Data.nbr=nbr; Data.NG=NG; Data.NL=NL; Data.NodeList=NodeList; Data.BusTypes=BusTypes; LineMVA=[... 0.000 1.300 1.300 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000; 1.300 0.000 0.000 0.650 1.300 0.650 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000; 1.300 0.000 0.000 1.300 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000; 0.000 0.650 1.300 0.000 0.000 0.900 0.000 0.000 0.000 0.000 0.000 0.650 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000; 0.000 1.300 0.000 0.000 0.000 0.000 0.700 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000; 0.000 0.650 0.000 0.900 0.000 0.000 1.300 0.320 0.650 0.320 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.320 0.000 0.000; 0.000 0.000 0.000 0.000 0.700 1.300 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000; 0.000 0.000 0.000 0.000 0.000 0.320 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.320 0.000 0.000; 0.000 0.000 0.000 0.000 0.000 0.650 0.000 0.000 0.000 0.650 0.650 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000; 0.000 0.000 0.000 0.000 0.000 0.320 0.000 0.000 0.650 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.320 0.000 0.000 0.320 0.320 0.320 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000; 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.650 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000; 0.000 0.000 0.000 0.650 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.650 0.320 0.320 0.320 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000; 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.650 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000; 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.320 0.000 0.000 0.160 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000; 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.320 0.000 0.160 0.000 0.000 0.000 0.160 0.000 0.000 0.000 0.000 0.160 0.000 0.000 0.000 0.000 0.000 0.000 0.000; 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.320 0.000 0.000 0.000 0.000 0.160 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000; 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.320 0.000 0.000 0.000 0.000 0.000 0.160 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000; 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.160 0.000 0.000 0.000 0.160 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000; 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.160 0.000 0.320 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000; 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.320 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.320 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000; 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.320 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.320 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000; 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.320 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.320 0.000 0.000 0.160 0.000 0.000 0.000 0.000 0.000 0.000; 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.160 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.160 0.000 0.000 0.000 0.000 0.000 0.000; 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.160 0.160 0.000 0.160 0.000 0.000 0.000 0.000 0.000; 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.160 0.000 0.160 0.160 0.000 0.000 0.000; 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.160 0.000 0.000 0.000 0.000 0.000; 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.160 0.000 0.000 0.650 0.160 0.160; 0.000 0.000 0.000 0.000 0.000 0.320 0.000 0.320 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.650 0.000 0.000 0.000; 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.160 0.000 0.000 0.160; 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.160 0.000 0.160 0.000]; LineMVA = LineMVA + diag(inf*ones(length(NodeList),1)); % Don't limit shunt power at buses Data.LineMVA=LineMVA;
🎉3 参考文献
[1]Bouchekara, H. R. E. H. “Optimal Power Flow Using Black-Hole-Based Optimization Approach.” Applied Soft Computing, vol. 24, Elsevier BV, Nov. 2014, pp. 879–88, doi:10.1016/j.asoc.2014.08.056.
[2]Bouchekara, H. R. E. H., et al. “Optimal Power Flow Using Teaching-Learning-Based Optimization Technique.” Electric Power Systems Research, vol. 114, Elsevier BV, Sept. 2014, pp. 49–59, doi:10.1016/j.epsr.2014.03.032.