当前位置 : 主页 > 编程语言 > python >

【微电网优化】基于粒子群算法实现电力分配及电网建设多目标优化求解附ma

来源:互联网 收集:自由互联 发布时间:2022-09-29
1 内容介绍 微电网能够协调分布式电源,从而充分发挥分布式发电技术在经济,能源和环境中的优势.针对微电网并网时的优化调度问题,建立了考虑发电成本,电力负荷分配的微电网系统优

1 内容介绍

微电网能够协调分布式电源,从而充分发挥分布式发电技术在经济,能源和环境中的优势.针对微电网并网时的优化调度问题,建立了考虑发电成本,电力负荷分配的微电网系统优化模型,并利用改进的多目标粒子群算法,在这两个目标之间进行协调权衡和折中处理,使所有目标函数尽量达到最优.选取微电网案例的日负荷数据进行了优化调度计算,仿真结果表明了所提模型和算法的有效性.

2 部分代码


clc;

clear ;

close all;

tic

%% Problem Definition


%% MOPSO Settings

% number_obj=3;%目标函数为3个


nPop=100;   % Population Size种群大小100


nRep=100;   % Repository Size存档大小为100


MaxIt=150;  % Maximum Number of Iterations原始最大迭代次数100


phi1=2.05;%phi1=phi2=2.05

phi2=2.05;

phi=phi1+phi2;%4.1

chi=2/(phi-2+sqrt(phi^2-4*phi));%0.7298


w=chi;              % Inertia Weight惯性权重

wdamp=1;            % Inertia Weight Damping Ratio惯性权重阻尼比1

c1=chi*phi1;        % Personal Learning Coefficient个体学习因子1.4962

c2=chi*phi2;        % Global Learning Coefficient群体学习因子1.4962




nVar=55;%可以理解为粒子的维数,24+24+7


%  VarMin=[0 0 0 0.0033];%粒子能取到的最小值

%  VarMax=[0.00195 0.0009 0.00365 0.0037]; %粒子能取到的最大值   

load data_load

load data_sun

% VarMax=repmat(2.2,1,24);VarMax=[VarMax,repmat(0.1,1,24)];VarMax=[VarMax,data_load(4,1:12)];VarMax=[VarMax,data_load(7,1:12)];

% VarMin=repmat(0,1,24);VarMin=[VarMin,repmat(-0.1,1,24)];VarMin=[VarMin,repmat(0,1,12)];VarMin=[VarMin,repmat(0,1,12)];%可平移负荷设置为节点7


VarMax=repmat(0.1,1,24);VarMax=[VarMax,repmat(0.05,1,24)];VarMax=[VarMax,data_load(7,11:14),data_load(7,19:21)];

VarMin=repmat(-0.1,1,24);VarMin=[VarMin,repmat(-0.05,1,24)];VarMin=[VarMin,repmat(0,1,7)];%可平移负荷设置为节点7

arSize=[1 nVar];%粒子规模为一行nVar

VelMax=(VarMax-VarMin)/5;%粒子速度影响参数原参数除以1

alpha=0.1;  % Grid Inflation Parameter网格扩张参数0.1Grid=10;   % Number of Grids per each Dimension网络每一维数量1

bta=4;     % Leader Selection Pressure Parameter引导选择压力参数4

gamma=2;    % Extra (to be deleted) Repository Member Selection Pressure额外(被删除的)存档选择压力2

%% Initialization

 load Z_load

load B1

load B2ticle=CreateEmptyParticle(nPop);%产生空粒子群,构造结构体

for i=1:nPop

    batteryflag=0;

    particle(i).Velocity=0;

    while batteryflag==0

        particle(i).Position=unifrnd(VarMin,VarMax,VarSize);%产生Varsize个的从VarMin到VarMax的“均匀分布”(并不是一般地均匀)随机数或者产生1行3列的矩阵

        %    particle(i).Cost=CostFunction(particle(i).Position);%得到对应粒子目标函数的值;——应该在这个位置将变动的粒子的值重新赋给负荷矩阵,

        batteryflag=battery_flag(particle(i).Position);

    end

    [particle(i).Cost,B1]=parameter_load3(B1,B2,particle(i).Position,data_load,data_sun);

    particle(i).Best.Position=particle(i).Position;

    particle(i).Best.Cost=particle(i).Cost;

    ticle=DetermineDomination(particle);%决定主导元素的赋值true或false即1或0,即判断支配性


rep=GetNonDominatedParticles(particle);% 得到非支配粒子


rep_costs=GetCosts(rep);%GetCosts(rep)作用是将rep这个结构体中的的Cost元素取出来形成矩阵

G=CreateHypercubes(rep_costs,nGrid,alpha);


for i=1:numel(rep)

    [rep(i).GridIndex rep(i).GridSubIndex]=GetGridIndex(rep(i),G);

end

    end

     compare_result=abs(compare(1)-compare(2))/compare(2);

     record(it)=compare(1);   


    if it>MaxIt;

        break

    end

    it=it+1;

       

end

%% Results

figure

plot(record);

xlabel('迭代次数');ylabel('存档最优目标函数值');

title('存档最优目标函数值迭代过程图');

hold on




%测试rep中粒子位置是否符合储能限制条件

for i=1:100

    rep_flag(i)=battery_flag(rep(i).Position);

end


costs=GetCosts(particle);

rep_costs=GetCosts(rep);

[final final_num]=min(integrate);

best_position=rep(final_num).Best.Position;

% plot3(best_position(1),best_position(2),best_position(3),'rP','MarkerSize',12);

% hold on


figure;

subplot(2,1,1)

plot(best_position(1,1:24),'-*');

title('节点10储能运行计划图')

xlabel('时间/h');ylabel('充放电功率/Mw');

grid on

xlim([1 24]);

subplot(2,1,2)

plot(best_position(1,25:48),'-*');

grid on

xlim([1 24]);

title('节点11储能运行计划图')

xlabel('时间/h');ylabel('充放电功率/Mw');

% figure

% temp=data_load(7,1:12)-best_position(1,49:60);

% load7=[temp(1,5:12)+data_load(7,1:8),best_position(1,49:60),temp(1,1:4)+data_load(7,21:24)];

% plot(data_load(7,1:24));hold on

% plot(load7,'-*');hold on;

% xlim([1 24]);

% legend('平移前','平移后')

% title('负荷7平移前与平移后日负荷曲线')

% xlabel('时间/h');ylabel('功率/Mw');

% grid on


figure

temp1=data_load(7,11:14)-best_position(1,49:52);

temp2=data_load(7,19:21)-best_position(1,53:55);

% temp=[temp1,temp2];

load7=[temp1+data_load(7,1:4),temp2+data_load(7,5:7),data_load(7,8:11),best_position(1,49:52),data_load(7,16:18),best_position(1,53:55),data_load(7,22:24)];

plot(data_load(7,1:24));hold on

plot(load7,'-*');hold on;

xlim([1 24]);

legend('平移前','平移后')

title('负荷7平移前与平移后日负荷曲线')

xlabel('时间/h');ylabel('功率/Mw');

grid on

check=zeros(100,1);

for number=1:100

    check(number)=particle(number).Dominated;   

end

num_position=find(check==0);

num=numel(num_position);

clear i;



figure;

best_cost=rep(final_num).Best.Cost;

plot3(best_cost(1),best_cost(2),best_cost(3),'rP','MarkerSize',16)

hold on


plot3(costs(1,:),costs(2,:),costs(3,:),'b.');

hold on;

plot3(rep_costs(1,:),rep_costs(2,:),rep_costs(3,:),'gx');

% legend('Best Repository','Main Population','Repository');

legend('存档最优值','主要种群值','存档值');

xlabel('用于负荷平移的用户电费/元');ylabel('电网侧成本/元');zlabel('电压偏移');

grid on;

title('种群和存档最优解对应目标函数的值')




if it>MaxIt

    disp(['迭代次数达到限制最大值100,','跳出迭代']);

end


disp(['最优解为:',num2str(best_position)]);

disp(['最优值为:',num2str(best_cost)]);

toc

3 运行结果

【微电网优化】基于粒子群算法实现电力分配及电网建设多目标优化求解附matlab代码_多目标

【微电网优化】基于粒子群算法实现电力分配及电网建设多目标优化求解附matlab代码_粒子群算法_02

【微电网优化】基于粒子群算法实现电力分配及电网建设多目标优化求解附matlab代码_迭代_03

【微电网优化】基于粒子群算法实现电力分配及电网建设多目标优化求解附matlab代码_多目标_04

4 参考文献

[1]单新文, 唐灏, 范磊,等. 基于改进粒子群算法的微电网多目标优化调度研究[J]. 自动化与仪器仪表, 2021.

[2]王金全, 黄丽, 杨毅. 基于多目标粒子群算法的微电网优化调度[J]. 电网与清洁能源, 2014, 30(1):6.

部分理论引用网络文献,若有侵权联系博主删除。


【文章转自:扬州机房 http://www.558idc.com/yz.html欢迎留下您的宝贵建议】
上一篇:【物理应用】基于Matlab模拟车道检测
下一篇:没有了
网友评论