数学建模
层次分析法python代码
class AHP():
def text_consistence(self,array):
[n,m]=array.shape
array_eig,array_eig_vector=np.linalg.eig(array)
array_max_eig=np.max(array_eig)
print("该矩阵的最大特征值为{}".format(array_max_eig))
CR=array_max_eig-n/(n-1);
RI=[0, 0, 0.52, 0.89, 1.12, 1.26, 1.36, 1.41, 1.46, 1.49, 1.52, 1.54, 1.56, 1.58,
1.59]
CI=CR/RI[n]
if(CI<0.1):
print("该矩阵的CI值为{},通过了一致性检验".format(CI))
return True;
if(CI>0.1):
print("该矩阵的CI值为{},未通过一致性检验".format(CI))
print("请修正判断矩阵")
return False;
def text_Positive_Reciprocal_Matrix(self,array):
[n,m] = array.shape
array_T=np.transpose(array);
ones_array = np.ones((n, m))
if (np.all(array_T*array==ones_array)):
print("该矩阵为正互反矩阵")
else:
print("该矩阵不是正互反矩阵")
print("请修正判断矩阵")
def Arithmetic_averaging(self,array):
[n, m] = array.shape
sum_col=array.sum(axis=0);
array=array/sum_col;
sum_low=array.sum(axis=1);
finally_array=sum_low/n;
print("算数平均法所得权重为:");
print(finally_array)
def Geometric_averaging(self,array):
[n, m] = array.shape;
mul_row=np.prod(array,axis=1);
mul_row_sqrt=np.power(mul_row,1/n)
sum_mul_row_sqrt=mul_row_sqrt.sum(axis=0)
finally_array=mul_row_sqrt/sum_mul_row_sqrt
print("几何平均法所得权重为:")
print(finally_array)
def Eigenvadlue_method(self,array):
array_eig, array_eig_vector = np.linalg.eig(array)
max_array_eig_vector= array_eig_vector[:, np.argmax(array_eig)].real
finally_array=max_array_eig_vector/sum(max_array_eig_vector)
print("特征值法对应的权重为:")
print(finally_array)
if __name__ == "__main__":
b = np.array([[1, 0.5, 4,3,3],
[2,1,7,5,5],
[0.25,1/7,1,5,5],
[1/3,0.2,2,1,1],
[1/3,0.2,3,1,1]])
add=AHP()
add.text_Positive_Reciprocal_Matrix(b)
add.text_consistence(b)
add.Geometric_averaging(b)
add.Arithmetic_averaging(b)
add.Eigenvadlue_method(b)`