1 简介

为了普及电动汽车,以缓解我国日益严重的环境能源问题,本文研究电动汽车充换电站的选址方法,旨在利用提高电动汽车充电设施的覆盖范围,加快电动汽车的普及发展。本文建立人们日常出行模型,模拟电动汽车用户充电需求,同时,建立道路交通网模型,基于免疫算法和MATLAB软件,对充换电站站址和数量进行优化选择,从而为实现从宏观角度规划充换电站的布局优化提供理论方法。

免疫是生物体的特异性生理反应。免疫系统由具有免疫功能的器官、组织、细胞、免疫效应分子及基因等组成。在多种免疫学说中, Burnet 的克隆选择学说和Jerne 的免疫网络学说是免疫系统理论的代表性学说。根据他们的学说, 生物体内先天具有针对不同抗原特性的多样性B 细胞克隆, 抗原侵入机体后, 在T细胞的识别和控制下, 选择相应的B细胞系并使之增殖, 产生特异性抗体结合抗原, 同时抗原与抗体、抗体与抗体之间的促进和抑制关系形成的网络调节结构维持免疫平衡。免疫系统具有的自组织、自适应、辨识功能、学习和记忆以及鲁棒性等人工系统所期望具有的多种优良性能, 是其近年来能够引起科学研究领域内众多专家和学者研究兴趣的重要原因。免疫算法是模仿生物免疫学和基因进化机理, 通过人工方式构造的一类优化搜索算法, 是对生物免疫过程的一种数学仿真, 是免疫计算的一种最重要形式。随着免疫学和人工免疫系统研究的深入, 人们 对生物免疫机理的认识越来越清晰, 优秀仿生机理 的逐渐融入也使免疫算法的功能日趋强大和完善。 一般免疫算法中融合的免疫机理主要有免疫识别、 免疫学习、免疫记忆、克隆选择、多样性等 。基于免疫机理和一些优秀的、相对成熟的进化算法( 如遗 传算法) , 形成了免疫算法的基本框架。免疫算法中, 抗原和抗体之间以及抗体和抗体之间的匹配程 度用亲合度来描述。一般将抗原、抗体、抗原 和抗体之间的亲合度分别对应优化问题的目标函 数、候选解、解与目标函数的匹配程度。相似于生物免疫系统, 免疫算法首先通过对抗原基因类型的初步识别来产生不同的抗体, 而后通过亲合度计算将优秀抗体保存到记忆单元, 并根据亲合度实现抗体进化和调节, 然后重新计算亲合度并循环直至终止条件满足。免疫算法的一般步骤如下 :

步骤 1 抗原识别。

步骤 2 产生初始抗体。

步骤 3 计算亲合度。

步骤 4 记忆单元更新。

步骤 5 抗体生成与调节( 促进和抑制) 。

步骤 6 终止条件判断( 不满足, 则转步骤 3, 否 则结束) 。

2 部分代码

clear all
close all
clc
%%=========================================================================
%% 1.变量初始化C= [0 0;0 100;0 200; 0 300;0 400;100 0;100 100;100 200;100 300;100 400;200 0;200 100;200 200;200 300;200 400;300 0;300 100;300 200;300 300;300 400;400 0;400 100;400 200;400 300;400 400;];%节点坐标
n=size(C,1);%n表示节点个数
D=zeros(n,n);%D表示完全图的赋权邻接矩阵
distance=inf;
SumOfCity = size(C,1);%节点个数
length_address =zeros(n,n);%length_address表示两两节点间的距离,初始设定10000,可以设定无穷大,表示不相连
for i=1:5:nfor j=0:3length_address(i+j,i+j+1)=20;%距离end
end
for i=1:5:n-5for j=0:4length_address(i+j,i+j+5)=20;%距离end
end
length_address=length_address+length_address';%最终距离矩阵
for   i=1:nfor j=1:nif length_address(i,j)==0length_address(i,j)=inf;   %对称矩阵endend
end
D=length_address;%距离矩阵figure(5);for i=1:nplot(C(i,1),C(i,2),'bo','MarkerSize',10);str=num2str(i);hold ontext(C(i,1)+5,C(i,2)+10,str,'Color','red','FontSize',15);
enddistance=inf;
for i=1:nfor j=1:nif(length_address(i,j)~=distance)line([C(i,1),C(j,1)],[C(i,2),C(j,2)],'Color','k','LineWidth',2);%划线text((length_address(j,1))-50,(length_address(j,2))-50,num2str(length_address(i,j)));%标注线段距离endend
end
axis([-100 500 -100 500])
%% 2蚁群算法求解求每个节点间的最短路径
%% 2.1参数设置
m=200;%蚂蚁数量
NC_max=200;%%% NC_max 最大迭代次数
Alpha=1;%% Alpha 表征信息素重要程度的参数
Beta=5;%% Beta 表征启发式因子重要程度的参数
Rho=0.8;%% Rho 信息素蒸发系数
Q=1;%% Q 信息素增加强度系数a
%% 2.2求每个节点间的最短路径
for startpoint=1:nfor endpoint=startpoint:nif startpoint~=endpoint[Shortest_Length(startpoint,endpoint), Shortest_Route{startpoint,endpoint}]=myfloyd(D,startpoint,endpoint);%用floyd算法求解最短距离%             [ Shortest_Route{startpoint,endpoint},Shortest_Length(startpoint,endpoint)]= ACO1( C,D,m,NC_max,startpoint,endpoint,Rho,Beta,Alpha,Q,distance);elseShortest_Length(startpoint,endpoint)=inf;%不存在最短距离Shortest_Route{startpoint,endpoint}=[];endend
end
Shortest_Length=Shortest_Length+Shortest_Length';
for i=1:nfor j=1:nif i~=jdianjia(i,j)= ((150-Shortest_Length(i,j))/300)*30;%计算节点间充电的度数elsedianjia(i,j)=1;endend
end
%% 3 免疫算法求解最优布局
%% 3.1 算法基本参数
sizepop=15;           % 种群规模
overbest=10;          % 记忆库容量
MAXGEN=100;            % 迭代次数
pcross=0.8;           % 交叉概率
pmutation=0.8;        % 变异概率
ps=0.95;              % 多样性评价参数
length=5;             % 充电站数
M=n;
high_dianjia=2.5;%高电价
low_dianjia=1.8;%低电价
%% 3.2 识别抗原,将种群信息定义为一个结构体
individuals = struct('fitness',zeros(1,M), 'concentration',zeros(1,M),'excellence',zeros(1,M),'chrom',[]);
%% 3.3 产生初始抗体群
individuals.chrom = popinit(M,length,C);
trace=[]; %记录每代最个体优适应度和平均适应度
chorm_suiji=individuals.chrom(1,:);%随机选择一个布局方案作为后面对比
%% 3.4迭代寻优end
%% 3.5画出免疫算法收敛曲线
figure(1)
plot(trace(:,1));
hold on
plot(trace(:,2),'--');
legend('最优适应度值','平均适应度值')
title('免疫算法收敛曲线','fontsize',12)
xlabel('迭代次数','fontsize',12)
ylabel('适应度值','fontsize',12)
%% 画出配送中心选址图
%城市坐标
city_coordinate=C;
carge=[20,90,90,60,70,70,40,90,90,70,60,40,40,40,20,80,90,70,100,50,50,50,80,70,80,40,40,60,70,50,30];
%找出最近配送点
[m n]=size(city_coordinate);
for i=1:mdistance1(i,:)=dist(city_coordinate(i,:),city_coordinate(bestchrom,:)');
end
[a,b]=min(distance1');
a(find(a==0))=50;%本节点的路程固定为50
%% 充电量对比
cheliang=round(100*rand(24,SumOfCity));%一天24小时的车辆数目
fuhe_best=zeros(24,length);%1天24小时各充电桩的负荷
fuhe=zeros(24,length);%1天24小时各充电桩的负荷
%% 免疫算法优化后的各点电价
for t=1:24for i=1:SumOfCityif b(i)==2||b(i)==3 %高电价x_best=bestchrom(b(i));%if x_best~=i%如果车辆就在本节点expense_best(t,i)=dianjia(i,x_best)*high_dianjia*cheliang(t,i);%高电价fuhe_best(t,b(i))= fuhe_best(t,b(i))+dianjia(i,x_best)*cheliang(t,i);%节点负荷elseexpense_best(t,i)=dianjia(i,x_best)*high_dianjia*cheliang(t,i);%本节点固定充电费用fuhe_best(t,b(i))= fuhe_best(t,b(i))+dianjia(i,x_best)*cheliang(t,i);%节点负荷endelsex_best=bestchrom(b(i));%if x_best~=i%如果车辆就在本节点expense_best(t,i)=dianjia(i,x_best)*low_dianjia*cheliang(t,i);%低电价fuhe_best(t,b(i))= fuhe_best(t,b(i))+dianjia(i,x_best)*cheliang(t,i);%节点负荷elseexpense_best(t,i)=dianjia(i,x_best)*low_dianjia*cheliang(t,i);%本节点固定充电费用fuhe_best(t,b(i))= fuhe_best(t,b(i))+dianjia(i,x_best)*cheliang(t,i);%节点负荷endendend
end
S_expense_best=sum(expense_best,2);%一天24小时的充电费用
%% 免疫算法优化前的各点电价
for i=1:mdistance2(i,:)=dist(city_coordinate(i,:),city_coordinate(chorm_suiji,:)');
end
[a2,b2]=min(distance2');
a2(find(a2==0))=50;%本节点的路程固定为50
for t=1:24for i=1:Mif b2(i)==2||b2(i)==3 %高电价x=chorm_suiji(b2(i));%if x~=i%如果车辆就在本节点expense(t,i)=dianjia(i,x)*high_dianjia*cheliang(t,i);%高电价fuhe(t,b2(i))= fuhe(t,b2(i))+dianjia(i,x)*cheliang(t,i);%节点负荷elseexpense(t,i)=dianjia(i,x)*high_dianjia*cheliang(t,i);%本节点固定充电费用fuhe(t,b2(i))= fuhe(t,b2(i))+dianjia(i,x)*cheliang(t,i);%节点负荷endelsex=chorm_suiji(b2(i));%if x~=i%如果车辆就在本节点expense(t,i)=dianjia(i,x)*low_dianjia*cheliang(t,i);%低电价fuhe(t,b2(i))= fuhe(t,b2(i))+dianjia(i,x)*cheliang(t,i);%节点负荷elseexpense(t,i)=dianjia(i,x)*low_dianjia*cheliang(t,i);%本节点固定充电费用fuhe(t,b2(i))= fuhe(t,b2(i))+dianjia(i,x)*cheliang(t,i);%节点负荷endendend
end
S_expense=sum(expense,2);%一天24小时的充电费用
index=cell(1,length);for i=1:length%计算各个派送点的地址index{i}=find(b==i);
end
figure(2)
title('最优规划派送路线')
cargox=city_coordinate(bestchrom,1);
cargoy=city_coordinate(bestchrom,2);
for i=1:lengthif i==2||i==3plot(cargox(i),cargoy(i),'rs','LineWidth',2,...'MarkerEdgeColor','r',...'MarkerFaceColor','y',...'MarkerSize',30)%%快速充电桩hold onelseplot(cargox(i),cargoy(i),'rs','LineWidth',2,...'MarkerEdgeColor','c',...'MarkerFaceColor','b',...'MarkerSize',20) %慢速充电桩hold onend
end
plot(city_coordinate(:,1),city_coordinate(:,2),'o','LineWidth',2,...'MarkerEdgeColor','k',...'MarkerFaceColor','g',...'MarkerSize',10)for i=1:mx=[city_coordinate(i,1),city_coordinate(bestchrom(b(i)),1)];y=[city_coordinate(i,2),city_coordinate(bestchrom(b(i)),2)];plot(x,y,'c');hold on
end
figure(3)
plot(1:t,S_expense_best,'ro-',1:t,S_expense,'bo-')
legend('免疫算法优化后的每小时充电费用','优化前的每小时充电费用')
xlabel('小时')
ylabel('费用')
figure(4)
plot(1:t,fuhe_best(:,1),'ro-')
hold on
plot(1:t,fuhe_best(:,2),'bo-')
plot(1:t,fuhe_best(:,3),'mo-')
plot(1:t,fuhe_best(:,4),'co-')
plot(1:t,fuhe_best(:,5),'ko-')
legend('慢速充电桩','快速充电桩','快速充电桩','慢速充电桩','慢速充电桩')
title('免疫算法优化后的每个充电桩负荷')
xlabel('小时')
ylabel('负荷')
figure(6)
plot(1:t,fuhe(:,1),'ro-')
hold on
plot(1:t,fuhe(:,2),'bo-')
plot(1:t,fuhe(:,3),'mo-')
plot(1:t,fuhe(:,4),'co-')
plot(1:t,fuhe(:,5),'ko-')
legend('慢速充电桩','快速充电桩','快速充电桩','慢速充电桩','慢速充电桩')
title('优化前的每个充电桩负荷')
xlabel('小时')
ylabel('负荷')

3 仿真结果

4 参考文献

[1]耿建超. (2017). 基于免疫算法的电动汽车充电站选址优化研究. 中国管理信息化(20), 146-148.

【优化布局】基于免疫算法求解充电站最优布局matlab代码相关推荐

  1. 【优化布局】免疫算法求解充电站最优布局【含Matlab源码 2539期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[生产调度]基于matlab免疫算法求解生产调度零等待问题[含Matlab源码 1178期] 点击上面蓝色字体,直接付费下载,即可. 获取 ...

  2. 【优化布局】基于matlab免疫算法求解充电站最优布局【含Matlab源码 2539期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[生产调度]基于matlab免疫算法求解生产调度零等待问题[含Matlab源码 1178期] 点击上面蓝色字体,直接付费下载,即可. 获取 ...

  3. 基于蜜蜂算法求解电力系统经济调度(Matlab代码实现)

    目录 1 蜜蜂优化算法 1.1 蜂群觅食机制 1.2 蜜蜂算法 1.3 流程 2 经济调度 3 运行结果 4 参考文献 5 Matlab代码实现 1 蜜蜂优化算法 蜜蜂算法( Bees Algorit ...

  4. 【智能优化算法】基于蚁狮算法求解多目标问题附Matlab代码

    1 简介 蚁狮算法( ALO) 通过对随机解的探索,逐渐寻找近似最优解.与粒子群等优化算法不同的是,在 ALO 算法中有两类种群个体,即蚂蚁和蚁狮.ALO 算法的寻优过程模拟蚁狮捕食的六个基本步骤: ...

  5. 【优化求解】基于蝗虫算法求解单目标问题附matlab代码

    1 简介 蝗虫算法( Grasshopper Optimization Algorithm,GOA ) 是 由 Saremi 等[1]于2017 年提出的一种元启发式仿生优化算法.具体原理如下: 2 ...

  6. 【樽海鞘算法】基于樽海鞘算法求解单目标问题附matlab代码(Salp Swarm Algorithm,SSA)

    1 简介 2 部分代码 %_________________________________________________________________________________% Salp ...

  7. 【故障检测问题】基于matlab免疫算法求解故障检测问题【含Matlab源码 196期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[故障检测问题]基于matlab免疫算法求解故障检测问题[含Matlab源码 196期] 获取代码方式2: 通过订阅紫极神光博客付费专栏,凭 ...

  8. 3.蚁群算法求解格栅地图路径规划matlab代码

    往期: 1.Dijkstra算法求解格栅地图路径matlab代码_墨叔叔的博客-CSDN博客 2.A*搜索算法原理及matlab代码_墨叔叔的博客-CSDN博客 一.蚁群算法原理 原理:蚁群系统(An ...

  9. 【智能优化算法】基于免疫算法求解单目标优化问题附matlab代码

    1 简介 自Farmer在1986年提出免疫机理可以在机器学习等工程问题中得到应用之后,相关人员就一直在探索免疫机理在工程实际中的应用技术.而De Castro等完善了算法结构和算法模型后,更为人工免 ...

最新文章

  1. Oracle PL/SQL编程之基础
  2. 阿姨帮万勇:O2O产品的颠覆与布局,阿姨帮未来发展战略独家披露
  3. 网站建设技术――智能建站系统
  4. 操作系统 课堂练习题03【20道 经典题目】
  5. [JavaWeb-HTML]CSS与html结合方式
  6. Android保存图片到本地相册
  7. bzoj1965 [AHOI2005]洗牌 结论
  8. 测试员35岁以后找不到工作?问完了几千人后,我们得到了答案......
  9. gitz之忽略warning:LF will be replaced by CRLF
  10. 易筋SpringBoot 2.2 | 第廿九篇:SpringBoot之RPC入门到精通
  11. 软件研发软件基础设施的建设
  12. Notepad++设置记录
  13. 发布宅男神器:视频直播app for Android ----- 万紫千红
  14. HTML5系列代码:模仿杂志的多列版式
  15. 11_FreeRTOS时间片调度实验
  16. //我一次黑别人的电脑时的技术经过!
  17. farey(法莱)数列 (USACO Ordered Fractions)
  18. 在web-actix框架上实现上传文件
  19. SP10707 COT2 - Count on a tree II【树上莫队】
  20. 企业软文\网站文章代写工具有哪些应用问题及优化升级

热门文章

  1. 去除csv文件中空行
  2. Python 中的简单算术计算
  3. 【2022-09-15】蚂蚁金服秋招笔试三道编程题
  4. 20本Java相关电子书
  5. python获取机器唯一标识_通过python 获取cpu和硬盘等硬件序列号组成的唯一识别码...
  6. 抖音影视解说制作,一般用什么必备工具?
  7. linux设备驱动论坛,linux设备驱动开发环境搭建 (amoBBS 阿莫电子论坛)
  8. 《程序设计实践》中文版pdf
  9. 餐饮销量数据统计量分析
  10. 一款基于SpringBoot2.x, springcloud G版本的后台管理系统java源码—RuoYi-plus管理平台系统模板(商城、OA、CRM等二次开发)