模糊推理系统相关对象介绍
1. fistree对象
fistree对象用于表示相互连接的模糊推理系统树。
1.1 创建fistree对象
- 语法 :
-
fisTree = fistree(fis,connections):创建相互连接的模糊推理系统对象网络,并设置其FIS和Connections属性。 -
fisTree = fistree( ___ ,Name,Value):使用名称 - 值参数设置FIS树的Name或DisableStructuralChecks属性。
以下是创建fistree对象的示例代码:
fis1 = mamfis('Name','fis1','NumInputs',2,'NumOutputs',1);
fis2 = sugfis('Name','fis2','NumInputs',2,'NumOutputs',1);
con1 = ["fis1/output1" "fis2/input1"];
tree = fistree([fis1 fis2],con1);
1.2 fistree对象的属性
| 属性 | 描述 | 默认值 |
|---|---|---|
| Name | FIS树的名称,指定为字符串或字符向量 | “fistreemodel” |
| FIS | 模糊推理系统,指定为FIS对象数组,每个模糊推理系统必须至少有一个输入和一个输出 | 无 |
| Connections | 模糊推理系统之间的连接,指定为两列字符串数组 | 无 |
| Inputs | FIS树的输入,指定为字符串数组,由连接自动确定 | 无 |
| Outputs | FIS树的输出,指定为字符串数组,可在初始构建后更新 | 无 |
| DisableStructuralChecks | 禁用结构检查的选项,指定为true或false | false |
Connections有两种类型:
1.
输出 - 输入连接
:指定从一个FIS的输出到另一个FIS的输入的连接。
2.
输入 - 输入连接
:指定两个输入之间的连接,使它们使用相同的输入值。
Connections必须满足以下条件:
1. 一个fistree对象必须至少有一个没有传入连接的FIS输入和一个没有传出连接的FIS输出。
2. 一个FIS输入不能有多个传入连接。
3. 一个FIS输出可以有多个传出连接。
4. 同一个FIS的输入和输出不能连接。
5. 不支持两个输入之间的对称连接。
6. 不支持自输入循环。
以下是一个包含连接示例的mermaid流程图:
graph LR
classDef fis fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A([fis1]):::fis -->|output1| C([fis3]):::fis
B([fis2]):::fis -->|output1| C
A -->|input2| B
1.3 fistree对象的函数
-
evalfis:评估模糊推理系统。 -
plotfis:显示模糊推理系统。 -
getTunableSettings:从模糊推理系统获取可调设置。 -
getTunableValues:从模糊推理系统获取可调参数的值。 -
setTunableValues:指定模糊推理系统的可调参数值。
以下是更新FIS树的示例代码:
fis1 = mamfis('Name','fis1','NumInputs',2,'NumOutputs',1);
fis2 = mamfis('Name','fis2','NumInputs',2,'NumOutputs',1);
fisT = fistree([fis1 fis2],[]);
fis3 = mamfis('Name','fis3','NumInputs',2,'NumOutputs',1);
fisT.FIS(end+1) = fis3;
fisT.Connections = [
"fis1/output1" "fis3/input1";
"fis2/output1" "fis3/input2"];
2. fisvar对象
fisvar对象用于表示模糊推理系统(FIS)中的输入和输出变量。
2.1 创建fisvar对象
- 语法 :
-
var = fisvar:创建具有默认名称、默认范围和无隶属函数的模糊变量。 -
var = fisvar(range):设置Range属性。 -
var = fisvar('Name',name):设置Name属性。 -
var = fisvar(range,'Name',name):设置Range和Name属性。
以下是创建fisvar对象的示例代码:
var = fisvar;
var.Range = [-5 5];
2.2 fisvar对象的属性
| 属性 | 描述 | 默认值 |
|---|---|---|
| Name | 变量名称,指定为字符串或字符向量 | “var” |
| Range | 变量范围,指定为两元素向量 | [0 1] |
| MembershipFunctions | 隶属函数,指定为fismf或fismftype2对象的向量 | [] |
要向模糊变量添加隶属函数,可以使用以下方法:
1. 使用
addMF
函数。
2. 创建fismf对象的向量,并将其分配给MembershipFunctions。
3. 创建fismftype2对象的向量,并将其分配给MembershipFunctions。
以下是添加隶属函数的示例代码:
var = fisvar([0 1]);
var = addMF(var,"trapmf",[-0.5 0 0.2 0.4]);
3. gensurfOptions对象
gensurfOptions对象用于指定使用gensurf创建表面图的选项。
3.1 创建gensurfOptions对象
- 语法 :
-
opt = gensurfOptions:创建用于生成模糊推理系统输出表面的默认选项集。 -
opt = gensurfOptions(Name,Value):使用一个或多个名称 - 值参数设置属性。
以下是创建gensurfOptions对象的示例代码:
opt = gensurfOptions;
opt.OutputIndex = 2;
opt.InputIndex = [1 3];
opt.ReferenceInputs = [NaN 0.25 NaN];
3.2 gensurfOptions对象的属性
| 属性 | 描述 | 默认值 |
|---|---|---|
| InputIndex | 要绘制输出的输入变量的索引 | ‘auto’ |
| OutputIndex | 要绘制的输出变量的索引 | ‘auto’ |
| NumGridPoints | 要绘制的网格点数 | 15 |
| ReferenceInputs | 表面图中未显示的输入变量的参考值 | ‘auto’ |
| NumSamplePoints | 评估隶属函数时使用的样本点数 | 101 |
通过这些对象和函数,可以方便地构建、操作和评估模糊推理系统及其相关的变量和图形。
模糊推理系统相关对象介绍
4. 不同类型FIS树的构建示例
在模糊推理系统中,有多种类型的FIS树结构,下面将详细介绍几种常见类型FIS树的构建方法。
4.1 增量式FIS树(Incremental FIS Tree)
增量式FIS树的构建过程是在每一层将一个额外的输入与上一层的输出相结合。
操作步骤
:
1. 创建模糊系统:
fis1 = mamfis('Name','fis1','NumInputs',2,'NumOutputs',1);
fis1.Inputs(1).Name = "color";
fis1.Inputs(2).Name = "doors";
fis2 = mamfis('Name','fis2','NumInputs',2,'NumOutputs',1);
fis2.Inputs(2).Name = "power";
fis3 = mamfis('Name','fis3','NumInputs',2,'NumOutputs',1);
fis3.Inputs(2).Name = "autopilot";
fis3.Outputs(1).Name = "prediction";
- 定义连接:
con1 = ["fis1/output1" "fis2/input1"];
con2 = ["fis2/output1" "fis3/input1"];
- 创建FIS树:
incTree = fistree([fis1 fis2 fis3],[con1;con2]);
- 可视化树结构:
plotfis(incTree);
以下是增量式FIS树连接关系的mermaid流程图:
graph LR
classDef fis fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A([fis1]):::fis -->|output1| B([fis2]):::fis
B -->|output1| C([fis3]):::fis
4.2 聚合式FIS树(Aggregated FIS Tree)
聚合式FIS树将多个FIS的输出聚合到一个FIS的输入。
操作步骤
:
1. 创建模糊系统:
fis1 = mamfis('Name','fis1','NumInputs',2,'NumOutputs',1);
fis1.Inputs(1).Name = "dist_obs";
fis1.Inputs(2).Name = "angle_obs";
fis2 = mamfis('Name','fis2','NumInputs',2,'NumOutputs',1);
fis2.Inputs(1).Name = "dist_tar";
fis2.Inputs(2).Name = "angle_tar";
fis3 = mamfis('Name','fis3','NumInputs',2,'NumOutputs',1);
fis3.Outputs(1).Name = "heading_robot";
- 定义连接:
con1 = ["fis1/output1" "fis3/input1"];
con2 = ["fis2/output1" "fis3/input2"];
- 创建FIS树:
aggTree = fistree([fis1 fis2 fis3],[con1;con2]);
- 可视化树结构:
plotfis(aggTree);
以下是聚合式FIS树连接关系的mermaid流程图:
graph LR
classDef fis fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A([fis1]):::fis -->|output1| C([fis3]):::fis
B([fis2]):::fis -->|output1| C
4.3 级联式FIS树(Cascaded FIS Tree)
级联式FIS树是多个FIS依次连接,前一个FIS的输出作为后一个FIS的输入。
操作步骤
:
1. 创建模糊系统:
fis1 = mamfis('Name','fis1','NumInputs',2,'NumOutputs',1);
fis1.Inputs(1).Name = "dist_obs";
fis1.Inputs(2).Name = "angle_obs";
fis2 = mamfis('Name','fis2','NumInputs',2,'NumOutputs',1);
fis2.Inputs(1).Name = "dist_tar";
fis2.Inputs(2).Name = "angle_tar";
fis3 = mamfis('Name','fis3','NumInputs',2,'NumOutputs',1);
fis4 = mamfis('Name','fis4','NumInputs',2,'NumOutputs',1);
fis4.Inputs(2).Name = "preheading_robot";
fis4.Outputs(1).Name = "heading_robot";
- 定义连接:
con1 = ["fis1/output1" "fis3/input1"];
con2 = ["fis2/output1" "fis3/input2"];
con3 = ["fis3/output1" "fis4/input1"];
- 创建FIS树:
casTree = fistree([fis1 fis2 fis3 fis4],[con1;con2;con3]);
- 可视化树结构:
plotfis(casTree);
以下是级联式FIS树连接关系的mermaid流程图:
graph LR
classDef fis fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A([fis1]):::fis -->|output1| C([fis3]):::fis
B([fis2]):::fis -->|output1| C
C -->|output1| D([fis4]):::fis
4.4 并行式FIS树(Parallel FIS Tree)
并行式FIS树中的FIS对象相互独立,没有相互连接,所有FIS的输出都是FIS树的输出。
操作步骤
:
1. 创建模糊系统:
fis1 = mamfis('Name','fis1','NumInputs',2,'NumOutputs',1);
fis2 = mamfis('Name','fis2','NumInputs',2,'NumOutputs',1);
- 创建FIS树:
parTree = fistree([fis1 fis2],[]);
- 可视化树结构:
plotfis(parTree);
- 评估FIS树:
output = evalfis(parTree,[0.1 0.3 0.8 0.4]);
- 生成最终输出:
finalOutput = sum(output);
以下是并行式FIS树的mermaid流程图:
graph LR
classDef fis fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A([fis1]):::fis
B([fis2]):::fis
5. 总结
通过上述对fistree、fisvar和gensurfOptions对象的介绍,以及不同类型FIS树的构建示例,我们可以看到在模糊推理系统中,这些对象和方法提供了强大的功能。
- fistree对象允许我们构建复杂的相互连接的模糊推理系统网络,通过设置不同的属性和连接,可以创建多种类型的FIS树结构。
- fisvar对象方便我们管理模糊推理系统中的输入和输出变量,通过设置变量的名称、范围和隶属函数,可以灵活地定义模糊变量。
- gensurfOptions对象则为我们生成模糊推理系统的输出表面图提供了丰富的选项,使我们能够根据需要定制图形的显示。
在实际应用中,我们可以根据具体问题的需求,选择合适的FIS树结构和对象属性,以实现高效、准确的模糊推理。同时,通过对这些对象和方法的深入理解和熟练运用,我们可以更好地解决各种模糊逻辑相关的问题。
以下是一个总结表格,对比不同对象的主要功能和用途:
| 对象名称 | 主要功能 | 用途 |
| ---- | ---- | ---- |
| fistree | 构建相互连接的模糊推理系统网络 | 创建不同类型的FIS树结构,如增量式、聚合式、级联式和并行式 |
| fisvar | 表示模糊推理系统中的输入和输出变量 | 定义变量的名称、范围和隶属函数 |
| gensurfOptions | 指定使用gensurf创建表面图的选项 | 定制模糊推理系统输出表面图的显示 |
通过这些对象和方法的组合使用,我们可以构建出复杂而强大的模糊推理系统,为各种领域的决策和控制提供支持。
超级会员免费看
37

被折叠的 条评论
为什么被折叠?



