Source code for pyifdm.methods.ocra.ifs

# Copyright (c) 2023 Jakub Więckowski

import numpy as np
from pyifdm.methods.ifs.score import * 

[docs] def ifs(matrix, weights, types, score): """ Calculates the alternatives preferences based on Intuitionistic Fuzzy Sets 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 or Intuitionistic Fuzzy form types : ndarray Types of criteria, 1 profit, -1 cost score: callable Function used to calculate crisp score of IFS Returns ------- ndarray Crisp preferences of alternatives """ # if ifs weights, convert to to crisp if not isinstance(weights[0], (float, np.floating)): weights = chen_score_1(weights) # score matrix smatrix = score(matrix) # if performance rating P, Q = [], [] for j in range(smatrix.shape[1]): if types[j] == 1: P.append([weights[j] * ((smatrix[i, j]) - np.min(smatrix[:, j]) / (np.max(smatrix[:, j]) - np.min(smatrix[:, j]))) for i in range(smatrix.shape[0])]) else: Q.append([weights[j] * ((np.max(smatrix[:, j] - smatrix[i, j]) / (np.max(smatrix[:, j]) - np.min(smatrix[:, j])))) for i in range(smatrix.shape[0])]) P = np.sum(np.array(P), axis=0) Q = np.sum(np.array(Q), axis=0) # linear performance rating P -= np.min(P) Q -= np.min(Q) # overall performance rating OPR = (P + Q) - np.min(P + Q) return OPR