层次分析法
简述
层次分析法是一种层次权重决策分析方法,利用较少的定量信息使决策的思维过程数学化。
个人感觉这种判断主观臆断在其中占很大成分,但后续的分析则是客观地由算法给出定量的结果。
层次分析法的三个层次
构造模型的时候,层次供分为三个层次。
1、最高层(目标层)
决策的目的、要解决的问题(对于旅游,这层决定要去哪)
2、中间层(准则层)
考虑的因素、决策的准则(对于旅游,这层可能包括景色、费用、居住环境、饮食、旅途等等)
3、最底层(方案层)
决策时的备选方案(对于旅游,这层就包括所有供选择的目的地)
权重
权重通过成对比较矩阵来给出(其构造一定要言之有理):成对比较矩阵是表示本层所有因素针对上一层某一个因素的相对重要性的比较。成对比较矩阵的元素 aij a i j 用Santy的1~9标度方法给出。
标度 | 含义 |
---|---|
1 | 表示两个因素相比,具有同样重要性 |
3 | 表示两个因素相比,一个因素比另一个因素稍微重要 |
5 | 表示两个因素相比,一个因素比另一个因素明显重要 |
7 | 表示两个因素相比,一个因素比另一个因素强烈重要 |
9 | 表示两个因素相比,一个因素比另一个因素极端重要 |
2,4,6,8 | 上述两相邻判断的中值 |
最佳解确定
通过代码得到的最底层对中间层的权重和相应层中间层对最高层的权重相乘,再将同一最底层通过不同中间层对最高层的权重相加,最后比较大小,数值最大的即为最佳选择。
代码(MATLAB)
源代码
disp('请输入判断矩阵A(n阶)');
A = input('A = ');
[n, n] = size(A);
x = ones(n, 100);
y = ones(n, 100);
m = zeros(1, 100);
m(1) = max(x(:, 1));
y(:, 1) = x(:, 1);
x(:, 2) = A * y(:, 1);
m(2) = max(x(:, 2));
y(:, 2) = x(:, 2) / m(2);
p = 0.0001; i = 2; k = abs(m(2) - m(1));
while k > p
i = i + 1;
x(:, i) = A * y(:, i - 1);
m(i) = max(x(:, i));
y(:, i) = x(:, i) / m(i);
k = abs(m(i) - m(i - 1));
end
a = sum(y(:, i));
w = y(:, i) / a;
t = m(i);
disp(w);
%以下是一致性检验
CI = (t - n) / (n - 1);RI = [0 0 0.52 0.89 1.12 1.26 1.36 1.41 1.46 1.49 1.52 1.54 1.56 1.58 1.59];
CR = CI / RI(n);
if CR < 0.10
disp('此矩阵的一致性可以接受');
disp('CI = '); disp(CI);
disp('CR = '); disp(CR);
end
操作要求
直接运行程序,按正确的矩阵规范输入成对比较矩阵即可。