36、模糊推理系统相关对象介绍

模糊推理系统相关对象介绍

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";
  1. 定义连接:
con1 = ["fis1/output1" "fis2/input1"];
con2 = ["fis2/output1" "fis3/input1"];
  1. 创建FIS树:
incTree = fistree([fis1 fis2 fis3],[con1;con2]);
  1. 可视化树结构:
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";
  1. 定义连接:
con1 = ["fis1/output1" "fis3/input1"];
con2 = ["fis2/output1" "fis3/input2"];
  1. 创建FIS树:
aggTree = fistree([fis1 fis2 fis3],[con1;con2]);
  1. 可视化树结构:
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";
  1. 定义连接:
con1 = ["fis1/output1" "fis3/input1"];
con2 = ["fis2/output1" "fis3/input2"];
con3 = ["fis3/output1" "fis4/input1"];
  1. 创建FIS树:
casTree = fistree([fis1 fis2 fis3 fis4],[con1;con2;con3]);
  1. 可视化树结构:
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);
  1. 创建FIS树:
parTree = fistree([fis1 fis2],[]);
  1. 可视化树结构:
plotfis(parTree);
  1. 评估FIS树:
output = evalfis(parTree,[0.1 0.3 0.8 0.4]);
  1. 生成最终输出:
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创建表面图的选项 | 定制模糊推理系统输出表面图的显示 |

通过这些对象和方法的组合使用,我们可以构建出复杂而强大的模糊推理系统,为各种领域的决策和控制提供支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值