Функции чтения и записи
Анализ кода Julia
#
FuzzyLogic.@mamfis
— Macro
Анализирует код Julia в MamdaniFuzzySystem
. См. пример в расширенной справке.
Расширенная справка
Пример
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
and = ProdAnd
or = ProbSumOr
implication = ProdImplication
service == poor || food == rancid --> tip == cheap
service == good --> tip == average
service == excellent || food == delicious --> tip == generous
aggregator = ProbSumAggregator
defuzzifier = BisectorDefuzzifier
end
# вывод
tipper
Inputs:
-------
service ∈ [0, 10] with membership functions:
poor = GaussianMF{Float64}(0.0, 1.5)
good = GaussianMF{Float64}(5.0, 1.5)
excellent = GaussianMF{Float64}(10.0, 1.5)
food ∈ [0, 10] with membership functions:
rancid = TrapezoidalMF{Int64}(-2, 0, 1, 3)
delicious = TrapezoidalMF{Int64}(7, 9, 10, 12)
Outputs:
--------
tip ∈ [0, 30] with membership functions:
cheap = TriangularMF{Int64}(0, 5, 10)
average = TriangularMF{Int64}(10, 15, 20)
generous = TriangularMF{Int64}(20, 25, 30)
Inference rules:
----------------
(service is poor ∨ food is rancid) --> tip is cheap
service is good --> tip is average
(service is excellent ∨ food is delicious) --> tip is generous
Settings:
---------
- ProdAnd()
- ProbSumOr()
- ProdImplication()
- ProbSumAggregator()
- BisectorDefuzzifier(100)
#
FuzzyLogic.@sugfis
— Macro
Анализирует код Julia в SugenoFuzzySystem
. См. пример в расширенной справке.
Расширенная справка
Пример
fis = @sugfis 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 = 0
average = food
generous = 2service, food, -2
end
service == poor && food == rancid --> tip == cheap
service == good --> tip == average
service == excellent || food == delicious --> tip == generous
end
# вывод
tipper
Inputs:
-------
service ∈ [0, 10] with membership functions:
poor = GaussianMF{Float64}(0.0, 1.5)
good = GaussianMF{Float64}(5.0, 1.5)
excellent = GaussianMF{Float64}(10.0, 1.5)
food ∈ [0, 10] with membership functions:
rancid = TrapezoidalMF{Int64}(-2, 0, 1, 3)
delicious = TrapezoidalMF{Int64}(7, 9, 10, 12)
Outputs:
--------
tip ∈ [0, 30] with membership functions:
cheap = 0
average = food
generous = 2service + food - 2
Inference rules:
----------------
(service is poor ∧ food is rancid) --> tip is cheap
service is good --> tip is average
(service is excellent ∨ food is delicious) --> tip is generous
Settings:
---------
- ProdAnd()
- ProbSumOr()
Генерация кода Julia
#
FuzzyLogic.compilefis
— Function
compilefis(
fname::AbstractString,
fis::FuzzyLogic.AbstractFuzzySystem
) -> Any
compilefis(
fname::AbstractString,
fis::FuzzyLogic.AbstractFuzzySystem,
name::Symbol
) -> Any
Компилирует систему нечетких выводов в отдельный код Julia. Если первый аргумент является строкой, он записывает код в указанный файл, в противном случае возвращает выражение Julia этого кода.
Входные данные
-
fname::AbstractString
— файл, в который следует выполнять запись -
fis::AbstractFuzzySystem
— нечеткая система, подлежащая компиляции -
name::Symbol
— имя создаваемой функции (по умолчаниюfis.name
)
Примечания
Поддерживаются только системы выводов 1-го типа.
Чтение из файла
#
FuzzyLogic.readfis
— Function
readfis(file::String) -> FuzzyLogic.AbstractFuzzySystem
readfis(
file::String,
fmt::Union{Nothing, Symbol}
) -> FuzzyLogic.AbstractFuzzySystem
Считывает нечеткую систему из файла с использованием заданного формата.
Входные данные
-
file::String
— путь к считываемому файлу. -
fmt::Union{Symbol,Nothing}
— входной формат файла. Еслиnothing
, он определяется расширением файла.
Поддерживаемые форматы:
-
:fcl
— язык нечеткого управления (соответствующее расширение файла.fcl
) -
:fml
— язык нечеткой разметки (соответствующее расширение файла.xml
) -
:matlab
— Matlab fis (соответствующее расширение файла.fis
)
Анализ FCL
#
FuzzyLogic.FCLParser.parse_fcl
— Function
parse_fcl(s::String)::AbstractFuzzySystem
Анализирует систему нечеткого вывода из строкового представления на языке нечеткого управления (FCL).
Входные данные
-
s::String
— строка, описывающая нечеткую систему на языке FCL, соответствующем стандарту IEC 1131-7.
Примечания
Анализаторы могут читать FCL, соответствующий стандарту IEC 1131-7, со следующими замечаниями:
-
Сугено (система с одинарными выводами) должна использовать COGS в качестве дефаззификатора;
-
ключевое слово
RANGE
необходимо как для блоков формирования нечеткости, так и для блоков приведения к четкости; -
поддерживается только необходимый сумматор
MAX
; -
значение по умолчанию для устранения нечеткости не поддерживается;
-
необязательные локальные переменные не поддерживаются.
При вышеуказанных исключениях анализатор поддерживает все необходимые и дополнительные функции стандарта (таблицы 6.1-1 и 6.1-2). Помимо этого, он поддерживает следующие возможности:
-
кусочно-линейные функции могут иметь любое количество точек;
-
степень принадлежности в точках кусочно-линейных функций может быть любым числом между и .
Анализ FML
#
FuzzyLogic.FMLParser.parse_fml
— Function
parse_fml(s::String)::AbstractFuzzySystem
Анализирует систему нечеткого вывода из строкового представления на языке нечеткой разметки (FML).
Входные данные
-
s::String
— строка, описывающая нечеткую систему на языке FML, соответствующем стандарту IEEE 1855-2016.
Примечания
Анализаторы могут читать FML, соответствующий стандарту IEEE 1855-2016, со следующими замечаниями:
-
Поддерживаются только системы Мамдани и Сугено.
-
Определения операторов
and
иor
должны быть заданы в базовом блоке правил. Определения в отдельных правилах игнорируются. -
Модификаторы не поддерживаются.
Анализ Matlab
#
FuzzyLogic.MatlabParser.parse_matlabfis
— Function
parse_matlabfis(s::AbstractString)
Анализирует систему нечеткого вывода из строки в формате Matlab FIS.
#
FuzzyLogic.MatlabParser.@matlabfis_str
— Macro
Строковый макрос для анализа форматов Matlab fis. Дополнительные сведения см. в документе parse_matlabfis
.