【优化选址】粒子群算法求解充电站规划优化问题【含Matlab源码 664期】

本文介绍了粒子群优化算法的基本概念和在Matlab中的应用,包括算法原理、更新规则以及在充电需求点和集中充电站布局中的具体实现。提供了一段Matlab代码示例,展示了如何使用PSO进行充电站优化。

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击👇
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)

⛄一、粒子群算法简介

1 粒子群算法的概念
粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation)。源于对鸟群捕食的行为研究。粒子群优化算法的基本思想:是通过群体中个体之间的协作和信息共享来寻找最优解.
PSO的优势:在于简单容易实现并且没有许多参数的调节。目前已被广泛应用于函数优化、神经网络训练、模糊系统控制以及其他遗传算法的应用领域。

2 粒子群算法分析
2.1基本思想
粒子群算法通过设计一种无质量的粒子来模拟鸟群中的鸟,粒子仅具有两个属性:速度和位置,速度代表移动的快慢,位置代表移动的方向。每个粒子在搜索空间中单独的搜寻最优解,并将其记为当前个体极值,并将个体极值与整个粒子群里的其他粒子共享,找到最优的那个个体极值作为整个粒子群的当前全局最优解,粒子群中的所有粒子根据自己找到的当前个体极值和整个粒子群共享的当前全局最优解来调整自己的速度和位置。下面的动图很形象地展示了PSO算法的过程:
在这里插入图片描述
2 更新规则
PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次的迭代中,粒子通过跟踪两个“极值”(pbest,gbest)来更新自己。在找到这两个最优值后,粒子通过下面的公式来更新自己的速度和位置。
在这里插入图片描述
公式(1)的第一部分称为【记忆项】,表示上次速度大小和方向的影响;公式(1)的第二部分称为【自身认知项】,是从当前点指向粒子自身最好点的一个矢量,表示粒子的动作来源于自己经验的部分;公式(1)的第三部分称为【群体认知项】,是一个从当前点指向种群最好点的矢量,反映了粒子间的协同合作和知识共享。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。以上面两个公式为基础,形成了PSO的标准形式。
在这里插入图片描述
公式(2)和 公式(3)被视为标准PSO算法。
3 PSO算法的流程和伪代码
在这里插入图片描述

⛄二、部分源代码

clear all; clc; close all
%% 基础数据
%充电需求点坐标
b =1.0e+003.*[0.1092 0.1348
0.1197 0.2399
0.2578 0.1724
0.4259 0.1739
0.1257 0.3420
0.2803 0.3375
0.4439 0.3360
0.5505 0.1108
0.5610 0.2024
0.5700 0.3075
0.1332 0.4591
0.3013 0.4455
0.4559 0.4380
0.5850 0.4260
0.1452 0.6092
0.3163 0.5341
0.4739 0.5341
0.5880 0.5341
0.3193 0.6407
0.4784 0.6452
0.6015 0.6467
0.6736 0.1574
0.8657 0.1649
1.0308 0.1634
0.6781 0.2924
0.8327 0.2909
1.0188 0.2939
0.6811 0.4425
0.8192 0.4576
1.0083 0.4546
0.6691 0.5431
0.6976 0.6392
0.8191 0.6377
1.0098 0.6347];
%充电需求点常规电力负荷点负荷b(:,3)(kW)
b(:,3)=[2480;2480;8680;11400;890;2340;4160;560;1670;5010;2670;8280;7400;1430;7500;4840;3400;4290;3840;3680;2560;7000;14800;8960;3160;7000;5000;2280;10360;10000;760;6000;7040;5600];

%集中充电站坐标
bcs=[ 937.7296 379.5010
310.3141 238.4076];

na=4500;

alp=0.1;
b(:,4)=round(alp.*b(:,3)./sum(b(:,3)).*na);
b(23,4)=37;

ns=4;

mui=0.6;
Nchz=round(mui.*sum(b(:,4))./ns);

bm=1.0e+003*[0.0086,0.0088;1.1734,0.0088;1.1734,0.7412;0.0086,0.7412;0.0086,0.0088];

BL=sqrt(8.21.0e6./((max(bm(:,1))-min(bm(:,1)))(max(bm(:,2))-min(bm(:,2)))));

Area2=1.0e+003 *[0.0086 0.0088
0.9377 -1.0860
0.3103 1.7040
0.0086 0.7412
0.0086 0.0088];
Area2=[Area2,2.*ones(size(Area2,1),1)];

Area1=1.0e+003 *[0.9377 -1.0860
1.1734 0.0088
1.1734 0.7412
0.3103 1.7040
0.9377 -1.0860];
Area1=[Area1,1.*ones(size(Area2,1),1)];

vv=[Area1;Area2];
for k=1:size(bcs,1)
Ai=find(vv(:,3)==k);
xx=vv(Ai,1);
yy=vv(Ai,2);
kk=convhull(xx,yy);
in=inpolygon(b(:,1),b(:,2),xx(kk),yy(kk));
b(in,5)=k;
end

Ep=[];

for i=1:size(bcs,1)
gb=b(b(:,5)==i,:);
Ep=[Ep;[sum(gb(:,4)),round(mui.*sum(gb(:,4))./ns),i]];
end

Tn=7;
PopSize=20;
MaxIter=300;
c1s=2.5; c2s=0.5;
c1e=0.5; c2e=2.5;
w_start=0.9;
w_end=0.4;
Iter=1;

xmax=max(Area1(:,1)); xmin=min(Area1(:,1));
ymax=max(Area1(:,2)); ymin=min(Area1(:,2));
x = xmin + (xmax-xmin).*rand(Tn,PopSize);
y = ymin + (ymax-ymin).*rand(Tn,PopSize);

X=[x;y];
V=rand(Tn2,PopSize);
Vmax=0.1
max((xmax-xmin),(ymax-ymin));

inAr1=find(b(:,5)==1);
bb=[b(inAr1,1:2),b(inAr1,4)];
for pk=1:1:PopSize
[FX(pk),,,,,,,,,~]=VorCostCDEV(X(1:Tn,pk),X(Tn+1:end,pk),bb,bcs(1,:),BL);
end

PBest=X;
FPBest=FX;

[Fgbest,r]=min(FX);
Fm(Iter)=Fgbest;
CF=Fgbest;
Best=X(:,r);
FBest(Iter)=Fgbest;

FgNum=0;

while (Iter<=MaxIter)
Iter=Iter+1

w_now=((w_start-w_end)*(MaxIter-Iter)/MaxIter)+w_end;

A=repmat(X(:,r),1,PopSize); 


R1=rand(Tn*2,PopSize);
R2=rand(Tn*2,PopSize);


c1=c1e+(c1s-c1e)*(1-acos(-2*Iter/(MaxIter+1)+1)/pi);
c2=c2e+(c2s-c2e)*(1-acos(-2*Iter/(MaxIter+1)+1)/pi);
    

V=w_now*V+c1*R1.*(PBest-X)+c2*R2.*(A-X);


changeRows=V>Vmax;
V(changeRows)=Vmax;

changeRows=V<-Vmax;
V(changeRows)=-Vmax;


X=X+1.0*V;

for pk=1:1:PopSize
[FX(pk),,,,,,,,,~]=VorCostCDEV(X(1:Tn,pk),X(Tn+1:end,pk),bb,bcs(1,:),BL);
end

P=FX<FPBest;    
FPBest(P)=FX(P);  
PBest(:,P)=X(:,P); 

[Fgbest,r]=min(FPBest);
Fm(Iter)=Fgbest;        

if Fgbest<CF 
    [FBest,gr]=min(FPBest);  
    Best=PBest(:,gr);    
    CF=Fgbest;  
    FgNum=0;
else
    FgNum=FgNum+1; 
end


if FgNum>10    
    SubX=r;
    while SubX==r || SubX==0
        SubX=round(rand*(PopSize));
    end
    r=SubX;
    FgNum=0;
end

end
FBest
Best
Fm’

x =Best(1:Tn);
y =Best(Tn+1:end);
[Fcost,CCS,fcs,ucs,NchI,Epc,CVT,CVTI,CDL,CDLI]=VorCostCDEV(x,y,bb,bcs(1,:),BL)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 作图
figure(1)

a=imread(‘T3.bmp’);
imshow(a);
hold on

[vxT,vyT]=VoronoiT(bcs(:,1),bcs(:,2),0);
plot(bcs(:,1),bcs(:,2),‘ks’,‘linewidth’,12);
plot(vxT,vyT,‘k-’,‘linewidth’,3);

plot(b(:,1),b(:,2),‘k*’,‘linewidth’,5)
plot(bm(:,1),bm(:,2),‘k-’,‘linewidth’,3)

for k=1:length(b(:,4))
str=num2str(b(k,4));
text(b(k,1)-15,b(k,2)+25,str,‘FontSize’,23,‘color’,‘black’);
end

for k=1:size(bcs,1)
str=num2str(k);
text(bcs(k,1)+20,bcs(k,2),str,‘FontSize’,20,‘color’,‘red’);
end

⛄三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

🍅 仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值