决策模糊推理系统
此示例演示创建模糊推理系统的过程。 此类系统以模糊集、其隶属函数和决策规则的形式将人类推理和专家知识形式化。
安装和连接库
要创建模糊推理系统,让我们使用名为FuzzyLogic的Julia编程语言库。 要在Engee中安装它,您需要执行以下代码。:
Pkg.add(["FuzzyLogic"])
Pkg.add("FuzzyLogic")
连接已安装的FuzzyLogic库:
using FuzzyLogic
建立模糊推理系统
下面的代码使用@mamfis宏构建Mamdani模糊推理系统。 该系统包括输入和输出变量的隶属度函数的定义。
在代码的开头,我们声明了tipper函数,它有两个参数:service和food。 这些变量表示将用于估计餐厅访客想要离开的小费的输入数据。
对于服务变量,我们使用高斯隶属函数定义三个模糊集:
*差,中心为0,标准偏差为1.5
*良好,中心为5,标准偏差为1.5
*优秀的中心为10,标准偏差为1.5
对于食物变量,我们使用梯形隶属函数定义两个模糊集。:
*腐臭(腐烂)与坐标(-2,0,1,3)
*美味与坐标(7,9,10,12)
Tip变量有三个由三角隶属函数定义的模糊集:
*便宜(小)与坐标(0,5,10)
*坐标平均值(10,15,20)
*慷慨与坐标(20,25,30)
接下来,定义了模糊逻辑的规则,将服务质量和食物与提示联系起来。 例如,如果服务很差或食物不合格,小费就会很低,如果服务很好并且食物质量令人满意,小费就会平均,等等。
fis = @mamfis function tipper(service, food)::tip
service := begin
domain = 0:10
poor = GaussianMF(0.0, 1.5)
good = GaussianMF(5.0, 1.5)
excellent = GaussianMF(10.0, 1.5)
end
food := begin
domain = 0:10
rancid = TrapezoidalMF(-2, 0, 1, 3)
delicious = TrapezoidalMF(7, 9, 10, 12)
end
tip := begin
domain = 0:30
cheap = TriangularMF(0, 5, 10)
average = TriangularMF(10, 15, 20)
generous = TriangularMF(20, 25, 30)
end
service == poor || food == rancid --> tip == cheap
service == good --> tip == average
service == excellent || food == delicious --> tip == generous
end
以函数形式使用模糊推理系统的示例 fis:
fis(service=2, food=4)
使用以下方法生成独立于库的函数 compilefis:
fis_ex = compilefis(fis)
代码生成得到的函数可以写入文件。 为此,变量 fis_ex 具有格式 Expr,被转换为格式 String,以作进一步记录:
text_function = string(fis_ex)
将字符串格式的函数写入文件:
f = open("fis.jl","w") # создание файла
write(f, text_function) # запись в файл
close(f) # закрытие файла
函数定义 tipper,在Engee工作区中使用函数 include 从创建的文件:
include("fis.jl")
使用来自a的函数。jl文件。
tipper(2, 3)
生成的函数可以在其他项目中使用,而无需连接FuzzyLogic库。
成员函数的可视化
连接图形可视化库:
using Plots
显示变量的成员函数 service:
plot(fis, :service)
显示变量的成员函数 food:
plot(fis, :food)
显示变量的成员函数 tip:
plot(fis, :tip)
构建响应表面
如果模糊输出系统具有2个输入,那么可以构造其响应面。 这是一个显示输出如何根据输入数据而变化的表面。:
# Определяем векторы
s = collect(0:0.2:10) # Вектор s от 0 до 10
f = collect(0:0.2:10) # Вектор f от 0 до 10
# Создаем матрицы значений
tip_matrix = zeros(length(s), length(f))
# Заполняем матрицу значениями отклика
for (i, service) in enumerate(s)
for (j, food) in enumerate(f)
tip_matrix[i, j] = tipper(service, food)
end
end
# Построение поверхности отклика
surface(s, f, tip_matrix, xlabel="Service", ylabel="Food", zlabel="Tip", title="Поверхность отклика", color=:inferno)
结论
在此示例中,检查了FuzzyLogic库的功能。 它们用于构建模糊推理系统,允许您使用模糊逻辑对不确定和不准确的数据进行建模和处理。 在决策和计算的背景下,模糊推理系统将人类推理和专家知识形式化,与传统方法相比,允许在面对不确定性时做出更灵活和自适应的决策。