主要内容

tune模糊规则和会员函数参数

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

  • 调优输入和输出变量的成员函数参数。

  • 学习模糊规则。

  • 调整模糊规则的前一种和随后的参数。

有关调整FIS的更多信息,请参阅调谐模糊推理系统

调谐隶属函数参数

对于Type-1和Type-2 Fiss,您可以为输入和输出MFS指定可调参数设置,并调整所选参数的值。您可以调整输入和输出MFS的任意组合的参数。此示例显示使用类型1 FIS的示例工作流程。有关调整2型FIS的示例,请参阅使用Type-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 1]);

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

[在,Out] = getTubalablesstings(FIS)
In = VariobleTings具有属性:类型:“输入”VariaBlename:“Input1”隶属功能:[1×3 Fuzzy.Tuning.membershipFunctionstings] Fisname:“FIS”
OUT =具有属性的变形功能:类型:“输出”VariaBlename:“Output1”成员身份功能:[1×3 fuzzy.tuning.membershipfunctionstings] fisname:“fis”

参数设置由VariableSettings包含FIS名称,变量类型,变量名称和MF参数设置的对象。检查输入1的MF 1的参数设置。

在(1).MembershipFunctions(1).Parameters
ANS = NumericParameters具有属性:最小值:[-inf -inf -inf]最大值:[INF INF]免费:[1 1 1]

对于输入或输出MF的每个参数值,您可以指定其用于调优的可用性及其最小值和最大值。默认情况下,所有MF参数都可以自由调整,其范围设置为[INF.]。

您可以使用MF中所有参数的可调性使用可谋取函数。例如,使输入1的MF 1不可调。

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

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

在(1).MembershipFunctions(2).Parameters.free(1)= False;

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

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

同样,将输入1的MF 3的第二和第三个参数的最大值设置为15

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

调谐过程将可调MF参数的默认最小值和最大范围值设置为它们对应的输入或输出范围。

最后,使所有输出隶属函数的MF参数无法运内。

= setTunable(,假);

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

y | 罪恶 2 x e x / 5 |

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

指定的选项.对于此示例,请使用遗传算法调谐方法。最多使用五代优化。

选择= tunefisOptions (“方法”“ga”);options.methodoptions.maxgenerations = 5;

如果您有并行计算工具箱™软件,可以通过设置提高调整过程的速度选项.UseCall真实.如果您没有“并行计算工具箱”软件,请设置选项.UseCall,这是默认值。

默认情况下,使用根均方误差(RMSE)以进行成本计算。您可以更改成本函数NORM1或者NORM2通过设置选项。DistanceMetric

options.distancemetric =.“norm1”

调优金融中间人使用参数设置,培训数据和调整选项。

rng ('默认'%的再现性[Fisout,Appicoft] = Tunefis(FIS,[IN; OUT],X,Y,选项);
最佳平均失速生成Func-count F(x)f(x)几代1 100 32.84 32.84 0 2 147 32.84 32.84 11 194 32.84 32.84 2 4 241 32.84 32.84 3 5 241 32.84 32.84 3 5 288 32.84 32.84 3 5 288 32.84 32.84 4优化终止:超出了最大的几代人数。

Fisout.包括更新的参数值。优惠提供优化方法的其他输出和使用优化的参数值在输入模糊系统的更新过程中返回的任何错误消息。

优惠
优化=结构与字段:TUNINGINOUTPUTS:[1×1结构] TotalFCNCount:288 TotalRuntime:2.7322 Errormessage:[]
optimout.tuningOutputs
ans =.结构与字段:X:[5 9.1667 5.8333 10 14.1667] FVAL:32.8363 ExitFlag:0输出:[1×1结构]人口:[50×5双]分数:[50×1双]

你可以选择曲调金融中间人仅使用输入或输出参数设置。在此示例中,由于将输出参数设置设置为NONTUNABLE,因此使用只需输入参数设置调整FIS产生相同的结果。

rng ('默认') [fisout,optimout] = tunefis(fis,in,x,y,options);
最佳平均失速生成Func-count F(x)f(x)几代1 100 32.84 32.84 0 2 147 32.84 32.84 11 194 32.84 32.84 2 4 241 32.84 32.84 3 5 241 32.84 32.84 3 5 288 32.84 32.84 3 5 288 32.84 32.84 4优化终止:超出了最大的几代人数。
优惠
优化=结构与字段:tuningOutputs: [1×1 struct] totalFcnCount: 288 totalRuntime: 2.4521 errorMessage: []
optimout.tuningOutputs
ans =.结构与字段:X:[5 9.1667 5.8333 10 14.1667] FVAL:32.8363 ExitFlag:0输出:[1×1结构]人口:[50×5双]分数:[50×1双]

曲调模糊规则

除了调整隶属函数参数外,您还可以调整模糊系统中规则的前所未切的规则参数。

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

[〜,〜,规则] = getTubalablesstings(FIS)
规则=3×1对象3×1条属阵列具有属性:Index Nutedent随后的Fisname

每个规则参数设置包括FIS名称,FIS中规则的索引以及规则前一种的参数设置和结果(规则条款)。

对于规则子句,可以设置以下参数。

  • allownot.—允许使用NOT逻辑,即负MF指数。默认情况下,规则不允许not逻辑。

  • 免费的- 使输入/输出MF可用于调谐。默认情况下,子句参数可用于调整。

  • AllowEmpty—允许不存在输入/输出变量,即MF指标为零。默认情况下,允许不包含变量。

规则(1).Antecedent (1)
参数:AllowNot: 0 AllowEmpty: 1 Free: 1

规则1的前进状态允许不是逻辑。

规则(1).Antecedent.Allownot = True;

使规则1的结果不可用于调整。

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

不允许在规则2的结果中缺少变量。

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

将规则3设置为NONTUNABLE。

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

选项。DistanceMetricNORM2

options.distancemetric =.“norm2”

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

rng ('默认'%的再现性fisout = tunefis(fis,规则,x,y,选项);
Best Mean Stall Generation function -count f(x) f(x) Generations 1 100 1.648 2.575 0 2 147 1.648 2.448 1 3 194 1.648 2.212 24 241 1.648 2.052 3 5 288 1.648 1.874 4优化终止:超过最大代数。

由于您将规则3指定为NONTUNABLE,您可以在调谐时排除规则3金融中间人.这样做会产生相同的调优结果。

rng ('默认'%的再现性fisout = tunefis(fis,规则(1:2),x,y,选项);
Best Mean Stall Generation function -count f(x) f(x) Generations 1 100 1.648 2.575 0 2 147 1.648 2.448 1 3 194 1.648 2.212 24 241 1.648 2.052 3 5 288 1.648 1.874 4优化终止:超过最大代数。

学习模糊规则

您可以配置学习模糊系统的规则。为此,请设置优化类型选择TunefisOptions.学习”

fisin = fis;fisin.rules = [];options.optimationtype =.“学习”

在调谐的FIS中设置最大规则数3.

选项。NumMaxRules = 3;

调谐规则库的大小可能小于NumMaxRules,因为从调优的FIS中删除重复的规则。如果没有指定NumMaxRules,然后添加由输入MFs的可能组合决定的最大规则数。默认输入MF组合包括零MF指数,这允许不存在变量。默认的组合排除了负的MF指数,因此不允许使用NOT逻辑。

选项。DistanceMetric“RMSE”调整FIS。

options.distancemetric =.“RMSE”;rng ('默认'%的再现性fisout = tunefis(fisin,[],x,y,选项);
f(x) f(x)代1 400 0.165 0.2956 0 2 590 0.165 0.2805 1 3 780 0.165 0.2578 2 4 970 0.165 0.2393 3 5 1160 0.165 0.2322 4优化终止:超过最大代数。

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

fisout。规则
ANS = 1×3个Fisrule阵列具有属性:描述前所未切的重量连接详细信息:描述_____________________________ 1“输入1 == MF3 => OUTPUT1 = MF1(1)”2“INPUT1 == MF1 => OUTPUT1 = MF2(1)”3“输入1 == MF2 => OUTPUT1 = MF1(1)”

您可以删除现有规则中的一些并学习其他规则。

fisout.Rules(2:结束)= [];rng ('默认'%的再现性fisout = tunefis(fisin,[],x,y,选项);
f(x) f(x)代1 400 0.165 0.2956 0 2 590 0.165 0.2805 1 3 780 0.165 0.2578 2 4 970 0.165 0.2393 3 5 1160 0.165 0.2322 4优化终止:超过最大代数。
fisout。规则
ANS = 1×3个Fisrule阵列具有属性:描述前所未切的重量连接详细信息:描述_____________________________ 1“输入1 == MF3 => OUTPUT1 = MF1(1)”2“INPUT1 == MF1 => OUTPUT1 = MF2(1)”3“输入1 == MF2 => OUTPUT1 = MF1(1)”

您还可以调整现有规则的前一种和后果,并学习新规则。为此,请获取可调规则参数设置并将其传递给函数。

fisout.Rules(2:结束)= [];fisout.rules(1).antecent = 1;fisout.rules(1).consquent = 1;[〜,〜,规则] = getTunablyTeings(Fisout);rng ('默认')fisout = tunefis(fisin,规则,x,y,选项);
最佳平均值生成Func-count f(x)f(x)几代1 400 0.165 0.3063 0 2 590 0.165 0.2845 1 3 780 0.165 0.2549 2 4 970 0.165 0.2344 3 5 1160 0.165 0.2153 4优化终止:最大数量的优化。
fisout。规则
ANS = 1×3个具有属性的FISRule阵列:描述前所未有的重量连接详细信息:描述_____________________________ 1“输入1 == MF1 => OUTPUT1 = MF2(1)”2“INPUT1 == MF2 => OUTPUT1 = MF1(1)”3“输入1 == MF3 => OUTPUT1 = MF1(1)”

调整MF和规则参数

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

[在,出,规则] = gettubalableptings(FIS);

配置调整选项。

选择= tunefisOptions (“方法”'ga');options.methodoptions.maxgenerations = 5;

调整FIS的MF参数和规则参数。

rng ('默认'%的再现性Fisout =突尼斯(FIS,[IN; OUT; RULE],X,Y,选项);
最佳平均值生成Func-count f(x)f(x)几代1 400 0.165 0.296 0 2 590 0.1638 0.2821 0 3 780 0.1620 0.2616 0 4 9770 0.1620 0.2616 1 5 1160 0.1604 0.2512 0优化终止:最大数量优化。

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

  1. 仅调谐或学习规则参数。

  2. 调优MF和规则参数。

学习和调整规则较少,由于规则参数少量,Unient MF参数较低。因此,第一步将在训练期间快速收敛于模糊规则基础。在第二步中,作为初始条件使用从第一步中的规则库提高了参数调谐过程的收敛。

从数据和调谐生成FIS

当您手动创建用于调优的FIS时,您必须手动创建初始规则库或学习初始规则。或者,您可以使用Genfis.函数,它基于您的培训数据创建初始规则库。然后,您可以使用FIS优化.在这种方法中,调谐过程可以采用本地优化方法,因为规则库是从训练数据中导出的。

此示例使用与前面示例相同的培训数据。

创建选项Genfis.指定5个MF,输入为高斯MF,输出为常量MF。

goptions = genfisoptions('gridpartition''nummembershipfunctions',5,...'InputMembershipFunctionType''Gaussmf'...'OutputMembershipFunctionType'“不变”);

生成初始FIS并获取其参数设置。

fisin = genfis(x,y,goptions);[进出,规则] = gettubalablesettings(fisin);

使用模式搜索方法进行优化,将最大迭代次数设置为25,并调整FIS。

toptions = tunefisoptions(“方法”'patternsearch');toptions.MethodOptions.MaxIterations = 25;rng ('默认')Fisout =突发(Fisin,[In; Out],X,Y,Poxtions);
ITER Func-count F(x)网眼化方法0 1 0.346649 0 1 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 4详细点网格9 69 0.159539 4成功轮询11 80 0.159539 2细化网格12 92 0.159539 1成功民意调查14 106 0.159373 4成功的民意调查15 1170.159373 2优化网格16 125 0.159185 4成功轮询17 1313136 0.159185 2细化网格18 151 0.159185 1细化网格19 152 0.15914 2成功轮询20 167 0.15914 1优化网格21 170 0.158914 2成功轮询22 185 0.158914 1详细的网格23 187 0.158839 2成功轮询24 202 0.158839 1优化网格25 206 0.158366 2成功轮询26 215 0.158121 4成功轮询超出了最大迭代次数:增加选项。

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

另请参阅

||

相关主题