✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
⛄ 内容介绍
微电网优化调度作为智能电网优化的重要组成部分,对降低能耗,环境污染具有重要意义.微电网的发展目标既要满足电力供应的基本需求,又要提高经济效益和环境保护.对此,提出了一种综合考虑微电网系统运行成本和环境保护成本的并网模式下微电网多目标优化调度模型.同时采用改进的粒子群算法对优化模型进行求解.仿真结果表明,该模型可以有效降低用户的用电成本和环境污染,促进微电网的优化运行,并验证了改进的粒子群算法的优越性能.
⛄ 部分代码
%%存档库(储藏室)作用:存档,用来储存过去产生的非支配解
%这里的程序尽量不要动,直接套用即可
classdef Repository %储藏室
properties
swarm
rep_size
Grid
grid_size
alpha
beta
gamma
end
methods
function obj = Repository(swarm,rep_size,grid_size,alpha,beta,gamma) %存档库
if nargin>0
obj.rep_size = rep_size;
swarm = Particle.updateDomination(swarm);
obj.swarm = swarm(~[swarm.isDominated]);
obj.grid_size=grid_size;
obj.alpha=alpha;
obj.beta = beta;
obj.gamma = gamma;
obj.Grid=obj.grid();
for i = 1:length(obj.swarm)
obj.swarm(i) = obj.swarm(i).updateGridIndex(obj.Grid);
end
end
end
function Grid = grid(obj) %更新网格
C = vertcat(obj.swarm.cost);
cmin = min(C,[],1);
cmax = max(C,[],1);
dc = cmax - cmin;
cmin = cmin - obj.alpha * dc;
cmax = cmax + obj.alpha * dc;
nObj = size(C,2);
empty_grid.LB = [];
empty_grid.UB = [];
Grid = repmat(empty_grid,nObj,1);
for j = 1:nObj
cj = linspace(cmin(j),cmax(j),obj.grid_size+1);
Grid(j).LB = [-inf, cj];
Grid(j).UB = [cj, +inf];
end
end
function leader = SelectLeader(obj) %选择领导者
GI = [obj.swarm.GridIndex];
OC = unique(GI);
N = zeros(size(OC));
for k = 1:length(OC)
N(k) = length(find(GI==OC(k)));
end
P = exp(-obj.beta*N);
P = P/sum(P);
sci = Repository.RouletteWheelSelection(P);
sc = OC(sci);
SCM = find(GI==sc);
smi = randi([1 length(SCM)]);
sm = SCM(smi);
leader = obj.swarm(sm);
end
function obj = DeleteOneRepMemebr(obj) %删除一个存档库的成员
GI=[obj.swarm.GridIndex];
OC=unique(GI);
N=zeros(size(OC));
for k=1:length(OC)
N(k)=length(find(GI==OC(k)));
end
P=exp(obj.gamma*N);
P=P/sum(P);
sci=Repository.RouletteWheelSelection(P);
sc=OC(sci);
SCM=find(GI==sc);
smi=randi([1 length(SCM)]);
sm=SCM(smi);
obj.swarm(sm)=[];
end
function obj = update(obj,swarm) %更新
swarm = Particle.updateDomination(swarm);
obj.swarm = [obj.swarm,swarm(~[swarm.isDominated])];
obj.swarm = Particle.updateDomination(obj.swarm);
obj.swarm = obj.swarm(~[obj.swarm.isDominated]);
obj.Grid=obj.grid();
for i = 1:length(obj.swarm)
obj.swarm(i) = obj.swarm(i).updateGridIndex(obj.Grid);
end
Extra=length(obj.swarm)-obj.rep_size;
for e=1:Extra
obj=obj.DeleteOneRepMemebr();
end
end
end
methods (Static)
function i = RouletteWheelSelection(P) %轮盘赌筛选进行删除
i = find(rand<=cumsum(P),1,'first');
end
end
end
⛄ 运行结果
⛄ 参考文献
[1] 陈深, 肖俊阳, 黄玉程,等. 基于改进量子粒子群算法的微网多目标优化调度[J]. 电力科学与技术学报, 2015, 30(2):7.
[2] 刘强. 基于改进粒子群算法多目标多微网经济优化调度[D]. 中国矿业大学, 2020.
[3] 杨健. 基于改进粒子群算法的微网实时能量优化调度[D]. 南京邮电大学.
[4] 程宇旭. 基于改进粒子群算法的微电网能量优化调度研究及实现[D]. 中南大学, 2014.
[5] 李兴莘, 张靖, 何宇,等. 基于改进粒子群算法的微电网多目标优化调度[J]. 电力科学与工程, 2021, 37(3):7.