24小时热门版块排行榜    

查看: 1939  |  回复: 3

ep081106

金虫 (正式写手)

[求助] 模糊控制m文件运行出错已有1人参与

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];这个是粒子群优化后的参数及规则。请问是不是得把优化的参数给它们排个序再使用吗?为什么运行不了呢?
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

我爱我妞
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

wxp0427

铜虫 (初入文坛)

xiaoniuyyy

新虫 (初入文坛)

wxp0427

铜虫 (初入文坛)

【答案】应助回帖

相关版块跳转 我要订阅楼主 ep081106 的主题更新
信息提示
请填处理意见