Matlab指标权重的确定(AHP标度拓展层次分析法、EVM熵权法和博弈论的结合)

我们在处理统计数据时,会经常遇到需要和合并指标的问题,虽然主成分分析是一个不错的选择,但是指标赋权在很多研究中也经常使用,结合主观和客观的赋权更符合实际些,博弈论是个不错的选择。所以本文的代码是博弈论结合AHP标度拓展层次分析法和EVM熵权法去实现赋权,希望给需要的学者提供帮助。

clc,clear
excelFile='D:\proverty\Proverty\0315\0322\嘉黎县.xlsx';  % 数据路径
outputdata='C:\Users\dell\Desktop\1'; % 输出路径
myData = xlsread(excelFile); % 读取数据
R=myData
syms a b 
w11=[];
w12=[];%AHP算法的指标权重

W11=w11*w12;
[rows,cols]=size(R);   % 输入矩阵的大小,rows为对象个数,cols为指标个数
k=1/log(rows);         % 求k
Rmin = min(R);
Rmax = max(R);
A = max(R) - min(R);
y = R - repmat(Rmin,7,1);
%y(i,j) = (R - repmat(Rmin,7,1))/(repmat(A,7,1));
for j = 1 : size(y,2)
     y(:,j) = y(:,j)/A(j)
end
%2 求Y(i,j)
S = sum(y,1)
Y = zeros(rows,cols); 
for i = 1 : size(Y,2)
    Y(:,i) = y(:,i)/S(i)
end
%3
lnYij=zeros(rows,cols);  % 初始化lnYij
% 计算lnYij
for i=1:rows
    for j=1:cols
        if Y(i,j)==0
            lnYij(i,j)=0;
        else
            lnYij(i,j)=log(Y(i,j));
        end
    end
end
ej=-k*(sum(Y.*lnYij,1)); % 计算熵值Hj
%4
weights=(1-ej)/(cols-sum(ej));
w22= weights;
w21=w22';

W22=w22*w21;
W12=w11*w21;
W21=w22*w12;
%a=are(W11,W12,W21,W22)
%b=are(W11,W12,W21,W22)
[a,b]=solve(a*W11+b*W12==W11,a*W21+b*W22==W22)
a=vpa(a,4);
b=vpa(b,4);
A=a/(a+b);
B=b/(a+b);
solutions=[A,B]
W=A*w11+B*w22;
Wight=W'
value=R*Wight


%sola=solve(a1*W21+b*W22==W22,a) %待求解的变量是a

%sol=solve(a*x^2+b*x+c==0) %待求解的变量是x

你可能感兴趣的:(matlab)