matlab模糊控制m函数,模糊控制m文件运行出错 - 程序语言 - MATLAB/Mathematica - 小木虫论坛-学术科研互动平台...

Error using parsrule (line 182)

Output MF index is too high

Error in readfis (line 231)

out=parsrule(out,txtRuleList,'indexed');

Error in PSO1127 (line 244)

PSOfis1126=readfis('PSOfis1126.fis');   %导入工作空间

上面是错误代码。第一次运行可以的,第二次使用粒子群算法优化了第一次的模糊参数和规则就不成功了。下面是我模糊控制m文件代码:

%------初始格式化

clear all;              %清除所有变量

clc;                    %清屏

format long;            %将数据显示为长整形科学计数

%初始化模糊控制隶属度函数及规则

A1=[1 2 3 4 5 1 2 3 4 5 0.5 1 2 3.5 6];

R1=[6 6 5 4 3 2 1 1 1 1 1

6 6 6 5 4 3 1 1 1 1 1

6 6 6 6 5 4 3 2 2 1 1

6 6 6 6 5 4 4 3 3 2 2

7 6 6 6 5 4 4 4 3 3 3

7 7 6 6 5 4 4 4 4 3 3

7 7 6 6 5 4 4 4 4 4 4

7 7 7 6 5 4 4 4 4 4 4

8 7 7 6 6 5 5 5 5 4 4

9 8 7 7 6 6 6 5 5 5 5

10 9 8 7 7 6 6 6 5 5 5 ];

R2=R1';    %行转列

R3=R2(

smile.gif;    %每一列堆叠

R=R3';   %列转化成行向量

A=[A1,R];   %mfuzzy1116.fis

%------给定初始条条件------------------

N=5;                   %?初始化群体个数

D=136;                  %初始化群体维数

T=50;                   %初始化群体最大迭代次数

c1=2;                  %学习因子1

c2=2;                   %学习因子2

w=0.4;                 %惯性权重1

eps=10^(-6);            %设置精度(在已知最小值的时候用)--

%--------初始化种群个体(限定位置和速度)------------

x=zeros(N,D);     %位置,50

v=zeros(N,D);

for i=1:N

for j=1:10

x(i,j)=round((-5+10*rand())*100)/100;

v(i,j)=round((-5+10*rand())*100)/100;

end

for j=11:15

x(i,j)=round((-6+12*rand())*100)/100;

v(i,j)=round((-6+12*rand())*100)/100;

end

for j=16:136

x(i,j)=round(1+10*rand());  %随机初始化位置

v(i,j)=round(1+10*rand());  %随机初始化速度

end

end

x(1,

smile.gif=A;           %初始化粒子群

pbest=400*ones(N,1);  %个体最优

pg=400*ones(1,D); %Pg为全局最优

gbest=400;    %全局最优

p=x;

%a=newfis('PSOfis1126');  %与mfuzzy1116是一致的

%-----进入主循环,按照公式依次迭代直到满足精度或者迭代次数---

for t=1:5

i=1;

k=x(i,

smile.gif';

X(1:15)=round(k(1:15)*100)/100;

X(16:136)=round(k(16:136));

a=newfis('PSOfis1126');

a=addvar(a,'input','Treq',[-5,5]);

a=addmf(a,'input',1,'NBB','trimf',[-5,-X(5),-X(4)]);

a=addmf(a,'input',1,'NB','trimf',[-X(5),-X(4),-X(3)]);

a=addmf(a,'input',1,'NM','trimf',[-X(4),-X(3),-X(2)]);

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

a=addmf(a,'input',1,'NSS','trimf',[-X(2),-X(1),0]);

a=addmf(a,'input',1,'ZE','trimf',[-X(1),0,X(1)]);

a=addmf(a,'input',1,'PSS','trimf',[0,X(1),X(2)]);

a=addmf(a,'input',1,'PS','trimf',[X(1),X(2),X(3)]);

a=addmf(a,'input',1,'PM','trimf',[X(2),X(3),X(4)]);

a=addmf(a,'input',1,'PB','trimf',[X(3),X(4),X(5)]);

a=addmf(a,'input',1,'PBB','trimf',[X(4),X(5),5]);

a=addvar(a,'input','SOC',[-5,5]);

a=addmf(a,'input',2,'NBB','trimf',[-5,-X(10),-X(9)]);

a=addmf(a,'input',2,'NB','trimf',[-X(10),-X(9),-X(8)]);

a=addmf(a,'input',2,'NM','trimf',[-X(9),-X(8),-X(7)]);

a=addmf(a,'input',2,'NS','trimf',[-X(8),-X(7),-X(6)]);

a=addmf(a,'input',2,'NSS','trimf',[-X(7),-X(6),0]);

a=addmf(a,'input',2,'ZE','trimf',[-X(6),0,X(6)]);

a=addmf(a,'input',2,'PSS','trimf',[0,X(6),X(7)]);

a=addmf(a,'input',2,'PS','trimf',[X(6),X(7),X(8)]);

a=addmf(a,'input',2,'PM','trimf',[X(7),X(8),X(9)]);

a=addmf(a,'input',2,'PB','trimf',[X(8),X(9),X(10)]);

a=addmf(a,'input',2,'PBB','trimf',[X(9),X(10),5]);

a=addvar(a,'output','Te',[-6,6]);

a=addmf(a,'output',1,'NBB','trimf',[-6,-X(15),-3]);

a=addmf(a,'output',1,'NB','trimf',[-2*X(14)+X(13),-X(14),-X(13)]);

a=addmf(a,'output',1,'NM','trimf',[-2*X(13)+X(12),-X(13),-X(12)]);

a=addmf(a,'output',1,'NS','trimf',[-X(13),-X(12),-2*X(12)+X(13)]);

a=addmf(a,'output',1,'NSS','trimf',[-3*X(11),-X(11),X(11)]);

a=addmf(a,'output',1,'ZE','trimf',[-X(12),0,X(12)]);

a=addmf(a,'output',1,'PSS','trimf',[-X(11),X(11),3*X(11)]);

a=addmf(a,'output',1,'PS','trimf',[2*X(12)-X(13),X(12),X(13)]);

a=addmf(a,'output',1,'PM','trimf',[X(12),X(13),2*X(13)-X(12)]);

a=addmf(a,'output',1,'PB','trimf',[X(13),X(14),2*X(14)-X(13)]);

a=addmf(a,'output',1,'PBB','trimf',[3,X(15),6]);

rulelist=[1 1 X(16) 1 1;

1 2 X(17) 1 1;    %Xulelist是一个矩阵,每一行为一条规则,他们之间是ALSO的关系

1 3 X(18) 1 1;   %前N个数分别表示N个输入变量的某一个语言名称的indeX

1 4 X(19) 1 1;  %没有的话用0表示,后面两个分别表示该条规则的权重和各条件的关系,1表示AND,2表示OX

1 5 X(20) 1 1;

1 6 X(21) 1 1;

1 7 X(22) 1 1;

1 8 X(23) 1 1;

1 9 X(24) 1 1;

1 10 X(25) 1 1;

1 11 X(26) 1 1;

2 1 X(27) 1 1;

2 2 X(28) 1 1;

2 3 X(29) 1 1;

2 4 X(30) 1 1;

2 5 X(31) 1 1;

2 6 X(32) 1 1;

2 7 X(33) 1 1;

2 8 X(34) 1 1;

2 9 X(35) 1 1;

2 10 X(36) 1 1;

2 11 X(37) 1 1;

3 1 X(38) 1 1;

3 2 X(39) 1 1;

3 3 X(40) 1 1;

3 4 X(41) 1 1;

3 5 X(42) 1 1;

3 6 X(43) 1 1;

3 7 X(44) 1 1;

3 8 X(45) 1 1;

3 9 X(46) 1 1;

3 10 X(47) 1 1;

3 11 X(48) 1 1;

4 1 X(49) 1 1;

4 2 X(50) 1 1;

4 3 X(51) 1 1;

4 4 X(52) 1 1;

4 5 X(53) 1 1;

4 6 X(54) 1 1;

4 7 X(55) 1 1;

4 8 X(56) 1 1;

4 9 X(57) 1 1;

4 10 X(58) 1 1;

4 11 X(59) 1 1;

5 1 X(60) 1 1;

5 2 X(61) 1 1;

5 3 X(62) 1 1;

5 4 X(63) 1 1;

5 5 X(64) 1 1;

5 6 X(65) 1 1;

5 7 X(66) 1 1;

5 8 X(67) 1 1;

5 9 X(68) 1 1;

5 10 X(69) 1 1;

5 11 X(70) 1 1;

6 1 X(71) 1 1;

6 2 X(72) 1 1;

6 3 X(73) 1 1;

6 4 X(74) 1 1;

6 5 X(75) 1 1;

6 6 X(76) 1 1;

6 7 X(77) 1 1;

6 8 X(78) 1 1;

6 9 X(79) 1 1;

6 10 X(80) 1 1;

6 11 X(81) 1 1;

7 1 X(82) 1 1;

7 2 X(83) 1 1;

7 3 X(84) 1 1;

7 4 X(85) 1 1;

7 5 X(86) 1 1;

7 6 X(87) 1 1;

7 7 X(88) 1 1;

7 8 X(89) 1 1;

7 9 X(90) 1 1;

7 10 X(91) 1 1;

7 11 X(92) 1 1;

8 1 X(93) 1 1;

8 2 X(94) 1 1;

8 3 X(95) 1 1;

8 4 X(96) 1 1;

8 5 X(97) 1 1;

8 6 X(98) 1 1;

8 7 X(99) 1 1;

8 8 X(100) 1 1;

8 9 X(101) 1 1;

8 10 X(102) 1 1;

8 11 X(103) 1 1;

9 1 X(104) 1 1;

9 2 X(105) 1 1;

9 3 X(106) 1 1;

9 4 X(107) 1 1;

9 5 X(108) 1 1;

9 6 X(109) 1 1;

9 7 X(110) 1 1;

9 8 X(111) 1 1;

9 9 X(112) 1 1;

9 10 X(113) 1 1;

9 11 X(114) 1 1;

10 1 X(115) 1 1;

10 2 X(116) 1 1;

10 3 X(117) 1 1;

10 4 X(118) 1 1;

10 5 X(119) 1 1;

10 6 X(120) 1 1;

10 7 X(121) 1 1;

10 8 X(122) 1 1;

10 9 X(123) 1 1;

10 10 X(124) 1 1;

10 11 X(125) 1 1;

11 1 X(126) 1 1;

11 2 X(127) 1 1;

11 3 X(128) 1 1;

11 4 X(129) 1 1;

11 5 X(130) 1 1;

11 6 X(131) 1 1;

11 7 X(132) 1 1;

11 8 X(133) 1 1;

11 9 X(134) 1 1;

11 10 X(135) 1 1;

11 11 X(136) 1 1;];

a=addrule(a,rulelist);

a1=setfis(a,'DefuzzMethod','centroid');   %Defuzzy

writefis(a1,'PSOfis1126');

a2=readfis('PSOfis1126');

PSOfis1126=readfis('PSOfis1126.fis');   %导入工作空间

代码完毕。运行第一次是可以的,运行第二次就出现了什么的错误。第二次是 X=[1.32000000000000,1.01000000000000,1.24000000000000,2.37000000000000,5.60000000000000,1.12000000000000,3.08000000000000,3.60000000000000,3.32000000000000,6.15000000000000,-1.14000000000000,1.90000000000000,2.86000000000000,1.72000000000000,7.64000000000000,10,7,9,7,6,4,3,4,3,2,3,8,9,9,6,6,7,4,5,3,5,4,10,8,8,8,8,6,3,4,6,4,3,8,7,9,8,8,6,6,6,5,3,3,9,9,8,9,7,6,5,4,3,7,7,11,7,8,10,7,6,4,6,5,7,7,11,10,7,9,8,8,5,6,8,8,5,11,11,7,9,8,5,4,6,6,8,7,12,8,9,8,8,6,6,7,9,8,5,10,11,10,9,7,10,10,8,8,6,6,13,11,10,9,11,7,7,7,8,9,9];这个是粒子群优化后的参数及规则。请问是不是得把优化的参数给它们排个序再使用吗?为什么运行不了呢?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值