Source code for pyfdm.methods.utils.normalizations

# Copyright (c) 2022-2023 Jakub Więckowski

import numpy as np

__all__ = [
    'cocoso_normalization',
    'linear_normalization',
    'max_normalization',
    'minmax_normalization',
    'saw_normalization',
    'sum_normalization',
    'sqrt_normalization',
    'vector_normalization',
    'waspas_normalization'
]


[docs] def sum_normalization(matrix, types): """ Calculates the normalized value of Triangular Fuzzy matrix using sum normalization Parameters ---------- matrix : ndarray Matrix with Triangular Fuzzy Numbers types : ndarray Types of criteria, 1 profit, -1 cost Returns ------- ndarray Normalized Triangular Fuzzy matrix """ nmatrix = np.zeros(matrix.shape, dtype=object) # profit criteria if 1 in types: nmatrix[:, types == 1] = matrix[:, types == 1] / \ np.flip(np.sum(matrix[:, types == 1], axis=0)) # cost criteria if -1 in types: nmatrix[:, types == -1] = (1/matrix[:, types == -1]) / \ np.flip(np.sum(1/matrix[:, types == -1], axis=0)) return nmatrix.astype(float)
[docs] def max_normalization(matrix, types): """ Calculates the normalized value of Triangular Fuzzy matrix using max normalization Parameters ---------- matrix : ndarray Matrix with Triangular Fuzzy Numbers types : ndarray Types of criteria, 1 profit, -1 cost Returns ------- ndarray Normalized Triangular Fuzzy matrix """ nmatrix = np.zeros(matrix.shape, dtype=object) # profit criteria if 1 in types: nmatrix[:, types == 1] = matrix[:, types == 1] / \ np.max(matrix[:, types == 1], axis=0) # cost criteria if -1 in types: nmatrix[:, types == -1] = 1 - \ (matrix[:, types == -1] / np.max(matrix[:, types == -1], axis=0)) return nmatrix.astype(float)
[docs] def linear_normalization(matrix, types): """ Calculates the normalized value of Triangular Fuzzy matrix using linear normalization Parameters ---------- matrix : ndarray Matrix with Triangular Fuzzy Numbers types : ndarray Types of criteria, 1 profit, -1 cost Returns ------- ndarray Normalized Triangular Fuzzy matrix """ nmatrix = np.zeros(matrix.shape, dtype=object) # profit criteria if 1 in types: nmatrix[:, types == 1] = matrix[:, types == 1] / \ np.max(np.max(matrix[:, types == 1], axis=0), axis=1)[...,None] # cost criteria if -1 in types: nmatrix[:, types == -1] = np.min(np.min(matrix[:, types == -1], axis=0), axis=1)[...,None] / \ matrix[:, types == -1][..., ::-1] return nmatrix.astype(float)
[docs] def minmax_normalization(matrix, types): """ Calculates the normalized value of Triangular Fuzzy matrix using Min-Max normalization Parameters ---------- matrix : ndarray Matrix with Triangular Fuzzy Numbers types : ndarray Types of criteria, 1 profit, -1 cost Returns ------- ndarray Normalized Triangular Fuzzy matrix """ nmatrix = np.zeros(matrix.shape, dtype=object) # profit criteria if 1 in types: nmatrix[:, types == 1] = (matrix[:, types == 1] - np.min(matrix[:, types == 1, 0], axis=0)[..., None]) / \ (np.max(matrix[:, types == 1, 2], axis=0) - np.min(matrix[:, types == 1, 0], axis=0))[...,None] # cost criteria if -1 in types: nmatrix[:, types == -1] = ((matrix[:, types == -1] - np.max(matrix[:, types == -1, 2], axis=0)[...,None]) / ( np.min(matrix[:, types == -1, 0], axis=0) - np.max(matrix[:, types == -1, 2], axis=0))[...,None])[..., ::-1] return nmatrix.astype(float)
[docs] def vector_normalization(matrix, *args): """ Calculates the normalized value of Triangular Fuzzy matrix using vector normalization Parameters ---------- matrix : ndarray Matrix with Triangular Fuzzy Numbers *args is necessary for methods which reqiure some additional data Returns ------- ndarray Normalized Triangular Fuzzy matrix """ nmatrix = np.zeros(matrix.shape, dtype=object) # for each column for j in range(nmatrix.shape[1]): nmatrix[:, j] = matrix[:, j] / np.sqrt(np.sum(matrix[:, j]**2)) return nmatrix.astype(float)
[docs] def saw_normalization(matrix, *args): """ Calculates the normalized value of Triangular Fuzzy matrix using simple addictive weight normalization Parameters ---------- matrix : ndarray Matrix with Triangular Fuzzy Numbers *args is necessary for methods which reqiure some additional data Returns ------- ndarray Normalized Triangular Fuzzy matrix """ nmatrix = np.zeros(matrix.shape, dtype=object) # for each column for j in range(nmatrix.shape[1]): nmatrix[:, j] = matrix[:, j] / np.max(matrix[:, j]) return nmatrix.astype(float)
[docs] def sqrt_normalization(matrix, *args): """ Calculates the normalized value of Triangular Fuzzy matrix using sqrt normalization Parameters ---------- matrix : ndarray Matrix with Triangular Fuzzy Numbers *args is necessary for methods which reqiure some additional data Returns ------- ndarray Normalized Triangular Fuzzy matrix """ nmatrix = np.zeros(matrix.shape, dtype=object) # for each column for j in range(nmatrix.shape[1]): nmatrix[:, j] = matrix[:, j] / np.sqrt(1/3 * np.sum(matrix[:, j]**2)) return nmatrix.astype(float)
[docs] def waspas_normalization(matrix, types): """ Calculates the normalized value of Triangular Fuzzy matrix using WASPAS normalization Parameters ---------- matrix : ndarray Matrix with Triangular Fuzzy Numbers types : ndarray Types of criteria, 1 profit, -1 cost Returns ------- ndarray Normalized Triangular Fuzzy matrix """ nmatrix = np.zeros(matrix.shape, dtype=object) # profit criteria if 1 in types: nmatrix[:, types == 1] = matrix[:, types == 1] / np.max(matrix[:, types == 1, 2], axis=0)[...,None] # cost criteria if -1 in types: nmatrix[:, types == -1] = np.min(matrix[:, types == -1, 0], axis=0)[...,None] / matrix[:, types == -1] return nmatrix.astype(float)
[docs] def cocoso_normalization(matrix, types): """ Calculates the normalized value of Triangular Fuzzy matrix using COCOSO normalization Parameters ---------- matrix : ndarray Matrix with Triangular Fuzzy Numbers types : ndarray Types of criteria, 1 profit, -1 cost Returns ------- ndarray Normalized Triangular Fuzzy matrix """ nmatrix = np.zeros(matrix.shape, dtype=object) # profit criteria if 1 in types: nmatrix[:, types == 1] = (matrix[:, types == 1] - np.min(matrix[:, types == 1, 0], axis=0)[...,None]) / (np.max(matrix[:, types == 1, 2], axis=0) - np.min(matrix[:, types == 1, 0], axis=0))[...,None] # cost criteria if -1 in types: nmatrix[:, types == -1] = (np.max(matrix[:, types == -1, 2], axis=0)[...,None] - matrix[:, types == -1][..., ::-1]) / (np.max(matrix[:, types == -1, 2], axis=0) - np.min(matrix[:, types == -1, 0], axis=0))[...,None] return nmatrix.astype(float)