• m基于GA遗传优化的GRNN广义回归神经网络销售数据预测算法matlab仿真


    目录

    1.算法描述

    2.仿真效果预览

    3.MATLAB核心程序

    4.完整MATLAB


    1.算法描述

          随着市场经济的发展和全球化,国内外企业面临着越来越残酷的市场竞争,要想赢得竞争,赢得市场,从事商品销售的单位必须在短时间内,以最低的成本将产品提供给客户,这使得对市场的变化和本身业务的发展前景进行估计。

            制冷压缩机的主要功能是将低压气体提升为高压气体,是制冷设备的核心部件,其广泛应用在空调冰箱等各类电器设备中。因此制冷压缩机有着十分广泛的市场前景,为了获得较为准确的市场预期,我们需要使用已有的理论知识和科学方法,对制冷压缩机的市场发展趋势进行预先估计,从而进一步减少风险,避免企业决策的盲目性。

          遗传算法(Genetic Algorithm)是一类借鉴生物界的进化规律演化而来的随机化搜索方法。它是由美国的J.Holland教授1975年首先提出,其主要特点是直接对结构对象进行操作,不存在求导和函数连续性的限定;具有内在的隐并行性和更好的全局寻优能力;采用概率化的寻优方法,能自动获取和指导优化的搜索空间,自适应地调整搜索方向,不需要确定的规则。遗传算法的这些性质,已被人们广泛地应用于组合优化、机器学习、信号处理、自适应控制和人工生命等领域。它是现代有关智能计算中的关键技术。

           算法的算法流程图如下图所示:

    从图1的算法流程图可知,遗传算法,其主要步骤如下所示:

            步骤一、选择问题解的一个编码,给出一个包含N个染色体的初始种群。

            步骤二、对种群中的每一个染色体 ,分别计算其对应的适应函数值。

            步骤三、若停止规则满足,则算法停止,否则计算概率P,并以此概率分布,从中随机选取N个染色体构成一个新的种群。

            步骤四、通过交叉(交叉概率为),得到N个染色体的交叉概率值。

            步骤五、以较小的变异概率,使得某染色体的一个基因发生变异,形成新的群体重复第步骤二步。

           对GRNN网络来说,当确定了学习样本,则相应的网络结构和各神经元之间的连接权值也就确定出来,网络的训练实际上只是确定平滑参数的过程。GRNN网络中的即相当于径向基函数的分布密度SPREAD。一般情况下,SPREAD越大,逼近过程就越平滑,但误差也增大;SPREAD越小,函数逼近越精确,但逼近过程也越不平滑。

          平滑参数的取值会在很大程度上影响着广义回归神经网络的预测性能,根据式子:

    2.仿真效果预览

    matlab2022a仿真结果如下:

     

     

     

     

    3.MATLAB核心程序

    1. data = [data2010',data2011',data2012'];
    2. data0 = data;
    3. %归一化
    4. Xmin = min(data);
    5. Xmax = max(data);
    6. data = (data-min(data))/(max(data)-min(data));
    7. figure;
    8. plot(data(1:12),'b-x');
    9. hold on
    10. plot(data(13:24),'r-s');
    11. hold on
    12. plot(data(25:36),'k-o');
    13. hold on
    14. legend('2010销售量','2011销售量','2012销售量');
    15. xlabel('Times(month)');
    16. ylabel('销售量');
    17. axis([0,12,0,1]);
    18. grid on;
    19. figure;
    20. plot(data0(1:12),'b-x');
    21. hold on
    22. plot(data0(13:24),'r-s');
    23. hold on
    24. plot(data0(25:36),'k-o');
    25. hold on
    26. legend('2010销售量','2011销售量','2012销售量');
    27. xlabel('Times(month)');
    28. ylabel('销售量');
    29. axis([0,12,0,1500]);
    30. grid on;
    31. %%
    32. %使用遗传算法获得最优的平滑参数
    33. MAXGEN = 30;
    34. NIND = 50;
    35. Chrom = crtbp(NIND,1*10);
    36. %14个变量的区间
    37. %优化变量如下:
    38. %多边形个数N,1~100
    39. Areas = [0;
    40. 1];
    41. FieldD = [rep([10],[1,1]);Areas;rep([0;0;0;0],[1,1])];
    42. alpha = zeros(NIND,1);
    43. alphas = zeros(MAXGEN,1);
    44. for a=1:1:NIND
    45. a
    46. alpha(a)= 0.5;
    47. %计算对应的目标值
    48. Result = func_obj(alpha(a),data,Xmax,Xmin);
    49. E = mean(abs(Result-data0(25:36)));
    50. J(a,1) = E;
    51. end
    52. Objv = J;
    53. gen = 0;
    54. while gen < MAXGEN;
    55. gen
    56. FitnV=ranking(Objv);
    57. Selch=select('sus',Chrom,FitnV);
    58. Selch=recombin('xovsp', Selch,0.95);
    59. Selch=mut( Selch,0.05);
    60. phen1=bs2rv(Selch,FieldD);
    61. for a=1:NIND
    62. alpha(a)= phen1(a,1);
    63. %计算对应的目标值
    64. Result = func_obj(alpha(a),data,Xmax,Xmin);
    65. E = mean(abs(Result-data0(25:36)));
    66. JJ(a,1) = E;
    67. end
    68. Objvsel = JJ;
    69. [Chrom,Objv] = reins(Chrom,Selch,1,1,Objv,Objvsel);
    70. gen = gen + 1;
    71. Error(gen) = mean(JJ);
    72. alphas(gen) = mean(alpha);
    73. end
    74. Result = func_obj(alphas(end),data,Xmax,Xmin);
    75. %画图
    76. figure;
    77. subplot(121)
    78. plot(alphas,'b-o');
    79. hold on;
    80. xlabel('迭代次数');
    81. ylabel('平滑因子');
    82. axis square;
    83. grid on;
    84. subplot(122)
    85. plot(Error,'b-o');
    86. hold on;
    87. xlabel('迭代次数');
    88. ylabel('Error');
    89. axis square;
    90. grid on;
    91. load NET.mat
    92. Result = sim(net,1:12);
    93. Result = Result*(Xmax-Xmin)+Xmin;
    94. figure
    95. plot(data0(25:36),'b-o');
    96. hold on
    97. plot(Result,'r-s');
    98. legend('2012销售量','预测值');
    99. xlabel('Times(month)');
    100. ylabel('销售量');
    101. grid on;
    102. figure
    103. S = [data0(25:36);Result]';
    104. bar(S);
    105. legend('2012销售量','预测值');
    106. xlabel('Times(month)');
    107. ylabel('销售量');
    108. save Rgrnn.mat Result
    109. A = (Result-data0(25:36))./Result;
    110. A = 100*A';
    111. A
    112. 02_021m

    4.完整MATLAB

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

    V

  • 相关阅读:
    【GPT开发】人人都能用ChatGPT4.0做Avatar虚拟人直播
    实验19:光敏传感器+继电器=光控智能灯实验
    1359:围成面积
    MySQL 增删改查获取资料等使用方法
    数学小抄: 概率角度推导Kalman Filter
    Dubbo 知识点整理
    【笔试强训】Day 4
    队列的链表实现 题目(难度1/10)
    uniapp的动态表单实现
    2023五一杯数学建模竞赛ABC题思路解析+代码+论文
  • 原文地址:https://blog.csdn.net/hlayumi1234567/article/details/128066434