基于GA遗传优化的新能源充电桩最优布局matlab仿真

1.算法概述

遗传算法的起源可追溯到20世纪60年代初期。1967年,美国密歇根大学J. Holland教授的学生 Bagley在他的博士论文中首次提出了遗传算法这一术语,并讨论了遗传算法在博弈中的应用,但早期研究缺乏带有指导性的理论和计算工具的开拓。1975年, J. Holland等提出了对遗传算法理论研究极为重要的模式理论,出版了专著《自然系统和人工系统的适配》,在书中系统阐述了遗传算法的基本理论和方法,推动了遗传算法的发展。20世纪80年代后,遗传算法进入兴盛发展时期,被广泛应用于自动控制、生产计划、图像处理、机器人等研究领域。   


遗传算法的基本运算过程如下:

(1)初始化:设置进化代数计数器t=0,设置最大进化代数T,随机生成M个个体作为初始群体P(0)。  

(2)个体评价:计算群体P(t)中各个个体的适应度。

(3)选择运算:将选择算子作用于群体。选择的目的是把优化的个体直接遗传到下一代或通过配对交叉产生新的个体再遗传到下一代。选择操作是建立在群体中个体的适应度评估基础上的。

(4)交叉运算:将交叉算子作用于群体。遗传算法中起核心作用的就是交叉算子。

(5)变异运算:将变异算子作用于群体。即是对群体中的个体串的某些基因座上的基因值作变动。群体P(t)经过选择、交叉、变异运算之后得到下一代群体P(t+1)。

(6)终止条件判断:若t=T,则以进化过程中所得到的具有最大适应度个体作为最优解输出,终止计算。

遗传操作包括以下三个基本遗传算子(genetic operator):选择(selection);交叉(crossover);变异(mutation)。



1.1选择


从群体中选择优胜的个体,淘汰劣质个体的操作叫选择。选择算子有时又称为再生算子。选择的目的是把优化的个体(或解)直接遗传到下一代或通过配对交叉产生新的个体再遗传到下一代。选择操作是建立在群体中个体的适应度评估基础上的,常用的选择算子有以下几种:适应度比例方法、随机遍历抽样法、局部选择法。  



1.2交叉


在自然界生物进化过程中起核心作用的是生物遗传基因的重组(加上变异)。同样,遗传算法中起核心作用的是遗传操作的交叉算子。所谓交叉是指把两个父代个体的部分结构加以替换重组而生成新个体的操作。通过交叉,遗传算法的搜索能力得以飞跃提高。



1.3变异


变异算子的基本内容是对群体中的个体串的某些基因座上的基因值作变动。依据个体编码表示方法的不同,可以有以下的算法:

a)实值变异。

b)二进制变异。


2.仿真效果预览

MATLAB仿真结果如下图所示:






3.核心MATLAB程序

..................................................................

%汽车类型随机划分

II      = randperm(length(Icar));

Car1    = II(1:12);

Car2    = II(13:21);

Car3    = II(22:30);

TYPE    = ones(1,length(Icar));

TYPE(Car1)=1;

TYPE(Car2)=2;

TYPE(Car3)=3;


ICDZ    = [1;2;3;4;5;6;7;8;9;10];

XCDZ    = 9.6/700*[1284.40591400000;1162.70564500000;1158.02486600000;857.518817000000;772.328629000000;725.520833000000;574.799731000000;464.333333000000;205.954301000000;920.241263000000];

YCDZ    = 9.6/700*[463.870296000000;593.059812000000;418.934812000000;562.166667000000;343.106183000000;302.851478000000;448.891801000000;377.743952000000;315.021505000000;427.360215000000];


%用户路程成本

Myrod   = 1;

%充电站建设使用周期为10年

CDZage  = 10;

MAXGEN = 40;

NIND   = 1000;

Nums   = 10;

Chrom  = crtbp(NIND,Nums*10);


%sh

Areas = [];

for i = 1:Nums

Areas = [Areas,[0;4]];% 目标范围0到4,如果是0,则表明该位置不安装充电桩

end


FieldD = [rep([10],[1,Nums]);Areas;rep([0;0;0;0],[1,Nums])];


gen   = 0;

for a=1:1:NIND

%计算对应的目标值

X            = round(4*rand(1,Nums));%初始值

[epls,f1,f2,Aim] = func_obj(X);

E            = epls;

Js(a,1)      = E;

end


Objv  = (Js+eps);

gen   = 0;


%%

while gen < MAXGEN;   

gen

Pe0 = 0.99;

pe1 = 0.01;


FitnV=ranking(Objv);    

Selch=select('sus',Chrom,FitnV);    

Selch=recombin('xovsp', Selch,Pe0);   

Selch=mut( Selch,pe1);   

phen1=bs2rv(Selch,FieldD);   


for a=1:1:NIND  

X           = round(phen1(a,:));

%计算对应的目标值

[epls,f1,f2,Aim]= func_obj(X);

E           = epls;

JJ(a,1)     = E;

end


Objvsel=(JJ);    

[Chrom,Objv]=reins(Chrom,Selch,1,1,Objv,Objvsel);   

gen=gen+1;


%保存参数收敛过程和误差收敛过程以及函数值拟合结论

index1     = isnan(JJ);

index2     = find(index1 == 1);

JJ(index2) = [];

index3     = find(JJ==10000000000000);

JJ(index3) = [];

Error(gen) = mean(JJ);

[VV,II]=min(JJ);


end


figure;

plot(Error,'linewidth',2);

grid on

xlabel('迭代次数');

ylabel('遗传算法优化过程');

legend('Average fitness');


[V,I] = min(JJ);

X     = round(phen1(I,:))

[epls,f1,f2,Aim]= func_obj(X);


%成本输出

epls

f1

f2


%显示布局图

ii=find(X==0);

X(ii)=[];

XCDZ(ii)=[];

YCDZ(ii)=[];

figure;

for i = 1:length(X)

if X(i)==1

plot(XCDZ(i),YCDZ(i),'bo','LineWidth',2,...

'MarkerEdgeColor','k',...

'MarkerFaceColor','b',...

'MarkerSize',10);

hold on

text(XCDZ(i)+0.2,YCDZ(i)+0.2,num2str(X(i)));hold on

end

if X(i)==2

plot(XCDZ(i),YCDZ(i),'rs','LineWidth',2,...

'MarkerEdgeColor','k',...

'MarkerFaceColor','r',...

'MarkerSize',10);

hold on

text(XCDZ(i)+0.2,YCDZ(i)+0.2,num2str(X(i))); hold on

end    

if X(i)==3

plot(XCDZ(i),YCDZ(i),'k^','LineWidth',2,...

'MarkerEdgeColor','k',...

'MarkerFaceColor','c',...

'MarkerSize',10);

hold on

text(XCDZ(i)+0.2,YCDZ(i)+0.2,num2str(X(i)));hold on

end

if X(i)==4

plot(XCDZ(i),YCDZ(i),'r>','LineWidth',2,...

'MarkerEdgeColor','k',...

'MarkerFaceColor','g',...

'MarkerSize',10);

hold on

text(XCDZ(i)+0.2,YCDZ(i)+0.2,num2str(X(i)));hold on

end

end

hold on

plot(Xcar,Ycar,'gx');

for i = 1:length(Aim)

plot([Xcar(i),XCDZ(Aim(i))],[Ycar(i),YCDZ(Aim(i))],'b-o','LineWidth',1,...

'MarkerEdgeColor','k',...

'MarkerFaceColor','y',...

'MarkerSize',5);

hold on

end


A003

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容