Документация Engee

Функции чтения и записи

Анализ кода Julia

Анализирует код 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)

Анализирует код 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

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-го типа.

Чтение из файла

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

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). Помимо этого, он поддерживает следующие возможности:

  • кусочно-линейные функции могут иметь любое количество точек;

  • степень принадлежности в точках кусочно-линейных функций может быть любым числом между и .

Строковый макрос для анализа языка нечеткого управления (FCL). Дополнительные сведения см. в документе parse_fcl.

Анализ FML

parse_fml(s::String)::AbstractFuzzySystem

Анализирует систему нечеткого вывода из строкового представления на языке нечеткой разметки (FML).

Входные данные

  • s::String — строка, описывающая нечеткую систему на языке FML, соответствующем стандарту IEEE 1855-2016.

Примечания

Анализаторы могут читать FML, соответствующий стандарту IEEE 1855-2016, со следующими замечаниями:

  • Поддерживаются только системы Мамдани и Сугено.

  • Определения операторов and и or должны быть заданы в базовом блоке правил. Определения в отдельных правилах игнорируются.

  • Модификаторы не поддерживаются.

Строковый макрос для анализа языка нечеткой разметки (FML). Дополнительные сведения см. в документе parse_fml.

Анализ Matlab

parse_matlabfis(s::AbstractString)

Анализирует систему нечеткого вывода из строки в формате Matlab FIS.

Строковый макрос для анализа форматов Matlab fis. Дополнительные сведения см. в документе parse_matlabfis.