Source code for objective_weighting.mcda_methods.mcda_method
from abc import ABC
import numpy as np
[docs]class MCDA_method(ABC):
[docs] def __call__(self, matrix, weights, types):
"""
Score alternatives from decision matrix `matrix` using criteria weights `weights` and
criteria types `types`
Parameters
----------
matrix : ndarray
decision matrix with performance values for m alternatives in rows and n criteria
in columns
weights : ndarray
matrix with criteria weights vectors with number of columns equal to
number of columns n of `matrix`
types : ndarray
vector with criteria types containing values of 1 for profit criteria and -1 for
cost criteria with size equal to number of columns n of `matrix`
"""
pass
@staticmethod
[docs] def _verify_input_data(matrix, weights, types):
m, n = matrix.shape
# if weights are vector with one dimension
if len(weights.shape) == 1:
if len(weights) != n:
raise ValueError('The size of the weight vector must be the same as the number of criteria')
# if weights are two-dimensional matrix containing many weight vectors in rows
elif len(weights.shape) == 2:
if weights.shape[1] != n:
raise ValueError('The number of columns of matrix with weight vectors must be the same as the number of criteria')
if len(types) != n:
raise ValueError('The size of the types vector must be the same as the number of criteria')
check_types = np.all((types == 1) | (types == -1))
if check_types == False:
raise ValueError('Criteria types can only have a value of 1 for profits and -1 for costs')