主要内容

优化模糊规则和隶属函数参数

这个例子展示了如何优化一个模糊推理系统(FIS)。使用tunefis功能,您可以:

  • 调整输入和输出变量的隶属函数参数。

  • 学习模糊规则。

  • 优化模糊规则的前提和结论参数。

调优FIS的更多信息,请参阅调优模糊推理系统

优化隶属函数参数

1型和2型费斯,您可以指定输入和输出可调参数设置MFs和优化所选参数的值。您可以调整的参数输入和输出MFs的任意组合。这个例子显示了一个示例使用1型FIS工作流。例如,曲调2型FIS,明白了使用2型FIS预测混沌时间序列

创建一个金融中间人。

fis = mamfis;fis = addInput (fis, [0 10],“NumMFs”3);fis = addOutput (fis [0, 1],“NumMFs”3);fis = addRule (fis, [1 1 1 1; 1 1 1 1; 1 1 1 1]);

提取FIS的输入和输出参数设置。

[,]= getTunableSettings (fis)
在=VariableSettings属性:类型:“输入”VariableName:“input1”MembershipFunctions: [1×3 fuzzy.tuning。MembershipFunctionSettings] FISName:“fis”
了=VariableSettings属性:类型:“输出”VariableName:“output1”MembershipFunctions: [1×3 fuzzy.tuning。MembershipFunctionSettings] FISName:“fis”

代表不同的参数设置VariableSettings对象包括FIS的名称、变量类型、变量名称,MF参数设置。检查参数设置的MF 1的输入1。

(1).MembershipFunctions (1) .Parameters
ans =NumericParameters属性:最大最小(负负无穷到负无穷到)::[正正正]自由:(1 1 1)

为每一个输入或输出MF的参数值,您可以指定它的调优和可用性最小和最大的价值。默认情况下,所有免费MF参数调优和他们的范围设置为,]。

您可以指定所有参数的可调谐性MF使用setTunable函数。例如,1的输入1 nontunable曼氏金融。

(1).MembershipFunctions (1) = setTunable(在(1).MembershipFunctions(1),假);

您还可以指定单个MF的可调谐性参数。第一个参数的MF 2输入1 nontunable。

(1).MembershipFunctions (2) .Parameters.Free (1) = false;

对于每个参数,可以指定可能值的范围。例如,设置最小值的第二个和第三个参数MF 3输入1到0。

(1).MembershipFunctions (3) .Parameters.Minimum (2:3) = 0;

类似的,第二个和第三个参数的最大值的MF 3输入115

(1).MembershipFunctions (3) .Parameters.Maximum (2:3) = 15;

调优过程设置默认最小和最大范围的值可调MF参数相应的输入或输出范围。

最后,让所有的曼氏金融参数输出隶属度函数nontunable。

= setTunable(,假);

指定输入和输出训练数据。对于这个示例,使用以下函数生成训练数据。

y = | ( 2 x ) e x / 5 |

x = (0:0.1:10)”;y = abs (sin (2 * x) / exp (x / 5));

指定的选项tunefis。对于这个示例,使用遗传算法优化方法。使用五代的最大优化。

选择= tunefisOptions (“方法”,“遗传算法”);options.MethodOptions。MaxGenerations = 5;

如果你有并行计算工具箱™软件,你可以通过设置提高优化过程的速度options.UseParallel真正的。如果你没有并行计算工具箱软件,集options.UseParallel,这是默认值。

默认情况下,tunefis使用根均方误差(RMSE)成本计算。你可以改变成本函数norm1norm2通过设置options.DistanceMetric

options.DistanceMetric=“norm1”;

调优金融中间人使用参数设置、训练数据和优化选择。

rng (“默认”)%的再现性[fisout, optimout] = tunefis (fis, [;], x, y,选项);
最好是失速代Func-count f (x) f (x)代1 0 2 147 100 32.84 32.84 32.84 32.84 1 3 194 32.84 32.84 - 2 4 241 32.84 32.84 288 32.84 32.84 - 4优化终止:超过了一代又一代的最大数目。

fisout包括更新后的参数值。optimout提供了额外的输出的优化方法和任何错误消息返回更新过程中输入的模糊系统使用优化后的参数值。

optimout
optimout =结构体字段:tuningOutputs:(1×1结构)totalFcnCount: 288 totalRuntime: 2.7104 errorMessage: []
optimout.tuningOutputs
ans =结构体字段:x: [5 9.1667 - 5.8333 10 14.1667] fval: 32.8363 exitflag: 0输出:[1×1 struct]人口:[50×5双]分数:(50×1双)

您可以调整金融中间人只使用输入或输出参数设置。在本例中,由于您设置输出参数设置nontunable,调优FIS只有输入参数设置会产生相同的结果。

rng (“默认”)[fisout optimout] = tunefis (fis, x, y,选项);
最好是失速代Func-count f (x) f (x)代1 0 2 147 100 32.84 32.84 32.84 32.84 1 3 194 32.84 32.84 - 2 4 241 32.84 32.84 288 32.84 32.84 - 4优化终止:超过了一代又一代的最大数目。
optimout
optimout =结构体字段:tuningOutputs:(1×1结构)totalFcnCount: 288 totalRuntime: 1.4074 errorMessage: []
optimout.tuningOutputs
ans =结构体字段:x: [5 9.1667 - 5.8333 10 14.1667] fval: 32.8363 exitflag: 0输出:[1×1 struct]人口:[50×5双]分数:(50×1双)

优化模糊规则

除了优化隶属函数参数,您可以调整的前提和结论参数模糊系统规则。

获得从模糊系统规则参数设置使用getTunableSettings

[~,~,规则]= getTunableSettings (fis)
规则=3×1 RuleSettings数组属性:指数前期顺向FISName

每个规则参数设置包括FIS名称、规则的指数在FIS,和参数设置规则前提和结论(规定的条款)。

对于一个规则条款,您可以设置以下参数设置。

  • AllowNot——不允许使用逻辑,也就是说,消极的曼氏金融指数。默认情况下,规则不允许没有逻辑。

  • 免费的——使输入/输出曼氏金融指数可用于调优。默认情况下,条款可用于调优参数。

  • AllowEmpty——允许输入/输出变量的缺失,也就是说,曼氏金融指数为零。默认情况下,没有一个变量是被允许的。

规则(1).Antecedent (1)
ans =ClauseParameters属性:AllowNot: 0 AllowEmpty: 1免费的:1

允许不是规则1的逻辑前提。

(1).Antecedent规则。AllowNot = true;

使规则1的结果不能用于调优。

(1).Consequent规则。自由= 0;

不允许没有一个变量的顺向规则2。

(2).Consequent规则。AllowEmpty = false;

设置规则3 nontunable。

(3)= setTunable规则(规则(3),假);

options.DistanceMetricnorm2

options.DistanceMetric=“norm2”;

调优金融中间人使用规则参数设置。

rng (“默认”)%的再现性fisout = tunefis (fis,规则,x, y,选项);
最好是失速代Func-count f (x) f (x)代1 0 2 147 100 1.648 2.575 1.648 2.448 1 3 194 1.648 2.212 - 2 4 241 1.648 2.052 288 1.648 1.874 - 4优化终止:超过了一代又一代的最大数目。

自您指定规则3 nontunable,可以排除规则3当你调整金融中间人。这样做会产生相同的优化结果。

rng (“默认”)%的再现性fisout = tunefis (fis,规则(1:2),x, y,选项);
最好是失速代Func-count f (x) f (x)代1 0 2 147 100 1.648 2.575 1.648 2.448 1 3 194 1.648 2.212 - 2 4 241 1.648 2.052 288 1.648 1.874 - 4优化终止:超过了一代又一代的最大数目。

学习模糊规则

您可以配置tunefis学习模糊系统的规则。为此,设置OptimizationType选择tunefisOptions学习”

fisin = fis;fisin。规则= [];选项。OptimizationType =“学习”;

设置调谐FIS的最大数量的规则3

选项。NumMaxRules = 3;

调优规则库的规模可能会不足NumMaxRules,因为tunefis从调谐FIS删除重复的规则。如果你不指定NumMaxRules,然后tunefis添加规则的最大数量取决于输入MFs的可能的组合。默认输入MF组合包括零曼氏金融指标,允许没有变量。默认的组合排除-曼氏金融指标,所以,不是逻辑是不允许的。

options.DistanceMetric“rmse”和优化金融中间人。

options.DistanceMetric=“rmse”;rng (“默认”)%的再现性fisout = tunefis (fisin [], x, y,选项);
最好是失速代Func-count f (x) f (x)代1 0 2 590 400 0.165 0.2956 0.165 0.2805 1 3 780 0.165 0.2578 - 2 4 970 0.165 0.2393 1160 0.165 0.2322 - 4优化终止:超过了一代又一代的最大数目。

在优化过程中,FIS自动学习规则与培训成本优化后的数据。检查调整规则。

fisout.Rules
ans =1×3 fisrule数组属性:描述的重连接细节:________________________________描述1“input1 = = mf3 = > output1 = mf1 (1)”2"input1==mf1 => output1=mf2 (1)" 3 "input1==mf2 => output1=mf1 (1)"

你可以删除一些现有的规则和学习额外的规则。

fisout.Rules(2:结束)= [];rng (“默认”)%的再现性fisout = tunefis (fisin [], x, y,选项);
最好是失速代Func-count f (x) f (x)代1 0 2 590 400 0.165 0.2956 0.165 0.2805 1 3 780 0.165 0.2578 - 2 4 970 0.165 0.2393 1160 0.165 0.2322 - 4优化终止:超过了一代又一代的最大数目。
fisout.Rules
ans =1×3 fisrule数组属性:描述的重连接细节:________________________________描述1“input1 = = mf3 = > output1 = mf1 (1)”2"input1==mf1 => output1=mf2 (1)" 3 "input1==mf2 => output1=mf1 (1)"

您还可以调整的祖先和顺向现有规则和学习新的规则。为此,获得可调参数设置并将它们传递给规则tunefis函数。

fisout.Rules(2:结束)= [];fisout.Rules (1)。前期= 1;fisout.Rules (1)。顺向= 1;[~,~,规则]= getTunableSettings (fisout);rng (“默认”)fisout = tunefis (fisin,规则,x, y,选项);
最好是失速代Func-count f (x) f (x)代1 0 2 590 400 0.165 0.3063 0.165 0.2845 1 3 780 0.165 0.2549 - 2 4 970 0.165 0.2344 1160 0.165 0.2153 - 4优化终止:超过了一代又一代的最大数目。
fisout.Rules
ans =1×3 fisrule数组属性:描述的重连接细节:________________________________描述1“input1 = = mf1 = > output1 = mf2 (1)”2"input1==mf2 => output1=mf1 (1)" 3 "input1==mf3 => output1=mf1 (1)"

曲调MF和规则参数

同时您可以调整所有MF和规则参数。首先,获得所有FIS的参数设置。

[,,规则]= getTunableSettings (fis);

配置调优选项。

选择= tunefisOptions (“方法”,“遗传算法”);options.MethodOptions。MaxGenerations = 5;

优化FIS的MF和规则参数。

rng (“默认”)%的再现性fisout = tunefis (fis,(;;规则),x, y,选项);
最好是失速代Func-count f (x) f (x)代1 0 2 590 400 0.165 0.296 0.1638 0.2821 0 3 0 4 970 780 0.1625 0.2697 0.1625 0.2605 1 5 1160 0.1604 0.2546 0优化终止:超过了一代又一代的最大数目。

对于大型的模糊系统,如果你调整所有FIS参数在相同的调优过程中,获得预期的结果可能需要若干次迭代。改善优化时间,您可以调整参数使用以下两个步骤。

  1. 调整或学习规则参数。

  2. 曲调MF和规则参数。

学习和调优规则是调优曼氏金融参数少计算昂贵,由于小数量的规则参数。因此,第一步快速收敛于一个模糊规则库中训练。在第二步中,从第一步使用规则库作为初始条件改善了收敛的参数调优过程。

从数据和生成FIS曲调

当你手动创建一个FIS的调优,你必须手动创建一个初始规则库或学习最初的规则。或者,您可以生成一个FIS使用genfis函数,它创建一个初始规则库基于训练数据。然后您可以使用优化金融中间人tunefis。在这种方法中,调优过程可以采用局部优化方法由于规则库是源自于训练数据。

这个示例使用前面的例子一样的训练数据。

创建选项genfis指定五MFs高斯MF为输入,一个常数MF为输出。

goptions = genfisOptions (“GridPartition”,“NumMembershipFunctions”5,“InputMembershipFunctionType”,“gaussmf”,“OutputMembershipFunctionType”,“不变”);

生成初始FIS和参数设置。

fisin = genfis (x, y, goptions);[,,规则]= getTunableSettings (fisin);

利用模式搜索法优化,设置最大迭代数25,优化金融中间人。

toptions = tunefisOptions (“方法”,“patternsearch”);toptions.MethodOptions。MaxIterations = 25;rng (“默认”)fisout = tunefis (fisin [;], x, y, toptions);
Iter Func-count f (x) MeshSize方法0.346649 0 1 1 1 19 0.346649 - 0.5细化网格2 37 0.273812 1成功的调查3 38 0.236413 - 2成功的调查4 39 0.190794 - 4成功的调查5 40 0.182142 8成功调查6 47 0.182142 4细化网格7 49 0.162927 8成功调查8 56 0.162927 67 0.162927 - 2细化网格细化网格9 69 0.159539 - 4成功调查11 80 0.159539 92 0.159539 - 1细化网格细化网格12 13 94 0.159421 - 2成功调查117 0.159373 106 0.159373 - 4成功调查15 2细化网格16 125年0.159185 - 4成功调查17 136 0.159185 151 0.159185 - 1细化网格细化网格18 19 152 0.15914 - 2成功调查170 0.158914 167 0.15914 - 1细化网格21 2细化网格23成功的调查22 185 0.158914 187 0.158839 - 2成功的调查24 202 0.158839 - 1细化网格25 206 0.158366 - 2成功的调查26 215 0.158121 - 4成功调查最大迭代次数超过:增加options.MaxIterations。

你可以增加迭代次数,进一步优化成本。

另请参阅

||

相关的话题