这个跟之前的各种模糊数学啊/灰色关联分析啊太像了,不给自己解释了
import pandas as pd
import numpy as np
#读取数据
data=pd.read_excel('数据1.xlsx')
#数据标准化
label_need=data.keys()[1:]
data1=data[label_need].values
[m,n]=data1.shape
data2=data1.copy().astype('float')
for j in range(0,n):
data2[:,j]=data1[:,j]/np.sqrt(sum(np.square(data1[:,j])))
#计算加权重后的数据
w=[0.3724, 0.1003,0.1991, 0.1991,0.0998,0.0485] #使用求权重的方法求得,参见文献1
R=data2*w
#计算最大最小值距离
r_max=np.max(R,axis=0) #每个指标的最大值
r_min=np.min(R,axis=0) #每个指标的最小值
d_z = np.sqrt(np.sum(np.square((R -np.tile(r_max,(m,1)))),axis=1)) #d+向量
d_f = np.sqrt(np.sum(np.square((R -np.tile(r_min,(m,1)))),axis=1)) #d-向量
#计算得分
s=d_f/(d_z+d_f )
Score=100*s/max(s)
for i in range(0,len(Score)):
print(f"第{i+1}个投标者百分制得分为:{Score[i]}")
运行结果
第1个投标者百分制得分为:17.584708623387453
第2个投标者百分制得分为:2.6346487485355956
第3个投标者百分制得分为:42.70535239404065
第4个投标者百分制得分为:100.0