• m基于遗传优化算法的公式参数拟合matlab仿真


    目录

    1.算法描述

    2.仿真效果预览

    3.MATLAB核心程序

    4.完整MATLAB


    1.算法描述

    遗传算法的原理

           遗传算法GA把问题的解表示成“染色体”,在算法中也即是以二进制编码的串。并且,在执行遗传算法之前,给出一群“染色体”,也即是假设解。然后,把这些假设解置于问题的“环境”中,并按适者生存的原则,从中选择出较适应环境的“染色体”进行复制,再通过交叉,变异过程产生更适应环境的新一代“染色体”群。这样,一代一代地进化,最后就会收敛到最适应环境的一个“染色体”上,它就是问题的最优解。

           其主要步骤如下:

    1.初始化

           选择一个群体,即选择一个串或个体的集合bi,i=1,2,...n。这个初始的群体也就是问题假设解的集合。一般取n=30-160。

           通常以随机方法产生串或个体的集合bi,i=1,2,...n。问题的最优解将通过这些初始假设解进化而求出。

    2.选择

          根据适者生存原则选择下一代的个体。在选择时,以适应度为选择原则。适应度准则体现了适者生存,不适应者淘汰的自然法则。

    给出目标函数f,则f(bi)称为个体bi的适应度。以

    为选中bi为下一代个体的次数。

    显然.从式(3—86)可知:

    (1)适应度较高的个体,繁殖下一代的数目较多。

    (2)适应度较小的个体,繁殖下一代的数目较少;甚至被淘汰。

    这样,就产生了对环境适应能力较强的后代。对于问题求解角度来讲,就是选择出和最优解较接近的中间解。

    3.交叉

           对于选中用于繁殖下一代的个体,随机地选择两个个体的相同位置,按交叉概率P。在选中的位置实行交换。这个过程反映了随机信息交换;目的在于产生新的基因组合,也即产生新的个体。交叉时,可实行单点交叉或多点交叉。

    拟合公式:

     该公式经过化简实部、虚部分离得: 

    公式化简 

    令: 

    所以: 

    需要拟合的参数有: 

    定义GA优化目标函数如下所示:

    2.仿真效果预览

    matlab2022a仿真结果如下:

    3.MATLAB核心程序

    1. %根据遗传算法进行参数的拟合
    2. MAXGEN = 2000;
    3. NIND = 400;
    4. Chrom = crtbp(NIND,14*10);
    5. %14个变量的区间
    6. Areas = [0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0;
    7. 10 ,1 ,100 ,500 ,100 ,5e8 ,1 ,1 ,1 ,1 ,2e11,2e8 ,1e4 ,1e2];
    8. FieldD = [rep([10],[1,14]);Areas;rep([0;0;0;0],[1,14])];
    9. epls_inf_NIND = zeros(NIND,1);
    10. deltas_NIND = zeros(NIND,1);
    11. delta_epls1_NIND = zeros(NIND,1);
    12. delta_epls2_NIND = zeros(NIND,1);
    13. delta_epls3_NIND = zeros(NIND,1);
    14. delta_epls4_NIND = zeros(NIND,1);
    15. beta1_NIND = zeros(NIND,1);
    16. beta2_NIND = zeros(NIND,1);
    17. beta3_NIND = zeros(NIND,1);
    18. beta4_NIND = zeros(NIND,1);
    19. fc1_NIND = zeros(NIND,1);
    20. fc2_NIND = zeros(NIND,1);
    21. fc3_NIND = zeros(NIND,1);
    22. fc4_NIND = zeros(NIND,1);
    23. epls_inf = zeros(MAXGEN,1);
    24. deltas = zeros(MAXGEN,1);
    25. delta_epls1 = zeros(MAXGEN,1);
    26. delta_epls2 = zeros(MAXGEN,1);
    27. delta_epls3 = zeros(MAXGEN,1);
    28. delta_epls4 = zeros(MAXGEN,1);
    29. beta1 = zeros(MAXGEN,1);
    30. beta2 = zeros(MAXGEN,1);
    31. beta3 = zeros(MAXGEN,1);
    32. beta4 = zeros(MAXGEN,1);
    33. fc1 = zeros(MAXGEN,1);
    34. fc2 = zeros(MAXGEN,1);
    35. fc3 = zeros(MAXGEN,1);
    36. fc4 = zeros(MAXGEN,1);
    37. Error = zeros(MAXGEN,1);
    38. gen = 0;
    39. for a=1:1:NIND
    40. epls_inf_NIND(a) = epls_inf_0;
    41. deltas_NIND(a) = deltas_0;
    42. delta_epls1_NIND(a) = delta_epls1_0;
    43. delta_epls2_NIND(a) = delta_epls2_0;
    44. delta_epls3_NIND(a) = delta_epls3_0;
    45. delta_epls4_NIND(a) = delta_epls4_0;
    46. beta1_NIND(a) = beta1_0;
    47. beta2_NIND(a) = beta2_0;
    48. beta3_NIND(a) = beta3_0;
    49. beta4_NIND(a) = beta4_0;
    50. fc1_NIND(a) = fc1_0;
    51. fc2_NIND(a) = fc2_0;
    52. fc3_NIND(a) = fc3_0;
    53. fc4_NIND(a) = fc4_0;
    54. %计算对应的目标值
    55. [epls_1,epls_2] = func_obj(f,...
    56. epls_inf_NIND(a),...
    57. deltas_NIND(a),...
    58. delta_epls1_NIND(a),delta_epls2_NIND(a),delta_epls3_NIND(a),delta_epls4_NIND(a),...
    59. beta1_NIND(a),beta2_NIND(a),beta3_NIND(a),beta4_NIND(a),...
    60. fc1_NIND(a),fc2_NIND(a),fc3_NIND(a),fc4_NIND(a));
    61. for m = 1:length(f)
    62. tmps1(m) = ((e1(m)-epls_1(m))^2)/(e1(m)^2);
    63. tmps2(m) = ((e2(m)-epls_2(m))^2)/(e2(m)^2);
    64. end
    65. E = sum(tmps1)+sum(tmps2);
    66. J(a,1) = E;
    67. end
    68. Objv = (J+eps);
    69. gen = 0;
    70. while gen < MAXGEN;
    71. gen
    72. FitnV=ranking(Objv);
    73. Selch=select('sus',Chrom,FitnV);
    74. Selch=recombin('xovsp', Selch,0.9);
    75. Selch=mut( Selch,0.01);
    76. phen1=bs2rv(Selch,FieldD);
    77. for a=1:1:NIND
    78. if gen == 1
    79. epls_inf_NIND(a) = epls_inf_0;
    80. deltas_NIND(a) = deltas_0;
    81. delta_epls1_NIND(a) = delta_epls1_0;
    82. delta_epls2_NIND(a) = delta_epls2_0;
    83. delta_epls3_NIND(a) = delta_epls3_0;
    84. delta_epls4_NIND(a) = delta_epls4_0;
    85. beta1_NIND(a) = beta1_0;
    86. beta2_NIND(a) = beta2_0;
    87. beta3_NIND(a) = beta3_0;
    88. beta4_NIND(a) = beta4_0;
    89. fc1_NIND(a) = fc1_0;
    90. fc2_NIND(a) = fc2_0;
    91. fc3_NIND(a) = fc3_0;
    92. fc4_NIND(a) = fc4_0;
    93. else
    94. epls_inf_NIND(a) = phen1(a,1);
    95. deltas_NIND(a) = phen1(a,2);
    96. delta_epls1_NIND(a) = phen1(a,3);
    97. delta_epls2_NIND(a) = phen1(a,4);
    98. delta_epls3_NIND(a) = phen1(a,5);
    99. delta_epls4_NIND(a) = phen1(a,6);
    100. beta1_NIND(a) = phen1(a,7);
    101. beta2_NIND(a) = phen1(a,8);
    102. beta3_NIND(a) = phen1(a,9);
    103. beta4_NIND(a) = phen1(a,10);
    104. fc1_NIND(a) = phen1(a,11);
    105. fc2_NIND(a) = phen1(a,12);
    106. fc3_NIND(a) = phen1(a,13);
    107. fc4_NIND(a) = phen1(a,14);
    108. end
    109. %计算对应的目标值
    110. [epls_1,epls_2] = func_obj(f,...
    111. epls_inf_NIND(a),...
    112. deltas_NIND(a),...
    113. delta_epls1_NIND(a),delta_epls2_NIND(a),delta_epls3_NIND(a),delta_epls4_NIND(a),...
    114. beta1_NIND(a),beta2_NIND(a),beta3_NIND(a),beta4_NIND(a),...
    115. fc1_NIND(a),fc2_NIND(a),fc3_NIND(a),fc4_NIND(a));
    116. for m = 1:length(f)
    117. tmps1(m) = ((e1(m)-epls_1(m))^2)/(e1(m)^2);
    118. tmps2(m) = ((e2(m)-epls_2(m))^2)/(e2(m)^2);
    119. end
    120. E = sum(tmps1)+sum(tmps2);
    121. JJ(a,1) = E;
    122. end
    123. Objvsel=(JJ+eps);
    124. [Chrom,Objv]=reins(Chrom,Selch,1,1,Objv,Objvsel);
    125. gen=gen+1;
    126. %保存参数收敛过程和误差收敛过程以及函数值拟合结论
    127. epls_inf(gen) = mean(epls_inf_NIND);
    128. deltas(gen) = mean(deltas_NIND);
    129. delta_epls1(gen) = mean(delta_epls1_NIND);
    130. delta_epls2(gen) = mean(delta_epls2_NIND);
    131. delta_epls3(gen) = mean(delta_epls3_NIND);
    132. delta_epls4(gen) = mean(delta_epls4_NIND);
    133. beta1(gen) = mean(beta1_NIND);
    134. beta2(gen) = mean(beta2_NIND);
    135. beta3(gen) = mean(beta3_NIND);
    136. beta4(gen) = mean(beta4_NIND);
    137. fc1(gen) = mean(fc1_NIND);
    138. fc2(gen) = mean(fc2_NIND);
    139. fc3(gen) = mean(fc3_NIND);
    140. fc4(gen) = mean(fc4_NIND);
    141. Error(gen) = mean(JJ);
    142. end
    143. MIN=min(Objv);
    144. for ttt=1:1:size(Objv)
    145. if Objv(ttt)<=MIN
    146. tt=ttt;
    147. break;
    148. end
    149. end
    150. epls_inf_best = epls_inf_NIND(tt);
    151. deltas_best = deltas_NIND(tt);
    152. delta_epls1_best = delta_epls1_NIND(tt);
    153. delta_epls2_best = delta_epls2_NIND(tt);
    154. delta_epls3_best = delta_epls3_NIND(tt);
    155. delta_epls4_best = delta_epls4_NIND(tt);
    156. beta1_best = beta1_NIND(tt);
    157. beta2_best = beta2_NIND(tt);
    158. beta3_best = beta3_NIND(tt);
    159. beta4_best = beta4_NIND(tt);
    160. fc1_best = fc1_NIND(tt);
    161. fc2_best = fc2_NIND(tt);
    162. fc3_best = fc3_NIND(tt);
    163. fc4_best = fc4_NIND(tt);
    164. %计算对应的目标值
    165. [epls_best1,epls_best2] = func_obj(f,...
    166. epls_inf_best,...
    167. deltas_best,...
    168. delta_epls1_best,delta_epls2_best,delta_epls3_best,delta_epls4_best,...
    169. beta1_best,beta2_best,beta3_best,beta4_best,...
    170. fc1_best,fc2_best,fc3_best,fc4_best);
    171. %画图
    172. figure;
    173. subplot(211);
    174. loglog(e1,'b','linewidth',2);
    175. hold on
    176. loglog(epls_best1,'r','linewidth',2);
    177. legend('原始数据','拟合数据');
    178. subplot(212);
    179. loglog(e2,'b','linewidth',2);
    180. hold on
    181. loglog(epls_best2,'r','linewidth',2);
    182. legend('原始数据','拟合数据');
    183. 02_016m

    4.完整MATLAB

    matlab源码说明_我爱C编程的博客-CSDN博客

    V

  • 相关阅读:
    [Tools: git] Github Pull Request
    spring整合influxdb
    如何将MP4视频压缩小而且还清晰?
    说一下 ArrayDeque 和 LinkedList 的区别?
    [buuctf]ciscn_2019_ne_5
    提升协作效率:钉钉流程与低代码平台的无缝对接
    【大数据之Kafka】十二、Kafka之offset位移及漏消费和重复消费
    win10 lua环境搭建
    jmeter-jexl3语法总结
    基于vue2.0原理-自己实现MVVM框架之computed计算属性
  • 原文地址:https://blog.csdn.net/hlayumi1234567/article/details/128065393