目录
1 主要内容
之前分享的程序【勘误】基于多目标粒子群算法的微电网优化调度【风光、储能、柴油、燃气、电网交互】对多目标粒子群算法中出现的功率不平衡问题进行了勘误,有个同学下载程序后反馈约束部分和原程序存在偏差,对联络线功率部分约束进行了“阉割”,导致虽然功率平衡条件满足了,但是自己修改代码过程中对新增约束部分仍然茫然。
上面的问题确实存在,勘误的程序代码将联络线功率作为平衡项,没有为其增加约束。就像我们在计算潮流计算过程中,需要通过“平衡节点”来达到功率平衡一样,这里需要有个“桥梁”来实现功率平衡条件,一般都通过联络线功率作为这个“桥梁”,回到这个问题本身,有没有可能给这个“桥梁”增加约束呢?答案是肯定的。
为了更好的让大家了解多约束多目标智能算法优化机理,方便大家修改代码,我决定做一个“模板”,具体完善内容有一下几点:
2 部分代码
function [REP]= mopso(c,iw,max_iter,lower_bound,upper_bound,swarm_size,rep_size,grid_size,alpha,beta,gamma,mu,problem)
%mopso 是多目标粒子群优化的实现
% 最小化问题的技术
%% 初始化参数
global PV;
global WT;
%蓄电池最大放电功率(正表示为电负荷供电,即放电)
BESSMax_dischar=30;
%蓄电池最大充电功率
BESSMax_char=-30;
%柴油机最大发电功率
DEMax=30;
%柴油机最小发电功率
DEMin=6;
%燃气轮机最大发电功率
MTMax=30;
%燃气轮机最小发电功率
MTMin=3;
%主网交互最大功率(正表示为电负荷供电)
GridMax=30;
%主网交互最小功率
GridMin=-30;
%% 种群初始化
if nargin==0 %nargin是判断输入变量个数的函数
c = [0.1,0.2]; % 加速因子
iw = [0.5 0.001]; % 惯性因子
max_iter =100; % 最大迭代次数
%各设备出力约束
for n=1:144 %粒子长度为144(光伏,风电,储能,柴油,燃气轮机,主网的6*24个小时出力)
if n<25
lower_bound(n)=0;
upper_bound(n) =PV(n);
end
if n>24&&n<49
lower_bound(n)=0;
upper_bound(n) =WT(n-24);
end
if n>48&&n<73
lower_bound(n)=BESSMax_char;
upper_bound(n) =BESSMax_dischar;
end
if n>72&&n<97
lower_bound(n)=DEMin;
upper_bound(n) =DEMax;
end
if n>96&&n<121
lower_bound(n)=MTMin;
upper_bound(n) =MTMax;
end
if n>120
lower_bound(n)=GridMin;
upper_bound(n) =GridMax;
end
end
swarm_size=100; % 种群个数
rep_size=100; % 存档库大小
grid_size=7; % 每个维度的网格数
alpha=0.1; % 通货膨胀率
beta=2; % 领导人选择压力
gamma=2; % 删除选择压力
mu=0.1; % 变异速率
problem=@prob; % 创建函数句柄为problem,函数为pro,可以简单理解为调用
end
%% 初始化粒子
fprintf('初始化种群中\n')
w = @(it) ((max_iter - it) - (iw(1) - iw(2)))/max_iter + iw(2); %更新惯性因子--改进粒子群算法
pm = @(it) (1-(it-1)/(max_iter-1))^(1/mu); %类比遗传算法引入变异操作,更新变异速率,在particle函数的78-84行
swarm(1,swarm_size) = Particle(); %调用Particle函数,从obj中得到swarm_size
for i = 1:swarm_size
swarm(i)=Particle(lower_bound,upper_bound,problem);%调用Particle函数
retry = 0;
while swarm(i).infeasablity > 0 && retry < 100 %循环条件为:无不可行解且次数低于100
swarm(i)=Particle(lower_bound,upper_bound,problem);%调用Particle函数
retry = retry + 1;
end
end