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


    目录

    1.算法概述

    1.1选择

    1.2交叉

     1.3变异

    2.仿真效果预览

    3.核心MATLAB程序

    4.完整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程序

    1. ..................................................................
    2. %汽车类型随机划分
    3. II = randperm(length(Icar));
    4. Car1 = II(1:12);
    5. Car2 = II(13:21);
    6. Car3 = II(22:30);
    7. TYPE = ones(1,length(Icar));
    8. TYPE(Car1)=1;
    9. TYPE(Car2)=2;
    10. TYPE(Car3)=3;
    11. ICDZ = [1;2;3;4;5;6;7;8;9;10];
    12. XCDZ = 9.6/700*[1284.40591400000;1162.70564500000;1158.02486600000;857.518817000000;772.328629000000;725.520833000000;574.799731000000;464.333333000000;205.954301000000;920.241263000000];
    13. YCDZ = 9.6/700*[463.870296000000;593.059812000000;418.934812000000;562.166667000000;343.106183000000;302.851478000000;448.891801000000;377.743952000000;315.021505000000;427.360215000000];
    14. %用户路程成本
    15. Myrod = 1;
    16. %充电站建设使用周期为10
    17. CDZage = 10;
    18. MAXGEN = 40;
    19. NIND = 1000;
    20. Nums = 10;
    21. Chrom = crtbp(NIND,Nums*10);
    22. %sh
    23. Areas = [];
    24. for i = 1:Nums
    25. Areas = [Areas,[0;4]];% 目标范围04,如果是0,则表明该位置不安装充电桩
    26. end
    27. FieldD = [rep([10],[1,Nums]);Areas;rep([0;0;0;0],[1,Nums])];
    28. gen = 0;
    29. for a=1:1:NIND
    30. %计算对应的目标值
    31. X = round(4*rand(1,Nums));%初始值
    32. [epls,f1,f2,Aim] = func_obj(X);
    33. E = epls;
    34. Js(a,1) = E;
    35. end
    36. Objv = (Js+eps);
    37. gen = 0;
    38. %%
    39. while gen < MAXGEN;
    40. gen
    41. Pe0 = 0.99;
    42. pe1 = 0.01;
    43. FitnV=ranking(Objv);
    44. Selch=select('sus',Chrom,FitnV);
    45. Selch=recombin('xovsp', Selch,Pe0);
    46. Selch=mut( Selch,pe1);
    47. phen1=bs2rv(Selch,FieldD);
    48. for a=1:1:NIND
    49. X = round(phen1(a,:));
    50. %计算对应的目标值
    51. [epls,f1,f2,Aim]= func_obj(X);
    52. E = epls;
    53. JJ(a,1) = E;
    54. end
    55. Objvsel=(JJ);
    56. [Chrom,Objv]=reins(Chrom,Selch,1,1,Objv,Objvsel);
    57. gen=gen+1;
    58. %保存参数收敛过程和误差收敛过程以及函数值拟合结论
    59. index1 = isnan(JJ);
    60. index2 = find(index1 == 1);
    61. JJ(index2) = [];
    62. index3 = find(JJ==10000000000000);
    63. JJ(index3) = [];
    64. Error(gen) = mean(JJ);
    65. [VV,II]=min(JJ);
    66. end
    67. figure;
    68. plot(Error,'linewidth',2);
    69. grid on
    70. xlabel('迭代次数');
    71. ylabel('遗传算法优化过程');
    72. legend('Average fitness');
    73. [V,I] = min(JJ);
    74. X = round(phen1(I,:))
    75. [epls,f1,f2,Aim]= func_obj(X);
    76. %成本输出
    77. epls
    78. f1
    79. f2
    80. %显示布局图
    81. ii=find(X==0);
    82. X(ii)=[];
    83. XCDZ(ii)=[];
    84. YCDZ(ii)=[];
    85. figure;
    86. for i = 1:length(X)
    87. if X(i)==1
    88. plot(XCDZ(i),YCDZ(i),'bo','LineWidth',2,...
    89. 'MarkerEdgeColor','k',...
    90. 'MarkerFaceColor','b',...
    91. 'MarkerSize',10);
    92. hold on
    93. text(XCDZ(i)+0.2,YCDZ(i)+0.2,num2str(X(i)));hold on
    94. end
    95. if X(i)==2
    96. plot(XCDZ(i),YCDZ(i),'rs','LineWidth',2,...
    97. 'MarkerEdgeColor','k',...
    98. 'MarkerFaceColor','r',...
    99. 'MarkerSize',10);
    100. hold on
    101. text(XCDZ(i)+0.2,YCDZ(i)+0.2,num2str(X(i))); hold on
    102. end
    103. if X(i)==3
    104. plot(XCDZ(i),YCDZ(i),'k^','LineWidth',2,...
    105. 'MarkerEdgeColor','k',...
    106. 'MarkerFaceColor','c',...
    107. 'MarkerSize',10);
    108. hold on
    109. text(XCDZ(i)+0.2,YCDZ(i)+0.2,num2str(X(i)));hold on
    110. end
    111. if X(i)==4
    112. plot(XCDZ(i),YCDZ(i),'r>','LineWidth',2,...
    113. 'MarkerEdgeColor','k',...
    114. 'MarkerFaceColor','g',...
    115. 'MarkerSize',10);
    116. hold on
    117. text(XCDZ(i)+0.2,YCDZ(i)+0.2,num2str(X(i)));hold on
    118. end
    119. end
    120. hold on
    121. plot(Xcar,Ycar,'gx');
    122. for i = 1:length(Aim)
    123. plot([Xcar(i),XCDZ(Aim(i))],[Ycar(i),YCDZ(Aim(i))],'b-o','LineWidth',1,...
    124. 'MarkerEdgeColor','k',...
    125. 'MarkerFaceColor','y',...
    126. 'MarkerSize',5);
    127. hold on
    128. end
    129. A003

    4.完整MATLAB程序

    V

  • 相关阅读:
    SSM整合(三)
    conda创建虚拟环境&conda常用命令&复制环境
    小国王(目标状态优化版)—— 状态压缩DP
    Aop面向切面编程
    postman断言详解
    Linux 之nmcli网络配置命令
    模拟实现哈希
    FreeRTOS入门教程(任务优先级,Tick)
    Anaconda下 Prophet的安装,pystan和fbprophet的版本问题
    华为云国际版实名账号:亚太已发展超2500个本地生态伙伴 超50%收入由伙伴创造
  • 原文地址:https://blog.csdn.net/hlayumi1234567/article/details/127833840