# Copyright (c) 2022 Jakub Więckowski
import numpy as np
__all__ = [
'chen_score_1',
'chen_score_2',
'kharal_score_1',
'kharal_score_2',
'liu_wang_score',
'supriya_score',
'thakur_score',
'wan_dong_score_1',
'wan_dong_score_2',
'wei_score',
'zhang_xu_score_1',
'zhang_xu_score_2'
]
[docs]
def chen_score_1(a):
"""
Calculates score of the Intuitionistic Fuzzy Set (u, v) and returns a crisp value.
Uses a formula: (u - v)
Parameters
----------
a : ndarray
Intuitionistic Fuzzy Set (u, v)
Returns
-------
float
Crisp value
"""
# cast types
a = a.astype(float)
if a.ndim == 1:
return a[0] - a[1]
elif a.ndim == 2:
return a[:, 0] - a[:, 1]
else:
return a[:, :, 0] - a[:, :, 1]
[docs]
def chen_score_2(a, y=0.5):
"""
Calculates score of the Intuitionistic Fuzzy Set (u, v) and returns a crisp value.
Uses a formula: (y * u + (1 - y) * (1 - v))
Parameters
----------
a : ndarray
Intuitionistic Fuzzy Set (u, v)
y : float, default=0.5
Adjusting parameter
Returns
-------
float
Crisp value
"""
# cast types
a = a.astype(float)
if a.ndim == 1:
return y * a[0] + (1 - y) * (1 - a[1])
elif a.ndim == 2:
return y * a[:, 0] + (1 - y) * (1 - a[:, 1])
else:
return y * a[:, :, 0] + (1 - y) * (1 - a[:, :, 1])
[docs]
def kharal_score_1(a):
"""
Calculates score of the Intuitionistic Fuzzy Set (u, v) and returns a crisp value.
Uses a formula: (u - (v + (1 - u - v)) / 2)
Parameters
----------
a : ndarray
Intuitionistic Fuzzy Set (u, v)
Returns
-------
float
Crisp value
"""
# cast types
a = a.astype(float)
if a.ndim == 1:
return a[0] - (a[1] + (1 - a[0] - a[1])) / 2
elif a.ndim == 2:
return a[:, 0] - (a[:, 1] + (1 - a[:, 0] - a[:, 1])) / 2
else:
return a[:, :, 0] - (a[:, :, 1] + (1 - a[:, :, 0] - a[:, :, 1])) / 2
[docs]
def kharal_score_2(a):
"""
Calculates score of the Intuitionistic Fuzzy Set (u, v) and returns a crisp value.
Uses a formula: (u + v) / 2 - (1 - u - v)
Parameters
----------
a : ndarray
Intuitionistic Fuzzy Set (u, v)
Returns
-------
float
Crisp value
"""
# cast types
a = a.astype(float)
if a.ndim == 1:
return (a[0] + a[1]) / 2 - (1 - a[0] - a[1])
elif a.ndim == 2:
return (a[:, 0] + a[:, 1]) / 2 - (1 - a[:, 0] - a[:, 1])
else:
return (a[:, :, 0] + a[:, :, 1]) / 2 - (1 - a[:, :, 0] - a[:, :, 1])
[docs]
def liu_wang_score(a):
"""
Calculates score of the Intuitionistic Fuzzy Set (u, v) and returns a crisp value.
Uses a formula: u + u * (1 - u - v)
Parameters
----------
a : ndarray
Intuitionistic Fuzzy Set (u, v)
Returns
-------
float
Crisp value
"""
# cast types
a = a.astype(float)
if a.ndim == 1:
return a[0] + a[0] * (1 - a[0] - a[1])
elif a.ndim == 2:
return a[:, 0] + a[:, 0] * (1 - a[:, 0] - a[:, 1])
else:
return a[:, :, 0] - a[:, :, 0] * (1 - a[:, :, 0] - a[:, :, 1])
[docs]
def supriya_score(a):
"""
Calculates score of the Intuitionistic Fuzzy Set (u, v) and returns a crisp value.
Uses a formula: (u - v * (1 - u - v))
Parameters
----------
a : ndarray
Intuitionistic Fuzzy Set (u, v)
Returns
-------
float
Crisp value
"""
# cast types
a = a.astype(float)
if a.ndim == 1:
return a[0] - a[1] * (1 - a[0] - a[1])
elif a.ndim == 2:
return a[:, 0] - a[:, 1] * (1 - a[:, 0] - a[:, 1])
else:
return a[:, :, 0] - (1 - a[:, :, 0] - a[:, :, 1])
[docs]
def thakur_score(a):
"""
Calculates score of the Intuitionistic Fuzzy Set (u, v) and returns a crisp value.
Uses a formula: (u**v - v**2)
Parameters
----------
a : ndarray
Intuitionistic Fuzzy Set (u, v)
Returns
-------
float
Crisp value
"""
# cast types
a = a.astype(float)
if a.ndim == 1:
return a[0]**2 - a[1]**2
elif a.ndim == 2:
return a[:, 0]**2 - a[:, 1]**2
else:
return a[:, :, 0] ** 2 - a[:, :, 1] ** 2
[docs]
def wan_dong_score_1(a):
"""
Calculates score of the Intuitionistic Fuzzy Set (u, v) and returns a crisp value.
Uses a formula: 1/2 * ((u - v) / 2 + 1)
Parameters
----------
a : ndarray
Intuitionistic Fuzzy Set (u, v)
Returns
-------
float
Crisp value
"""
# cast types
a = a.astype(float)
if a.ndim == 1:
return 1/2 * ((a[0] - a[1]) / 2 + 1)
elif a.ndim == 2:
return 1/2 * ((a[:, 0] - a[:, 1]) / 2 + 1)
else:
return 1/2 * ((a[:, :, 0] - a[:, :, 1]) / 2 + 1)
[docs]
def wan_dong_score_2(a):
"""
Calculates score of the Intuitionistic Fuzzy Set (u, v) and returns a crisp value.
Uses a formula: ((u - v) + 1) / 2
Parameters
----------
a : ndarray
Intuitionistic Fuzzy Set (u, v)
Returns
-------
float
Crisp value
"""
# cast types
a = a.astype(float)
if a.ndim == 1:
return ((a[0] - a[1]) + 1) / 2
elif a.ndim == 2:
return ((a[:, 0] - a[:, 1]) + 1) / 2
else:
return ((a[:, :, 0] - a[:, :, 1]) + 1) / 2
[docs]
def wei_score(a):
"""
Calculates score of the Intuitionistic Fuzzy Set (u, v) and returns a crisp value.
Uses a formula (1 - u - v)
Parameters
----------
a : ndarray
Intuitionistic Fuzzy Set (u, v)
Returns
-------
float
Crisp value
"""
# cast types
a = a.astype(float)
if a.ndim == 1:
p = 1 - a[0] - a[1]
return np.cos(np.abs(a[0] - a[1]) / (2 * (1 + p)) * np.pi)
elif a.ndim == 2:
p = 1 - a[:, 0] - a[:, 1]
return np.cos(np.abs(a[:, 0] - a[:, 1]) / (2 * (1 + p)) * np.pi)
else:
p = 1 - a[:, :, 0] - a[:, :, 1]
return np.cos(np.abs(a[:, :, 0] - a[:, :, 1]) / (2 * (1 + p)) * np.pi)
[docs]
def zhang_xu_score_1(a):
"""
Calculates score of the Intuitionistic Fuzzy Set (u, v) and returns a crisp value.
Uses a formula: ((1 - v) / (2 - u - v))
Parameters
----------
a : ndarray
Intuitionistic Fuzzy Set (u, v)
Returns
-------
float
Crisp value
"""
# cast types
a = a.astype(float)
if a.ndim == 1:
return (1 - a[1]) / (2 - a[0] - a[1])
elif a.ndim == 2:
return (1 - a[:, 1]) / (2 - a[:, 0] - a[:, 1])
else:
return (1 - a[:, :, 1]) / (2 - a[:, :, 0] - a[:, :, 1])
[docs]
def zhang_xu_score_2(a):
"""
Calculates score of the Intuitionistic Fuzzy Set (u, v) and returns a crisp value.
Uses a formula: (1 - (1 - u) / (1 - u - v))
Parameters
----------
a : ndarray
Intuitionistic Fuzzy Set (u, v)
Returns
-------
float
Crisp value
"""
# cast types
a = a.astype(float)
if a.ndim == 1:
if 1 - (1 - a[0] - a[1]) == 0:
return 0
return 1 - (1 - a[0]) / (1 - (1 - a[0] - a[1]))
elif a.ndim == 2:
return np.nan_to_num(1 - (1 - a[:, 0]) / (1 - (1 - a[:, 0] - a[:, 1])))
else:
return np.nan_to_num(1 - (1 - a[:, :, 0]) / (1 - (1 - a[:, :, 0] - a[:, :, 1])))