Skip to content

Add FuzzySet Class for Triangular Fuzzy Sets #11036

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 49 commits into from
Oct 28, 2023
Merged
Changes from 8 commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
bb8f7f7
Added Opertation for triangular fuzzy sets
Shreya123714 Oct 27, 2023
48f246d
Merge branch 'master' of https://github.com/Shreya123714/Python
Shreya123714 Oct 27, 2023
5e1dfe6
Added Sources
Shreya123714 Oct 27, 2023
6d751f8
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 27, 2023
e778cb3
Fix the bug , for which test were failing
Shreya123714 Oct 28, 2023
abe9361
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 28, 2023
c51022b
Add type hints and improve parameter names
Shreya123714 Oct 28, 2023
cb77a2a
Merge branch 'master' of https://github.com/Shreya123714/Python
Shreya123714 Oct 28, 2023
5486668
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 28, 2023
231b33e
Add Test For fuzzy_operations.py
Shreya123714 Oct 28, 2023
798e78f
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 28, 2023
a7b7a91
Fix the bug in fuzzy_operations.py
Shreya123714 Oct 28, 2023
c6022c2
Merge branch 'master' of https://github.com/Shreya123714/Python
Shreya123714 Oct 28, 2023
1183dd9
Add test_fuzzy_logic.py
Shreya123714 Oct 28, 2023
ee0a7c0
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 28, 2023
de13593
Fix the bug in fuzzy_operations.py & deleted test
Shreya123714 Oct 28, 2023
cacc1d1
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 28, 2023
472e739
fixed the typo error
Shreya123714 Oct 28, 2023
5565063
Merge branch 'master' of https://github.com/Shreya123714/Python
Shreya123714 Oct 28, 2023
d2cdcb8
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 28, 2023
d091358
Again done
Shreya123714 Oct 28, 2023
0db5402
Merge branch 'master' of https://github.com/Shreya123714/Python
Shreya123714 Oct 28, 2023
70c3787
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 28, 2023
81340cd
corrected wrong intendation due to which test fail
Shreya123714 Oct 28, 2023
26cf8e7
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 28, 2023
54a3a42
Fix
pre-commit-ci[bot] Oct 28, 2023
f0f581a
Merge branch 'master' of https://github.com/Shreya123714/Python
Shreya123714 Oct 28, 2023
8a01993
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 28, 2023
14410df
bug fixed
Shreya123714 Oct 28, 2023
10bc341
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 28, 2023
3ff4ec9
Add test_fuzzy_logic
Shreya123714 Oct 28, 2023
06db239
Modified fuzzy_operations.py
Shreya123714 Oct 28, 2023
4e9ded8
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 28, 2023
8ccf12a
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 28, 2023
a357f85
Fixed the bug, made a FuzzySet dataclass
Shreya123714 Oct 28, 2023
d961a50
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 28, 2023
050debb
Replaced assertEqual of unittest to assert python
Shreya123714 Oct 28, 2023
ae179fa
Merge branch 'master' of https://github.com/Shreya123714/Python
Shreya123714 Oct 28, 2023
f3ae7ed
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 28, 2023
d9a8c65
lets see
Shreya123714 Oct 28, 2023
faed044
Changed test
Shreya123714 Oct 28, 2023
2b1cef8
orderd the import statements
Shreya123714 Oct 28, 2023
2dd8521
Add docstring and dataclass the FuzzySet
Shreya123714 Oct 28, 2023
c343a09
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 28, 2023
16a712a
Merge branch 'TheAlgorithms:master' into master
Shreya123714 Oct 28, 2023
005f852
Update fuzzy_operations.py
cclauss Oct 28, 2023
dc849bd
Delete fuzzy_logic/test_fuzzy_logic.py
cclauss Oct 28, 2023
8c8b200
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 28, 2023
cec6c1d
https://en.wikipedia.org/wiki/Fuzzy_set
cclauss Oct 28, 2023
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
161 changes: 161 additions & 0 deletions fuzzy_logic/fuzzy_operations.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
import matplotlib.pyplot as plt
import numpy as np

""""
FuzzySet class for triangular fuzzy sets
Author: Shreya123714
Source: https://en.wikipedia.org/wiki/Fuzzy_set
"""


class FuzzySet:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"""
A class for representing and
manipulating triangular fuzzy sets.

Attributes:
name (str): The name or label of the fuzzy set.
a (float): The left boundary of the fuzzy set.
b (float): The peak (central) value of the fuzzy set.
c (float): The right boundary of the fuzzy set.

Methods:
membership(x): Calculate the membership value
of an input 'x' in the fuzzy set.
union(other): Calculate the union of this fuzzy set
with another fuzzy set.
intersection(other): Calculate the intersection of this fuzzy set
with another fuzzy set.
complement(): Calculate the complement (negation)
of this fuzzy set.
plot(): Plot the membership function of the fuzzy set.
"""

def __init__(self, name: str, left_boundary: float, peak: float, right_boundary: float) -> None:
"""
Initializes a triangular fuzzy set
with the given parameters.

Args:
name (str): The name or label of the fuzzy set.
a (float): The left boundary of the fuzzy set.
b (float): The peak (central) value of
the fuzzy set.
c (float): The right boundary of the fuzzy set.
"""
self.name = name # Fuzzy set name
self.left_boundary = left_boundary # Left boundary
self.peak = peak # Peak value
self.right_boundary = right_boundary # Right boundary


def membership(self, x):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
def membership(self, x):
def membership(self, value: FuzzySet) -> float:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file fuzzy_logic/fuzzy_operations.py, please provide doctest for the function membership

Please provide return type hint for the function: membership. If the function does not return a value, please provide the type hint as: def function() -> None:

Please provide descriptive name for the parameter: x

Please provide type hint for the parameter: x

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: membership. If the function does not return a value, please provide the type hint as: def function() -> None:

Please provide descriptive name for the parameter: x

Please provide type hint for the parameter: x

"""
Calculate the membership value of
an input 'x' in the fuzzy set.

Args:
x (float): The input value for
which the membership is calculated.

Returns:
float: The membership value of 'x' in
the fuzzy set.
"""

if x <= self.a or x >= self.c:
return 0
elif self.a < x <= self.b:
return (x - self.a) / (self.b - self.a)
elif self.b < x < self.c:
return (self.c - x) / (self.c - self.b)

def union(self, other):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
def union(self, other):
def union(self, other: FuzzySet) -> FuzzySet:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file fuzzy_logic/fuzzy_operations.py, please provide doctest for the function union

Please provide return type hint for the function: union. If the function does not return a value, please provide the type hint as: def function() -> None:

Please provide type hint for the parameter: other

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file fuzzy_logic/fuzzy_operations.py, please provide doctest for the function union

Please provide return type hint for the function: union. If the function does not return a value, please provide the type hint as: def function() -> None:

Please provide type hint for the parameter: other

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: union. If the function does not return a value, please provide the type hint as: def function() -> None:

Please provide type hint for the parameter: other

"""
Calculate the union of this fuzzy set
with another fuzzy set.

Args:
other (FuzzySet): Another fuzzy set
to union with.

Returns:
FuzzySet: A new fuzzy
set representing the union.
"""

union_name = f"{self.name} ∪ {other.name}"
return FuzzySet(
union_name,
min(self.a, other.a),
max(self.c, other.c),
(self.b + other.b) / 2,
)

def intersection(self, other):

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file fuzzy_logic/fuzzy_operations.py, please provide doctest for the function intersection

Please provide return type hint for the function: intersection. If the function does not return a value, please provide the type hint as: def function() -> None:

Please provide type hint for the parameter: other

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: intersection. If the function does not return a value, please provide the type hint as: def function() -> None:

Please provide type hint for the parameter: other

"""
Calculate the intersection of this
fuzzy set with another fuzzy set.

Args:
other (FuzzySet): Another fuzzy set to intersect with.

Returns:
FuzzySet: A new fuzzy set representing the intersection.
"""
intersection_name = f"{self.name} ∩ {other.name}"
return FuzzySet(
intersection_name,
max(self.a, other.a),
min(self.c, other.c),
(self.b + other.b) / 2,
)

def complement(self):

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file fuzzy_logic/fuzzy_operations.py, please provide doctest for the function complement

Please provide return type hint for the function: complement. If the function does not return a value, please provide the type hint as: def function() -> None:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: complement. If the function does not return a value, please provide the type hint as: def function() -> None:

"""
Calculate the complement (negation) of this fuzzy set.

Returns:
FuzzySet: A new fuzzy set representing the complement.
"""
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All methods should have at least one doctest.

Suggested change
"""
>>> FuzzySet("test", 10, 20, 30).complement()
'¬test: [-30, -10, -20]'
"""

complement_name = f"¬{self.name}"
return FuzzySet(complement_name, 1 - self.c, 1 - self.a, 1 - self.b)

def plot(self):

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file fuzzy_logic/fuzzy_operations.py, please provide doctest for the function plot

Please provide return type hint for the function: plot. If the function does not return a value, please provide the type hint as: def function() -> None:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: plot. If the function does not return a value, please provide the type hint as: def function() -> None:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: plot. If the function does not return a value, please provide the type hint as: def function() -> None:

As there is no test file in this pull request nor any test function or class in the file fuzzy_logic/fuzzy_operations.py, please provide doctest for the function plot

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: plot. If the function does not return a value, please provide the type hint as: def function() -> None:

As there is no test file in this pull request nor any test function or class in the file fuzzy_logic/fuzzy_operations.py, please provide doctest for the function plot

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: plot. If the function does not return a value, please provide the type hint as: def function() -> None:

As there is no test file in this pull request nor any test function or class in the file fuzzy_logic/fuzzy_operations.py, please provide doctest for the function plot

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: plot. If the function does not return a value, please provide the type hint as: def function() -> None:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: plot. If the function does not return a value, please provide the type hint as: def function() -> None:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: plot. If the function does not return a value, please provide the type hint as: def function() -> None:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: plot. If the function does not return a value, please provide the type hint as: def function() -> None:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: plot. If the function does not return a value, please provide the type hint as: def function() -> None:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: plot. If the function does not return a value, please provide the type hint as: def function() -> None:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: plot. If the function does not return a value, please provide the type hint as: def function() -> None:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: plot. If the function does not return a value, please provide the type hint as: def function() -> None:

"""
Plot the membership function of the fuzzy set.
"""
x = np.linspace(0, 1, 1000)
y = [self.membership(xi) for xi in x]

plt.plot(x, y, label=self.name)

def __str__(self):

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file fuzzy_logic/fuzzy_operations.py, please provide doctest for the function __str__

Please provide return type hint for the function: __str__. If the function does not return a value, please provide the type hint as: def function() -> None:

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file fuzzy_logic/fuzzy_operations.py, please provide doctest for the function __str__

Please provide return type hint for the function: __str__. If the function does not return a value, please provide the type hint as: def function() -> None:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: __str__. If the function does not return a value, please provide the type hint as: def function() -> None:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: __str__. If the function does not return a value, please provide the type hint as: def function() -> None:

As there is no test file in this pull request nor any test function or class in the file fuzzy_logic/fuzzy_operations.py, please provide doctest for the function __str__

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: __str__. If the function does not return a value, please provide the type hint as: def function() -> None:

As there is no test file in this pull request nor any test function or class in the file fuzzy_logic/fuzzy_operations.py, please provide doctest for the function __str__

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: __str__. If the function does not return a value, please provide the type hint as: def function() -> None:

As there is no test file in this pull request nor any test function or class in the file fuzzy_logic/fuzzy_operations.py, please provide doctest for the function __str__

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: __str__. If the function does not return a value, please provide the type hint as: def function() -> None:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: __str__. If the function does not return a value, please provide the type hint as: def function() -> None:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: __str__. If the function does not return a value, please provide the type hint as: def function() -> None:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: __str__. If the function does not return a value, please provide the type hint as: def function() -> None:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: __str__. If the function does not return a value, please provide the type hint as: def function() -> None:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: __str__. If the function does not return a value, please provide the type hint as: def function() -> None:

return f"{self.name}: [{self.a}, {self.b}, {self.c}]"


# Example usage:
if __name__ == "__main__":
A = FuzzySet("A", 0, 0.5, 1)
B = FuzzySet("B", 0.2, 0.7, 1)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
A = FuzzySet("A", 0, 0.5, 1)
B = FuzzySet("B", 0.2, 0.7, 1)
fuzzy_set_a = FuzzySet("A", 0, 0.5, 1)
fuzzy_set_b = FuzzySet("B", 0.2, 0.7, 1)


A.plot()
B.plot()

plt.xlabel("x")
plt.ylabel("Membership")
plt.legend()
plt.show()

union_ab = A.union(B)
intersection_ab = A.intersection(B)
complement_a = A.complement()

union_ab.plot()
intersection_ab.plot()
complement_a.plot()

plt.xlabel("x")
plt.ylabel("Membership")
plt.legend()
plt.show()