• 基于灰色神经网络的预测算法——订单需求预测


           大家好,我是带我去滑雪!

           灰色系统理论的不确定性处理与神经网络的非线性建模相结合,有望更好地处理实际问题中的不确定性和复杂性。本期使用灰色神经网络实现预测冰箱订单需求。

    一、问题背景与模型建立

    (1)灰色理论

            灰色系统理论(Grey System Theory)是由中国学者李明提出的一种系统科学理论,它主要应用于处理那些信息不完备、不确定性较大、难以精确描述的系统问题。该理论最初应用于经济领域,但后来被拓展到了工程、环境科学、社会科学等多个领域。

           灰色系统中建立的模型称为灰色模型,该模型是以原始数据序列为基础建立微分方程。灰色建模中最有代表的模型是针对时间序列的GM建模,它直接将时间序列数据转化为微分方程,利用系统信息,使抽象的模型量化。进而在缺乏系统特性知识的情况下预测系统输出。

    (2)灰色神经网络

           灰色神经网络是指一种基于神经网络框架,同时结合了灰色系统理论的方法。包括使用神经网络进行数据建模和模式识别,同时考虑到灰色系统理论中处理不完整信息的特点。灰色神经网络的学习流程如下:

    • 步骤1:根据训练数据特征初始化网络结构,初始化参数a,b,并根据a,b的值计算u;
    • 步骤2:根据网络权值定义计算权值;
    • 步骤3:对每一个输入序列,计算每层的输出;
    • 步骤4:计算网络预测输出和期望输出的误差,并根据误差调整权值和阈值;
    • 步骤5:判断训练是否结束,若否,返回步骤3。

    (3)冰箱订单预测背景

            对于冰箱市场来说,影响需求量的因素很多,比如季节性因素、成本、产品质量、品牌认可度、售后服务、产品结构、产品生命周期、价格波动及销售力度、竞争对手、市场特征、性能价格比等,根据各因素对订单需求影响的大小,从中选取需求趋势、产品市场份额预测、销售价格波动、订单缺货情况和分销商的联合预测情况5个因素作为主要因素预测冰箱订单量。

    需求趋势:涉及分析市场对产品或服务的需求如何变化的趋势。这可能包括季节性变化、长期趋势、新兴市场的增长等。了解需求趋势有助于企业调整生产计划、库存策略和市场营销活动,以满足不断变化的市场需求。

    产品市场份额预测:预测产品在市场上的份额变化。这包括了解竞争对手的动态、消费者偏好的变化、市场份额的增长或减少等。有效的市场份额预测有助于企业制定竞争策略、定价策略和产品创新战略。

    销售价格波动:考察销售价格的波动情况,即产品或服务价格如何随时间变化。这可能受到原材料成本、竞争状况、市场需求等多种因素的影响。了解销售价格波动有助于企业确定合适的定价策略,最大化盈利并保持市场竞争力。

    订单缺货情况:分析订单履行过程中产品缺货的情况。这包括了解导致缺货的原因,如生产问题、供应链中断等。解决订单缺货问题对于维护客户满意度和保持业务正常运作至关重要。

    和分销商的联合预测情况:与分销商合作,共同预测产品的需求。这有助于建立更为准确的供应链和库存管理系统,减少库存过剩或缺货的风险。有效的合作预测可以提高供应链的敏捷性,同时确保分销商和制造商之间的合作更为紧密。

    (4)模型建立

            基于灰色神经网络的冰箱订单预测算法流程:其中,灰色神经网络构建根据输入、输出数据维数确定灰色神经网络结构。由于本案例输入数据为5维,输出数据为1维,所以灰色神经网络结构维1-1-6-1,即LA层有1个节点,输入为时间序列,LB层有1个节点,LC层有6个节点,第2-6个分别输入需求趋势、产品市场份额预测、销售价格波动、订单缺货情况和分销商的联合预测5个因素的归一化数据,输出为预测订单需求。

    二、代码实现与结果分析

    (1)数据处理

    1. clc
    2. clear
    3. load data
    4. [n,m]=size(X);
    5. for i=1:n
    6. y(i,1)=sum(X(1:i,1));
    7. y(i,2)=sum(X(1:i,2));
    8. y(i,3)=sum(X(1:i,3));
    9. y(i,4)=sum(X(1:i,4));
    10. y(i,5)=sum(X(1:i,5));
    11. y(i,6)=sum(X(1:i,6));
    12. end

    (2)网络初始化

    1. a=0.3+rand(1)/4;
    2. b1=0.3+rand(1)/4;
    3. b2=0.3+rand(1)/4;
    4. b3=0.3+rand(1)/4;
    5. b4=0.3+rand(1)/4;
    6. b5=0.3+rand(1)/4;
    7. u1=0.0015;
    8. u2=0.0015;
    9. u3=0.0015;
    10. u4=0.0015;
    11. u5=0.0015;
    12. t=1;
    13. w11=a;
    14. w21=-y(1,1);
    15. w22=2*b1/a;
    16. w23=2*b2/a;
    17. w24=2*b3/a;
    18. w25=2*b4/a;
    19. w26=2*b5/a;
    20. w31=1+exp(-a*t);
    21. w32=1+exp(-a*t);
    22. w33=1+exp(-a*t);
    23. w34=1+exp(-a*t);
    24. w35=1+exp(-a*t);
    25. w36=1+exp(-a*t);
    26. theta=(1+exp(-a*t))*(b1*y(1,2)/a+b2*y(1,3)/a+b3*y(1,4)/a+b4*y(1,5)/a+b5*y(1,6)/a-y(1,1));
    27. kk=1;

    (3)网络学习

    1. for j=1:10
    2. %循环迭代
    3. E(j)=0;
    4. for i=1:30
    5. %% 网络输出计算
    6. t=i;
    7. LB_b=1/(1+exp(-w11*t)); %LB层输出
    8. LC_c1=LB_b*w21; %LC层输出
    9. LC_c2=y(i,2)*LB_b*w22; %LC层输出
    10. LC_c3=y(i,3)*LB_b*w23; %LC层输出
    11. LC_c4=y(i,4)*LB_b*w24; %LC层输出
    12. LC_c5=y(i,5)*LB_b*w25; %LC层输出
    13. LC_c6=y(i,6)*LB_b*w26; %LC层输出
    14. LD_d=w31*LC_c1+w32*LC_c2+w33*LC_c3+w34*LC_c4+w35*LC_c5+w36*LC_c6; %LD层输出
    15. theta=(1+exp(-w11*t))*(w22*y(i,2)/2+w23*y(i,3)/2+w24*y(i,4)/2+w25*y(i,5)/2+w26*y(i,6)/2-y(1,1)); %阀值
    16. ym=LD_d-theta; %网络输出值
    17. yc(i)=ym;
    18. %% 权值修正
    19. error=ym-y(i,1); %计算误差
    20. E(j)=E(j)+abs(error); %误差求和
    21. error1=error*(1+exp(-w11*t)); %计算误差
    22. error2=error*(1+exp(-w11*t)); %计算误差
    23. error3=error*(1+exp(-w11*t));
    24. error4=error*(1+exp(-w11*t));
    25. error5=error*(1+exp(-w11*t));
    26. error6=error*(1+exp(-w11*t));
    27. error7=(1/(1+exp(-w11*t)))*(1-1/(1+exp(-w11*t)))*(w21*error1+w22*error2+w23*error3+w24*error4+w25*error5+w26*error6);
    28. %修改权值
    29. w22=w22-u1*error2*LB_b;
    30. w23=w23-u2*error3*LB_b;
    31. w24=w24-u3*error4*LB_b;
    32. w25=w25-u4*error5*LB_b;
    33. w26=w26-u5*error6*LB_b;
    34. w11=w11+a*t*error7;
    35. end
    36. end

    (4)结果预测

         

    1. for i=31:36
    2. t=i;
    3. LB_b=1/(1+exp(-w11*t)); %LB层输出
    4. LC_c1=LB_b*w21; %LC层输出
    5. LC_c2=y(i,2)*LB_b*w22; %LC层输出
    6. LC_c3=y(i,3)*LB_b*w23; %LC层输出
    7. LC_c4=y(i,4)*LB_b*w24; %LC层输出
    8. LC_c5=y(i,5)*LB_b*w25;
    9. LC_c6=y(i,6)*LB_b*w26;
    10. LD_d=w31*LC_c1+w32*LC_c2+w33*LC_c3+w34*LC_c4+w35*LC_c5+w36*LC_c6; %LD层输出
    11. theta=(1+exp(-w11*t))*(w22*y(i,2)/2+w23*y(i,3)/2+w24*y(i,4)/2+w25*y(i,5)/2+w26*y(i,6)/2-y(1,1)); %阀值
    12. ym=LD_d-theta; %网络输出值
    13. yc(i)=ym;
    14. end
    15. yc=yc*100000;
    16. y(:,1)=y(:,1)*10000;
    17. %计算预测的每月需求量
    18. for j=36:-1:2
    19. ys(j)=(yc(j)-yc(j-1))/10;
    20. end

     (5)结果分析

          灰色神经网络训练过程:

           可以看出,灰色神经网络收敛速度很快,但是网络很快陷入局部最优,无法进一步修正参数。用训练好的灰色神经网络预测冰箱订单,预测结果:


    更多优质内容持续发布中,请移步主页查看。

    若有问题可邮箱联系:1736732074@qq.com 

    博主的WeChat:TCB1736732074

       点赞+关注,下次不迷路!

  • 相关阅读:
    I/O 模型解析
    C++设计模式之适配器模式
    R语言——类与对象
    神经网络参数研究方法,神经网络参数研究方向
    idea启动项目很久很慢的一种解决方案
    射频信号处理知识点点滴滴
    时间复杂度和空间复杂度【一学就会】
    第十一届蓝桥杯C++青少年组中/高级组选拔赛2019年真题解析
    【python】ModuleNotFoundError: No module named ‘skimage‘...
    Golang开发习惯:变量、常量声明&使用惯例
  • 原文地址:https://blog.csdn.net/qq_45856698/article/details/134489773