基于Matlab实现ANFIS算法

简介: 基于Matlab实现ANFIS算法

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机

⛄ 内容介绍

阐述了自适应模糊推理系统 ( Adaptive Network-based Fuzzy Inference System,ANFIS)网络 ,提出了水运货运量预测的 ANFIS网络预测模型 .以 MATLAB为工具 ,以 1 985~ 2 0 0 1年我国水运货运量为训练样本 ;2 0 0 2年我国水运货运量为校验样本 ,对网络进行训练后 ,预测了 2 0 0 3~2 0 1 0年我国水运货运量 .估算结果表明 ,同 BP神经网络模型相比 ,此模型具有更高的准确性 .

⛄ 完整代码

clear;close all;

gamma=0.75;%设定惯性因子


eps1=0.005;%设定停止训练的条件参数

m1=8;%设定隶属函数个数

m2=8;


a=-1;b=1;

w0=a+(b-a)*rand(1,m1*m2);%初始化权值阵


for i=1:2

   switch i

       case 1,beta=0.75;%设定学习率

       otherwise,beta=0.25;

   end

   c=[2/7*(0:m1-1)-1;2/7*(0:m2-1)-1];%初始化Cij

   sigma=0.1213*ones(2,m1);%初始化σij

   w=w0;

   mu=zeros(2,m1);%初始化隶属度层

   alpha=zeros(1,m1*m2);%初始化规则层

   alpha_=zeros(1,m1*m2);%初始化归一化层

   

   delta2=zeros(2,m1);%初始化δ2

   dw=zeros(1,m1*m2);%初始化权值变化量

   dc=zeros(2,m1);%初始化c变化量

   dsigma=zeros(2,m1);%初始化σij变化量

   

   %----------------训练过程----------------%

   err=1;%初始化误差

   er=[];

   counter=0;%统计训练步数

   while(err>=eps1)

       Par_E_w=zeros(1,m1*m2);%误差对权值阵的偏导数

       Par_E_c=zeros(2,m1);%误差对c的偏导数

       Par_E_sigma=zeros(2,m1);%误差对σ的偏导数

       E=0;

       for x1=-1:2/19:1

           for x2=-1:2/19:1

               yd=sin(pi*x1)*cos(pi*x2);%期望输出,导师信号

               %正向传播

               mu(1,:)=exp(-(x1-c(1,:)).^2./sigma(1,:).^2);%计算隶属度层

               mu(2,:)=exp(-(x2-c(2,:)).^2./sigma(2,:).^2);

               s=zeros(2,m1,m1*m2);%初始化Sij

               for m=1:m1

                   for n=1:m2

                       alpha((m-1)*m2+n)=min(mu(1,m),mu(2,n));%计算规则层(取小运算)

                       if mu(1,m)<=mu(2,n)

                           s(1,m,(m-1)*m2+n)=1;

                       end

                       if mu(1,m)>=mu(2,n)

                           s(2,n,(m-1)*m2+n)=1;

                       end

                   end

               end

               alpha_=alpha/sum(alpha);%计算归一化层

               

               y=alpha_*w.';%计算网络输出

               E=E+1/2*(yd-y)^2;%计算误差

               %反向传播

               delta5=yd-y;

               delta4=delta5*w;

               

               for k=1:m1*m2

                   delta3(k)=delta4(k)*(sum(alpha)-alpha(k))./sum(alpha)^2;

               end

               for m=1:2

                   for n=1:m1

                       delta2(m,n)=0;

                       for l=1:m1*m2

                           delta2(m,n)=delta2(m,n)+delta3(l)*s(m,n,l)*mu(m,n);

                       end

                   end

               end

               

               Par_E_w=Par_E_w-delta5*alpha_;%计算偏导数

               Par_E_c(1,:)=Par_E_c(1,:)-2*delta2(1,:).*(x1-c(1,:))./sigma(1,:).^2;

               Par_E_c(2,:)=Par_E_c(2,:)-2*delta2(2,:).*(x2-c(2,:))./sigma(2,:).^2;

               Par_E_sigma(1,:)=Par_E_sigma(1,:)-2*delta2(1,:).*(x1-c(1,:)).^2./sigma(1,:).^3;

               Par_E_sigma(2,:)=Par_E_sigma(2,:)-2*delta2(2,:).*(x2-c(2,:)).^2./sigma(2,:).^3;

           end

       end

       

       num=20*20;

       Par_E_w=Par_E_w/num;

       Par_E_c=Par_E_c/num;

       Par_E_sigma=Par_E_sigma/num;

       

       dw=-beta*Par_E_w+gamma*dw;

       dc=-beta*Par_E_c+gamma*dc;

       dsigma=-beta*Par_E_sigma+gamma*dsigma;

       

       w=w+dw;

       c=c+dc;

       sigma=sigma+dsigma;

       

       counter=counter+1;

       er(counter)=E/num;

       err=E/num;

       %     if counter>1000

       %         break;

       %     end

   end

   

   %----------------测试过程----------------%

   xx1=-1:2/19:1;

   xx2=-1:2/19:1;

   yd1=zeros(20,20);

   for m=1:20

       for n=1:20

           yd1(m,n)=sin(pi*xx1(m))*cos(pi*xx2(n));%期望输出

           

           mu(1,:)=exp(-(xx1(m)-c(1,:)).^2./sigma(1,:).^2);%计算隶属度层

           mu(2,:)=exp(-(xx2(n)-c(2,:)).^2./sigma(2,:).^2);

           

           for k=1:m1              %计算规则层

               for l=1:m2

                   alpha((k-1)*m2+l)=min(mu(1,k),mu(2,l));

               end

           end

           

           alpha_=alpha/sum(alpha);%计算归一化层

           yr(m,n)=alpha_*w.';     %计算网络输出

       end

   end

   errorf1=1/2*(yd1-yr).^2;%计算误差

   

   

   xxx1=-1:2/11:1;

   xxx2=-1:2/11:1;

   yd2=zeros(12,12);

   for m=1:12

       for n=1:12

           yd2(m,n)=sin(pi*xxx1(m))*cos(pi*xxx2(n));%期望输出

           

           mu(1,:)=exp(-(xxx1(m)-c(1,:)).^2./sigma(1,:).^2);%计算隶属度层

           mu(2,:)=exp(-(xxx2(n)-c(2,:)).^2./sigma(2,:).^2);

           

           for k=1:m1              %计算规则层

               for l=1:m2

                   alpha((k-1)*m2+l)=min(mu(1,k),mu(2,l));

               end

           end

           

           alpha_=alpha/sum(alpha);%计算归一化层

           yr2(m,n)=alpha_*w.';     %计算网络输出

       end

   end

   errorf2=1/2*(yd1-yr).^2;%计算误差

   

   

   %----------------绘图----------------%

   figure(i);

   sn=sprintf('β=%4.2f,γ=%4.2f',beta,gamma);

   

   X=ones(size(xx2.'))*xx1;

   Y=xx2.'*ones(size(xx1));

   

   subplot(2,2,1);

   surf(X,Y,yd1);

   xlabel('x1');

   ylabel('x2');

   zlabel('期望的输出yd');

   title(sn);

   

   subplot(2,2,3);

   surf(X,Y,yr);

   xlabel('x1');

   ylabel('x2');

   zlabel('实际网络的输出yr');

   title(sn);

   

   subplot(2,2,2);

   plot(er);

   xlabel('训练步数');

   ylabel('误差');

   title(sn);

   

   subplot(2,2,4);

   surf(X,Y,errorf1);

   xlabel('x1');

   ylabel('x2');

   zlabel('误差');

   title(sn);

   

   figure(i+2);

   sn=sprintf('β=%4.2f,γ=%4.2f 泛化能力测试',beta,gamma);

   

   X=ones(size(xxx2.'))*xxx1;

   Y=xxx2.'*ones(size(xxx1));

   subplot(2,1,1);

   surf(X,Y,yd2);

   xlabel('x1');

   ylabel('x2');

   zlabel('期望的输出yd');

   title(sn);

   

   subplot(2,1,2);

   surf(X,Y,yr2);

   xlabel('x1');

   ylabel('x2');

   zlabel('实际网络的输出yr');

   title(sn);

   

   beta

   counter

end

⛄ 运行结果

⛄ 参考文献

[1] 张志红, 韩直, 肖盛燮,等. 基于ANFIS交通流实时预测及在MATLAB中的实现[J]. 重庆交通学院学报, 2007.

[2] 王宇, 刘小健, 董元胜. 基于MATLAB的ANFIS网络在水运货运量预测中的应用[J]. 武汉理工大学学报:交通科学与工程版, 2004, 28(4):3.

[3] 王保峰, 石春和, 王忠强. 一种基于MATLAB的ANFIS自适应消噪设计[J]. 福建电脑, 2006(1):2.

[4] 陈新兵. ANFIS的MATLAB实现与液压成型机模糊温控系统的研究[D]. 湖南大学, 2005.

[5] 申伟, 张元培. 基于MATLAB的自适应神经网络模糊系统(ANFIS)的应用[C]// 制造业自动化与网络化制造学术交流会. 2004.

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料


相关文章
|
15天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
1天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
2天前
|
存储 算法 决策智能
基于免疫算法的TSP问题求解matlab仿真
旅行商问题(TSP)是一个经典的组合优化问题,目标是寻找经过每个城市恰好一次并返回起点的最短回路。本文介绍了一种基于免疫算法(IA)的解决方案,该算法模拟生物免疫系统的运作机制,通过克隆选择、变异和免疫记忆等步骤,有效解决了TSP问题。程序使用MATLAB 2022a版本运行,展示了良好的优化效果。
|
1天前
|
机器学习/深度学习 算法 芯片
基于GSP工具箱的NILM算法matlab仿真
基于GSP工具箱的NILM算法Matlab仿真,利用图信号处理技术解析家庭或建筑内各电器的独立功耗。GSPBox通过图的节点、边和权重矩阵表示电气系统,实现对未知数据的有效分类。系统使用MATLAB2022a版本,通过滤波或分解技术从全局能耗信号中提取子设备的功耗信息。
|
1天前
|
机器学习/深度学习 算法 5G
基于MIMO系统的SDR-AltMin混合预编码算法matlab性能仿真
基于MIMO系统的SDR-AltMin混合预编码算法通过结合半定松弛和交替最小化技术,优化大规模MIMO系统的预编码矩阵,提高信号质量。Matlab 2022a仿真结果显示,该算法能有效提升系统性能并降低计算复杂度。核心程序包括预编码和接收矩阵的设计,以及不同信噪比下的性能评估。
13 3
|
18小时前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。
|
12天前
|
人工智能 算法 数据安全/隐私保护
基于遗传优化的SVD水印嵌入提取算法matlab仿真
该算法基于遗传优化的SVD水印嵌入与提取技术,通过遗传算法优化水印嵌入参数,提高水印的鲁棒性和隐蔽性。在MATLAB2022a环境下测试,展示了优化前后的性能对比及不同干扰下的水印提取效果。核心程序实现了SVD分解、遗传算法流程及其参数优化,有效提升了水印技术的应用价值。
|
14天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化CNN-LSTM网络的数据分类识别算法matlab仿真
本项目展示了基于贝叶斯优化(BO)的CNN-LSTM网络在数据分类中的应用。通过MATLAB 2022a实现,优化前后效果对比明显。核心代码附带中文注释和操作视频,涵盖BO、CNN、LSTM理论,特别是BO优化CNN-LSTM网络的batchsize和学习率,显著提升模型性能。
|
18天前
|
存储
基于遗传算法的智能天线最佳阵列因子计算matlab仿真
本课题探讨基于遗传算法优化智能天线阵列因子,以提升无线通信系统性能,包括信号质量、干扰抑制及定位精度。通过MATLAB2022a实现的核心程序,展示了遗传算法在寻找最优阵列因子上的应用,显著改善了天线接收功率。
|
6天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA-PSO-SVM算法的混沌背景下微弱信号检测matlab仿真
本项目基于MATLAB 2022a,展示了SVM、PSO、GA-PSO-SVM在混沌背景下微弱信号检测中的性能对比。核心程序包含详细中文注释和操作步骤视频。GA-PSO-SVM算法通过遗传算法和粒子群优化算法优化SVM参数,提高信号检测的准确性和鲁棒性,尤其适用于低信噪比环境。