多属性决策问题的理想解法,即TOPSIS法,是一种有效的多指标评价方法。
(1)算法步骤
(2)属性规范化方法
clc, clear
x2=@(qujian,lb,ub,x)(1-(qujian(1)-x)./(qujian(1)-lb)).*(x>=lb & x=qujian(1) & x<=qujian(2))+(1-(x-qujian(2))./(ub-qujian(2))).*...
(x>qujian(2) & x<=ub); %定义变换的匿名函数,该语句太长,使用了两个续行符
qujian=[5,6]; lb=2; ub=12; %最优区间,无法容忍下界和上界
x2data=[5 6 7 10 2]'; %x2属性值
y2=x2(qujian,lb,ub,x2data) %调用匿名函数,进行数据变换
x=[0.1 5 5000 4.7
0.2 6 6000 5.6
0.4 7 7000 6.7
0.9 10 10000 2.3
1.2 2 400 1.8];
y=zscore(x)
求解程序:
clc, clear
a=[0.1 5 5000 4.7
0.2 6 6000 5.6
0.4 7 7000 6.7
0.9 10 10000 2.3
1.2 2 400 1.8];
[m,n]=size(a);
x2=@(qujian,lb,ub,x)(1-(qujian(1)-x)./(qujian(1)-lb)).*(x>=lb & x=qujian(1) & x<=qujian(2))+(1-(x-qujian(2))./(ub-qujian(2))).*(x>qujian(2) & x<=ub);
qujian=[5,6]; lb=2; ub=12;
a(:,2)=x2(qujian,lb,ub,a(:,2)); %对属性2进行变换
for j=1:n
b(:,j)=a(:,j)/norm(a(:,j)); %向量规划化
end
w=[0.2 0.3 0.4 0.1];
c=b.*repmat(w,m,1); %求加权矩阵
Cstar=max(c); %求正理想解
Cstar(4)=min(c(:,4)) %属性4为成本型的
C0=min(c); %求负理想解
C0(4)=max(c(:,4))
for i=1:m
Sstar(i)=norm(c(i,:)-Cstar); %求到正理想解的距离
S0(i)=norm(c(i,:)-C0); %求到负理想解的距离
end
f=S0./(Sstar+S0);
[sf,ind]=sort(f,'descend') %求排序结果
clc, clear
a=load('mhdata.txt');
w=[0.4 0.3 0.2 0.1];
w1=[0.2 0.3 0.3 0.2];
w2=[0.3 0.2 0.1 0.2 0.2];
w3=[0.1 0.2 0.3 0.2 0.2];
w4=[0.3 0.2 0.2 0.3];
b(1,:)=w1*a([1:4],:);
b(2,:)=w2*a([5:9],:);
b(3,:)=w3*a([10:14],:);
b(4,:)=w4*a([15:end],:)
c=w*b
评价具有多指标输入和多指标输出系统的较为有效的办法
由于需要求解若干个线性规划,则需要用到Lingo软件。
clc, clear
a=[0.83 0.90 0.99 0.92 0.87 0.95
326 295 340 287 310 303
21 38 25 19 27 10
3.2 2.4 2.2 2.0 0.9 1.7
0.20 0.25 0.12 0.33 0.20 0.09
0.15 0.20 0.14 0.09 0.15 0.17
250 180 300 200 150 175
0.23 0.15 0.27 0.30 0.18 0.26
0.87 0.95 0.99 0.89 0.82 0.94];
for i=[1 5:9] %效益型指标标准化
a(i,:)=(a(i,:)-min(a(i,:)))/(max(a(i,:))-min(a(i,:)));
end
for i=2:4 %成本型指标标准化
a(i,:)=(max(a(i,:))-a(i,:))/(max(a(i,:))-min(a(i,:)));
end
[m,n]=size(a);
cankao=max(a')' %求参考序列的取值
t=repmat(cankao,[1,n])-a; %求参考序列与每一个序列的差
mmin=min(min(t)); %计算最小差
mmax=max(max(t)); %计算最大差
rho=0.5; %分辨系数
xishu=(mmin+rho*mmax)./(t+rho*mmax) %计算灰色关联系数
guanliandu=mean(xishu) %取等权重,计算关联度
[gsort,ind]=sort(guanliandu,'descend') %对关联度从大到小排序
clc,clear
gj=load('pjsj.txt');
gj=zscore(gj);
r=corrcoef(gj); %计算相关系数矩阵
[x,y,z]=pcacov(r) %y为r的特征值,z为各个主成分的贡献率
f=repmat(sign(sum(x)),size(x,1),1); %构造与x同维数的元素为正负1的矩阵
x=x.*f
num=3; %num为选取的主成分的个数
df=gj*x(:,[1:num]); %计算各个主成分的得分
tf=df*z(1:num)/100; %计算综合得分
[stf,ind]=sort(tf,'descend'); %把得分按照从高到低的次序排列
stf=stf', ind=ind'
秩和比(RSR)是行(或列)秩次的平均值,是一个非参数统计量,具有0~1连续变量的特征
clc, clear
aw=load('zhb.txt');
w=aw(end,:); %提取权重向量
a=aw([1:end-1],:); %提取指标数据
a(:,[2,6])=-a(:,[2,6]);
ra=tiedrank(a) %把每隔指标值(a的每一列)分别编秩
[n,m]=size(ra);
RSR=mean(ra,2)/n %计算秩和比
W=repmat(w,[n,1]);
WRSR=sum(ra.*W,2)/n %计算加权秩和比
[sWRSR,ind]=sort(WRSR);
p=[1:n]/n; %计算累积频率
p(end)=1-1/(4*n) %修正最后一个累积频率
Probit=norminv(p,0,1)+5 %计算标准正态分布的p分位数+5
X=[ones(n,1),Probit']; %构造一元线性回归的数据矩阵
[ab,abint,r,rint,stats]=regress(sWRSR,X) %一元线性回归分析
WRSRfit=ab(1)+ab(2)*Probit %计算WRSR的估计值
y=[1983:1992]';
xlswrite('ex147.xls',[y(ind), ra(ind,:), sWRSR],1)
xlswrite('ex147.xls',[y(ind), ones(n,1), [1:n]', p', Probit', WRSRfit', [n:-1:1]'], 2)
TOPSIS法:
clc, clear
a=load('zhaopin.txt');
b=zscore(a);
E=[1 4 2 8 2; 1/4 1 1/2 2 1/2; 1/2 2 1 4 1; 1/8 1/2 1/4 1 1/4; 1/2 2 1 4 1];
[vec, val]=eigs(E,1) %求模最大的特征值及对应的特征向量
w=vec/sum(vec) %求归一化特征向量,即权重
w=repmat(w',16,1); %扩充为与数据矩阵相同的维数
c=b.*w %计算加权属性
cstar=max(c) %求正理想解
c0=min(c) %求负理想解
for i=1:16
sstar(i)=norm(c(i,:)-cstar); %求到正理想解的距离
s0(i)=norm(c(i,:)-c0); %求到负理想解的距离
end
f=s0./(sstar+s0);
xlswrite('book3.xls',[sstar' s0' f'])
[sc,ind]=sort(f,'descend') %求排序结果