程序名称##
基于遗传算法多场景考虑负荷重要程度时序无功优化【matlab通用版】
程序功能(对象)
- 适用于任意大小的交流电网,支持节点和支路的增删;
- 适用于多个光伏风电时序出力场景,允许接入风光等DG无上限;
- 适用于节点电压重要程度不同的多场景无功优化;
- 目标函数:F(x) =Σ Qi*(w1* f1(i)+w2*f2(i))
f1(i):第i个节点电压偏差对应的调控效益分值
f2(i):第i个节点相邻电压波动对应的调控效益分值
Qi :第i个节点重要程度系数 - 决策变量:1)主变抽头档位(1组)
2)并联电容器组数(3组)
3)光伏可调无功出力(5组) - 约束条件:潮流约束、电压约束、电容器主变档位约束等
- 通用型分析:1、交流电网拓扑允许随意变动;
2、交流电网可接入风光储等多个分布式电源;
3、电容器及风光接入节点允许随意变动;
4、全天24小时各个光伏和风电出力参数可调,同时设置三种不同出力场景;
5、IEEE33节点系统33个节点重要程度系数可调,可选择不同的重要程度系数; - 所有风光出力场景和重要程度系数场景结果均保存在EXCEL方便制图;
- 优化前后对比:优化后电压偏差和电压波动显著减小;
程序函数说明
matlab版:
- 主程序:main1
- 目标函数子程序:fitness文件
- 遗传算法子程序:fga文件
- IEEE33节点系统子程序:case33bw文件
- 牛拉法基波子程序:NLPowerFlow文件
- 节点导纳子程序:createYbus文件
- 交流雅克比矩阵子程序:Jacobi文件(n-1+m*n-1+m)
- 初始化染色体子程序:InitPopGray文件
- 结果绘制子程序:draw文件
图一为改进的IEEE33节点系统算例程序列表
程序计算步骤及流程图
以matlab版程序作为讲解。
1 参数初始化
参数初始化,读取网络参数,在此标幺化,无功优化是在基波潮流计算基础之上进行的,参数初始化和基波潮流学习: https://blog.csdn.net/WConstelltion/article/details/123751611.
包括:交流节点负荷,支路阻抗,发电机以及分布式电源参数初始化;风光时序出力数据,支路电阻以及分布式电源参数初始;各个节点重要程度系数,可依据赋权方法进行确定,此程序直接给出。
图二为不同场景下光伏时序出力
图三是不同场景下不同节点的负荷重要程度系数
多场景考虑负荷重要程度时序无功优化的计算流程图如下图所示,后续程序依据该逻辑进行讲解
2出力及重要程度系数多场景选择
2.1光伏出力曲线场景选择:(场景需求可以根据自己选择)
state1 = state(:, 1);%恒定出力系数
state2 = state(:, 2);%云朵效应系数
state3 = state(:, 3);%典型日1出力系数
state4 = state(:, 4);%典型日2出力系数
2.2重要程度系数选择:
IIC1 = IIC(:, 1); %没有考虑负荷重要程度系数
IIC2 = IIC(:, 2); %传统评估方法负荷重要程度系数
IIC3 = IIC(:, 3); %改进评估方法负荷重要程度系数
2.3修正各时段参数:
%%各时段参数的修正
a=load(:,ti); %基波和三相潮流用到
ac_data = case33bw;
ac_baseMVA = ac_data.baseMVA;
ac_bus = ac_data.bus;
tanpq=ac_bus(:,4)./ac_bus(:,3); %各负荷点的功率因数
ac_bus(:,3)=ac_bus(:,3).*a; %修正有功功率负荷
ac_bus(:,4)=tanpq.*ac_bus(:,3); %修正无功功率负荷
ac_branch = ac_data.branch;
ac_gen = ac_data.gen; %发电机参数
ac_dg(:, 2) = ac_dg0(:, 2)*statei(ti); %场景选择
ac_dg(:, 3) = ac_dg0(:, 2)*tan(acos(dg_power_factor));%恒定功率因数
3 优化算法计算
%目的:通过算法求解电压偏差和电压波动最小时的调控策略
3.1初始化算法参数
popsize = 100; %初始群体大小
eranum = 100; %进化代数
pCross = 0.8; %交叉概率,一般取0.5--0.85之间较好(默认0.8)
pMutation = 0.1; %初始变异概率,一般取0.05-0.2之间较好(默认0.1)
pInversion =0.2; %倒位概率,一般取0.05-0.3之间较好(默认0.2)
3.2设置主变档位OTLC、CB组数、光伏组件出力约束
%变量取值范围计算
genlow =-2*ones(1,gen_num);%-2,-1,0,1,2
genup = 2*ones(1,gen_num);
caplow = zeros(1,cap_num);
capup = ones(1,cap_num).*[6 8 6];
Qpvlow = [-ac_dg0(:, 2).*[0.5;0.15;0.2;0.5;0.2]]'; %±50% 15% 20% 50% 20%可调 吸收
Qpvup = [ac_dg0(:, 2).*[0.5;0.15;0.2;0.5;0.2]]'; %±20%可调 无功补偿与有功无关 发出
3.3迭代计算:
[BestPop(:, :, ti),Trace(:, :, ti),maxiter(1,ti),Best_fitness(:, ti)]=fga(FUN,LowB,UpB,eranum,popsize,pCross,pMutation,pInversion,options);
3.4目标函数中计算潮流求解电压指标:
%电压偏差率/%
UN = 1;U = Bus_V(:, 2);
devU = (U-UN)/UN;
%电压波动率/%相邻两个时段波动
waveU0 = waveU;
waveU0(:, ti+1)=Bus_V(:, 2); %第一列为24时刻的电压值,用于计算波动值
U2t = waveU0(:, ti:ti+1);
Uave=sum(U2t, 2)/2;
U2=diff(U2t,1,2); %相邻两个时段电压差,矩阵各列之差
U3=U2.^2;
z=sum(U3, 2);
wave=sqrt(z)./(Uave);
3.5针对不同的电压偏差值和波动值赋予效益系数:
devUgrade = [-0.1 -0.07 -0.05 -0.03 0 0.03 0.05 0.07 0.1];%划分界限
f1 = [0 0.2 0.4 0.6 1 1 0.8 0.6 0.4 0];%各区间对应系数
wavegrade = [0.005 0.01 0.015 0.020];%划分界限
f2 = [1 0.75 0.50 0.25 0];%各区间对应系数
3.6 计算目标函数:
for i=1:busNum %传统分数计算出来的重要程度系数
val = val+IICi(i)*(kexi*scoref1(i)+(1- kexi)*scoref2(i));
end
程序计算结果分析
-
1)IEEE33节点算例拓扑节点电压偏差计算结果如下图所示(场景2光伏出力为云朵效应)
2)无功调节手段24小时计算结果如下图所示(场景2光伏出力为云朵效应)
3)采用三种不同的重要程度系数计算结果对比,方法3是考虑关键节点重要性使得得到优先治理曾增强了调控效益 -
场景1和3计算步骤不在赘述,3种光伏*3种重要程度系数共计9个场景计算结果,均保持至excel,调用draw绘制图片
-
matlab版制作不易非无偿,python版有需求可以联系开发,上述仅为博主设置算例,各位硕导博导可以联系博主定制对应的需求。
程序开发
完整版matlab版/python版