主要内容

调整模糊的树

这个例子展示了如何使用两步过程来优化FIS树的参数。有关类似的两步过程的详细信息,请参见调整模糊推理系统

  • 学习并调整树中的FISs规则。

  • 学习树中FISs的MF参数。

创建一个FIS树来建模 x ) + 因为 x ) 经验值 x ) ,如下图所示。有关创建FIS树的详细信息,请参见模糊树

创建fis1作为sugeno型FIS,由于其计算高效的去模糊化方法,与Mamdani系统相比,其结果是更快的调优过程。添加两个输入,范围都是[0,10],每个输入都有三个mf。使用一个平滑的,可微的MF,例如gaussmf,以匹配您正在建模的数据类型的特征。

Fis1 = sugfis(“名字”“fis1”);fis1 = addInput(fis1,[0 10],“NumMFs”3,“MFType”“gaussmf”);fis1 = addInput(fis1,[0 10],“NumMFs”3,“MFType”“gaussmf”);

添加一个范围为[-1.5,1.5]的输出,其中有9个MF对应于9个可能的输入MF组合。这样做可以为FIS规则提供最大粒度。的可能值设置输出范围 x ) + 因为 x )

fis1 = addOutput(fis1,[-1.5 1.5],“NumMFs”9);

创建fis2作为sugeno型FIS。增加两个输入。第一个输入的范围设置为[-1.5,1.5],匹配的输出范围fis1.第二个输入与的输入相同fis1.因此,使用相同的输入范围[0,10]。为每个输入添加三个mf。

Fis2 = sugfis(“名字”“fis2”);fis2 = addInput(fis2,[-1.5 1.5],“NumMFs”3,“MFType”“gaussmf”);fis2 = addInput(fis2,[0 10],“NumMFs”3,“MFType”“gaussmf”);

添加范围为[0,1]和9个mf的输出。的可能值设置输出范围 x ) + 因为 x ) 经验值 x )

fis2 = addOutput(fis2,[0 1],“NumMFs”9);

如图所示连接输入和输出。的第一个输出fis1output1,连接到的第一个输入fis2input1.的输入fis1连接到彼此,和第二输入fis1连接到的第二个输入fis2

Con1 = [“fis1 / output1”“fis2 / input1”];Con2 = [“fis1 / input1”“fis1 / input2”];Con3 = [“fis1 / input2”“fis2 / input2”];

最后,使用指定的FIS和连接创建一个FIS树。

拳头=拳头树([fis1 fis2],[con1;con2;con3]);

向FIS树添加额外的输出以访问的输出fis1

拳头输出= [“fis1 / output1”fisT.Outputs);

生成输入和输出训练数据。

X = (0:0.1:10)';Y1 = sinx + cosx;Y2 = y1./exp(x);Y = [y1 y2];

分两个步骤调优FIS树参数。首先,使用全局优化方法学习FIS树的规则。在本例中,使用粒子群。

选项= tunefisOptions(“方法”“particleswarm”“OptimizationType”“学习”);

这个调优步骤使用少量迭代来学习一个规则库,而不会过度拟合训练数据。该规则库提供了一个经过教育的初始条件,第二步可以使用该条件一起优化所有FIS树参数。将最大迭代数设置为5,并学习规则库。

options.MethodOptions.MaxIterations = 5;rng (“默认”)再现率%fiout1 = tunefis(拳头,[],x,y,选项);
最佳平均失速迭代f-count f(x) f(x)迭代0 100 0.6682 0.9395 0 1 200 0.6682 1.023 02 300 0.6652 0.9308 0 3 400 0.6259 0.958 0 4 500 0.6259 0.918 1 5 600 0.5969 0.9179 0优化结束:迭代次数超过OPTIONS.MaxIterations。

接下来,要一次性调优所有FIS树参数,请使用局部优化方法。对于本例,使用模式搜索。局部优化通常比全局优化更快,当输入模糊系统参数已经与训练数据一致时,可以产生更好的结果。

使用patternsearch优化方法。将迭代次数设置为25。

选项。方法=“patternsearch”;options.MethodOptions.MaxIterations = 25;

使用getTunableSettings从FIS树中获取输入、输出和规则参数设置。

[in,out,rule] = gettunthesettings (fisTout1);

调优FIS树参数。

rng (“默认”)再现率%fiout2 = tunefis(fiout1,[in;out;rule],x,y,options);
Iter Func-count f (x) MeshSize方法0.596926 0 1 1 1 3 0.551284 - 2成功的调查2 13 0.548551 - 4成功的调查3 20 0.546331 8成功调查4 33 0.527482 16成功调查5 33 0.527482 8细化网格6 61 0.511532 16成功调查7 61 0.505355 0.511532 8细化网格8 92 16成功调查9 92 0.505355 8细化网格10 128 0.505355 4细化网格11 175 0.487734 8成功调查12 212 0.487734 265 0.487734 - 2细化网格细化网格13 14 275 0.486926 - 4成功调查15 3280.486926 2 Refine Mesh 16 339 0.483683 4 Successful Poll 17 391 0.483683 2 Refine Mesh 18 410 0.442624 4 Successful Poll 19 462 0.442624 2 Refine Mesh 20 469 0.44051 4 Successful Poll 21 521 0.44051 2 Refine Mesh 22 542 0.435381 4 Successful Poll 23 594 0.435381 2 Refine Mesh 24 614 0.398872 4 Successful Poll 25 662 0.398385 8 Successful Poll 26 698 0.398385 4 Refine Mesh最大迭代次数超过:增加options.MaxIterations。

第二步优化成本由0.60降低到0.40。

或者,您可以在FIS树中分别优化特定的模糊系统。对于本例,在学习了FIS树的规则库之后,分别调优fis1而且fis2参数。

要在FIS树中获取FIS的参数设置,请使用getTunableSettings,指定FIS名称。首先,获取的参数设置fis1

[in,out,rule] = gettunlesettings (fiout1,“金融中间人”“fis1”);

的参数调优fis1

rng (“默认”) fiout2 = tunefis(fiout1,[in;out;rule],x,y,options);
Iter Func-count f (x) MeshSize方法0.596926 0 1 1 1 3 0.551284 - 2成功的调查2 18 0.510362 - 4成功的调查3 28 0.494804 8成功调查4 56 0.494804 4细化网格5 84 0.493422 107成功调查6 0.492883 16成功调查7 107 0.492883 8细化网格8 136 0.492883 171 0.492883 - 2细化网格细化网格9 213 0.491534 178 0.491534 - 4成功调查11 2细化网格264 0.482682 229 0.482682 - 4成功调查13 2细化网格14 279 0.446645 - 4成功调查15 3130.446645 2 Refine Mesh 16 330 0.44657 4 Successful Poll 17 364 0.44657 2 Refine Mesh 18 384 0.446495 4 Successful Poll 19 418 0.446495 2 Refine Mesh 20 461 0.445938 4 Successful Poll 21 495 0.445938 2 Refine Mesh 22 560 0.422421 4 Successful Poll 23 594 0.422421 2 Refine Mesh 24 597 0.397265 4 Successful Poll 25 630 0.397265 2 Refine Mesh 26 701 0.390338 4 Successful Poll超过的最大迭代次数:增加选项. maxiterations。

在这种情况下,优化成本通过只调优fis1参数值。

的参数设置fis2并调整fis2参数。

[in,out,rule] = gettunlesettings (fiout2,“金融中间人”“fis2”);rng (“默认”) fiout3 = tunefis(fiout2,[in;out;rule],x,y,options);
Iter Func-count f (x) MeshSize方法0.390338 0 1 1 1 2 0.374103 - 2成功的调查2 5 0.373855 4成功调查3 10 0.356619 8成功调查4 33 0.356619 4细化网格5 43 0.350715 8成功调查6 65 0.349417 16成功调查7 65 0.349417 8细化网格91 0.349356 87 0.349417 - 4完善网9 8成功调查138 0.346102 112 0.349356 - 4细化网格11 8成功调查172 0.345938 159 0.346102 - 4细化网格13 8成功调查14 222 0.342721 193 0.345938 - 4细化网格158 Successful Poll 16 244 0.342721 4 Refine Mesh 17 275 0.342721 2 Refine Mesh 18 283 0.340727 4 Successful Poll 19 312 0.340554 8 Successful Poll 20 335 0.340554 4 Refine Mesh 21 366 0.340554 2 Refine Mesh 22 427 0.337873 4 Successful Poll 23 457 0.337873 2 Refine Mesh 24 521 0.33706 4 Successful Poll 25 551 0.33706 2 Refine Mesh 26 624 0.333193 4 Successful Poll Maximum number of iterations exceeded: increase options.MaxIterations.

优化成本通过调优进一步降低fis2参数值。为避免单个FIS参数值过拟合,可以进一步调优fis1而且fis2参数在一起。

[in,out,rule] = gettunthesettings (fisTout3);rng (“默认”) fiout4 = tunefis(fiout3,[in;out;rule],x,y,options);
Iter Func-count f (x) MeshSize方法0.333193 0 1 1 1 8 0.326804 - 2成功的调查2 91 0.326432 - 4成功调查3 116 0.326261 8成功调查4 154 0.326261 205 0.326261 - 2细化网格细化网格5 6 302 0.326092 - 4成功调查7 352 0.326092 - 2细化网格441 0.325964 391 0.325964 - 4成功调查9 2细化网格528 0.32578 478 0.32578 - 4成功调查11 2细化网格612 0.325691 562 0.325691 - 4成功调查13 2细化网格14 713 0.229273 - 4成功调查15 7630.229273 2 Refine Mesh 16 867 0.22891 4 Successful Poll 17 917 0.22891 2 Refine Mesh 18 1036 0.228688 4 Successful Poll 19 1086 0.228688 2 Refine Mesh 20 1212 0.228688 1 Refine Mesh 21 1266 0.228445 2 Successful Poll 22 1369 0.228441 4 Successful Poll 23 1381 0.227645 8 Successful Poll 24 1407 0.226125 16 Successful Poll 25 1407 0.226125 8 Refine Mesh 26 1447 0.226125最大迭代次数超过:增加选项. maxiterations。

总的来说,使用三个调优步骤后的优化成本要小于只使用一个调优步骤后的优化成本。

另请参阅

|

相关的话题

Baidu
map