这里推荐搭建先看这个ppt,再看后面matlab的实现,这样你会很清晰,为了赚点积分,这里设置一下积分,抱歉大家了。
如何在设计器中使用自定义函数构建模糊推理系统
当构建模糊推理系统时,如Fuzzy Inference Process中所述,可以用自定义函数替换内置的隶属函数或推理函数,或两者。在本节中,您将学习如何使用GUI中的自定义功能来构建模糊推理系统。要了解如何在命令行中使用自定义功能来构建系统,请参阅在“ 构建Mamdani系统(代码)”中指定自定义成员资格和推断功能。
要在设计器中使用自定义函数构建模糊推理系统,请执行以下操作:
-
通过键入在MATLAB以下开放模糊逻辑设计®提示:
fuzzyLogicDesigner
-
如“模糊逻辑设计器”中所述指定模糊系统的输入和输出数量。
-
创建自定义成员资格函数,并用它们替换内置的成员资格函数,如指定自定义成员资格函数中所述。
隶属度函数定义如何将输入空间中的每个点映射到0到1之间的隶属度值。
-
创建使用规则编辑器,在描述规则的规则编辑器。
规则定义了输入和输出之间的逻辑关系。
-
创建自定义推断函数,并用它们替换内置的推断函数,如指定自定义推断函数中所述。
推理方法包括AND,OR,蕴涵,聚合和去模糊方法。该动作生成模糊系统的输出值。
下图显示的倾翻问题示例,其中内置的启示,聚合和去模糊化功能与自定义函数代替,
customimp
,customagg
,和customdefuzz
,分别。
6.选择“ 视图” >“ 曲面”以在“曲面查看器”中查看模糊推理系统的输出,如《曲面查看器》中所述。
指定自定义成员资格功能
您可以创建自定义的隶属度函数,并在模糊推理过程中使用它们。这些函数的值必须在0到1之间。将自定义成员资格函数保存在当前工作文件夹中。要了解如何使用自定义隶属函数构建模糊系统,请参阅Designer中的如何使用自定义函数构建模糊推理系统。
要创建自定义成员资格功能并替换内置成员资格功能,请执行以下操作:
-
创建一个MATLAB函数,并将其保存在当前工作文件夹中。
要了解如何创建MATLAB函数,请参见MATLAB文档中的“ 脚本与函数 ”。
以下代码是一个多步骤自定义成员资格函数的示例,该函数
custmf1
取决于0
和之间的八个参数10
。
% Function to generate a multi-step custom membership function
% using 8 parameters for the input argument x
function out = custmf1(x, params)
for i = 1:length(x)
if x(i) < params(1)
y(i) = params(1);
elseif x(i) < params(2)
y(i) = params(2);
elseif x(i) < params(3)
y(i) = params(3);
elseif x(i) < params(4)
y(i) = params(4);
elseif x(i) < params(5)
y(i) = params(5);
elseif x(i) < params(6)
y(i) = params(6);
elseif x(i) < params(7)
y(i) = params(7);
elseif x(i) < params(8)
y(i) = params(8);
else
y(i) = 0;
end
end
out = 0.1*y'; % scaling the output to lie between 0 and 1
注意: 自定义隶属函数可以为输入参数最多包含16个参数。 |
-
如果尚未打开Fuzzy Logic Designer,请在MATLAB提示符下键入以下内容:
fuzzyLogicDesigner
Fuzzy Logic Designer将使用默认的FIS名称打开
Untitled
,并包含一个输入input1和一个输出output1。 -
在模糊逻辑设计器中,选择“ 编辑” >“ 成员关系函数”以打开成员关系函数编辑器。
默认情况下,将显示三个input1的三角形隶属函数。
要在成员资格功能编辑器中将默认成员资格功能替换为自定义功能,请执行以下操作:
-
选择“ 编辑” >“ 删除所有MF”以删除input1的默认隶属函数。
-
选择“ 编辑” >“ 添加自定义MF”以打开“自定义成员资格功能”对话
要在“自定义成员资格功能”对话框中指定自定义功能,请执行以下操作:
-
在“ MF名称”字段中为自定义成员资格功能指定一个名称。
注意: 添加其他自定义成员资格功能时,请为每个功能指定不同的MF名称。
-
在“ M文件功能名称”字段中指定定制成员资格功能文件的名称。
-
在“ 参数列表”字段中指定参数向量。
这些值确定隶属函数的形状和位置,并使用这些参数值评估函数。
注意: 参数向量的长度必须大于或等于定制成员资格函数中的参数数。
使用
custmf1
步骤1中的示例,“自定义成员资格功能”对话框的外观类似于下图。
-
单击“ 确定”添加自定义成员资格功能。
-
同时指定范围和显示范围是
[0 10]
相匹配的自定义隶属函数的范围。
成员资格功能编辑器显示自定义成员资格功能图。
此操作还将自定义成员资格功能添加到“规则查看器”,并使其可用于为模糊推理过程创建规则。要在“规则查看器”中查看自定义函数,请在“ 模糊逻辑设计器”或“隶属函数编辑器”中选择“ 编辑” > “规则”
-
要为output1添加自定义成员资格函数,请在Membership Function Editor中选择它,然后重复步骤4和5。
指定自定义推理功能
您可以使用自定义函数替换内置的AND,OR,蕴涵,聚合和解模糊推理方法。创建自定义推断功能后,将其保存在当前工作文件夹中。若要了解如何使用自定义推理功能构建模糊系统,请参阅“设计器”部分中的 “ 如何使用自定义函数构建模糊推理系统”。
以下各节介绍了创建和指定用于构建模糊推理系统的功能的准则。
创建自定义AND和OR函数
自定义AND和OR推理函数必须为MATLAB功能上的矩阵操作逐列,以同样的方式max
,min
或prod
。
对于行或列矩阵x
,min(x)
返回最小元素。
x = [1 2 3 4];
min(x)
ans =
1
对于矩阵x
,min(x)
返回一个行向量,其中包含每列中的最小元素。
x = [1 2 3 4;5 6 7 8;9 10 11 12];
min(x)
ans =
1 2 3 4
对于ND阵列,min(x)
将沿第一个非单维进行操作。
该函数min(x,y)
返回一个数组,该数组的大小与相同,x
并y
带有x
或中的最小元素y
。输入自变量中的任何一个都可以是标量。max
,和等功能prod
以类似的方式操作。
在工具箱中,AND蕴涵方法执行逐个元素矩阵运算,类似于MATLAB函数min(x,y)
。
a = [1 2; 3 4];
b = [2 2; 2 2];
min(a,b)
ans =
1 2
2 2
OR蕴涵方法执行逐个元素的矩阵运算,类似于MATLAB函数max(x,y)
。
创建自定义蕴涵函数
自定义功能含义必须以同样的方式操作的MATLAB功能max
,min
或prod
。
以下是自定义蕴涵函数的示例:
function y = customimp(x1,x2)
if nargin==1
y = prod(x1).^2;
else
y = (x1.*x2).^2;
end
隐含函数必须支持一个或两个输入,因为该软件以两种方式调用该函数:
-
要使用所有规则的触发强度和相应的输出隶属度函数来计算输出模糊设定值。在这种情况下,软件使用两个输入来调用蕴涵函数,类似于以下示例:
impvals = customimp(w,outputmf)
-
w
—多个规则的射击强度,指定为nr - ns矩阵。在此,nr是规则数,而ns是输出隶属函数的样本数。w(:,j) = w(:,1)
对于所有j。w(i,1)
是的发射强度我个规则。 -
outputmf
—输出隶属函数值,指定为nr - ns矩阵。在此,nr是规则数,而ns是输出隶属函数的样本数。outputmf(i,:)
包含第i 个输出隶属函数的数据。
-
-
对于给定样本,使用单个规则的触发强度和相应的输出隶属度函数来计算输出模糊值。在这种情况下,软件使用一个输入来调用蕴涵函数,类似于以下示例:
impval = customimp([w outputmf])
w
和outputmf
是代表规则的点火强度的标量值以及对应于给定样本的输出隶属函数值。
创建自定义聚合函数
自定义聚合函数必须以相同的方式操作的MATLAB功能max
,min
或者prod
必须是形式y = customagg(x)
。
X是一个NV -by- NR矩阵,它是由为每个规则的含义方法返回截断输出功能的列表。nv是输出变量的数量,nr是规则的数量。聚合方法的输出是每个输出变量的一个模糊集。
以下是自定义聚合功能的示例:
function aggfun = customagg(x)
aggfun = (sum(x)/2).^0.5;
创建自定义解模糊功能的准则
自定义解模糊功能的格式必须为y = customdefuzz(xmf,ymf)
,其中(xmf,ymf)是隶属函数值的有限集合。xmf是隶属函数输入范围内的值的向量。YMF是隶属函数的值XMF。
以下是自定义解模糊功能的示例:
function defuzzfun = customdefuzz(xmf,ymf)
total_area = sum(ymf);
defuzzfun = sum(ymf.*xmf)/total_area;
指定自定义推理功能的步骤
创建并保存自定义推理函数后,请使用以下步骤在模糊推理过程中指定该函数:
-
在“模糊逻辑设计器”的左下方面板中,
Custom
从下拉菜单中选择与您要为其指定自定义函数的推理方法相对应。
-
此操作将打开一个对话框,您可以在其中指定自定义推断函数的名称。
-
在“ 方法名称”字段中,指定自定义推断函数的名称,然后单击“ 确定”。
-
构建模糊推理系统时,自定义函数将替换内置函数。
注意: 为了指定自定义推断功能,必须首先向FIS添加至少一个规则。
-
要为其他推理方法指定自定义函数,请重复步骤1和2。