- 模型问题描述:
职场中公平、公正地实施职员晋升,是管理者的一件非常重要而又困难的工作种简单易行、具有一定合理性的办法是,由评委会先订立全面评价一位职员的几条准则,如工作年限﹑教育程度、工作能力,道德品质等,并且确定各条准则在职员晋升这个总目标中所占的权重,然后按照每一条准则对每位申报晋升的职员进行比较和评判,最后将准则的权重与比较、评判的结果加以综合,得到各位申报者的最终排序,作为管理者对职员晋升的决策.
- 建立的模型:
A:判断矩阵(n×n 矩阵),用于描述各准则或方案之间的相对重要性。
w:特征向量(权向量),表示每个准则或方案的相对权重,是判断矩阵的近似特征向量。
λmax:最大特征根,表示判断矩阵的主特征值,用于衡量矩阵的一致性。
CI:一致性指标,衡量判断矩阵一致性的指标
A*w= λmax*w
CI=λmax- nn-1
CR= CIRIn
CRcombine=k =14xk*CRk
- 模型的求解与分析:
求解的目标:
- 计算每一层判断矩阵的最大特征根 λmax
- 计算每一层判断矩阵的特征向量(权向量) w。
- 计算一致性指标 CI 和一致性比率 CR。
- 在多层次决策问题中,计算第 3 层对第 1 层的组合权向量以及一致性比率。
分析内容:
- 分析各层次判断矩阵的一致性,检查是否满足合理的标准。
- 比较不同层次间的一致性比率,评估决策模型的整体合理性。
- 分析各层次的特征向量(权向量),并根据权重进行组合,得出最终的决策权重
实验报告部分
- 实验步骤:(实验代码)
TR |
clc; clear; % 输入判断矩阵 A A = [1, 1/2, 1/3, 1/2; 2, 1, 1/2, 1; 3, 2, 1, 2; 2, 1, 1/2, 1]; % 计算第2层的数据 [lamda, x, CI, CR] = TRfun(A); disp('=== 第2层数据 ==='); disp(['最大特征根 λ: ', num2str(lamda)]); disp('特征向量(权向量) w:'); disp(x); disp(['一致性指标 CI: ', num2str(CI)]); disp(['一致性比率 CR: ', num2str(CR)]); disp(' '); % 第3层判断矩阵 B B = zeros(3, 3, 4); B(:, :, 1) = [1, 1/2, 1/4; 2, 1, 1/3; 4, 3, 1]; B(:, :, 2) = [1, 2, 3; 1/2, 1, 2; 1/3, 1/2, 1]; B(:, :, 3) = [1, 1, 2; 1, 1, 2; 1/2, 1/2, 1]; B(:, :, 4) = [1, 3, 4; 1/2, 1, 2; 1/4, 1/2, 1]; % 初始化第3层数据存储 lamda3 = zeros(1, 4); x3 = zeros(3, 4); CI3 = zeros(1, 4); CR3 = zeros(1, 4); disp('=== 第3层数据 ==='); for i = 1:4 [lamda3(i), x3(:, i), CI3(i), CR3(i)] = TRfun(B(:, :, i)); disp(['第 ', num2str(i), ' 个子判断矩阵:']); disp([' 最大特征根 λk: ', num2str(lamda3(i))]); disp(' 特征向量(权向量) w(3)k:'); disp(x3(:, i)); disp([' 一致性指标 CIk: ', num2str(CI3(i))]); disp([' 一致性比率 CRk: ', num2str(CR3(i))]); disp(' '); end % 计算最下层对目标层的组合权向量 w = x3 * x; % 组合权向量 disp('=== 最下层对目标(第1层)的组合权向量 ==='); disp(w); % 计算组合一致性比率 % 第2层和第3层的组合一致性比率 disp('=== 组合一致性比率 ==='); CR_combine = sum(x .* CR3'); disp(['第2层和第3层的组合一致性比率: ', num2str(CR_combine)]); % 最下层对第1层的组合一致性比率 disp(['最下层对第1层的组合一致性比率: ', num2str(CR_combine + CR)]); |
TRfun |
function [lamda,w,CI,CR]=TRfun(A) RI=[0.58,0.90,1.12,1.24,1.32,1.41,1.45,1.49]; [lamda,w]=HEfun(A); n=size(A,1); CI=(lamda-n)/(n-1); CR=CI/RI(n); end |
HEfun |
function [lamda,w]=HEfun(A) n=size(A,1); for k=1:n %a.将A的每一列向量归一化 AA(:,k)=A(:,k)./sum(A(:,k)); end ww=sum(AA,2); %b.对AA按行求和,ww为列向量 w=ww./sum(ww); %c.归一化,得w为近似特征列向量 lamda=sum(A*w./w)/n; end |