找回密码
 注册
关于网站域名变更的通知
查看: 392|回复: 1
打印 上一主题 下一主题

基于matlab粒子群算法的充电站最优布局

[复制链接]
  • TA的每日心情

    2019-11-20 15:22
  • 签到天数: 2 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2021-3-11 17:58 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    3 ~* J# h: R9 z: v
    一、简介8 {0 B. P; {7 R- H8 S
    电动汽车未来大规模发展需要众多公共充电站服务,公共充电站应根据电动汽车分布进行合理布局。给出电动汽车分布的预测方法,采用基于排队论的充电机配置方法,提出公共充电站布 局最优规划的数学模型。采用与充电站布局有相似数学特点的 Voronoi图划分充电站服务区域,服务区内电动汽车考虑快充随机性,采用排队论 M/M/s模型,以电动汽车排队等候时间为标准确定充电站规模,建立公共充电站布局最优规划模型,​用粒子群算法求解。% x1 ~# f. Z7 f

    + m7 x( i" N0 B9 N. J二、源码: O  l) u% H% N& P; o
    • 在这里插入代码clear all; clc; close all
    • %% 基础数据
    • bcs=[800 350
    •     400 350];
    • b=[150.7   140  30
    • 246.3   84  30
    • 263.7   172  20
    • 402.8   120  25
    • 543.4   125  20
    • 644.8   118  30
    • 768.0   85  15
    • 789.7   147  15
    • 905.7   67  15
    • 920.2   126  15
    • 188.4   248  5
    • 276.8   252  10
    • 376.8   248  10
    • 471.0   242  10
    • 559.3   235  10
    • 669.5   229  15
    • 765.1   225  10
    • 836.1   225  10
    • 934.7   195  10
    • 179.7   305  15
    • 231.9   323  7.5
    • 311.6   300  15
    • 389.8   303  7.5
    • 478.2   300  10
    • 576.7   292  10
    • 673.8   285  10
    • 768.0   313  10
    • 872.3   310  15
    • 934.7   245  20
    • 978.1   330  15
    • 195.6   384  12.5
    • 297.1   375  15
    • 394.1   381  15
    • 413.0   345  7.5
    • 556.4   360  2.5
    • 586.9   363  15
    • 681.1   348  15
    • 211.6   461  15
    • 217.4   528  20
    • 311.6   465  10
    • 413.0   455  25
    • 501.4   448  25
    • 588.3   456  5
    • 617.3   430  5
    • 691.2   419  15
    • 778.2   395  15
    • 883.9   376  15
    • 253.6   572  5
    • 346.3   575  25
    • 443.4   555  25
    • 528.9   538  20
    • 628.9   512  15
    • 710.0   509  5
    • 734.7   475  5
    • 912.9   448  30
    • 268.1   656  30
    • 504.3   620  15
    • 652.1   580  10
    • 750.6   565  10
    • 843.4   540  10
    • 949.1   523  10
    • 1043.3   502  10];
    • na=1500; %电动汽车数量
    • alp=0.1;
    • b(:,4)=round(alp.*b(:,3)./sum(b(:,3)).*na);%每个需求点平均负荷
    • %b(23,4)=37;
    • ns=6;
    • 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)))));%BL为图坐标与实际坐标的比例,为固定参数。
    • %划分成两个区域干嘛呢??????
    • 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)];%size(Area2,1)=5 ones(5,1)=一个5*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];  %10*3数组
    • for k=1:size(bcs,1)%k=1:2
    •     Ai=find(vv(:,3)==k);%在vv的第三列查找等于k的元素返回索引值
    •     xx=vv(Ai,1);%横坐标,充电需求点负荷。。。等于k的点 列向量
    •     yy=vv(Ai,2);
    •     kk=convhull(xx,yy);%计算凸包,kk是一个列向量
    •     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=8;   %最优充电站数量
    • PopSize=20; %种群数量
    • MaxIter=400;   %迭代次数
    • c1s=2.5;   c2s=0.5;
    • c1e=0.5;   c2e=2.5;
    • w_start=0.9;
    • w_end=0.4;     %惯性权重w取值范围
    • 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); %计算适应值
    • 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('map1.png');
    • 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',1)
    • plot(bm(:,1),bm(:,2),'k-','linewidth',1)
    • for k=1:length(b(:,4))
    •     str=num2str(b(k,4));
    •     text(b(k,1)-15,b(k,2)+25,str,'FontSize',5,'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
    • axis equal
    • [vx,vy]=voronoi(x,y);
    • plot(x,y,'b^',vx,vy,'b-','linewidth',3);
    • for k=1:length(x)
    •     str=num2str(k);
    •     text(x(k),y(k),str,'FontSize',20,'color','red');
    • end
    • axis equal
    • vv=VoronoiArea([x,y],3);
    • bax=b(:,1:2);
    • for k=1:length(x)
    •     Ai=find(vv(:,3)==k);
    •     xx=vv(Ai,1);
    •     yy=vv(Ai,2);
    •     kk=convhull(xx,yy);
    •     in=inpolygon(bax(:,1),bax(:,2),xx(kk),yy(kk));
    •     str=num2str(k);
    •     text(bax(in,1),bax(in,2),str,'FontSize',18,'color','blue');
    • end
    • axis([min(bm(:,1))-3 max(bm(:,1))+3 min(bm(:,2))-3 max(bm(:,2))+3])
    • figure(2)
    • Iter_t=1:1:MaxIter+1;
    • plot(Iter_t,Fm,'.-')片
      * w' A% c  n# s& c

    - L, A: Y/ ?2 a. Z( c( i1 B0 e! M. j/ z% a; [5 p8 k
    三、运行结果4 j  a' q* d! [8 r; b
    " S$ u6 Q# q7 M8 g/ [

    ' p. k$ a  i' n1 ~

    该用户从未签到

    2#
    发表于 2021-3-11 18:30 | 只看该作者
    基于matlab粒子群算法的充电站最优布局
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-6-17 20:52 , Processed in 0.078125 second(s), 26 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表