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(
; %每一列堆叠
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,
=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,
';
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];这个是粒子群优化后的参数及规则。请问是不是得把优化的参数给它们排个序再使用吗?为什么运行不了呢?
matlab模糊控制m函数 模糊控制m文件运行出错 - 程序语言 - MATLAB/Mathematica - 小木虫论坛-学术科研互动平台...