MAIRCA的基本设置是定义理想和经验之间的差距评级。根据每个标准将差距相加,得出每个备选方案的总差距。对备选方案进行排名是在流程的最后,排名最高的备选方案是差距值最低的备选方案。主要步骤为
1、给出初始矩阵X
2、确定方案P的选择偏好,一般来说决策者中立的情况下,等可能的选择每一个方案,因此有
3、计算理论评级矩阵Tp,也就是常见的矩阵赋权步骤,因为P的每一行元素都相同,因此可以简写为
4、计算真实评级矩阵Tr,分情况对矩阵每一个元素计算获得。
对于收益型属性
对于成本型属性
5、计算总间隙矩阵G,G=Tp-Tr。
6、计算每个方案的在属性下的最终值。
代码如下
# coding=gbk
import pandas as pd
import numpy as np
def maxmin(df,list):#最大最小方法,需要提供收益型成本型的字典方便区分
for i in range(0,(df.shape[1])):
if i in list:
df[i] =(df[i] - df[i].min()) / (df[i].max() - df[i].min())
else:
df[i] =(df[i] - df[i].max()) / (df[i].min() - df[i].max())
return df
if __name__ == '__main__':
df = pd.DataFrame([[61, 226, 3, 65, 70, 7, 2],
[91, 33, 2, 60, 88, 4, 8],
[36, 235, 3, 55, 68, 5, 3],
[99, 122, 2, 80, 62, 3, 2],
[74, 181, 2, 55, 45, 2, 9],
[86, 33, 3, 55, 78, 6, 6],
[55, 155, 3, 80, 63, 7, 9],
[111, 128, 4, 75, 60, 3, 7],
[52, 76, 4, 85, 45, 5, 5],
[77, 123, 2, 50, 85, 5, 3]])
p=1/df.shape[0]
# print(p)
w_1=[0.1314, 0.2132, 0.1083, 0.0927 ,0.1664, 0.1289 ,0.1591]
w=np.multiply(p,w_1)
print(w)
w_n=np.outer([1,1,1,1,1,1,1,1,1,1],w)
# print(w_n)
list=[0,1,2,3,4,5]
tp=w*maxmin(df,list)
print(tp)
tg=pd.DataFrame(w_n)-tp
print(tg)
print(tg.sum(1))
|