基于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电子书和数学建模资料


相关文章
|
1天前
|
传感器 算法
基于GA遗传算法的多机无源定位系统GDOP优化matlab仿真
本项目基于遗传算法(GA)优化多机无源定位系统的GDOP,使用MATLAB2022A进行仿真。通过遗传算法的选择、交叉和变异操作,迭代优化传感器配置,最小化GDOP值,提高定位精度。仿真输出包括GDOP优化结果、遗传算法收敛曲线及三维空间坐标点分布图。核心程序实现了染色体编码、适应度评估、遗传操作等关键步骤,最终展示优化后的传感器布局及其性能。
|
2天前
|
机器学习/深度学习 算法 安全
基于深度学习的路面裂缝检测算法matlab仿真
本项目基于YOLOv2算法实现高效的路面裂缝检测,使用Matlab 2022a开发。完整程序运行效果无水印,核心代码配有详细中文注释及操作视频。通过深度学习技术,将目标检测转化为回归问题,直接预测裂缝位置和类别,大幅提升检测效率与准确性。适用于实时检测任务,确保道路安全维护。 简介涵盖了算法理论、数据集准备、网络训练及检测过程,采用Darknet-19卷积神经网络结构,结合随机梯度下降算法进行训练。
|
3天前
|
算法 数据可视化 数据安全/隐私保护
一级倒立摆平衡控制系统MATLAB仿真,可显示倒立摆平衡动画,对比极点配置,线性二次型,PID,PI及PD五种算法
本课题基于MATLAB对一级倒立摆控制系统进行升级仿真,增加了PI、PD控制器,并对比了极点配置、线性二次型、PID、PI及PD五种算法的控制效果。通过GUI界面显示倒立摆动画和控制输出曲线,展示了不同控制器在偏转角和小车位移变化上的性能差异。理论部分介绍了倒立摆系统的力学模型,包括小车和杆的动力学方程。核心程序实现了不同控制算法的选择与仿真结果的可视化。
31 15
|
3天前
|
算法
基于SOA海鸥优化算法的三维曲面最高点搜索matlab仿真
本程序基于海鸥优化算法(SOA)进行三维曲面最高点搜索的MATLAB仿真,输出收敛曲线和搜索结果。使用MATLAB2022A版本运行,核心代码实现种群初始化、适应度计算、交叉变异等操作。SOA模拟海鸥觅食行为,通过搜索飞行、跟随飞行和掠食飞行三种策略高效探索解空间,找到全局最优解。
|
4天前
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
|
5天前
|
机器学习/深度学习 数据采集 算法
基于GWO灰狼优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a,展示了时间序列预测算法的运行效果(无水印)。核心程序包含详细中文注释和操作视频。算法采用CNN-GRU-SAM网络,结合灰狼优化(GWO),通过卷积层提取局部特征、GRU处理长期依赖、自注意力机制捕捉全局特征,最终实现复杂非线性时间序列的高效预测。
|
5天前
|
传感器 算法 物联网
基于粒子群算法的网络最优节点部署优化matlab仿真
本项目基于粒子群优化(PSO)算法,实现WSN网络节点的最优部署,以最大化节点覆盖范围。使用MATLAB2022A进行开发与测试,展示了优化后的节点分布及其覆盖范围。核心代码通过定义目标函数和约束条件,利用PSO算法迭代搜索最佳节点位置,并绘制优化结果图。PSO算法灵感源于鸟群觅食行为,适用于连续和离散空间的优化问题,在通信网络、物联网等领域有广泛应用。该算法通过模拟粒子群体智慧,高效逼近最优解,提升网络性能。
|
1月前
|
算法 数据安全/隐私保护 计算机视觉
基于Retinex算法的图像去雾matlab仿真
本项目展示了基于Retinex算法的图像去雾技术。完整程序运行效果无水印,使用Matlab2022a开发。核心代码包含详细中文注释和操作步骤视频。Retinex理论由Edwin Land提出,旨在分离图像的光照和反射分量,增强图像对比度、颜色和细节,尤其在雾天条件下表现优异,有效解决图像去雾问题。
|
1月前
|
算法 数据可视化 安全
基于DWA优化算法的机器人路径规划matlab仿真
本项目基于DWA优化算法实现机器人路径规划的MATLAB仿真,适用于动态环境下的自主导航。使用MATLAB2022A版本运行,展示路径规划和预测结果。核心代码通过散点图和轨迹图可视化路径点及预测路径。DWA算法通过定义速度空间、采样候选动作并评估其优劣(目标方向性、障碍物距离、速度一致性),实时调整机器人运动参数,确保安全避障并接近目标。
148 68
|
1月前
|
算法 决策智能
基于SA模拟退火优化算法的TSP问题求解matlab仿真,并对比ACO蚁群优化算法
本项目基于MATLAB2022A,使用模拟退火(SA)和蚁群优化(ACO)算法求解旅行商问题(TSP),对比两者的仿真时间、收敛曲线及最短路径长度。SA源于金属退火过程,允许暂时接受较差解以跳出局部最优;ACO模仿蚂蚁信息素机制,通过正反馈发现最优路径。结果显示SA全局探索能力强,ACO在路径优化类问题中表现优异。

热门文章

最新文章