目录

1 主要内容

2 部分代码

3 程序结果

4 下载链接


1 主要内容

之前分享的程序【勘误】基于多目标粒子群算法的微电网优化调度【风光、储能、柴油、燃气、电网交互】对多目标粒子群算法中出现的功率不平衡问题进行了勘误,有个同学下载程序后反馈约束部分和原程序存在偏差,对联络线功率部分约束进行了“阉割”,导致虽然功率平衡条件满足了,但是自己修改代码过程中对新增约束部分仍然茫然。

一次“问题反馈”,下定决心做了多约束多目标智能算法的“模板”-LMLPHP

上面的问题确实存在,勘误的程序代码将联络线功率作为平衡项,没有为其增加约束。就像我们在计算潮流计算过程中,需要通过“平衡节点”来达到功率平衡一样,这里需要有个“桥梁”来实现功率平衡条件,一般都通过联络线功率作为这个“桥梁”,回到这个问题本身,有没有可能给这个“桥梁”增加约束呢?答案是肯定的。

为了更好的让大家了解多约束多目标智能算法优化机理,方便大家修改代码,我决定做一个“模板”,具体完善内容有一下几点:

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_sizefor 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;    endend

3 程序结果

4 下载链接

02-24 22:20