pyrepo_mcda.mcda_methods.ahp ============================ .. py:module:: pyrepo_mcda.mcda_methods.ahp Classes ------- .. autoapisummary:: pyrepo_mcda.mcda_methods.ahp.AHP Module Contents --------------- .. py:class:: AHP(normalization_method=minmax_normalization) Bases: :py:obj:`pyrepo_mcda.mcda_methods.mcda_method.MCDA_method` Analytic Hierarchy Process (AHP) method for calculating criteria weights from pairwise comparisons and supporting multi-criteria decision analysis. .. py:attribute:: normalization_method .. py:method:: __call__(matrix, weights, types) Score alternatives provided in decision matrix `matrix` using criteria `weights` and criteria `types`. Parameters ------------ matrix : ndarray Decision matrix with numerical performance values of alternatives. Decision matrix includes m alternatives in rows and n criteria in columns. weights: ndarray Vector with criteria weights given in numerical values. The sum of weights must be equal to 1. types: ndarray Criteria types. Profit criteria are represented by 1 and cost by -1. Returns --------- ndrarray Preference values of each alternative. The best alternative has the highest preference value. Examples ---------- >>> ahp = AHP() >>> pref = ahp(matrix, weights, types) >>> rank = rank_preferences(pref, reverse = True) .. py:method:: _check_consistency(X) Consistency Check on the Pairwise Comparison Matrix of the Criteria or alternatives Parameters ----------- X : ndarray matrix of pairwise comparisons Examples ---------- >>> PCcriteria = np.array([[1, 1, 5, 3], [1, 1, 5, 3], [1/5, 1/5, 1, 1/3], [1/3, 1/3, 3, 1]]) >>> ahp = AHP() >>> ahp._check_consistency(PCcriteria) .. py:method:: _calculate_eigenvector(X) Compute the Priority Vector of Criteria (weights) or alternatives using Eigenvector method Parameters ----------- X : ndarray matrix of pairwise comparisons Returns --------- ndarray Eigenvector Examples ---------- >>> PCM1 = np.array([[1, 5, 1, 1, 1/3, 3], [1/5, 1, 1/3, 1/5, 1/7, 1], [1, 3, 1, 1/3, 1/5, 1], [1, 5, 3, 1, 1/3, 3], [3, 7, 5, 3, 1, 7], [1/3, 1, 1, 1/3, 1/7, 1]]) >>> ahp = AHP() >>> S = ahp._calculate_eigenvector(PCM1) .. py:method:: _normalized_column_sum(X) Compute the Priority Vector of Criteria (weights) or alternatives using The normalized column sum method Parameters ----------- X : ndarray matrix of pairwise comparisons Returns --------- ndarray Vector with weights calculated with The normalized column sum method Examples ---------- >>> PCM1 = np.array([[1, 5, 1, 1, 1/3, 3], [1/5, 1, 1/3, 1/5, 1/7, 1], [1, 3, 1, 1/3, 1/5, 1], [1, 5, 3, 1, 1/3, 3], [3, 7, 5, 3, 1, 7], [1/3, 1, 1, 1/3, 1/7, 1]]) >>> ahp = AHP() >>> S = ahp._normalized_column_sum(PCM1) .. py:method:: _geometric_mean(X) Compute the Priority Vector of Criteria (weights) or alternatives using The geometric mean method Parameters ----------- X : ndarray matrix of pairwise comparisons Returns --------- ndarray Vector with weights calculated with The geometric mean method Examples ---------- >>> PCM1 = np.array([[1, 5, 1, 1, 1/3, 3], [1/5, 1, 1/3, 1/5, 1/7, 1], [1, 3, 1, 1/3, 1/5, 1], [1, 5, 3, 1, 1/3, 3], [3, 7, 5, 3, 1, 7], [1/3, 1, 1, 1/3, 1/7, 1]]) >>> ahp = AHP() >>> S = ahp._geometric_mean(PCM1) .. py:method:: _classic_ahp(alt_matrices, weights, calculate_priority_vector_method=None) Calculate the global alternative priorities. This is a method for classic AHP where you provide matrices with values of pairwise comparisons of alternatives and weights in the form of a priority vector. Parameters ------------ alt_matrices : list list with matrices including values of pairwise comparisons of alternatives weights : ndarray priority vector of criteria (weights) calculate_priority_vector_method : function Method for calculation of the priority vector. It can be chosen from three available methods: _calculate_eigenvector, _normalized_column_sum and _geometric_mean if the user does not provide calculate_priority_vector_method, it is automatically set as the default _calculate_eigenvector Returns --------- ndarray vector with the global alternative priorities Examples ----------- >>> PCcriteria = np.array([[1, 1, 5, 3], [1, 1, 5, 3], [1/5, 1/5, 1, 1/3], [1/3, 1/3, 3, 1]]) >>> PCM1 = np.array([[1, 5, 1, 1, 1/3, 3], [1/5, 1, 1/3, 1/5, 1/7, 1], [1, 3, 1, 1/3, 1/5, 1], [1, 5, 3, 1, 1/3, 3], [3, 7, 5, 3, 1, 7], [1/3, 1, 1, 1/3, 1/7, 1]]) >>> PCM2 = np.array([[1, 7, 3, 1/3, 1/3, 1/3], [1/7, 1, 1/3, 1/7, 1/9, 1/7], [1/3, 3, 1, 1/5, 1/5, 1/5], [3, 7, 5, 1, 1, 1], [3, 9, 5, 1, 1, 1], [3, 7, 5, 1, 1, 1]]) >>> PCM3 = np.array([[1, 1/9, 1/7, 1/9, 1, 1/5], [9, 1, 1, 1, 5, 3], [7, 1, 1, 1, 5, 1], [9, 1, 1, 1, 7, 3], [1, 1/5, 1/5, 1/7, 1, 1/3], [5, 1/3, 1, 1/3, 3, 1]]) >>> PCM4 = np.array([[1, 1/5, 1/5, 1/3, 1/7, 1/5], [5, 1, 1, 3, 1/3, 1], [5, 1, 1, 1, 1/3, 1], [3, 1/3, 1, 1, 1/7, 1], [7, 3, 3, 7, 1, 5], [5, 1, 1, 1, 1/5, 1]]) >>> ahp = AHP() >>> ahp._check_consistency(PCcriteria) >>> weights = ahp._calculate_eigenvector(PCcriteria) >>> alt_matrices = [] >>> alt_matrices.append(PCM1) >>> alt_matrices.append(PCM2) >>> alt_matrices.append(PCM3) >>> alt_matrices.append(PCM4) >>> calculate_priority_vector_method = ahp._calculate_eigenvector >>> pref = ahp._classic_ahp(alt_matrices, weights, calculate_priority_vector_method) >>> rank = rank_preferences(pref, reverse = True) .. py:method:: _ahp(self, matrix, weights, types, normalization_method) :staticmethod: Score alternatives provided in decision matrix `matrix` using criteria `weights` and criteria `types`. Parameters ------------ matrix : ndarray Decision matrix with numerical performance values of alternatives. The decision matrix includes m alternatives in rows and n criteria in columns. weights: ndarray Vector with criteria weights given in numerical values. The sum of weights must be equal to 1. types: ndarray Criteria types. Profit criteria are represented by 1 and cost by -1. Returns --------- ndrarray Preference values of each alternative. The best alternative has the highest preference value. Examples ---------- >>> ahp = AHP() >>> pref = ahp(matrix, weights, types) >>> rank = rank_preferences(pref, reverse = True)