Source code for evo_spotis.weighting_methods

import itertools
import numpy as np
from .normalizations import sum_normalization


# Entropy weighting
[docs]def entropy_weighting(matrix): """ Calculate criteria weights using objective Entropy weighting method. Parameters ----------- matrix : ndarray Decision matrix with performance values of m alternatives and n criteria Returns -------- ndarray Vector of criteria weights Examples ---------- >>> weights = entropy_weighting(matrix) """ # normalize the decision matrix with sum_normalization method from normalizations as for profit criteria types = np.ones(np.shape(matrix)[1]) pij = sum_normalization(matrix, types) # Transform negative values in decision matrix X to positive values pij = np.abs(pij) m, n = np.shape(pij) H = np.zeros((m, n)) # Calculate entropy for j, i in itertools.product(range(n), range(m)): if pij[i, j]: H[i, j] = pij[i, j] * np.log(pij[i, j]) h = np.sum(H, axis = 0) * (-1 * ((np.log(m)) ** (-1))) # Calculate degree of diversification d = 1 - h # Set w as the degree of importance of each criterion w = d / (np.sum(d)) return w