主要内容

使用Type-2 FIS预测混沌时间序列

该示例显示了使用调谐类型-2模糊推理系统(FIS)的混沌时间序列预测。此示例使用粒子群优化调整FIS,这需要全局优化工具箱™软件。

时间序列数据

此示例使用以下形式模拟Mackey-Glass(MG)非线性延迟微分方程的时间序列数据。

X ˙ T. = 0. 2 X T. - τ. 1 + X 10. T. - τ. - 0. 1 X T.

使用以下配置模拟1200个样本的时间序列。

  • 采样时间 T. S. = 1

  • 初始条件 X 0. = 1 2

  • τ. = 20.

  • X T. - τ. = 0. 为了 T. < τ.

ts = 1;numsamples = 1200;tau = 20;x =零(1,Numsamples + Tau + 1);X(Tau + 1)= 1.2;为了T = 1 + Tau:NumSamples + Tau X_dot = 0.2 * x(T-Tau)/(1+(x(t-tau))^ 10)-0.1 * x(t);x(t + 1)= x(t)+ ts * x_dot;结尾

绘制模拟的MG时间序列数据。

图(1)绘图(x(tau + 2:结束))标题('Mackey-Glass Chaotic Time Series')xlabel('时间(秒)')ylabel('x(t)')

图包含轴。具有标题Mackey-Glass混沌时间序列的轴包含类型线的对象。

生成培训和验证数据

时间序列预测使用已知的时间序列值达到时间T.预测未来的价值 T. + P. 。这种类型预测的标准方法是创建一个映射D.示例数据点,在时间上采样每δ单位( X T. - D. - 1 δ. ...... X T. - δ. X T. )预测未来的价值 X = T. + P. 。对于此示例,设置 D. = 4. δ. = P. = 1 。因此,每个人T.,输入和输出培训数据集是 [ X T. - 3. X T. - 2 X T. - 1 X T. ] X T. + 1 , 分别。换句话说,使用四个连续的已知时间序列值来预测下一个值。

从样本创建1000个输入/输出数据集 X 100. + D. - 1 X 1100 + D. - 2

d = 4;InputData = Zeros(1000,D);outputData =零(1000,1);为了T = 100 + D-1:1100 + D-2为了i = 1:d输入数据(t-100-d + 2,i)= x(t-d + i);结尾OutputData(T-100-D + 2,:) = x(t + 1);结尾

使用前500个数据集作为培训数据(TRNX.trny.)和第二种500设置为验证数据(VLDX.vldy.)。

trnx = inputData(1:500,:);trny = outputdata(1:500,:);vldx = inputData(501:结束,:);VLDY = OutputData(501:结束,:);

构建FIS.

此示例使用Type-2 Sugeno FIS。由于Sugeno FIS具有比Mamdani FIS更少的可调谐参数,因此Sugeno系统通常在优化期间收敛得更快。

fisin = sugfistype2;

添加三个输入,每个输入有三个默认三角形函数(MFS)。最初,通过将每个下部MF设置为等于其对应的上部MF,消除每个输入MF的不确定度(FOU)的足迹。为此,请将每个下部MF的刻度和滞后值设置为10., 分别。通过消除所有输入成员函数的FU,您可以配置2型FIS,以表达类型1 FIS。

numinputs = d;numinputmfs = 3;范围= [min(x)max(x)];为了i = 1:numinputs fisin = addinput(fisin,范围,'nummfs',numinputmfs);为了j = 1:numinputmfs fisin.inputs(i).membershipfunctions(j).lowerscale = 1;fisin.inputs(i).MembershipFunctions(j).lowerlag = 0;结尾结尾

为了预测,将输出添加到FIS。输出包含默认的常量成员函数。为提供输入输出映射提供最大分辨率,请将输出MF的数量设置为等于输入MF组合的数量。

numoutputmfs = numinputms ^ numinputs;fisin = addutput(fisin,范围,'nummfs',numoutputmfs);

查看FIS结构。最初,FIS具有零规则。在调整过程中找到了系统的规则。

Plotfis(Fisin)

图包含6个轴。轴1包含6个类型的线路。轴2包含6个类型的类型。轴3包含6个类型的线。轴4包含6个类型的线。轴5包含类型文本的对象。轴6包含3个类型文本的对象。

调整与培训数据的FIS

要调整FIS,请使用以下三个步骤。

  1. 在保持输入和输出MF参数常量的同时了解规则库。

  2. 调整输入的输出MF参数和输入的上部MF参数,同时保持规则和更低的MF参数常数。

  3. 调整输入的较低MF参数,同时保持规则,输出MF和上MF参数常数。

由于规则参数的数量少,第一步是较小的计算昂贵,并且它在训练期间快速收敛到模糊规则库。在第二步之后,系统是训练有素的1个FIS。第三步生产调谐类型-2 FIS。

学习规则

要学习规则库,首先使用a指定调整选项TunefisOptions.目的。

选项= TunefisOptions;

由于FIS不包含任何假假的模糊规则,因此使用全局优化方法(遗传算法或粒子群)来学习规则。与本地优化方法相比(图案搜索和模拟退火)相比,全局优化方法在大参数调谐范围内执行更好。对于此示例,使用粒子群优化调整FIS('particleswarm')。

options.method ='particleswarm';

要学习新规则,请设置优化类型'学习'

options.optimationtype =.'学习';

限制输入MF组合数量的最大规则数。调谐规则的数量可以小于此限制,因为调整过程删除重复规则。

options.nummaxrules = numinputmfs ^ numinputs;

如果您有并行计算工具箱™软件,可以通过设置提高调整过程的速度使用指α.真的。如果您没有并行计算工具箱软件,请设置使用指α.错误的

options.USEPLALLLASTER = FALSE;

设置最大迭代次数10.。增加迭代的数量可以减少训练错误。然而,较大数量的迭代增加了调整过程的持续时间,并且可以将规则参数过往训练数据。

options.methododeions.maxItations = 10;

由于粒子群优化使用随机搜索,从而获得可重复的结果,初始化随机数生成器到其默认配置。

RNG('默认')

使用该方法调整FIS函数需要几分钟。对于此示例,通过设置启用调整runtunefis.真的。在不运行的情况下加载佩带的结果,你可以设置runtunefis.错误的

runtunefis = false;

使用指定的培训数据和选项调整FIS。

如果runtunefis fisout1 = tunefis(fisin,[],trnx,trny,选项);别的tunedfis = load('tunedfischaotictimimeseriestype2.mat');fisout1 = tunedfis.fisout1;结尾

查看培训的FIS的结构,其中包含新的学习规则。

Plotfis(Fisout1)

图包含6个轴。轴1包含6个类型的线路。轴2包含6个类型的类型。轴3包含6个类型的线。轴4包含6个类型的线。轴5包含类型文本的对象。轴6包含3个类型文本的对象。

检查学习规则库调整的各个输入输出关系。例如,下图显示了第二输入和输出之间的关系。

Gensurf(Fisout1,GensurfOptions('inputIndex',2))

图包含轴。轴包含类型线的对象。

使用输入验证数据评估调谐的FIS。绘制实际生成的输出,使用预期的验证输出,并计算根均方误差(RMSE)。

plotactualandexpectedresultwithrmse(fisout1,VLDX,VLDY)

图包含轴。标题Rmse = 0.12635的轴包含2个类型的2个对象。这些对象代表实际输出,预期输出。

调谐上部成员函数参数

调整上部成员函数参数。2型Sugeno FIS仅支持酥脆输出功金宝app能。因此,该步骤调谐输入上部MFS和清晰的输出功能。

使用输入和输出参数设置gettubalablesstings.。由于FIS使用三角形输入MFS,因此您可以使用非对称滞后值调整输入MFS。

[在,Out] = GetTunablyTeps(Fisout1,'不对称填料',真的);

禁用降低MF参数的调整。

为了i = 1:长度(in)为了j = 1:长度(在(i).membershipfunctions)中(i).membershipfunctions(j).lowerscale.free = false;在(i).membershipfunctions(j).lowerlag.free = false;结尾结尾

要优化现有的可调MF参数,同时保持规则基础常量,设置优化类型'调整'

options.optimationtype =.'调整';

使用指定的调整数据和选项调整FIS。在不运行的情况下加载佩带的结果,你可以设置runtunefis.错误的

RNG('默认')如果runtunefis fisout2 = tunefis(fisout1,[out; out],trnx,trny,选项);别的tunedfis = load('tunedfischaotictimimeseriestype2.mat');fisout2 = tunedfis.fisout2;结尾

查看培训的FIS的结构,现在包含调谐的上部MF参数。

Plotfis(Fisout2)

图包含6个轴。轴1包含6个类型的线路。轴2包含6个类型的类型。轴3包含6个类型的线。轴4包含6个类型的线。轴5包含类型文本的对象。轴6包含3个类型文本的对象。

使用验证数据进行调整的FIS,计算RMSE,并使用预期的验证输出绘制实际生成的输出。

plotactualandexpectedresultwithrmse(fisout2,VLDX,VLDY)

图包含轴。标题RMSE = 0.062922的轴包含2个类型的线。这些对象代表实际输出,预期输出。

调整上部MF参数提高了FIS的性能。此结果相当于调谐1型FIS。

调谐较低的会员函数参数

仅调整输入较低的MF参数。为此,请调整较低尺度和滞后值,并禁用上MF参数的调整。

为了i = 1:长度(in)为了j = 1:长度(在(i).membershipfunctions)中(i).membershipfunctions(j).upperparameters.free = false;在(i).membershipfunctions(j).lowerscale.free = true;在(i).membershipfunctions(j).lowerlag.free = true;结尾结尾

使用指定的调整数据和选项调整FIS。在不运行的情况下加载佩带的结果,你可以设置runtunefis.错误的

RNG('默认')如果runtunefis fisout3 = tunefis(fisout2,in,trnx,trny,选项);别的tunedfis = load('tunedfischaotictimimeseriestype2.mat');fisout3 = tunedfis.fisout3;结尾

查看培训的FIS的结构,现在包含调谐的较低MF参数。

Plotfis(Fisout3)

图包含6个轴。轴1包含6个类型的线路。轴2包含6个类型的类型。轴3包含6个类型的线。轴4包含6个类型的线。轴5包含类型文本的对象。轴6包含3个类型文本的对象。

使用验证数据进行调整的FIS,计算RMSE,并使用预期的验证输出绘制实际生成的输出。

plotactualandexpectedresultwithrmse(fisout3,VLDX,VLDY)

图包含轴。具有标题RMSE = 0.047573的轴包含2个类型的线。这些对象代表实际输出,预期输出。

调整上下MF值都提高了FIS性能。当培训的FIS包括调谐的上限和下参数值时,RMSE可提高。

结论

与类型1 MF相比,Type-2 MFS提供额外的可调参数。因此,通过足够的训练数据,调整类型-2 FIS可以比调谐类型1 FIS更好地拟合训练数据。

总的来说,您可以通过修改以下任何FIS属性或调整选项来生成不同的调整结果:

  • 输入数量

  • MFS数量

  • MFS的类型

  • 优化方法

  • 调整迭代的数量

本地功能

功能[RMSE,Acty] = Calculatermse(FIS,X,Y)%指定FIS评估选项EvalOptions = evalFisOptions(“extentOutputfuzzysetMessage”那“没有任何”那......“norulefiredmessage”“没有任何”那“OutofRangeInputValuemessage”那“没有任何”);%评估FIS.acty = evalfis(FIS,X,Evaloptions);%计算RMSE.del = acty  -  y;RMSE = SQRT(平均值(del. ^ 2));结尾功能plotactualandexpectedresultwithrmse(fis,vldx,vldy)[Rmse,Acty] = Calculatermse(FIS,VLDX,VLDY);图绘图([acty vldy])轴([0长度(vldy)min(vldy)-0.01 max(vldy)+0.13])xlabel('样本索引')ylabel('信号值') 标题(['rmse ='num2str(RMSE)])图例([“实际输出”“预期产出”],'地点'那“东北”)结尾

也可以看看

|

相关话题