用遗传算法优化模糊控制规则,有部分代码,不懂计算适应度那块调用子函数,子函数要怎么写?以及M程序如何和simulink相互调用?

clear all;

close all;

b=newfis('yichuan');

b=addvar(b,'input','e',[-3,3]); %Parametere

b=addmf(b,'input',1,'NB','zmf',[-3,-1]);

b=addmf(b,'input',1,'NM','trimf',[-3,-2,0]);

b=addmf(b,'input',1,'NS','trimf',[-3,-1,1]);

b=addmf(b,'input',1,'Z','trimf',[-2,0,2]);

b=addmf(b,'input',1,'PS','trimf',[-1,1,3]);

b=addmf(b,'input',1,'PM','trimf',[0,2,3]);

b=addmf(b,'input',1,'PB','smf',[1,3]);

b=addvar(b,'input','ec',[-3,3]); %Parameterec

b=addmf(b,'input',2,'NB','zmf',[-3,-1]);

b=addmf(b,'input',2,'NM','trimf',[-3,-2,0]);

b=addmf(b,'input',2,'NS','trimf',[-3,-1,1]);

b=addmf(b,'input',2,'Z','trimf',[-2,0,2]);

b=addmf(b,'input',2,'PS','trimf',[-1,1,3]);

b=addmf(b,'input',2,'PM','trimf',[0,2,3]);

b=addmf(b,'input',2,'PB','smf',[1,3]);

b=addvar(b,'output','kp',[-0.3,0.3]);%Parameter kp

b=addmf(b,'output',1,'NB','zmf',[-0.3,-0.1]);

b=addmf(b,'output',1,'NM','trimf',[-0.3,-0.2,0]);

b=addmf(b,'output',1,'NS','trimf',[-0.3,-0.1,0.1]);

b=addmf(b,'output',1,'Z','trimf',[-0.2,0,0.2]);

b=addmf(b,'output',1,'PS','trimf',[-0.1,0.1,0.3]);

b=addmf(b,'output',1,'PM','trimf',[0,0.2,0.3]);

b=addmf(b,'output',1,'PB','smf',[0.1,0.3]);

b=addvar(b,'output','ki',[-0.06,0.06]);%Parameter ki

b=addmf(b,'output',2,'NB','zmf',[-0.06,-0.02]);

b=addmf(b,'output',2,'NM','trimf',[-0.06,-0.04,0]);

b=addmf(b,'output',2,'NS','trimf',[-0.06,-0.02,0.02]);

b=addmf(b,'output',2,'Z','trimf',[-0.04,0,0.04]);

b=addmf(b,'output',2,'PS','trimf',[-0.02,0.02,0.06]);

b=addmf(b,'output',2,'PM','trimf',[0,0.04,0.06]);

b=addmf(b,'output',2,'PB','smf',[0.02,0.06]);

b=addvar(b,'output','kd',[-3,3]);%Parameter kd

b=addmf(b,'output',3,'NB','zmf',[-3,-1]);

b=addmf(b,'output',3,'NM','trimf',[-3,-2,0]);

b=addmf(b,'output',3,'NS','trimf',[-3,-1,1]);

b=addmf(b,'output',3,'Z','trimf',[-2,0,2]);

b=addmf(b,'output',3,'PS','trimf',[-1,1,3]);

b=addmf(b,'output',3,'PM','trimf',[0,2,3]);

b=addmf(b,'output',3,'PB','smf',[1,3]);

b=setfis(b,'DefuzzMethod','centroid');

writefis(b,'yichuan');

b=readfis('yichuan');

shuru0=[1 1;1 2;1 3;1 4;1 5;1 6;1 7;

21;2 2;2 3;2 4;2 5;2 6;2 7;

31;3 2;3 3;3 4;3 5;3 6;3 7;

4 1;4 2;4 3;44;4 5;4 6;4 7;

5 1;5 2;5 3;54;5 5;5 6;5 7;

6 1;6 2;6 3;64;6 5;6 6;6 7;

7 1;7 2;7 3;74;7 5;7 6;7 7];%输入规则

lianjie0=[1 1;1 1;1 1;1 1;1 1;1 1;1 1;

11;1 1;1 1;1 1;1 1;1 1;1 1;

11;1 1;1 1;1 1;1 1;1 1;1 1;

1 1;1 1;1 1;1 1;11;1 1;1 1;

1 1;1 1;1 1;11;1 1;1 1;1 1;

1 1;1 1;1 1;11;1 1;1 1;1 1;

1 1;1 1;1 1;11;1 1;1 1;1 1];%模糊规则中的权重和连接信息

shuchu0=ones(49,3);%生成输出规则,其中Outi是1*128的矩阵,重新生成16*8的输出矩阵

rulelist1=[shuru0 shuchu0 lianjie0];%将个体所携带的规则信息导入到模糊控制规则

b=readfis('yichuan');

b=addrule(a,rulelist1);

writefis(b,'yichuan');

%%%%%%%%%  initial code   %%%%%%%%%%

Size=30;%种群个体数

CodeL=128;%基因长度

MinX=zeros(1,CodeL);

MaxX=ones(1,CodeL);%输出规则的最大最小值

for sc=1:1:128%sc代表128个基因的序数,生成初始群体用

Out(:,sc)=MinX(1)+round((MaxX(1)-MinX(1))*rand(Size,1))+1;%Out是一个30*128的初始群体

end%每个个体里面对应的每个基因生成的基因范围都是1~4

G=100;%总代数

BsJ=0;%ITAE最优指标初始化

%%%%%%%%%%     Start Running    %%%%%%%%%%%%

for kg=1:1:G%kg是代数

time(kg)=kg;

%****** Step 1 : Evaluate BestJ ******

for i=1:1:Size

Outi=Out(i,:);

[Outi,BsJ]=zixitong(Outi,BsJ);%调用子函数

BsJi(i)=BsJ;    %最优代价值

end

[OderJi,IndexJi]=sort(BsJi);  %排序

BestJ(kg)=OderJi(1);   %取最小值

BJ=BestJ(kg);

Ji=BsJi+1e-10;    %Avoiding deviding zero,1的-10次方很小 可以忽略不计 避免分母为零

fi=1./Ji;  %适应函数值

% Cm=max(Ji);

% fi=Cm-Ji;

[Oderfi,Indexfi]=sort(fi);   %Arranging fi small to bigger 适应函数值排序

Bestfi=Oderfi(Size);          %LetBestfi=max(fi)取最大值

BestS=Out(Indexfi(Size),:);  %LetBestS=E(m), m is the Indexfi belong to max(fi)

%****** Step 2 : Select and Reproduct Operation******

fi_sum=sum(fi);

fi_Size=(Oderfi/fi_sum)*Size;

fi_S=floor(fi_Size);              % Selecting Bigger fi value取较大的适应值确定其位置

r=Size-sum(fi_S);

Rest=fi_Size-fi_S;

[RestValue,Index]=sort(Rest);

for i=Size:-1:Size-r+1

fi_S(Index(i))=fi_S(Index(i))+1;     % Adding rest to equal Size

end

k=1;

for i=Size:-1:1       % Select the Sizeth and Reproducefirstly

for j=1:1:fi_S(i)

TempE(k,:)=Out(Indexfi(i),:);      % Select and Reproduce

k=k+1;                            % k is used toreproduce

end

end

%************ Step 3 : Crossover Operation************

Pc=0.90;

for i=1:2:(Size-1)

temp=rand;

if Pc>temp                      %Crossover Condition

alfa=rand;

TempE(i,:)=round(alfa*Out(i+1,:)+(1-alfa)*Out(i,:));

TempE(i+1,:)=round(alfa*Out(i,:)+(1-alfa)*Out(i+1,:));%因为控制规则矩阵元素必须是整数

end

end

TempE(Size,:)=BestS;

Out=TempE;

%************ Step 4: Mutation Operation**************变异的结果也可能不为整数!

Pm=0.10-[1:1:Size]*(0.01)/Size;       %Bigger fi,smaller Pm

Pm_rand=rand(Size,CodeL);

Mean=(MaxX+1+ MinX+1)/2;

Dif=(MaxX-MinX);

for i=1:1:Size

for j=1:1:CodeL

if Pm(i)>Pm_rand(i,j)        %Mutation Condition

TempE(i,j)=round(Mean(j)+Dif(j)*(rand-0.5));

end

end

end

%Guarantee TempE(Size,:) belong to the best individual

TempE(Size,:)=BestS;

Out=TempE;

end

Bestfi

BestS

Best_J=BestJ(G)

figure(1);

plot(time,BestJ,'r','linewidth',2);

xlabel('Times');ylabel('Best J');

figure(2);

plot(timef,yd,'r',timef,y,'b:','linewidth',2);

xlabel('Time(s)');ylabel('yd,y');

legend('Ideal position signal','Positionsignal tracking');

模糊规则优化matlab,遗传算法优化模糊pid控制规则相关推荐

  1. 遗传算法优化matlab,遗传算法优化相关MATLAB算法实现

    遗传算法 1.案例背景 遗传算法(Genetic Algorithm,GA)是一种进化算法,其基本原理是仿效生物界中的"物竞天择.适者生存"的演化法则.遗传算法的做法是把问题参数编 ...

  2. 双容水箱液位模糊PID控制系统设计与仿真(Matlab/Simulink)

    前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看.(点击跳转人工智能学习资料) 微信公众号:创享日记 发送:双容模糊 获取完整无水印报告+仿真源文件+ ...

  3. 模糊pid控制的温度系统matlab源代码_变风量空调模糊 PID 控制系统的仿真研究

    一般在负荷变化较大的大型中央空调系统中,采用温度恒定和改变风量的调节方式,从而使控制房间的送风量随系统负荷的变化而变化的中央空调系统叫做变风量空调系统.该系统最大优点就是a节能,如果全年运行,可节约能 ...

  4. matlab 模糊pid mimo 对应,双关节机械手的模糊PID控制系统设计.doc

    双关节机械手的模糊 PID 控制系统设计 摘 要 为了实现高阶.非线性.强耦合的机械手运动系统的控制,本文选用能够充分 体现机械手特性并且结构较为简单的 2 自由度机械手--双关节机械手,作为被控 对 ...

  5. 【ELM分类】基于matlab遗传算法优化ELM神经网络数据分类【含Matlab源码 2138期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[ELM分类]基于matlab遗传算法优化ELM神经网络数据分类[含Matlab源码 2138期] 点击上面蓝色字体,直接付费下载,即可. ...

  6. matlab simulink 汽车abs模糊pid控制和pid控制对比

    1.内容简介 略 570-可以交流.咨询.答疑 2.内容说明 略 3.仿真分析 clc close all clear sim car_pid_16a.slx t_pid = tout; y_pid ...

  7. matlab simulink四旋翼无人机模糊PID控制姿态

    1.内容简介 略 532-可以交流.咨询.答疑 2.内容说明 四旋翼无人机控制灵活.安全性能较高,能够实现空中悬停.翻滚.任意角度横 向飞行,常常替代人们从事高空危险作业,给我们的生活与工作带来了很多 ...

  8. Matlab模拟仿真模糊PID(Fuzzy)

    研究项目 模糊PID(Fuzzy)的仿真测试 研究内容 本篇文章主要研究如何通过matlab软件实现模糊PID(Fuzzy)的仿真测试. 研究材料 matlab 2017a软件 基本概念和定义 模糊量 ...

  9. matlab simulink实现模糊pid对中央空调时延温度控制系统控制

    1.内容简介 matlab simulink实现模糊pid对中央空调时延温度控制系统控制 439-可以交流.咨询.答疑 2.内容说明 中央空调系统是一个复杂系统,其能耗占整个建筑能耗的50%以上,是耗 ...

  10. 汽车防抱死系统_ABS_建模与模糊PID控制研究

    本文旨在设计一种利用模糊控制理论优化的pid控制器,控制abs系统,达到对滑移率最佳控制范围的要求 ,所提出的方案采用级联控制架构:设计用于外环中的车轮打滑控制的具有Takagi-Sugeno-Kan ...

最新文章

  1. vue 文字上下循环滚动_基于 Vue 无缝滚动组件Vue-Seamless-Scroll
  2. Linux / CentOs 7搭建DHCP服务
  3. 学习java的一些笔记(6)
  4. python视频教学视频哪个好-python视频教程哪家好
  5. 004 .NetReactor 3.6.0.0之另类脱壳法
  6. 动手动脑,产生随机数
  7. 银行家算法总结及实现
  8. 1.3编程基础之算术表达式与顺序执行 03 计算(a+b) c的值
  9. java多线程 run start_java多线程中run和start区别
  10. js的5种继承方式——前端面试
  11. gnuradio上怎么使用python文件_使用Python下载文件的简单示例
  12. iOS几款实用的工具类demo
  13. 基本SQL命令表命令
  14. 步进电机S曲线的生成
  15. matlab-基础 正无穷 负无穷
  16. HashMap线程安全问题详细解析
  17. tensorflow自定义op:梯度
  18. c语言实数运算1,C语言设计实数四则运算运用MAKEFILE,急用
  19. web后台管理系统框架
  20. Git Rebase vs Merge, GIt Reset vs Revert

热门文章

  1. ios android 通用字体,教你如何在iOS项目中设置各种字体
  2. 网络工程制图论文计算机,工程制图论文
  3. 【Windows】win10电脑Miracast投屏到电视
  4. java 普元_也谈普元 - 狂奔 lion - BlogJava
  5. GaMD-高斯加速分子动力学模拟中文教程
  6. 14.6.211213163AWVS扫描器破解流程
  7. 手柄游戏之《恶魔城暗影之王》推荐
  8. Python之Python3本地安装教程
  9. 如何用计算机计算胸围,胸围尺码换算(罩杯自动计算器)
  10. 阿斯克码表ACSII对照表