Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/DotsMF.jl
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ get_dots(membership_function::MF, input_point_vector::Union{StepRange,StepRangeL
get_dots(membership_function, collect(input_point_vector))

function get_dots(membership_function::MF, input_point_vector::Vector{T}) where {T<:Number}
return Real.(map(x -> Fuzzy.eval(membership_function, x), input_point_vector))
return Real.(map(x -> Fuzzy.evaluate(membership_function, x), input_point_vector))
end

chart_prepare(sets_dict::Dict{String,N}, input_point_vector::Union{StepRange,StepRangeLen}) where {N<:MF} =
Expand Down
6 changes: 3 additions & 3 deletions src/Eval.jl
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ function eval_fis(fis::FISMamdani, input_values::Vector{<:AbstractFloat}, defuzz
tmp_strengths = AbstractFloat[]
for i in 1:length(rule.input_mf_names)
if (rule.input_mf_names[i] !== "")
push!(tmp_strengths, eval(fis.input_mfs_dicts[i][rule.input_mf_names[i]], input_values[i]))
push!(tmp_strengths, evaluate(fis.input_mfs_dicts[i][rule.input_mf_names[i]], input_values[i]))
end
end
push!(firing_strengths, firing(tmp_strengths, rule.firing_method))
Expand All @@ -46,7 +46,7 @@ function eval_fis(fis::FISSugeno, input_values::Vector{<:AbstractFloat})
tmp_strengths = AbstractFloat[]
for i in 1:length(rule.input_mf_names)
if (rule.input_mf_names[i] !== "")
push!(tmp_strengths, eval(fis.input_mfs_dicts[i][rule.input_mf_names[i]], input_values[i]))
push!(tmp_strengths, evaluate(fis.input_mfs_dicts[i][rule.input_mf_names[i]], input_values[i]))
end
end
push!(firing_strengths, firing(tmp_strengths, rule.firing_method))
Expand Down Expand Up @@ -90,7 +90,7 @@ function defuzz(firing_strengths::Vector{AbstractFloat}, rules::Vector{Rule}, ou
push!(mean_vec, mean_at(output_mfs_dict[rules[i].output_mf], firing_strengths[i]))
end
sumfire = sum(firing_strengths)
if sumfire != 0
if sumfire != 0
(mean_vec' * firing_strengths)[1] / sum(firing_strengths)
else
mean_vec
Expand Down
14 changes: 7 additions & 7 deletions src/EvalMF.jl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
function eval(membership_function::TriangularMF, x::T) where {T <: Number}
function evaluate(membership_function::TriangularMF, x::T) where {T <: Number}
return maximum([minimum([((x - membership_function.l_vertex) / (membership_function.center - membership_function.l_vertex)), ((membership_function.r_vertex - x) / (membership_function.r_vertex - membership_function.center))]), 0])
end

Expand All @@ -12,24 +12,24 @@ function mean_at(membership_function::TriangularMF, firing_strength::T) where {T
end
end

function eval(menbership_function::GaussianMF, x::T) where {T <: Number}
return exp(- 0.5 * ((x - menbership_function.center) / menbership_function.sigma)^2)
function evaluate(menbership_function::GaussianMF, x::T) where {T <: Number}
return exp(- 0.5 * ((x - menbership_function.center) / menbership_function.sigma)^2)
end

function mean_at(membership_function::GaussianMF, firing_strength::T) where {T <: Number}
return membership_function.center
end


function eval(membership_function::BellMF, x::T) where {T <: Number}
function evaluate(membership_function::BellMF, x::T) where {T <: Number}
return (1 / (1 + abs((x - membership_function.c) / membership_function.a)^(2 * membership_function.b)))
end

function mean_at(membership_function::BellMF, firing_strength::T) where {T <: Number}
return membership_function.c
end

function eval(membership_function::TrapezoidalMF, x::T) where {T <: Number}
function evaluate(membership_function::TrapezoidalMF, x::T) where {T <: Number}
return maximum([minimum([((x - membership_function.l_bottom_vertex) / (membership_function.l_top_vertex - membership_function.l_bottom_vertex)), 1, ((membership_function.r_bottom_vertex - x) / (membership_function.r_bottom_vertex - membership_function.r_top_vertex))]), 0])
end

Expand All @@ -40,7 +40,7 @@ function mean_at(membership_function::TrapezoidalMF, firing_strength::T) where {
end


function eval(membership_function::SigmoidMF, x::T) where {T <: Number}
function evaluate(membership_function::SigmoidMF, x::T) where {T <: Number}
return 1 / (1 + exp(-membership_function.a * (x - membership_function.c)))
end

Expand All @@ -56,4 +56,4 @@ function mean_at(membership_function::SigmoidMF, firing_strength::T) where {T <:
p1 = -log((1 / p_firing_strength) - 1) / membership_function.a + membership_function.c
p2 = membership_function.limit
(p1 + p2) / 2
end
end
6 changes: 3 additions & 3 deletions test/bell_mf.jl
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ c = 5
mf = BellMF(a, b, c)

# Evaluation tests
@assert Fuzzy.eval(mf, c) == 1
@assert Fuzzy.eval(mf, c - a) == Fuzzy.eval(mf, c + a) == 0.5
@assert Fuzzy.evaluate(mf, c) == 1
@assert Fuzzy.evaluate(mf, c - a) == Fuzzy.evaluate(mf, c + a) == 0.5

# Mean finding tests
@assert Fuzzy.mean_at(mf, 1) == Fuzzy.mean_at(mf, 0.6) == Fuzzy.mean_at(mf, 0.3) == Fuzzy.mean_at(mf, 0) == c
@assert Fuzzy.mean_at(mf, 1) == Fuzzy.mean_at(mf, 0.6) == Fuzzy.mean_at(mf, 0.3) == Fuzzy.mean_at(mf, 0) == c
6 changes: 3 additions & 3 deletions test/gaussian_mf.jl
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ sigma = 2
mf = GaussianMF(center, sigma)

# Evaluation tests
@assert Fuzzy.eval(mf, center + sigma) == exp(-0.5)
@assert Fuzzy.eval(mf, center) == 1
@assert Fuzzy.eval(mf, center + sigma) == Fuzzy.eval(mf, center - sigma)
@assert Fuzzy.evaluate(mf, center + sigma) == exp(-0.5)
@assert Fuzzy.evaluate(mf, center) == 1
@assert Fuzzy.evaluate(mf, center + sigma) == Fuzzy.evaluate(mf, center - sigma)

# Mean finding tests
@assert Fuzzy.mean_at(mf, 1) == Fuzzy.mean_at(mf, 0.6) == Fuzzy.mean_at(mf, 0.3) == Fuzzy.mean_at(mf, 0) == center
6 changes: 3 additions & 3 deletions test/sigmoid_mf.jl
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ limit = 10
mf = SigmoidMF(a, c, limit)

# Evaluation tests
@assert Fuzzy.eval(mf, c) == 0.5
@assert Fuzzy.eval(mf, c - 5) < Fuzzy.eval(mf, c + 5)
@assert Fuzzy.evaluate(mf, c) == 0.5
@assert Fuzzy.evaluate(mf, c - 5) < Fuzzy.evaluate(mf, c + 5)

# Mean finding tests
@assert Fuzzy.mean_at(mf, 1) > Fuzzy.mean_at(mf, 0.6) > Fuzzy.mean_at(mf, 0.3) > Fuzzy.mean_at(mf, 0)
@assert Fuzzy.mean_at(mf, 1) > Fuzzy.mean_at(mf, 0.6) > Fuzzy.mean_at(mf, 0.3) > Fuzzy.mean_at(mf, 0)
8 changes: 4 additions & 4 deletions test/trapezoidal_mf.jl
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ r_bottom_vertex = 11
mf = TrapezoidalMF(l_bottom_vertex, l_top_vertex, r_top_vertex, r_bottom_vertex)

# Evaluation tests
@assert Fuzzy.eval(mf, l_top_vertex) == Fuzzy.eval(mf, r_top_vertex) == 1
@assert Fuzzy.eval(mf, l_bottom_vertex) == Fuzzy.eval(mf, r_bottom_vertex) == 0
@assert Fuzzy.eval(mf, (l_bottom_vertex + l_top_vertex) / 2) == Fuzzy.eval(mf, (r_top_vertex + r_bottom_vertex) / 2) == 0.5
@assert Fuzzy.evaluate(mf, l_top_vertex) == Fuzzy.evaluate(mf, r_top_vertex) == 1
@assert Fuzzy.evaluate(mf, l_bottom_vertex) == Fuzzy.evaluate(mf, r_bottom_vertex) == 0
@assert Fuzzy.evaluate(mf, (l_bottom_vertex + l_top_vertex) / 2) == Fuzzy.evaluate(mf, (r_top_vertex + r_bottom_vertex) / 2) == 0.5

# Mean finding tests
@assert Fuzzy.mean_at(mf, 1) == (l_top_vertex + r_top_vertex) / 2
@assert Fuzzy.mean_at(mf, 0) == (l_bottom_vertex + r_bottom_vertex) / 2
@assert Fuzzy.mean_at(mf, 0) == (l_bottom_vertex + r_bottom_vertex) / 2
8 changes: 4 additions & 4 deletions test/triangular_mf.jl
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ r_vertex = 7.0
mf = TriangularMF(l_vertex, center, r_vertex)

# Evaluation tests
@assert Fuzzy.eval(mf, center) == 1
@assert Fuzzy.eval(mf, l_vertex) == Fuzzy.eval(mf, r_vertex) == 0.0
@assert Fuzzy.eval(mf, (l_vertex + center) / 2.0) == Fuzzy.eval(mf, (r_vertex + center) / 2.0) == 0.5
@assert Fuzzy.evaluate(mf, center) == 1
@assert Fuzzy.evaluate(mf, l_vertex) == Fuzzy.evaluate(mf, r_vertex) == 0.0
@assert Fuzzy.evaluate(mf, (l_vertex + center) / 2.0) == Fuzzy.evaluate(mf, (r_vertex + center) / 2.0) == 0.5

# Mean finding tests
@assert Fuzzy.mean_at(mf, 1.0) == center
@assert Fuzzy.mean_at(mf, 0.0) == (l_vertex + r_vertex) / 2.0
@assert Fuzzy.mean_at(mf, 0.0) == (l_vertex + r_vertex) / 2.0