一、粒子群算法简介

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.13480.1197    0.23990.2578    0.17240.4259    0.17390.1257    0.34200.2803    0.33750.4439    0.33600.5505    0.11080.5610    0.20240.5700    0.30750.1332    0.45910.3013    0.44550.4559    0.43800.5850    0.42600.1452    0.60920.3163    0.53410.4739    0.53410.5880    0.53410.3193    0.64070.4784    0.64520.6015    0.64670.6736    0.15740.8657    0.16491.0308    0.16340.6781    0.29240.8327    0.29091.0188    0.29390.6811    0.44250.8192    0.45761.0083    0.45460.6691    0.54310.6976    0.63920.8191    0.63771.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.5010310.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.2*1.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;
endEp=[];for i=1:size(bcs,1)gb=b(b(:,5)==i,:); Ep=[Ep;[sum(gb(:,4)),round(mui.*sum(gb(:,4))./ns),i]];
endTn=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(Tn*2,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);
endPBest=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+1w_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);endP=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;elseFgNum=FgNum+1; endif FgNum>10    SubX=r;while SubX==r || SubX==0SubX=round(rand*(PopSize));endr=SubX;FgNum=0;endend
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');
endfor 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.

【优化选址】基于matlab粒子群算法求解充电站规划优化问题【含Matlab源码 664期】相关推荐

  1. 【优化布局】基于matlab粒子群算法求解充电站布局优化问题【含Matlab源码 012期】

    ⛄一.粒子群算法简介 1 引言 自然界中的鸟群和鱼群的群体行为一直是科学家的研究兴趣所在.生物学家Craig Reynolds在1987年提出了一个非常有影响的鸟群聚集模型,在他的仿真中,每一个个体都 ...

  2. 【电力系统】基于matlab粒子群算法求解热电联产系统优化配置问题【含Matlab源码 2298期】

    ⛄一.热电联产系统优化配置问题 1 能量枢纽模型 能量枢纽模型通过增加能源的供给路径提升能源系统的经济性.灵活性和安全性[6].图1展示了一种典型的能量枢纽模型. 图1 典型能量枢纽模型示意图 1.2 ...

  3. 【ACO TSP】基于matlab蚁群算法求解31城市旅行商问题【含Matlab源码 1147期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab蚁群算法求解31城市旅行商问题[含Matlab源码 1147期] 点击上面蓝色字体,直接付费下载,即可. 获取代码 ...

  4. 【配电网重构】基于matlab粒子群算法33节点配电网重构【含Matlab源码 1829期】

    ⛄一.配电网重构简介 1 配电网重构的数学模型 1.1 配电网重构的目标函数 配电网重构的数学模型实质就是多目标多约束的最优解问题, 配网重构的目标一般由以下几类: (1) 配电网最小网损为目标; ( ...

  5. 【定位问题】RSSI和模拟退火优化粒子群算法求解无线传感器网络定位问题【含Matlab源码 1766期】

    ⛄一.简介 1 引言 随着物联网技术的发展,传感器之间通过通信方式连接在一起,构成了极为庞大的无线传感器网络,这使得传感器在各行各业的应用相当广泛[.然而,因为大规模抛撒的传感器节点无法全部配备价格昂 ...

  6. 【车间调度】粒子群算法求解6X6车间调度问题【含Matlab源码 411期】

    ⛄一.车间调度简介 1 车间调度定义 车间调度是指根据产品制造的合理需求分配加工车间顺序,从而达到合理利用产品制造资源.提高企业经济效益的目的.车间调度问题从数学上可以描述为有n个待加工的零件要在m台 ...

  7. 【微电网优化】基于matlab粒子群算法求解综合能源系统优化问题【含Matlab源码 1969期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[微电网优化]基于matlab粒子群算法求解综合能源系统优化问题[含Matlab源码 1969期] 点击上面蓝色字体,直接付费下载,即可. ...

  8. 【微电网优化】基于matlab粒子群算法求解微网经济调度和环境友好调度优化问题【含Matlab源码 2283期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[微电网优化]基于matlab粒子群算法求解微网经济调度和环境友好调度优化问题[含Matlab源码 2283期] 点击上面蓝色字体,直接付 ...

  9. 【优化算法】基于matlab量子粒子群算法求解单目标优化问题【含Matlab源码 2203期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[优化算法]基于matlab量子粒子群算法求解单目标优化问题[含Matlab源码 2203期] 点击上面蓝色字体,直接付费下载,即可. 获 ...

  10. 【多式联运】基于帝国企鹅算法、遗传算法、粒子群算法求解多式联运路径优化问题附matlab代码

    1 内容介绍 在军事运输中,采用多种运输方式联合投送是加强战略投送能力建设发展的重要途径,而路径规划是制定多式联运输送保障方案的关键第一步.本文提出了一个以遗传算法为主框架的解决方案,用来求解多式联运 ...

最新文章

  1. Java封装(速读版)
  2. html %3c% page,page.html
  3. ffmpeg-0.8 开源编码解码库从linux下移植到windows vs2005
  4. redis smembersmap_redis 基本指令以及数据类型
  5. Java后台开发精选知识图谱
  6. activiti6教程四
  7. FreeWheel创始人/CTO于晶纯访谈:具备大局观方能洞若观火
  8. Gym - 101572K Kayaking Trip 二分
  9. vijos 1540 月亮之眼 并查集
  10. 深度学习中常用的损失函数
  11. 假如大数据组件中的动物都变成神奇宝贝,那会变成什么样?(大数据的组件动漫化)
  12. 我的世界空岛生存服务器制作,我的世界1.7.10羽逸之光空岛生存服务器
  13. npy文件的打开,读取
  14. CSS文字大小单位px、em、pt
  15. FileZilla连接不上本地虚拟机的解决办法
  16. 2t移动硬盘linux无法格式化,移动硬盘无法格式化怎么办实际解决方法
  17. 微软 Win10 这么用才最顺手,电脑必做的 16 项设置
  18. ubuntu 安装 QT 【亲测有效】
  19. 计算机专业调研报告修订稿,大学生计算机专业实习报告(新修订)
  20. Linux文本编辑器-vim

热门文章

  1. 廖雪峰js教程笔记11 操作DOM(包含作业)
  2. unity3d-角色控制器续
  3. 国庆记事之一:小白结婚及我跟女朋友吵架
  4. 20191002每日一句
  5. 扇贝有道180912每日一句
  6. 外参矩阵转四元数,左右手坐标系转化1
  7. Atitit 高等教育 中产教育 普通教育的异同 目录 1. 顶层精英教育 1 1.1. 领导力 影响力 1 1.2. 国王规范 1 1.3. 宗教领袖 1 1.4. 决策能力 1 1.5. 国际视
  8. Atitit jpql ast总结v2 t025.docx 目录 1.1. 多select字段 1 1.2. 多个and条件 (ok) 2 1.3. Select 字段函数(聚合等) 2 1.4. [
  9. Atitit 压缩文件zip总结 注意孔目录 以及 递归目录 /springbootUpload/src/springbootUploadPkg/ZipUtilCompressPart.java
  10. Atitti v5住宿服务部后勤部建设指引指南.docx