Reading / writing functionalities
Parse Julia code
FuzzyLogic.@mamfis
— MacroParse julia code into a MamdaniFuzzySystem
. See extended help for an example.
Extended help
Example
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
# output
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
— MacroParse julia code into a SugenoFuzzySystem
. See extended help for an example.
Extended help
Example
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
# output
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()
Generate Julia code
FuzzyLogic.compilefis
— Functioncompilefis(
fname::AbstractString,
fis::FuzzyLogic.AbstractFuzzySystem
) -> Any
compilefis(
fname::AbstractString,
fis::FuzzyLogic.AbstractFuzzySystem,
name::Symbol
) -> Any
Compile the fuzzy inference system into stand-alone Julia code. If the first argument is a string, it write the code in the given file, otherwise it returns the Julia expression of the code.
Inputs
fname::AbstractString
– file where to writefis::AbstractFuzzySystem
– fuzzy system to compilename::Symbol
– name of the generated function, defaultfis.name
Notes
Only type-1 inference systems are supported
Read from file
FuzzyLogic.readfis
— Functionreadfis(file::String) -> FuzzyLogic.AbstractFuzzySystem
readfis(
file::String,
fmt::Union{Nothing, Symbol}
) -> FuzzyLogic.AbstractFuzzySystem
Read a fuzzy system from a file using a specified format.
Inputs
file::String
– path to the file to read.fmt::Union{Symbol,Nothing}
– input format of the file. Ifnothing
, it is inferred from the file extension.
Supported formats are
:fcl
– Fuzzy Control Language (corresponding file extension.fcl
):fml
– Fuzzy Markup Language (corresponding file extension.xml
):matlab
– Matlab fis (corresponding file extension.fis
)
Parse FCL
FuzzyLogic.FCLParser.parse_fcl
— Functionparse_fcl(s::String)::AbstractFuzzySystem
Parse a fuzzy inference system from a string representation in Fuzzy Control Language (FCL).
Inputs
s::String
– string describing a fuzzy system in FCL conformant to the IEC 1131-7 standard.
Notes
The parsers can read FCL comformant to IEC 1131-7, with the following remarks:
- Sugeno (system with singleton outputs) shall use COGS as defuzzifier.
- the
RANGE
keyword is required for both fuzzification and defuzzification blocks. - Only the required
MAX
accumulator is supported. - Default value for defuzzification not supported.
- Optional local variables are not supported.
With the exceptions above, the parser supports all required and optional features of the standard (tables 6.1-1 and 6.1-2). In addition, it also supports the following features:
- Piecewise linear functions can have any number of points.
- Membership degrees in piecewise linear functions points can be any number between $0$ and $1$.
FuzzyLogic.FCLParser.@fcl_str
— MacroString macro to parse Fuzzy Control Language (FCL). See parse_fcl
for more details.
Parse FML
FuzzyLogic.FMLParser.parse_fml
— Functionparse_fml(s::String)::AbstractFuzzySystem
Parse a fuzzy inference system from a string representation in Fuzzy Markup Language (FML).
Inputs
s::String
– string describing a fuzzy system in FML conformant to the IEEE 1855-2016 standard.
Notes
The parsers can read FML comformant to IEEE 1855-2016, with the following remarks:
- only Mamdani and Sugeno are supported.
- Operators
and
andor
definitions should be set in the rule base block. Definitions at individual rules are ignored. - Modifiers are not supported.
FuzzyLogic.FMLParser.@fml_str
— MacroString macro to parse Fuzzy Markup Language (FML). See parse_fml
for more details.
Parse Matlab
FuzzyLogic.MatlabParser.parse_matlabfis
— Functionparse_matlabfis(s::AbstractString)
Parse a fuzzy inference system from a string in Matlab FIS format.
FuzzyLogic.MatlabParser.@matlabfis_str
— MacroString macro to parse Matlab fis formats. See parse_matlabfis
for more details.