Source code for pyfdm.methods.mairca.fuzzy

# Copyright (c) 2022 Jakub Więckowski

import numpy as np

[docs] def fuzzy(matrix, weights, types, normalization, distance): """ Calculates the alternatives preferences based on Triangular Fuzzy Number extension Parameters ---------- matrix : ndarray Decision matrix / alternatives data. Alternatives are in rows and Criteria are in columns. weights : ndarray Vector of criteria weights in a crisp form types : ndarray Types of criteria, 1 profit, -1 cost normalization: callable Function used to normalize the decision matrix distance: callable Function used to calculate distance between two Triangular Fuzzy Numbers Returns ------- ndarray: Crisp preferences of alternatives """ # alternative selection propability P = 1 / matrix.shape[0] # Fuzzy theoretical evaluation matrix tpa = np.ones((matrix.shape), dtype=object) for j in range(matrix.shape[1]): tpa[:, j] = P * weights[j] # normalized fuzzy decision matrix nmatrix = normalization(matrix, types) # fuzzy elements of the actual ponder matrix tra = nmatrix * tpa # distance between Fuzzy Numbers d = np.zeros((matrix.shape[0], matrix.shape[1], 1)) for i in range(matrix.shape[0]): for j in range(matrix.shape[1]): d[i, j] = distance(tpa[i, j], tra[i, j]) # preference value Q = np.sum(d, axis=1).flatten() return Q