Source code for fuzzyops.fuzzy_msa.msa_fuzzy_hierarchy

from typing import List
from fuzzyops.fuzzy_numbers import FuzzyNumber


[docs] def fuzzy_hierarchy_solver(criteria_weights: List[List[FuzzyNumber]], alternative_comparisons: List[List[List[FuzzyNumber]]]) -> List[FuzzyNumber]: """ A fuzzy hierarchy solver that uses a hierarchy analysis method to prioritize alternatives Args: criteria_weights (List[List[FuzzyNumber]]): A two-dimensional list of fuzzy numbers representing the weights of the criteria alternative_comparisons (List[List[List[FuzzyNumber]]]): A three-dimensional list of fuzzy numbers representing comparative estimates of alternatives for each criterion Returns: List[FuzzyNumber]: A list of fuzzy numbers representing the global priorities of alternatives """ def normalize_matrix(matrix: List[List[FuzzyNumber]]) -> List[float]: """ Normalizes the transmitted matrix of fuzzy numbers and calculates priorities Args: matrix (List[List[FuzzyNumber]]): A two-dimensional list of fuzzy numbers representing a matrix of comparisons Returns: List[float]: A list of normalized priorities for the rows of the matrix """ n = len(matrix) col_sums = [sum([matrix[i][j] for i in range(n)]) for j in range(n)] normalized_matrix = [[matrix[i][j] / float(col_sums[j]) for j in range(n)] for i in range(n)] priorities = [sum(row) / n for row in normalized_matrix] return priorities criteria_priorities = normalize_matrix(criteria_weights) alternatives_priorities = [] for comparison in alternative_comparisons: priorities = normalize_matrix(comparison) alternatives_priorities.append(priorities) num_alternatives = len(alternative_comparisons[0]) global_priorities = [0] * num_alternatives for i in range(num_alternatives): for j in range(len(criteria_priorities)): global_priorities[i] += alternatives_priorities[j][i] * criteria_priorities[j] return global_priorities