目录
1.简介
2.算法详解
2.1 指标正向化及标准化
2.2 找到最大最小参考向量
2.3 计算与参考向量的相关系数
2.4 求评分
3.实例分析
3.1 读取数据
3.2 数据标准化
3.3 得到最大最小参考行
3.4 与最大值的灰色相关系数
3.5 与最小值的灰色相关系数
3.6 计算综合评分
完整代码
1.简介
TOPSIS法 —— matlab :传送门
灰色关联法 —— matlab:传送门
2.算法详解
2.1 指标正向化及标准化
设有m个待评对象,n个评价指标,可以构成数据矩阵X=(xij)m*n,设数据矩阵内元素,经过指标正向化处理过后的元素为xij'
- 若xj为负向指标(越小越优型指标)
- 若xj为正向指标(越大越优型指标)
2.2 找到最大最小参考向量
设正向化标准化后的数据矩阵。
最大参考向量由各个指标的最大值构成
最小参考向量由各个指标的最小值构成
2.3 计算与参考向量的相关系数
求出标准化后数据矩阵X和最大参考向量Vmax和最小参考向量Vmin的灰色相关系数。
该过程仿照灰色关联度分析法做就行
- 参考向量的选择
例如研究x2指标与x1指标之间的灰色关联度。所以将x1列作为参考向量,即要研究与谁的关系,就将谁作为参考。设参考向量为Y1=x1,生成新的数据矩阵 X1=x2.
- 生成绝对值矩阵
设生成的绝对值矩阵为A
A=[X1-Y1],亦是A=[x2-x1]
设dmax为绝对值矩阵A的最大值,dmin为绝对值矩阵A的最小值。
-
计算灰色关联矩阵
设灰色关联矩阵为B
- 计算灰色关联度
2.4 求评分
3.实例分析
数据来源:蓝奏云
3.1 读取数据
data=xlsread('D:\桌面\TOPSIS.xlsx')' %横坐标为评价指标,纵坐标为评价对象
返回:
3.2 数据标准化
%% 标准化
data1=mapminmax(data,0.002,1);%标准化到0.002-1区间
返回:
3.3 得到最大最小参考行
data1=data1';
V_max=max(data1);%最大参考行,指标最大
V_min=min(data1);%最小参考行,指标最小
3.4 与最大值的灰色相关系数
%% 与最大值的灰色相关系数
[m,n]=size(data1);%得到行数和列数
data2=data1;
for i=1:mdata2(i,:)=abs(data1(i,:)-V_min);
end
%得到绝对值矩阵的全局最大值和最小值
d_max=max(max(data2));
d_min=min(min(data2));
%灰色关联矩阵
a=0.5; %分辨系数
data3=(d_min+a*d_max)./(data2+a*d_max);
xi_min=mean(data3')
返回:
3.5 与最小值的灰色相关系数
%% 与最小值的灰色相关系数
[m,n]=size(data1);%得到行数和列数
data2=data1;
for i=1:mdata2(i,:)=abs(data1(i,:)-V_max);
end
% data2=abs(data1-V_max);
%得到绝对值矩阵的全局最大值和最小值
d_max=max(max(data2));
d_min=min(min(data2));
data3=(d_min+a*d_max)./(data2+a*d_max);
xi_max=mean(data3')
返回:
3.6 计算综合评分
%% 综合评分
%与最大指标行相关系数越大,最小指标构成的行相关系数越小得分大
Score=1./(1+xi_min./xi_max).^2;
for i=1:length(Score)fprintf('第%d个投标者评分为:%4.2f\n',i,Score(i));
end
返回:
完整代码
clc;clear;
data=xlsread('D:\桌面\TOPSIS.xlsx')'; %横坐标为评价指标,纵坐标为评价对象
%% 标准化
data1=mapminmax(data,0.002,1);%标准化到0.002-1区间
data1=data1';
V_max=max(data1);%最大参考行,指标最大
V_min=min(data1);%最小参考行,指标最小
%% 与最大值的灰色相关系数
[m,n]=size(data1);%得到行数和列数
data2=data1;
for i=1:mdata2(i,:)=abs(data1(i,:)-V_min);
end
%得到绝对值矩阵的全局最大值和最小值
d_max=max(max(data2));
d_min=min(min(data2));
%灰色关联矩阵
a=0.5; %分辨系数
data3=(d_min+a*d_max)./(data2+a*d_max);
xi_min=mean(data3');
%% 与最小值的灰色相关系数
[m,n]=size(data1);%得到行数和列数
data2=data1;
for i=1:mdata2(i,:)=abs(data1(i,:)-V_max);
end
% data2=abs(data1-V_max);
%得到绝对值矩阵的全局最大值和最小值
d_max=max(max(data2));
d_min=min(min(data2));
data3=(d_min+a*d_max)./(data2+a*d_max);
xi_max=mean(data3');
%% 综合评分
%与最大指标行相关系数越大,最小指标构成的行相关系数越小得分大
Score=1./(1+xi_min./xi_max).^2;
for i=1:length(Score)fprintf('第%d个投标者评分为:%4.2f\n',i,Score(i));
end